Crear paneles
Códigos de error y límites
Los diez códigos con los que puede fallar una llamada al puente, qué provoca cada uno y qué hacer, y cada límite que tiene un panel.
Leer un error
Cada llamada del SDK devuelve una promesa. Cuando Deska la rechaza, la promesa falla con un Error cuyo code es uno de los diez de abajo; el mismo texto es su message. Los códigos son estables: compáralos a ellos, nunca al texto.
async function call(run) {
try {
return { ok: true, value: await run() }
} catch (err) {
return { ok: false, code: err.code ?? 'host_error' }
}
}
const saved = await call(() => deska.storage.set('notes', notes))
if (!saved.ok && saved.code === 'storage_full') banner('El almacenamiento está lleno. Borra una nota para hacer espacio.')
if (!saved.ok && saved.code === 'rate_limited') setTimeout(save, 1000)SDK Playground provoca la mayoría a propósito y muestra la línea de código que ejecutó cada uno.
Los diez códigos
| Código | Qué lo provoca | Qué hacer |
|---|---|---|
not_ready | Una llamada llegó a Deska antes de que la página terminara su saludo inicial. El SDK guarda las llamadas hasta que ready() se resuelve, así que con el SDK no lo vas a ver. | Espera deska.ready() si hablas con el puente a mano. |
unknown_method | Un método que Deska no conoce, o un nombre de más de 32 caracteres. Solo pasa al enviar mensajes a mano. | Usa los métodos del SDK; revisa sdk en panel.json. |
permission_denied | El método necesita un permiso que panel.json no pide, o que la persona no permitió al instalar. También extras.set sin contributes.extras. | Agrega el permiso a panel.json, o revisa init.permissions y oculta la función cuando falta. |
invalid_args | Un argumento rompió una regla: un título null, vacío o largo, una clave de más de 256 caracteres, un enlace http, un campo desconocido de Extras, un valor sin forma JSON, un archivo que no es un Blob, o una imagen para copiar que no es PNG ni JPEG o no se puede decodificar. | Corrige la llamada. Las reglas de cada método están en la referencia del SDK. |
rate_limited | Más de 20 llamadas por segundo (ráfagas de 40), un segundo aviso en menos de diez segundos, o un segundo enlace en menos de un segundo. | Agrupa el trabajo, envía solo lo que cambió y reintenta más tarde los avisos. |
too_large | Los argumentos de la llamada pasan de 64 KB o anidan más de 32 niveles, un texto para el portapapeles pasa de 64 KB, o un archivo o una imagen pasa de 32 MB. | Reparte los datos en varias claves, envía menos, o achica el archivo. |
storage_full | Una escritura en el almacenamiento llevaría al paquete por encima de 256 KB, o a todos los paneles de la comunidad de la computadora juntos por encima de 2 MB. Un archivo llevaría al paquete por encima de 256 MB o de 2,000 archivos, o a todos los paquetes juntos por encima de 1 GB. | Avísale a la persona, conserva su cambio en pantalla y compacta o borra datos o archivos viejos. |
not_focused | openUrl, clipboard.write, clipboard.writeImage o files.save mientras el panel no tiene el foco: desde un temporizador, después de una espera larga, o cuando la persona ya pasó a otro panel. | Llámalo desde el mismo clic o tecla, antes de cualquier await lento. |
declined | Para openUrl: la persona pulsó Cancelar, había otra pregunta de Deska abierta, o esta página ya recibió un no. Para files.save: ya había abierto un guardado de este panel u otra pregunta de Deska. | Acéptalo sin insistir. No vuelvas a preguntar en un ciclo; Deska no muestra la pregunta del enlace otra vez hasta que la página se recarga. |
host_error | Deska no pudo hacer lo que se pidió, como cuando el portapapeles del sistema rechaza una escritura o un archivo que se guarda no se pudo escribir. | Di que no funcionó y deja que la persona lo intente de nuevo. |
Límites de cada marco
| Límite | Valor | Si se pasa |
|---|---|---|
| Llamadas | 20 por segundo en promedio, ráfagas de 40 | rate_limited |
| Mensajes | Más de 400 en un segundo | Deska detiene el marco |
| Argumentos | 64 KB serializados, anidados 32 niveles como máximo | too_large |
| Un archivo en una llamada | El Blob que reciben files.put, files.save o clipboard.writeImage: 32 MB | too_large |
| Nombre del método | 32 caracteres | unknown_method |
| Id de la llamada | 64 caracteres | Se descarta sin respuesta |
Los argumentos se miden antes de que Deska los lea, así que un arreglo enorme o disperso no le cuesta nada a la página enviarlo ni a Deska rechazarlo. Los límites cuentan por marco: dos copias de un panel tienen cada una los suyos.
// Una escritura en vez de una por elemento
await deska.storage.set('habits', { version: 2, habits, days })
// Un aviso para varios cambios
await deska.notify({ title: `${changed.length} services changed`, body: changed.join(', ') })Límites por método
| Método | Límite |
|---|---|
storage.get, set, remove | Claves de 1 a 256 caracteres |
storage.set | 256 KB por paquete, 2 MB para todos los paquetes de la computadora |
setTitle | De 1 a 60 caracteres, nunca se recorta; se escribe como máximo cuatro veces por segundo |
notify | Título de hasta 80 y cuerpo de hasta 240 caracteres; uno cada 10 segundos |
openUrl | Solo https, hasta 2048 caracteres, con foco; uno por segundo; pregunta por host |
clipboard.write | Hasta 64 KB, con foco |
clipboard.writeImage | Un PNG o JPEG de hasta 32 MB, con foco |
files.put | 32 MB por archivo; 256 MB y 2,000 archivos por paquete; 1 GB para todos los paquetes de la computadora |
files.save | Hasta 32 MB, un nombre de hasta 120 caracteres, con foco; un guardado a la vez |
extras.set | Estado de hasta 60 caracteres; progreso de 0 a 1; solo los cuatro campos |
Cuando el panel mismo se detiene
Algunas fallas no son un código sino un estado que el panel muestra en lugar de tu página:
| El panel dice | Por qué | Qué lo recupera |
|---|---|---|
| Desconectado, y que abrió otra página | La página salió de su dirección: un enlace seguido dentro del marco, un formulario que navegó o un cambio de location. | Recargar. Abre enlaces con deska.openUrl y maneja el envío de formularios con script. |
| Desconectado, y que Deska lo detuvo | Más de 400 mensajes en un segundo. | Recargar, después de encontrar el ciclo que inunda. |
| No pasa las revisiones | Una carpeta cargada dejó de pasar las revisiones después de un cambio. | Corrige lo que dice la lista; Deska la vuelve a cargar al guardar. |
| No instalado | El paquete no está en esta computadora. | Instálalo desde la Biblioteca de paneles. |
| Retirado por Deska | Deska retiró el panel o esta versión. | Nada; ya no carga. |
Errores al publicar
Publicar tiene sus propios rechazos (una versión que ya existe, un id que usa otra cuenta, un paquete de más de 5 MB, demasiadas publicaciones). Están, con qué hacer, en Publicar.