Saltar al contenido

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.

call.jsjs
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ódigoQué lo provocaQué hacer
not_readyUna 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_methodUn 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_deniedEl 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_argsUn 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_limitedMá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_largeLos 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_fullUna 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_focusedopenUrl, 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.
declinedPara 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_errorDeska 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ímiteValorSi se pasa
Llamadas20 por segundo en promedio, ráfagas de 40rate_limited
MensajesMás de 400 en un segundoDeska detiene el marco
Argumentos64 KB serializados, anidados 32 niveles como máximotoo_large
Un archivo en una llamadaEl Blob que reciben files.put, files.save o clipboard.writeImage: 32 MBtoo_large
Nombre del método32 caracteresunknown_method
Id de la llamada64 caracteresSe 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.

AtenciónUn marco que envía más de 400 mensajes en un segundo se detiene: el panel dice que Deska lo detuvo, y Recargar lo vuelve a iniciar. Responder aunque sea con rechazos a ese ritmo trababa la ventana de Deska, y nada que haga una página puede costarle a la persona su escritorio.
batching.jsjs
// 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étodoLímite
storage.get, set, removeClaves de 1 a 256 caracteres
storage.set256 KB por paquete, 2 MB para todos los paquetes de la computadora
setTitleDe 1 a 60 caracteres, nunca se recorta; se escribe como máximo cuatro veces por segundo
notifyTítulo de hasta 80 y cuerpo de hasta 240 caracteres; uno cada 10 segundos
openUrlSolo https, hasta 2048 caracteres, con foco; uno por segundo; pregunta por host
clipboard.writeHasta 64 KB, con foco
clipboard.writeImageUn PNG o JPEG de hasta 32 MB, con foco
files.put32 MB por archivo; 256 MB y 2,000 archivos por paquete; 1 GB para todos los paquetes de la computadora
files.saveHasta 32 MB, un nombre de hasta 120 caracteres, con foco; un guardado a la vez
extras.setEstado 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 dicePor quéQué lo recupera
Desconectado, y que abrió otra páginaLa 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 detuvoMás de 400 mensajes en un segundo.Recargar, después de encontrar el ciclo que inunda.
No pasa las revisionesUna 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 instaladoEl paquete no está en esta computadora.Instálalo desde la Biblioteca de paneles.
Retirado por DeskaDeska 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.