@hostwebhook/platform-contracts 0.4.0 → 0.5.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.
@@ -75,11 +75,56 @@ export interface EventoDeCorrida {
75
75
  headers?: unknown;
76
76
  sourceIp?: unknown;
77
77
  webhookId?: unknown;
78
+ /** El cuerpo del evento. Lo leen diez sitios. */
79
+ payload?: unknown;
80
+ /**
81
+ * 🔥 El paso en una cadena de webhooks encadenados. Lo lee
82
+ * `onDeliveryResult` para decidir si sigue la cadena, y sin él la cadena se
83
+ * corta en el primer salto **sin error**.
84
+ */
85
+ chainStep?: unknown;
78
86
  }
79
87
  /** Y de un webhook: dos campos. */
88
+ /**
89
+ * Lo que el motor lee de un webhook.
90
+ *
91
+ * 🔥 Esto declaraba DOS campos —`id` y `name`— y el motor lee dieciocho. El
92
+ * hueco no era cosmético: `onDeliveryResult` implementa el CORTACIRCUITOS
93
+ * leyendo `circuitState`, `healthStatus` y los contadores de medio abierto. Con
94
+ * el tipo estrecho, quien construyera el objeto mirando esta interfaz mandaría
95
+ * sólo `id` y `name`, los cinco campos llegarían `undefined`, y
96
+ * `circuitState === 'open'` sería SIEMPRE falso.
97
+ *
98
+ * O sea: el cortacircuitos dejaría de saltar y de recuperarse, en silencio y
99
+ * con todo en verde. Se vio al ir a poner `onDeliveryResult` en el contrato.
100
+ *
101
+ * ⚠️ Todo opcional salvo `id`: es un añadido, no un cambio de forma.
102
+ */
80
103
  export interface WebhookDeCorrida {
81
104
  id: unknown;
82
105
  name?: unknown;
106
+ _id?: unknown;
107
+ organizationId?: unknown;
108
+ workspaceId?: unknown;
109
+ userId?: unknown;
110
+ entity?: unknown;
111
+ targetUrl?: unknown;
112
+ retryStrategy?: unknown;
113
+ retryDelaySeconds?: unknown;
114
+ maxRetries?: unknown;
115
+ delaySeconds?: unknown;
116
+ priority?: unknown;
117
+ circuitState?: unknown;
118
+ healthStatus?: unknown;
119
+ halfOpenSuccesses?: unknown;
120
+ halfOpenSuccessThreshold?: unknown;
121
+ autoReplayOnRecovery?: unknown;
122
+ }
123
+ /** Lo que devolvió una entrega. */
124
+ export interface ResultadoDeEntrega {
125
+ success: boolean;
126
+ statusCode: number;
127
+ responseBody: string;
83
128
  }
84
129
  /**
85
130
  * El contexto de la corrida.
@@ -192,6 +237,35 @@ export interface DespachoDelMotor {
192
237
  comment?: string;
193
238
  [k: string]: unknown;
194
239
  }): Promise<void>;
240
+ /**
241
+ * La vuelta siguiente de un bucle, cuando la trae un trabajo de la cola.
242
+ *
243
+ * ⚠️ No es lo mismo que `dispatchOutputNodes`: el bucle lleva su propio
244
+ * estado —`loopStateId` en el contexto— y esta llamada continúa una iteración
245
+ * concreta, no arranca un despacho.
246
+ */
247
+ handleLoopIteration(event: EventoDeCorrida, webhook: WebhookDeCorrida, loopNode: unknown, payload: Record<string, unknown>, ctx: ContextoDeCorrida, depth: number): Promise<void>;
248
+ /** Vacía el buffer de un agregador cuando le toca. */
249
+ handleAggregatorFlush(data: {
250
+ aggregatorNodeId: string;
251
+ groupKey: string;
252
+ webhookId: string;
253
+ orgId: string;
254
+ propagationDepth: number;
255
+ backoffCapMs?: number;
256
+ [k: string]: unknown;
257
+ }): Promise<void>;
258
+ /**
259
+ * Lo que pasa DESPUÉS de entregar: nodos de aguas abajo y cortacircuitos.
260
+ *
261
+ * 🔥 Es el que obligó a ensanchar `WebhookDeCorrida`. Lee `circuitState`,
262
+ * `healthStatus` y los contadores de medio abierto para decidir si el
263
+ * circuito se abre, se cierra o sigue igual — con el tipo estrecho de antes,
264
+ * esos campos llegaban `undefined` y el cortacircuitos no hacía nada.
265
+ */
266
+ onDeliveryResult(event: EventoDeCorrida, webhook: WebhookDeCorrida, result: ResultadoDeEntrega, ctx: ContextoDeCorrida & {
267
+ isRouter?: boolean;
268
+ }): Promise<void>;
195
269
  /** Reanuda cuando a un merge se le acaba el tiempo de espera. */
196
270
  resumeAfterMergeTimeout(mergeState: EstadoDeMerge, mergeNode: NodoDeMerge): Promise<void>;
197
271
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/platform-contracts",
3
- "version": "0.4.0",
3
+ "version": "0.5.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",