@hostwebhook/platform-contracts 0.12.0 → 0.14.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.
@@ -106,7 +106,7 @@ export interface DescripcionDeCredencial {
106
106
  * registro es forense, no un índice: se prefiere que de hoy en adelante diga
107
107
  * una sola cosa.
108
108
  */
109
- export type TipoDeEntidad = 'trigger' | 'webhook' | 'aiNode' | 'socialMediaAction' | 'socialPost' | 'calendarAction' | 'docsAction' | 'driveAction' | 'sheetsAction' | 'emailAction' | 'gmailAction' | 'approvalNode' | 'telegramAction' | 'whatsappAction' | 'discordAction' | 'slackAction' | 'mongoAction' | 'postgresAction' | 'httpAction' | 'githubAction' | 'notionAction' | 'jiraAction' | 'shopifyAction' | 'mailchimpAction' | 'firecrawlAction' | 'notificationAction' | 'googleAnalyticsAction' | 'googleContactsAction' | 'vectorStore' | 'voiceAgent';
109
+ export type TipoDeEntidad = 'trigger' | 'webhook' | 'aiNode' | 'socialMediaAction' | 'socialPost' | 'calendarAction' | 'docsAction' | 'driveAction' | 'sheetsAction' | 'emailAction' | 'gmailAction' | 'approvalNode' | 'telegramAction' | 'whatsappAction' | 'discordAction' | 'slackAction' | 'mongoAction' | 'postgresAction' | 'httpAction' | 'githubAction' | 'notionAction' | 'jiraAction' | 'bucketAction' | 'shopifyAction' | 'mailchimpAction' | 'firecrawlAction' | 'notificationAction' | 'googleAnalyticsAction' | 'googleContactsAction' | 'vectorStore' | 'voiceAgent';
110
110
  /**
111
111
  * Por qué esta lectura NO se puede comprobar contra el documento de hoy.
112
112
  *
@@ -36,9 +36,16 @@
36
36
  * ## Los campos son los que se usan
37
37
  *
38
38
  * El esquema `TelemetryLog` tiene ~20 campos. Se contaron los que aparecen de
39
- * verdad en las 67 llamadas de `nodes/` y las 53 de `common/`: son quince.
40
- * Fuera quedan `timestamp` —lo pone el gateway si falta—, `correlationId` y
41
- * los dos de voz, que nadie de este lado escribe.
39
+ * verdad en las 67 llamadas de `nodes/` y las 53 de `common/`: eran quince.
40
+ * Fuera quedaron `timestamp` —lo ponía el gateway si faltaba—, `correlationId`
41
+ * y los dos de voz, porque **nadie de este lado los escribía**.
42
+ *
43
+ * ⚠️ Eso era una MEDIDA, no un principio, y caducó. Hoy el split sella su
44
+ * propia hora —su fila se escribe cuando termina todo su abanico, así que con
45
+ * la hora de escritura la corrida se lee al revés— y el merge, el split y los
46
+ * triggers necesitan decir a qué corrida pertenecen. Así que `timestamp` y
47
+ * `correlationId` entran, y suben la cuenta a diecisiete. Los dos de voz
48
+ * siguen fuera: eso no ha cambiado.
42
49
  *
43
50
  * ## Cómo viaja
44
51
  *
@@ -56,9 +63,21 @@ export type NivelDeRegistro = 'info' | 'warn' | 'error' | 'debug';
56
63
  /**
57
64
  * Una fila del registro.
58
65
  *
59
- * ⚠️ Los quince campos MEDIDOS, ni uno más. Si hace falta otro, se añade
66
+ * ⚠️ Los diecisiete campos MEDIDOS, ni uno más. Si hace falta otro, se añade
60
67
  * aquí: tsc rechaza una clave desconocida en un literal, así que no se puede
61
68
  * colar por accidente.
69
+ *
70
+ * 🔥 Y esa promesa tenía una fuga. `correlationId` y `timestamp` ya viajaban
71
+ * SIN declarar, colados por un *spread* —`...(cond ? { timestamp } : {})`—,
72
+ * que TypeScript no somete al chequeo de propiedades excedentes. O sea que el
73
+ * tipo ni los prohibía ni los garantizaba, y quien leyera este contrato no
74
+ * podía saber que existían.
75
+ *
76
+ * El daño se midió en producción: `TelemetryService.runs()` agrupa una corrida
77
+ * por `correlationId`, y de las catorce filas de una corrida real SEIS no lo
78
+ * llevaban. No salían en su detalle ni se podían filtrar por ella. La causa no
79
+ * era el olvido de quien emite: era que **el tipo lo impedía**, así que al
80
+ * añadirlo en un literal el build se caía con TS2353.
62
81
  */
63
82
  export interface EntradaDeTelemetria {
64
83
  organizationId: string;
@@ -78,6 +97,27 @@ export interface EntradaDeTelemetria {
78
97
  statusCode?: number;
79
98
  success?: boolean;
80
99
  metadata?: Record<string, unknown>;
100
+ /**
101
+ * La corrida a la que pertenece esta fila.
102
+ *
103
+ * Es lo que agrupa un flujo entero: `TelemetryService.runs()` DESCARTA las
104
+ * filas que no lo traen, así que una emisión sin él no cuenta como paso de
105
+ * su corrida por muy correcta que sea.
106
+ *
107
+ * ⚠️ Va aquí y no dentro de `metadata`. El campo de primer nivel es el que
108
+ * está indexado y el que mira la consulta; guardarlo en la metadata es
109
+ * tenerlo y no tenerlo — pasó, y por eso está dicho.
110
+ */
111
+ correlationId?: string;
112
+ /**
113
+ * Cuándo ocurrió lo que esta fila cuenta.
114
+ *
115
+ * Sin él, quien escribe pone la hora de la ESCRITURA. Casi siempre da igual
116
+ * —se escribe al instante— pero no cuando un nodo reparte trabajo y su fila
117
+ * se escribe al terminar todo lo que colgaba de él: entonces aparece la
118
+ * última, después de sus propios hijos, y la corrida se lee al revés.
119
+ */
120
+ timestamp?: Date;
81
121
  }
82
122
  /** Apuntar en el registro, y preguntarle a la recuperación de caídas. */
83
123
  export interface Telemetria {
@@ -37,9 +37,16 @@
37
37
  * ## Los campos son los que se usan
38
38
  *
39
39
  * El esquema `TelemetryLog` tiene ~20 campos. Se contaron los que aparecen de
40
- * verdad en las 67 llamadas de `nodes/` y las 53 de `common/`: son quince.
41
- * Fuera quedan `timestamp` —lo pone el gateway si falta—, `correlationId` y
42
- * los dos de voz, que nadie de este lado escribe.
40
+ * verdad en las 67 llamadas de `nodes/` y las 53 de `common/`: eran quince.
41
+ * Fuera quedaron `timestamp` —lo ponía el gateway si faltaba—, `correlationId`
42
+ * y los dos de voz, porque **nadie de este lado los escribía**.
43
+ *
44
+ * ⚠️ Eso era una MEDIDA, no un principio, y caducó. Hoy el split sella su
45
+ * propia hora —su fila se escribe cuando termina todo su abanico, así que con
46
+ * la hora de escritura la corrida se lee al revés— y el merge, el split y los
47
+ * triggers necesitan decir a qué corrida pertenecen. Así que `timestamp` y
48
+ * `correlationId` entran, y suben la cuenta a diecisiete. Los dos de voz
49
+ * siguen fuera: eso no ha cambiado.
43
50
  *
44
51
  * ## Cómo viaja
45
52
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/platform-contracts",
3
- "version": "0.12.0",
3
+ "version": "0.14.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",