@hostwebhook/platform-contracts 0.22.0 → 0.24.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.
|
@@ -72,4 +72,89 @@ export interface PasoEjecutado {
|
|
|
72
72
|
* de antes: la pantalla cae a la de la versión, avisando.
|
|
73
73
|
*/
|
|
74
74
|
configuracion?: Record<string, unknown>;
|
|
75
|
+
/**
|
|
76
|
+
* Cómo decidió un conditional [2026-09-29]: cada rama, cada condición con
|
|
77
|
+
* lo que valió cada lado, y cuál ganó. Sólo lo llevan los pasos de un
|
|
78
|
+
* conditional; ver `EvaluacionDeRamas`.
|
|
79
|
+
*/
|
|
80
|
+
evaluacion?: EvaluacionDeRamas;
|
|
81
|
+
/**
|
|
82
|
+
* En qué vuelta de qué bucle corrió [2026-09-29]: la pila de los bucles que
|
|
83
|
+
* lo contienen, del de FUERA al de DENTRO. Ausente fuera de un bucle, en las
|
|
84
|
+
* corridas de antes, y donde el motor la pierde (tras reanudar un approval).
|
|
85
|
+
* Ver `VueltaDeBucle`.
|
|
86
|
+
*/
|
|
87
|
+
vueltas?: VueltaDeBucle[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Una vuelta de un bucle, vista desde un paso que corre dentro de él
|
|
91
|
+
* [2026-09-29].
|
|
92
|
+
*
|
|
93
|
+
* Hace falta porque el historial sólo sabía el ORDEN de los pasos: en un
|
|
94
|
+
* bucle dentro de otro, «la tercera vez que corrió el cuerpo» no dice de qué
|
|
95
|
+
* pedido ni de qué artículo. La pila la lleva el motor en el contexto
|
|
96
|
+
* (`ContextoDeCorrida.pilaDeVueltas`) y cada paso se la queda.
|
|
97
|
+
*/
|
|
98
|
+
export interface VueltaDeBucle {
|
|
99
|
+
/** El id del nodo Loop. */
|
|
100
|
+
bucleId: string;
|
|
101
|
+
/** Su nombre cuando corrió, para la pantalla. */
|
|
102
|
+
nombre?: string;
|
|
103
|
+
/** La vuelta, contando desde 0. */
|
|
104
|
+
vuelta: number;
|
|
105
|
+
/** Cuántas vueltas da en esta pasada. */
|
|
106
|
+
total: number;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Una condición de una rama, tal como se evaluó.
|
|
110
|
+
*
|
|
111
|
+
* `actual` y `esperado` son los dos lados YA RESUELTOS —lo que salió de
|
|
112
|
+
* `{{payload.amount}}` y de lo que se escribió como valor—, recortados para
|
|
113
|
+
* que un payload grande no infle el paso. `actual` AUSENTE quiere decir que
|
|
114
|
+
* el campo no resolvió (`undefined`), que es justo lo que más se busca al
|
|
115
|
+
* mirar por qué una rama no casó; salvo cuando el payload era una lista, que
|
|
116
|
+
* entonces no hay un valor sino muchos y lo que va es `items`.
|
|
117
|
+
*/
|
|
118
|
+
export interface CondicionEvaluada {
|
|
119
|
+
/** El campo tal como se escribió: `{{payload.amount}}` o `amount`. */
|
|
120
|
+
campo: string;
|
|
121
|
+
operador: string;
|
|
122
|
+
/** El valor tal como se escribió, sin resolver. */
|
|
123
|
+
valor?: string;
|
|
124
|
+
/** No cuenta: desactivada, o sin campo. Ver `condicionPuesta`. */
|
|
125
|
+
ignorada?: true;
|
|
126
|
+
/** Si se cumplió. Ausente si está ignorada, si la rama no llegó a evaluarse o si el payload era una lista. */
|
|
127
|
+
paso?: boolean;
|
|
128
|
+
actual?: unknown;
|
|
129
|
+
esperado?: unknown;
|
|
130
|
+
/** Payload iterable: cuántos ítems la cumplieron, de cuántos. */
|
|
131
|
+
items?: {
|
|
132
|
+
total: number;
|
|
133
|
+
pasan: number;
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* - `casa`: se cumplió y es la que se tomó (la primera que casa gana).
|
|
138
|
+
* - `no-casa`: se evaluó y no se cumplió.
|
|
139
|
+
* - `sin-condiciones`: no tiene ninguna, y el conditional se la salta.
|
|
140
|
+
* - `no-evaluada`: una anterior ya había casado, así que ésta ni se miró.
|
|
141
|
+
*/
|
|
142
|
+
export type ResultadoDeRama = 'casa' | 'no-casa' | 'sin-condiciones' | 'no-evaluada';
|
|
143
|
+
export interface RamaEvaluada {
|
|
144
|
+
id: string;
|
|
145
|
+
nombre: string;
|
|
146
|
+
modo: 'and' | 'or';
|
|
147
|
+
resultado: ResultadoDeRama;
|
|
148
|
+
condiciones: CondicionEvaluada[];
|
|
149
|
+
/** Payload iterable: cuántos ítems cumplieron la rama entera. */
|
|
150
|
+
items?: {
|
|
151
|
+
total: number;
|
|
152
|
+
pasan: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** La decisión de un conditional, en el orden en que se evaluaron sus ramas. */
|
|
156
|
+
export interface EvaluacionDeRamas {
|
|
157
|
+
ramas: RamaEvaluada[];
|
|
158
|
+
/** El id de la rama que ganó; `null` = ninguna, se fue por el `else`. */
|
|
159
|
+
ganadora: string | null;
|
|
75
160
|
}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* que está diseñada justo para que los secretos NO crucen a lo bruto. Ningún
|
|
27
27
|
* secreto vive aquí.
|
|
28
28
|
*/
|
|
29
|
-
export type { FileRef, ChunkingStrategy, RunStepStatus, PasoEjecutado as PasoEjecutadoDelSdk, } from './formas-compartidas';
|
|
29
|
+
export type { FileRef, ChunkingStrategy, RunStepStatus, PasoEjecutado as PasoEjecutadoDelSdk, CondicionEvaluada, ResultadoDeRama, RamaEvaluada, EvaluacionDeRamas, VueltaDeBucle, } from './formas-compartidas';
|
|
30
30
|
export * from './almacenes-vectoriales';
|
|
31
31
|
export * from './aprobaciones-pendientes';
|
|
32
32
|
export * from './avisos-en-vivo';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Types } from 'mongoose';
|
|
2
|
+
import type { VueltaDeBucle } from './formas-compartidas';
|
|
2
3
|
/**
|
|
3
4
|
* Lo que un nodo le pide al motor de ejecución. Nada más.
|
|
4
5
|
*
|
|
@@ -168,6 +169,13 @@ export interface ContextoDeCorrida {
|
|
|
168
169
|
* detecta los ciclos de FlowLinks y aplica el `maxFlowCallDepth` del plan.
|
|
169
170
|
*/
|
|
170
171
|
callStack?: string[];
|
|
172
|
+
/**
|
|
173
|
+
* La vuelta de cada bucle en el que se está, del de fuera al de dentro
|
|
174
|
+
* [2026-09-29]. La pone el bucle al despachar cada vuelta —a partir de su
|
|
175
|
+
* estado, no de lo que traiga el contexto—, y los pasos la guardan. Es
|
|
176
|
+
* JSON plano: cruza el cable tal cual.
|
|
177
|
+
*/
|
|
178
|
+
pilaDeVueltas?: VueltaDeBucle[];
|
|
171
179
|
}
|
|
172
180
|
/** Una espera pendiente, de lo que el motor le lee. */
|
|
173
181
|
export interface EsperaPendiente {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hostwebhook/platform-contracts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.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",
|