@hostwebhook/platform-contracts 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,7 @@
19
19
  *
20
20
  * ## Lo que ya estaba bien
21
21
  *
22
- * Los diez métodos reciben datos planos, y no por casualidad: los llamantes
22
+ * Los métodos reciben datos planos, y no por casualidad: los llamantes
23
23
  * ya hacen `.toJSON()` o pasan por `comoObjetoPlano(...)` antes de emitir.
24
24
  * Aquí no hay ningún documento de Mongoose que aplanar — algo que en la
25
25
  * costura de ficheros costó un adaptador entero.
@@ -36,9 +36,9 @@
36
36
  * clase que en `discord.provider` también se llama `gateway`. Medir por el
37
37
  * TIPO inyectado y no por el nombre de la propiedad es lo que los descarta.
38
38
  *
39
- * ## ⚠️ Nueve avisan, uno CONTESTA
39
+ * ## ⚠️ Todos avisan menos uno, que CONTESTA
40
40
  *
41
- * Nueve de los diez son difusión a la sala `org:<id>`: se mandan y no se
41
+ * Todos menos uno son difusión a la sala `org:<id>`: se mandan y no se
42
42
  * espera nada. Si se pierde uno, el panel enseña un dato viejo hasta que
43
43
  * alguien recargue — molesto y nada más.
44
44
  *
@@ -49,8 +49,25 @@
49
49
  *
50
50
  * Va en el mismo contrato porque hoy es la misma inyección y su único
51
51
  * llamante es el motor, pero quien implemente esto por red tiene que tratarlo
52
- * distinto: los nueve pueden ser «dispara y olvida», éste no.
52
+ * distinto: los demás pueden ser «dispara y olvida», éste no.
53
53
  */
54
+ /**
55
+ * Lo que dice el aviso de una corrida: lo justo para que el panel decida si
56
+ * vuelve a pedir lo que enseña.
57
+ */
58
+ export interface AvisoDeCorrida {
59
+ correlationId: string;
60
+ /** De qué nodo salió. La lista de workflows agrupa por él. */
61
+ sourceId?: string;
62
+ /**
63
+ * `running` mientras graba pasos; el veredicto al cerrarse. Ojo: una
64
+ * corrida cerrada puede volver a `running` si llega un paso tarde (ver el
65
+ * grabador), así que el panel no debe tratar el cierre como definitivo.
66
+ */
67
+ status: 'running' | 'success' | 'failed' | 'partial';
68
+ /** `true` sólo en el aviso que manda el cierre. */
69
+ cerrada: boolean;
70
+ }
54
71
  /** Un aviso en vivo al panel de la organización. */
55
72
  export interface AvisosEnVivo {
56
73
  emitNewEvent(webhookId: string, orgId: string, evento: object): void;
@@ -96,6 +113,20 @@ export interface AvisosEnVivo {
96
113
  pendingApproval: object;
97
114
  }): void;
98
115
  emitSwRunComplete(orgId: string, swId: string, run: object): void;
116
+ /**
117
+ * Una corrida del historial cambió: grabó un paso o se cerró [2026-09-29].
118
+ *
119
+ * Es lo que hace que Run History se mueva solo. Lo emiten LOS DOS que
120
+ * graban —el gateway y hw-nodes escriben en las mismas colecciones—, y por
121
+ * eso vive aquí y no en el grabador: el que graba en hw-nodes no tiene
122
+ * sockets, sólo este contrato.
123
+ *
124
+ * Es una SEÑAL, no el dato: quien escucha vuelve a pedir la lista o la
125
+ * corrida. Mandar la fila entera obligaría a leerla después de cada `$inc`,
126
+ * en el camino caliente de cada paso, para un panel que quizá nadie tiene
127
+ * abierto.
128
+ */
129
+ emitRunUpdate(orgId: string, corrida: AvisoDeCorrida): void;
99
130
  /**
100
131
  * Un contador de uso cambió. Sin payload: quien escucha vuelve a pedir
101
132
  * `GET /auth/me/usage`.
@@ -106,7 +137,7 @@ export interface AvisosEnVivo {
106
137
  *
107
138
  * No es difusión. Al otro lado hay un cliente esperando la respuesta de un
108
139
  * webhook en modo síncrono; perder este mensaje lo deja colgado hasta el
109
- * 408 de `waitForSync`. Los otros nueve pueden ser «dispara y olvida»; éste
140
+ * 408 de `waitForSync`. Los demás pueden ser «dispara y olvida»; éste
110
141
  * necesita entrega, y por eso está escrito aparte y no mezclado arriba.
111
142
  */
112
143
  resolveSyncWaiter(eventId: string, resultado: {
@@ -20,7 +20,7 @@
20
20
  *
21
21
  * ## Lo que ya estaba bien
22
22
  *
23
- * Los diez métodos reciben datos planos, y no por casualidad: los llamantes
23
+ * Los métodos reciben datos planos, y no por casualidad: los llamantes
24
24
  * ya hacen `.toJSON()` o pasan por `comoObjetoPlano(...)` antes de emitir.
25
25
  * Aquí no hay ningún documento de Mongoose que aplanar — algo que en la
26
26
  * costura de ficheros costó un adaptador entero.
@@ -37,9 +37,9 @@
37
37
  * clase que en `discord.provider` también se llama `gateway`. Medir por el
38
38
  * TIPO inyectado y no por el nombre de la propiedad es lo que los descarta.
39
39
  *
40
- * ## ⚠️ Nueve avisan, uno CONTESTA
40
+ * ## ⚠️ Todos avisan menos uno, que CONTESTA
41
41
  *
42
- * Nueve de los diez son difusión a la sala `org:<id>`: se mandan y no se
42
+ * Todos menos uno son difusión a la sala `org:<id>`: se mandan y no se
43
43
  * espera nada. Si se pierde uno, el panel enseña un dato viejo hasta que
44
44
  * alguien recargue — molesto y nada más.
45
45
  *
@@ -50,7 +50,7 @@
50
50
  *
51
51
  * Va en el mismo contrato porque hoy es la misma inyección y su único
52
52
  * llamante es el motor, pero quien implemente esto por red tiene que tratarlo
53
- * distinto: los nueve pueden ser «dispara y olvida», éste no.
53
+ * distinto: los demás pueden ser «dispara y olvida», éste no.
54
54
  */
55
55
  Object.defineProperty(exports, "__esModule", { value: true });
56
56
  exports.AVISOS_EN_VIVO = void 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/platform-contracts",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Contratos compartidos entre los servicios de HostWebhook: addons del plan, identidad interna, y las formas que cruzan una frontera de red",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",