Documentación

Aplicaciones: comandos CLI

Empaqueta, sube, actualiza y elimina aplicaciones web, y lee o escribe su almacén de clave/valor y sus webhooks.

Cada comando se ejecuta como describe la referencia de la CLI: banderas globales, salida JSON, códigos de salida, revisiones y reintentos.

Aplicaciones

Una aplicación es un directorio estático ya construido con una raíz index.html. El empaquetador inyecta el SDK del navegador en _screenrig/runtime.js y añade su etiqueta de script, así la app alcanza window.screenrig sin paso de compilación ni nada que añadir a sus dependencias. Nada en el directorio se construye o ejecuta durante el empaquetado.

app pack#

Empaque un directorio estático en un archivo determinista sin subirlo.

app pack <directory> [--output FILE]
ParámetroTipoRequeridoPredeterminadoNotas
<directory>rutasíningunoEl directorio estático construido. Necesita una raíz index.html.
--output FILErutanonada está escritoTambién escriba el archivo en esta ruta. Sin ella, el comando informa el archivo y lo mantiene en memoria.
screenrig app pack ./lobby-board --output ./lobby-board.tgz

El sobre informa sha256, compressed_bytes, expanded_bytes, file_count, la lista de entradas y si se inyectó el tiempo de ejecución del SDK. app upload empaqueta el directorio mismo, así que use este comando solo cuando quiera inspeccionar primero el archivo. Se ejecuta localmente y no requiere iniciar sesión.

Un paquete contiene como máximo 5000 archivos, 250 MiB descomprimidos y 100 MiB comprimidos, cada archivo de hasta 32 MiB, con rutas de hasta 16 niveles y 255 bytes. El empaquetado omite los nombres que empiezan por ., node_modules/, bower_components/, jspm_packages/, vendor/, venv/, __pycache__/, CVS/, los mapas de código *.map, los archivos de claves y credenciales (*.pem, *.key, *.p12, *.pfx, *.crt, *.cer, id_rsa, id_dsa, id_ecdsa, id_ed25519, credentials.json, secrets.json), los archivos temporales y de copia de seguridad del editor, Thumbs.db y desktop.ini. Un archivo .screenrigignore en la raíz del directorio añade patrones al estilo gitignore, uno por línea, y no puede recuperar una exclusión integrada. Los enlaces simbólicos, los enlaces duros, los archivos dispersos, los dispositivos, las rutas duplicadas (comparadas también sin distinguir mayúsculas), los archivos que cambian durante el empaquetado y un directorio sin index.html en la raíz se rechazan indicando la ruta: el comando termina con el código 2 y no envía nada.

Las aplicaciones se ejecutan bajo una política de seguridad de contenido que bloquea código en línea. El empaquetado mueve bloques de estilo y script en línea a archivos _screenrig-inline-* junto a cada documento HTML y los enlaza. Los manejadores de eventos en línea como onclick= y URLs javascript: no pueden moverse; el empaquetado los rechaza y nombra el archivo y la línea.

app types#

Escriba los tipos de TypeScript de window.screenrig en un directorio.

app types [directory]
ParámetroTipoRequeridoPredeterminadoNotas
[directory]rutanoel directorio actualEl directorio donde se escribe screenrig.d.ts. Debe existir.
screenrig app types ./src

El sobre informa path, bytes, sha256 y written, que es false cuando el archivo ya contenía los tipos actuales. El archivo coincide con el tiempo de ejecución que inyectan app pack y app upload, así que vuelva a ejecutar el comando después de actualizar la CLI. Un screenrig.d.ts existente se reemplaza por completo; un directorio o un enlace simbólico en esa ruta se rechaza y el comando termina con el código 2. Se ejecuta localmente y no requiere iniciar sesión. TypeScript explica qué declaran los tipos.

app dev#

Sirva un directorio en un entorno de pruebas local del Player para probar una aplicación antes de subirla.

app dev <directory> [--port PORT] [--open] [--no-reload] [--kv FILE | --kv-from APP_ID]
ParámetroTipoRequeridoPredeterminadoNotas
<directory>rutasíningunoEl directorio estático construido. Necesita una raíz index.html.
--port PORTintegerno18890El puerto en el que escucha el entorno de prueba. El runtime confía en el entorno de prueba solo en 18890, por lo que se rechaza cualquier otro puerto.
--openbooleannoapagadoAbra el entorno de pruebas en su navegador.
--no-reloadbooleannoapagadoMantenga la página como está cuando cambia un archivo. Sin esto, la página se recarga en cada cambio.
--kv FILErutano.screenrig-dev/kv.jsonEl archivo JSON que contiene la tienda de clave/valor de la ejecución.
--kv-from APP_IDstringnoningunoLea la tienda de clave/valor de esta aplicación subida, en solo lectura, en lugar de un archivo.
screenrig app dev ./lobby-board --open

El comando sirve el entorno de pruebas en http://play.screenrig.localhost:18890 y se ejecuta hasta que lo detenga. Inyecta el runtime como lo hace app pack, e informa de lo que rechaza el empaquetado, indicando el archivo y la línea, mientras edita. El entorno de pruebas simula las capacidades, la ventana gráfica, el nombre de la pantalla, la zona horaria y los params, el temporizador de página, la pausa, la pantalla y la salida de la página, los eventos del dispositivo, y puertos serie, líneas GPIO, periféricos Bluetooth LE e impresoras. Las líneas emit y log se imprimen en la terminal. Desarrollar localmente explica los controles.

app upload#

Empaque un directorio, publíquelo como una nueva versión de la aplicación y espere a que la publicación tenga éxito.

app upload <directory> [--name NAME] [--no-wait] [--poll-ms MS] [--timeout MS]
ParámetroTipoRequeridoPredeterminadoNotas
<directory>rutasíningunoEl directorio estático construido.
--name NAMEstringnoun nombre generadoNombre de la aplicación, de 1 a 120 caracteres tras recortar espacios, sin caracteres de control.
--no-waitbooleannoapagadoDevolver antes de que termine la operación de publicación. Ejecute operations wait antes de fijar la versión en una lista de reproducción.
--poll-ms MSintegerno1000Intervalo entre sondeos de operación mientras espera.
--timeout MSintegerno120000Fecha límite para la espera. También limita cada solicitud subyacente.
screenrig app upload ./lobby-board --name "Lobby board"

Leer tres campos: data.operation.state es succeeded, data.application.release_id es el id rel_ un application primitivo pins, y data.application.id es el id app_ que toman los comandos kv. Una operación exitosa, no un id de lanzamiento por sí solo, significa que el lanzamiento es utilizable.

Cada app upload crea una nueva aplicación y un primer lanzamiento inmutable. Para publicar un lanzamiento posterior de la misma app, use app update. Una lista de reproducción sigue sirviendo el lanzamiento que ya fija hasta que edite ese primitivo.

Una transferencia al almacenamiento que se interrumpe se intenta hasta 4 veces mientras su URL de subida sea válida. Si sigue fallando, ejecute de nuevo el mismo comando para reanudar la misma subida.

app update#

Publicar una nueva versión de una aplicación existente, preservando identidad, nombre y K/V de la aplicación.

app update <id> <directory> [--expect-rev REVISION] [--no-wait] [--poll-ms MS] [--timeout MS]
ParámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de aplicación app_.
<directory>rutasíningunoEl directorio estático construido.
--expect-rev REVISIONstringnoningunoPrecondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar.
--no-waitbooleannoapagadoDevolver antes de que termine la operación de publicación. Ejecute operations wait antes de fijar la versión en una lista de reproducción.
--poll-ms MSintegerno1000Intervalo entre sondeos de operación mientras espera.
--timeout MSintegerno120000Fecha límite para la espera. También limita cada solicitud subyacente.
screenrig app update app_01EXAMPLEAPP00000000000 ./lobby-board

El nombre se mantiene; cámbielo con app rename. Espere data.operation.state: "succeeded", luego use playlist replace-release para revisar la página exacta, el primitivo, la nueva versión y las pantallas afectadas. Aplique con el token de impacto devuelto y una protección de revisión opcional como se describe en el flujo de trabajo de la playlist. Los pines existentes de la playlist permanecen sin cambios hasta aplicar. En caso de conflicto de revisión, lea la aplicación nuevamente antes de decidir si reintentar; no cree una aplicación de reemplazo solo para evitar el conflicto.

app list#

Listar las aplicaciones del proyecto.

app list

Sin parámetros.

screenrig app list

app rename#

Cambiar el nombre visible de una aplicación.

app rename <id> --name NAME [--expect-rev REVISION]
ParámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de aplicación app_.
--name NAMEstringsíningunoEl nuevo nombre, de 1 a 120 caracteres tras recortar espacios, sin caracteres de control.
--expect-rev REVISIONstringnoningunoPrecondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar.
screenrig app rename app_01EXAMPLEAPP00000000000 --name "Lobby welcome"

Solo cambia el nombre visible. El ID de la aplicación, sus lanzamientos, sus datos clave/valor y las listas de reproducción que fijan sus lanzamientos se mantienen como están, y no se sube ningún directorio. Renombrar al nombre actual deja la revisión sin cambios. Los nombres pueden repetirse; dirija una aplicación por su ID.

app show#

Lea una aplicación.

app show <id>
ParámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de aplicación app_.
screenrig app show app_01EXAMPLEAPP00000000000

latest_ready_release está ausente hasta que una primera publicación alcanza listo. El estado de publicación vive en la operación y el lanzamiento, no en la aplicación. last_used_at está ausente hasta que una pantalla reproduce la aplicación por primera vez.

app delete#

Eliminar una aplicación y todas sus versiones.

app delete <id> [--expect-rev REVISION]
ParámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de aplicación app_.
--expect-rev REVISIONstringnoningunoPrecondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar.
screenrig app delete app_01EXAMPLEAPP00000000000

No hay eliminación por lanzamiento. Mientras una pantalla muestra una de las versiones de la aplicación, la eliminación responde application_in_use: primero dé a esas pantallas otro contenido. La eliminación no verifica listas de reproducción que fijan una versión sin mostrarla, así que actualice o elimine esas listas también.

Clave/valor de aplicación

El almacenamiento clave/valor pertenece a una aplicación y es seguro para binarios. Cada comando toma --app-id con el id app_ de app upload, nunca un id de lanzamiento. Usar exactamente un modo de valor por escritura.

kv list#

Listar las claves almacenadas para una aplicación.

kv list --app-id ID
ParámetroTipoRequeridoPredeterminadoNotas
--app-id IDstringsíningunoEl id de aplicación app_.
screenrig kv list --app-id app_01EXAMPLEAPP00000000000

kv get#

Lea una clave.

kv get --app-id ID <key>
ParámetroTipoRequeridoPredeterminadoNotas
--app-id IDstringsíningunoEl id de aplicación app_.
<key>stringsíningunoLa clave a leer.
screenrig kv get --app-id app_01EXAMPLEAPP00000000000 menu

La respuesta lleva el valor en data.value_base64, incluidos los valores JSON: descodifíquelo y analice JSON solo cuando data.content_type indique JSON. kv list omite los valores.

kv set#

Escriba una clave desde JSON, un archivo o bytes base64.

kv set --app-id ID <key> --json-value JSON [--expect-rev REVISION]
kv set --app-id ID <key> --file FILE [--content-type TYPE] [--expect-rev REVISION]
kv set --app-id ID <key> --value-base64 BASE64 [--content-type TYPE] [--expect-rev REVISION]
ParámetroTipoRequeridoPredeterminadoNotas
--app-id IDstringsíningunoEl id de aplicación app_.
<key>stringsíningunoLa clave a escribir.
--json-value JSONstringun modoningunoUn valor JSON, canonizado antes de enviarse, siempre almacenado como application/json. También se acepta un tipo de contenido application/json explícito.
--file FILErutaun modoningunoLee los bytes del valor desde un archivo, como máximo 1 MiB, o desde stdin con -. Por defecto es application/octet-stream.
--value-base64 BASE64stringun modoningunoBase64 estándar rellena canónica sin espacios, máximo 1,398,104 caracteres; un valor vacío es válido. Por defecto es application/octet-stream.
--content-type TYPEstringnoapplication/octet-stream para bytesDe uno a 127 caracteres.
--expect-rev REVISIONstringnoningunoEscriba solo si la entrada almacenada sigue en esta revisión.
screenrig kv set --app-id app_01EXAMPLEAPP00000000000 menu --json-value '{"soup":"lentil"}'

kv delete#

Eliminar una clave.

kv delete --app-id ID <key> [--expect-rev REVISION]
ParámetroTipoRequeridoPredeterminadoNotas
--app-id IDstringsíningunoEl id de aplicación app_.
<key>stringsíningunoLa clave a eliminar.
--expect-rev REVISIONstringnoningunoPrecondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar.
screenrig kv delete --app-id app_01EXAMPLEAPP00000000000 menu

Webhooks clave/valor

Un webhook clave/valor es una URL que escribe una clave de una aplicación, así cualquier sistema externo, como un punto de venta, un script de hoja de cálculo o un trabajo cron, envía datos a pantallas con un POST HTTP. Una aplicación que se suscribe con kv.onChange actualiza en segundos en cada pantalla que la ejecuta. Una aplicación tiene como máximo 20 webhooks.

El remitente se autentica con el secreto del webhook, srkw_…, como Authorization: Bearer <secret>, o con HTTP Basic usando el ID del webhook como nombre de usuario y el secreto como contraseña; nunca se acepta un secreto en la URL o en la cadena de consulta. El cuerpo sin procesar, de 1 MiB como máximo, pasa a ser el valor de la clave y Content-Type su tipo de contenido. Cada envío no cuenta para el límite de solicitudes de agentes, cuenta para el almacenamiento como kv set, aumenta la revisión y responde con los metadatos nuevos de la clave, nunca con su valor. Un encabezado Idempotency-Key opcional deduplica los reintentos de un remitente durante 24 horas. Un webhook admite como máximo 120 envíos por minuto, y un secreto ausente o incorrecto o un webhook desconocido se responde con 401. Enviar datos desde otro sistema tiene ejemplos de curl.

El secreto solo lo muestran kv webhook create y kv webhook rotate-secret. La URL no es secreta. Crear, rotar y eliminar un webhook añade kv_webhook.created, kv_webhook.secret_rotated y kv_webhook.deleted al registro de eventos del proyecto, y cada publicación añade kv.updated como cualquier escritura.

Código de problemaSalirSignificado
kv_webhook_limit_reached5La aplicación o la tarjeta ya tiene 20 webhooks. No se creó ninguno. Elimine uno primero.
not_found4La aplicación no está en este proyecto, o ningún webhook tiene este id en ella.
card_not_found4La tarjeta no está en este proyecto.

kv webhook create#

Crear un webhook que escriba una clave de una aplicación o, con --card, el documento de datos de una tarjeta, y recibir su URL y secreto una vez.

kv webhook create <key> --app-id ID [--description TEXT]
kv webhook create --card CARD_ID [--description TEXT] [--map FILE|-] [--key-template TEMPLATE] [--signing]
                  [--verify VENDOR [--verify-secret-file FILE|-] [--verify-header NAME] [--verify-encoding hex|base64]
                   [--verify-timestamp-header NAME] [--verify-tolerance SECONDS]] [--handshake VENDOR]
ParámetroTipoRequeridoPredeterminadoNotas
<key>stringcon --app-idningunoLa clave que cada envío escribe, de 1 a 256 caracteres: una letra o dígito primero, luego letras, dígitos, ., _, :, / o -. La clave no necesita existir aún. Un webhook de tarjeta no lleva clave.
--app-id IDstringuno deningunoEl id de aplicación app_. Indique exactamente uno de --app-id y --card.
--card CARD_IDstringuno deningunoEl id de tarjeta crd_: el webhook escribe el documento de datos de la tarjeta. Véase Webhooks de tarjeta.
--description TEXTstringnoningunoQué envía, máximo 200 bytes. No debe contener credenciales.
--map FILErutanoningunoEl mapeo que construye el documento a partir del cuerpo enviado: un objeto JSON de como máximo 64 KiB leído de un archivo, o - para stdin. Sin él, el objeto enviado es el documento.
--key-template TEMPLATEstringnoningunoEscribe documentos por clave bajo una clave rellenada con tokens {screen.field.NAME}, como room-{screen.field.room}.
--signingbooleannoapagadoExige también ScreenRig-Signature en cada envío y muestra el secreto de firma una sola vez. No se combina con --verify.
--verify VENDORstringnoningunoAcepta los envíos que llevan la firma propia de este proveedor en lugar del secreto srkw_ del webhook, que sigue funcionando a su lado: github, stripe, shopify, slack, linear, vercel, asana o generic_hmac.
--verify-secret-file FILErutacon --verifyningunoLee el secreto del proveedor desde un archivo, o - para stdin (nunca como argumento): el secreto que muestra GitHub, Stripe, Shopify, Slack, Linear o Vercel, o el de un remitente generic_hmac. asana no admite ninguno: su handshake lo entrega. Solo una opción lee stdin.
--verify-header NAMEstringcon generic_hmacningunoEl encabezado que lleva la firma, de 1 a 100 letras, dígitos, - o _.
--verify-encoding ENCODINGstringnohexCon generic_hmac: cómo se escribe la firma, hex o base64; puede empezar por sha256=.
--verify-timestamp-header NAMEstringnoningunoCon generic_hmac: un encabezado que lleva la hora Unix en segundos, o en milisegundos con 13 dígitos. El texto firmado es entonces la marca de tiempo, un punto y el cuerpo.
--verify-tolerance SECONDSintegerno300Con --verify-timestamp-header: cuánto puede separarse la marca de tiempo del reloj del servidor, de 1 a 86400.
--handshake VENDORstringnoningunoResponde al desafío de configuración de microsoft_graph, monday, trello o azure_event_grid. Slack y Asana responden a los suyos mediante --verify.
screenrig kv webhook create menu --app-id app_01EXAMPLEAPP00000000000 --description "Point of sale menu feed"
screenrig kv webhook create --card crd_01EXAMPLEBOARD0000000000 --map alert-map.json --description "CMS alerts"

--map, --key-template, --signing, --verify con sus opciones y --handshake se aplican solo a un webhook de tarjeta.

El sobre es el webhook: data.id (kvw_…), data.key o, para una tarjeta, data.card_id, data.url (https://api.screenrig.ai/api/applications/<app_id>/kv-webhooks/<id>/write, o https://api.screenrig.ai/api/cards/<card_id>/kv-webhooks/<id>/write) y data.secret (srkw_…). Un webhook de tarjeta que firma incluye también data.signing_secret (whsec_…). Introduzca ahora la URL y los secretos en el sistema remitente. Ningún comando posterior los vuelve a mostrar. Tras una creación interrumpida o ambigua, vuelva a ejecutar el mismo comando dentro de 24 horas: reutiliza la clave de idempotencia guardada, y el servidor devuelve el mismo webhook y los mismos secretos en lugar de crear otro.

kv webhook list#

Listar los webhooks de una aplicación o de una tarjeta, los más antiguos primero.

kv webhook list (--app-id ID | --card CARD_ID)
ParámetroTipoRequeridoPredeterminadoNotas
--app-id IDstringuno deningunoEl id de aplicación app_. Indique exactamente uno de --app-id y --card.
--card CARD_IDstringuno deningunoEl ID de tarjeta crd_.
screenrig kv webhook list --app-id app_01EXAMPLEAPP00000000000
screenrig kv webhook list --card crd_01EXAMPLEBOARD0000000000

Cada elemento tiene id, key, description, url, created_at y, una vez que ha escrito, last_used_at. El elemento de un webhook de tarjeta tiene card_id en lugar de key, además de mapping (null cuando el objeto enviado es el documento), enabled, signing y, si están definidos, key_template, verify y handshake. Una lista nunca contiene un secreto.

kv webhook delete#

Eliminar un webhook. Su URL deja de funcionar de inmediato y la clave o el documento de la tarjeta mantiene su valor.

kv webhook delete <webhook_id> (--app-id ID | --card CARD_ID)
ParámetroTipoRequeridoPredeterminadoNotas
<webhook_id>stringsíningunoEl id de webhook kvw_.
--app-id IDstringuno deningunoEl id de aplicación app_. Indique exactamente uno de --app-id y --card.
--card CARD_IDstringuno deningunoEl ID de tarjeta crd_.
screenrig kv webhook delete kvw_01EXAMPLEWEBHOOK00000 --app-id app_01EXAMPLEAPP00000000000
screenrig kv webhook delete kvw_01EXAMPLEWEBHOOK00000 --card crd_01EXAMPLEBOARD0000000000

kv webhook rotate-secret#

Reemplazar el secreto de un webhook y recibir el nuevo una vez.

kv webhook rotate-secret <webhook_id> (--app-id ID | --card CARD_ID) [--signing]
ParámetroTipoRequeridoPredeterminadoNotas
<webhook_id>stringsíningunoEl id de webhook kvw_.
--app-id IDstringuno deningunoEl id de aplicación app_. Indique exactamente uno de --app-id y --card.
--card CARD_IDstringuno deningunoEl ID de tarjeta crd_.
--signingbooleannoapagadoCon --card: reemplaza el secreto de firma en lugar del secreto del webhook.
screenrig kv webhook rotate-secret kvw_01EXAMPLEWEBHOOK00000 --app-id app_01EXAMPLEAPP00000000000
screenrig kv webhook rotate-secret kvw_01EXAMPLEWEBHOOK00000 --card crd_01EXAMPLEBOARD0000000000 --signing

El sobre contiene el nuevo secreto en data.secret. El secreto anterior deja de funcionar de inmediato, así que introduzca el nuevo en el sistema remitente. Con --signing, el sobre contiene en su lugar el nuevo secreto de firma en data.signing_secret, y el secreto srkw_ del webhook permanece. Tras una rotación interrumpida o ambigua, vuelva a ejecutar el mismo comando: reutiliza la clave de idempotencia guardada, y el servidor devuelve la rotación que ya se hizo en lugar de rotar de nuevo.

Otros grupos de comandos