@doconda/editor/server en tu propio servidor y llamas a una función. Está incluida en la licencia del editor.
Sirve para:
- Guardar una sala de coedición desde tu backend, en lugar de elegir un navegador que guarde por todos.
- Convertir Markdown en un archivo de Word sin montar un editor oculto.
WebSocket.
Tus documentos se quedan en tu servidor
La conversión y la exportación corren dentro de tu proceso. El contenido de los documentos nunca pasa por los servidores de Doconda por esta función:- La única llamada a Doconda es el permiso de licencia. Envía tu clave de API y la marca de tu copia, y nada del documento: ni bytes, ni nombre de archivo, ni contenido de la sala.
- Leer una sala va solo por el transporte que elijas. Con
urloprovider, Doconda no interviene. Contoken, los cambios pasan por el servidor de Doconda, que los reenvía y no guarda nada, como en cualquier sesión de coedición.
Convertir un archivo
name solo se usa la extensión, que dice qué son los bytes. warnings lista lo que el motor tuvo que avisar al abrir o
al guardar.
PDF y PNG se rechazan con
format_unsupported: PNG necesita un lienzo, y un PDF se paginaría sin medidas reales de las
fuentes. Para un PDF, usa ref.save("pdf") en el navegador.
Exportar una sala
exportRoom entra en la sala, espera lo que tienen los demás, devuelve el archivo y se va:
Conviene saber:
- Pasa el archivo que abrieron todos. Una sala no contiene el documento entero: lo que nadie ha tocado sale de
file. Un archivo distinto no se detecta y da un resultado incorrecto. - Solo lee. No escribe nada en la sala, sea cual sea el archivo que pases, y no aparece como participante.
- Solo lee lo que hay en la sala en ese momento. El servidor de Doconda no guarda nada, así que cuando se va el último no
hay nada que leer y recibes
collab_empty_room. Para conservarlo, quédate en la sala. También sirve un servidor propio que guarde el estado, si contesta con ese estado al saludo (mensaje de tipo2). - Una sala vacía es un error: nunca recibes el archivo viejo ni un documento en blanco.
- Un
providerque pases sigue abierto; cerrarlo es cosa tuya.
En el servidor de Doconda
Pide un token conaudience: "server", con tu clave de API. Un token normal se rechaza sin el Origin de un navegador.
doconda.editor.collab_token(room, audience="server"). Sin el SDK, envía POST /editor/collab/token con
{ "room": "…", "audience": "server" }. Guarda este token en tu servidor.
Quedarse en una sala
joinRoom mantiene una conexión abierta y guarda el documento en memoria, así que sigue teniendo el estado cuando se han ido todos:
Admite las mismas opciones que
exportRoom, sin to. Conviene saber:
- Nadie lo ve. No envía cursor ni presencia y no cuenta en los
peersde los demás. No escribe nada en la sala. Solo envía el saludo que pide su estado a los demás y, al cerrar una conexión que abrió, el mensaje normal de «esta conexión se fue» con su propio ID, que no cambia nada para los demás. En el servidor de Doconda sí ocupa una de las 50 plazas de la sala. - Entra antes de que la gente pueda irse. Solo sabe lo que recibió mientras estaba conectado. Entra cuando se abre la sala.
- Si se corta la conexión, reconecta sola y vuelve a pedir el estado, así recupera lo editado entretanto si sigue conectado
alguien que lo tenga. Pasa
tokencomo función: un token fijo se rechaza pasados 10 minutos. - Si la sala cierra la conexión para siempre (un código de
4000a4999), conserva lo que tiene.save()sigue funcionando y añade un aviso, porque pueden faltar cambios posteriores. save()sin nada recibido espera hastatimeoutMsy luego falla concollab_empty_room.- Si
joinRoomno conecta dentro detimeoutMs, o la sala la rechaza, falla en el acto concollab_unreachableocollab_closed. - Una sesión por archivo. Cuando guardes una versión nueva y la gente vaya a abrir esa, haz
close()y vuelve a entrar con ella comofile: los cambios de una sala solo tienen sentido sobre el archivo que abrió. - El documento vive en la memoria de tu proceso: si el proceso se reinicia, lo no guardado se pierde.
Cuál usar
Un
exportRoom que llega cuando ya se ha ido el último no recibe nada, porque el servidor no guarda nada. Si necesitas lo que
había cuando se fueron todos, usa joinRoom.
La licencia en tu servidor
- La función pide a Doconda un permiso con tu clave de API (
POST /v1/editor/server/permit). No se comprueba ningún dominio, porque un servidor no tiene. - Doconda comprueba la clave y que tu organización tiene la licencia activa, y devuelve un permiso firmado válido durante 1 hora.
- La función comprueba la firma y guarda el permiso en memoria, y lo renueva cuando quedan menos de 15 minutos.
localhost también hace falta la clave.
Si la API de Doconda no responde, un proceso que ya tiene un permiso válido sigue funcionando hasta que caduque, o sea,
hasta 1 hora. Un proceso sin permiso válido falla con editor_license_unreachable y puede volver a intentarlo más tarde. Si
Doconda rechaza la clave (baja, clave cambiada), la función se detiene en la siguiente comprobación.
Una sesión de joinRoom comprueba su permiso en cada save() y lo renueva ahí, así que puede seguir conectada más de lo que
dura un permiso. Una sesión sin actividad no hace ninguna petición. Si se revoca la licencia durante una sesión, la conexión
y el documento siguen, y save() falla con editor_unlicensed desde la siguiente renovación, o sea, en menos de 1 hora; si la
licencia vuelve, save() funciona otra vez sin perder nada.
Errores
Cada fallo lanza unDocondaServerError con un code:
Relacionado
Coedición en tiempo real
Salas, tokens y cómo montar tu propio servidor.
Licencia y dominios
Tu clave, y qué pasa cuando termina la suscripción.