Recuperar las salidas de una versión publicada

Qué contiene una versión publicada después de la preparación, los tres lugares desde los que se puede recuperar una salida y la ruta autorizada de gestión que responde a un miembro antes de que la aplicación tenga dirección.

  • Disponibilidad: Experimental
  • Evidencia: Leído del código fuente
  • Referencia

Qué contiene una versión publicada

La preparación almacena salidas. Un módulo público suele llevar más de una: su JavaScript, la hoja de estilos que declara y su mapa de código fuente externo son tres salidas con tres tipos de medio y tres conjuntos de bytes, bajo una sola identidad de módulo. Un paquete lleva además recursos, como imágenes y tipografías, y una versión publicada genera documentos propios, como su documento HTML y su documento de resolución.

Cada salida almacenada es un artefacto con un resumen del contenido, un tipo de medio y un tamaño. Dos valores la nombran y no son el mismo:

Valor Qué identifica
Clave del recurso y consulta de opciones Lo que se pidió: este módulo, para este destino, con estas opciones
Resumen del contenido Los bytes que lo responden

La misma identidad puede contener bytes distintos en otro contexto de dependencias, y los mismos bytes pueden responder a más de una identidad: el alias de un paquete de otro registro, o un módulo alcanzado desde dos destinos. La lista informa de ambos, para que ninguno se confunda con el otro.

El inventario y las salidas son listas distintas

El inventario es lo que la aplicación alcanza: una fila por cada módulo, hoja de estilos o recurso que trazó el análisis, con el estado de ese elemento. Las salidas son lo que el procesamiento produjo y almacenó para esos elementos, que son más filas y otras columnas. Quien lee una versión publicada necesita ambas: el inventario dice si está todo lo necesario, y las salidas dicen qué hay y cómo recuperarlo.

Operaciones

Operación Petición Capacidad Reintento
releases.outputs GET /v1/applications/{application}/releases/{release}/outputs application.read
releases.output GET /v1/applications/{application}/releases/{release}/outputs/{artifact} application.read

releases.outputs acepta family (module, style, map, asset o document), after y limit. Sus counts describen la versión publicada entera, no la página: cuántas salidas contiene, cuántos bytes almacenados ocupan contando una vez por artefacto, cuántas requieren autorización y cuántas identidades sirve el origen público compartido.

Una versión publicada que todavía no ha fijado sus salidas responde STATE_INVALID, no una lista vacía: una que aún no ha producido nada y otra que no produjo nada son respuestas distintas.

Tres lugares, y no son intercambiables

Cada salida informa de dónde se puede recuperar.

Lugar A quién responde Cuándo está presente
retrieval.authorized Un miembro de la organización que admita la capacidad de la operación Siempre
retrieval.shared Cualquiera, en el origen de entrega compartido Solo para una identidad que sirva el índice público compartido
retrieval.host Quien admita la política de acceso de la aplicación Solo cuando hay una dirección enlazada a la aplicación

El origen compartido sirve identidades públicas, así que una salida de una aplicación privada y un mapa de código fuente restringido nunca aparecen ahí. Leer esta lista no recupera bytes, y ninguna recuperación crea trabajo de compilación: un fallo de búsqueda es una respuesta, nunca una compilación.

Recuperar una salida antes de que la aplicación tenga dirección

releases.output es la ruta que no necesita host de aplicación. Lee el almacén y responde los bytes con el tipo de medio con el que se almacenaron, su tamaño y un validador fuerte "sha256-…"; If-None-Match responde 304, y HEAD responde la misma descripción sin cuerpo. Una salida registrada cuyos bytes el almacén no puede leer es UNAVAILABLE, nunca un fallo de búsqueda.

Es un origen de gestión, que guarda la sesión de quien lo está leyendo, así que nunca deja que un navegador ejecute lo que almacena:

  • Content-Disposition: attachment, para que una navegación descargue en vez de representar;
  • X-Content-Type-Options: nosniff, para que el tipo sea el registrado y no una conjetura;
  • Content-Security-Policy: default-src 'none'; sandbox, para que un documento HTML o un script almacenado no tenga los poderes de este origen;
  • Cache-Control: no-store y Vary: Cookie, porque la respuesta depende de quién pregunta.

La aplicación de administración del CDN usa esta ruta para su panel Salidas: recupera los bytes, muestra el texto como texto y una imagen como imagen bajo su tipo registrado, y ofrece como descarga la copia que ya tiene. Nunca navega a la dirección de una salida.

Errores

Código Cuándo
UNAUTHENTICATED No hay sesión, o es una que este producto no acepta
NOT_FOUND La aplicación, la versión publicada o la salida no existe, o pertenece a otra organización: ambas responden lo mismo
VALIDATION_FAILED Un cursor o un tipo que esta lista no emite
STATE_INVALID La versión publicada todavía no ha fijado sus salidas
UNAVAILABLE La salida está registrada y el almacén no pudo leer sus bytes