@hostwebhook/node-types 1.89.0 → 1.91.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.
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/postgres-ssl.d.ts +38 -0
- package/dist/esm/postgres-ssl.js +57 -6
- package/dist/esm/respuesta-del-sync.d.ts +18 -1
- package/dist/esm/respuesta-del-sync.js +4 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -2
- package/dist/postgres-ssl.d.ts +38 -0
- package/dist/postgres-ssl.js +60 -7
- package/dist/respuesta-del-sync.d.ts +18 -1
- package/dist/respuesta-del-sync.js +4 -0
- package/package.json +1 -1
package/dist/esm/index.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ export { TOOLKITS_POR_TIPO, operacionDeToolkit, esOperacionDestructiva, TIPOS_CO
|
|
|
80
80
|
export { GOOGLE_CONTACTS_TOOLKIT_SPECS, GOOGLE_CONTACTS_TOOLKIT_BY_TOOL_NAME, } from './google-contacts-toolkit.js';
|
|
81
81
|
export type { GoogleContactsToolkitSpec, GoogleContactsToolkitParameter, } from './google-contacts-toolkit.js';
|
|
82
82
|
export type { OperacionDeToolkit } from './toolkits.js';
|
|
83
|
-
export { leerSslPostgres, ponerSslPostgres, pistaDeSslPostgres, conPistaDeSslPostgres, CASOS_DE_SSL_POSTGRES, } from './postgres-ssl.js';
|
|
83
|
+
export { leerSslPostgres, ponerSslPostgres, pistaDeSslPostgres, conPistaDeSslPostgres, CASOS_DE_SSL_POSTGRES, FICHEROS_DE_POSTGRES, parametrosDeCadenaPostgres, ficherosEnCadenaPostgres, CASOS_DE_FICHEROS_POSTGRES, } from './postgres-ssl.js';
|
|
84
84
|
export type { ModoSslPostgres, SslDeLaCadenaPostgres } from './postgres-ssl.js';
|
|
85
85
|
export type { LlmProvider, LlmProviderOption, LlmModelOption, } from './llm-models.js';
|
|
86
86
|
export { LLM_PROVIDERS, LLM_MODELS, MODEL_CONTEXT_WINDOWS, getModelsFor, getDefaultModel, getModelLabel, } from './llm-models.js';
|
|
@@ -88,5 +88,5 @@ export type { ModeloDeOpenRouter, PrecioDeOpenRouter, RespuestaDeModelosDeOpenRo
|
|
|
88
88
|
export { URL_DE_MODELOS_DE_OPENROUTER, opcionesDeModelosDeOpenRouter, ventanaDeContextoDeOpenRouter, } from './openrouter.js';
|
|
89
89
|
export type { CredentialTypeRegistration, CredentialType } from './credentials.js';
|
|
90
90
|
export { CREDENTIAL_TYPES, CREDENTIAL_TYPE_VALUES, credentialTypeValues, getCredentialType, isCredentialType, } from './credentials.js';
|
|
91
|
-
export type { NodoQueContestaEnSync, ResultadoDelValidador, FalloDeValidacion, VeredictoDelValidador, NivelDeDetalle, ModoDePayload, SobreDeRespuesta, TopeDeNumero, RespuestaDelSync, RespuestaHttp, } from './respuesta-del-sync.js';
|
|
91
|
+
export type { NodoQueContestaEnSync, ResultadoDelValidador, FalloDeValidacion, VeredictoDelValidador, VeredictoDelAiNode, NivelDeDetalle, ModoDePayload, SobreDeRespuesta, TopeDeNumero, RespuestaDelSync, RespuestaHttp, } from './respuesta-del-sync.js';
|
|
92
92
|
export { NODOS_QUE_CONTESTAN_EN_SYNC, contestaEnSync, RESULTADOS_DEL_VALIDADOR, NIVELES_DE_DETALLE, MODOS_DE_PAYLOAD, SOBRES_DE_RESPUESTA, TOPES_DE_ESTADO, TOPE_DE_ESPERA_DEL_SYNC, RESPUESTA_DEL_SYNC_POR_DEFECTO, armarRespuestaDelSync, } from './respuesta-del-sync.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -66,7 +66,7 @@ export { GOOGLE_CONTACTS_TOOLKIT_SPECS, GOOGLE_CONTACTS_TOOLKIT_BY_TOOL_NAME, }
|
|
|
66
66
|
/* Lo que hará `pg` con el SSL de una cadena, escrito una vez: el panel lo usa
|
|
67
67
|
para fijar el modo cuando la cadena lo dice, y los servicios para decir qué
|
|
68
68
|
cambiar cuando falla. El api lo compara con el driver de verdad. */
|
|
69
|
-
export { leerSslPostgres, ponerSslPostgres, pistaDeSslPostgres, conPistaDeSslPostgres, CASOS_DE_SSL_POSTGRES, } from './postgres-ssl.js';
|
|
69
|
+
export { leerSslPostgres, ponerSslPostgres, pistaDeSslPostgres, conPistaDeSslPostgres, CASOS_DE_SSL_POSTGRES, FICHEROS_DE_POSTGRES, parametrosDeCadenaPostgres, ficherosEnCadenaPostgres, CASOS_DE_FICHEROS_POSTGRES, } from './postgres-ssl.js';
|
|
70
70
|
export { LLM_PROVIDERS, LLM_MODELS, MODEL_CONTEXT_WINDOWS, getModelsFor, getDefaultModel, getModelLabel, } from './llm-models.js';
|
|
71
71
|
export { URL_DE_MODELOS_DE_OPENROUTER, opcionesDeModelosDeOpenRouter, ventanaDeContextoDeOpenRouter, } from './openrouter.js';
|
|
72
72
|
export { CREDENTIAL_TYPES, CREDENTIAL_TYPE_VALUES, credentialTypeValues, getCredentialType, isCredentialType, } from './credentials.js';
|
|
@@ -69,6 +69,25 @@ export type SslDeLaCadenaPostgres =
|
|
|
69
69
|
por: string;
|
|
70
70
|
problema: string;
|
|
71
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* Los parámetros que `pg-connection-string` LEE DEL DISCO con
|
|
74
|
+
* `fs.readFileSync(<valor>)` al construir el cliente (2.12 y 2.14, medido
|
|
75
|
+
* el 2026-09-24). El api y hw-nodes comprueban contra el fuente del driver
|
|
76
|
+
* que no lee ninguno más (`ninguna-conexion-postgres-lee-ficheros.spec.ts`).
|
|
77
|
+
*/
|
|
78
|
+
export declare const FICHEROS_DE_POSTGRES: readonly ["sslcert", "sslkey", "sslrootcert"];
|
|
79
|
+
/**
|
|
80
|
+
* Los parámetros de la cadena EXACTAMENTE como los lee `pg-connection-string`
|
|
81
|
+
* —mismo arreglo de espacios, mismo host de relleno para `@/`, claves
|
|
82
|
+
* decodificadas, la última repetida gana—. `null` si el driver no llega a
|
|
83
|
+
* leer parámetros: un socket (`/ruta` o `socket:`) o una cadena que ni él
|
|
84
|
+
* puede leer.
|
|
85
|
+
*
|
|
86
|
+
* ⚠️ SIN recortar: la usa una guarda de seguridad
|
|
87
|
+
* (`asegurarPostgresSinFicheros` en node-sdk). Con `" /x?sslrootcert=…"`, un
|
|
88
|
+
* recorte vería un socket y dejaría pasar lo que el driver sí lee.
|
|
89
|
+
*/
|
|
90
|
+
export declare function parametrosDeCadenaPostgres(cadena: string): Record<string, string> | null;
|
|
72
91
|
/**
|
|
73
92
|
* Qué hará el driver con el SSL de esta cadena.
|
|
74
93
|
*
|
|
@@ -108,6 +127,25 @@ export declare function ponerSslPostgres(cadena: string, modo: ModoSslPostgres):
|
|
|
108
127
|
* - el servidor exige SSL y se conectó sin él.
|
|
109
128
|
*/
|
|
110
129
|
export declare function pistaDeSslPostgres(mensaje: string): string | null;
|
|
130
|
+
/**
|
|
131
|
+
* Los casos con los que se comprueba `ficherosEnCadenaPostgres` contra el
|
|
132
|
+
* driver de verdad (el api y hw-nodes espían `fs.readFileSync` mientras
|
|
133
|
+
* `pg-connection-string` lee cada cadena): `lee` es si el DRIVER abre un
|
|
134
|
+
* fichero. Incluye los dos rodeos medidos el 2026-09-24 —un espacio delante
|
|
135
|
+
* de `/` (el driver no lo toma por socket y lee) y una clave codificada
|
|
136
|
+
* (`ssl%72ootcert`)— y lo que no lee (mayúsculas, sockets, valor vacío).
|
|
137
|
+
* Las rutas empiezan por `/nope` para que el espía las reconozca.
|
|
138
|
+
*/
|
|
139
|
+
export declare const CASOS_DE_FICHEROS_POSTGRES: ReadonlyArray<{
|
|
140
|
+
cadena: string;
|
|
141
|
+
lee: boolean;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* Los parámetros de la cadena que el driver leería como FICHEROS del disco de
|
|
145
|
+
* quien conecta —nuestros servidores—. Vacío si no hay ninguno. Devuelve los
|
|
146
|
+
* NOMBRES, nunca los valores: una ruta no se repite en un mensaje.
|
|
147
|
+
*/
|
|
148
|
+
export declare function ficherosEnCadenaPostgres(cadena: string): string[];
|
|
111
149
|
/** El mensaje con su pista, si la tiene. Lo que devuelven los servicios. Si el
|
|
112
150
|
* error ya pasó por aquí (dos capas que lo envuelven), no la repite. */
|
|
113
151
|
export declare function conPistaDeSslPostgres(mensaje: string): string;
|
package/dist/esm/postgres-ssl.js
CHANGED
|
@@ -48,11 +48,27 @@
|
|
|
48
48
|
* máquina de quien pegó la cadena. Nunca pueden valer: aquí salen como
|
|
49
49
|
* `problema` y el panel no deja guardarlos.
|
|
50
50
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
*
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Los parámetros que `pg-connection-string` LEE DEL DISCO con
|
|
53
|
+
* `fs.readFileSync(<valor>)` al construir el cliente (2.12 y 2.14, medido
|
|
54
|
+
* el 2026-09-24). El api y hw-nodes comprueban contra el fuente del driver
|
|
55
|
+
* que no lee ninguno más (`ninguna-conexion-postgres-lee-ficheros.spec.ts`).
|
|
56
|
+
*/
|
|
57
|
+
export const FICHEROS_DE_POSTGRES = ['sslcert', 'sslkey', 'sslrootcert'];
|
|
58
|
+
const FICHEROS = FICHEROS_DE_POSTGRES;
|
|
59
|
+
/**
|
|
60
|
+
* Los parámetros de la cadena EXACTAMENTE como los lee `pg-connection-string`
|
|
61
|
+
* —mismo arreglo de espacios, mismo host de relleno para `@/`, claves
|
|
62
|
+
* decodificadas, la última repetida gana—. `null` si el driver no llega a
|
|
63
|
+
* leer parámetros: un socket (`/ruta` o `socket:`) o una cadena que ni él
|
|
64
|
+
* puede leer.
|
|
65
|
+
*
|
|
66
|
+
* ⚠️ SIN recortar: la usa una guarda de seguridad
|
|
67
|
+
* (`asegurarPostgresSinFicheros` en node-sdk). Con `" /x?sslrootcert=…"`, un
|
|
68
|
+
* recorte vería un socket y dejaría pasar lo que el driver sí lee.
|
|
69
|
+
*/
|
|
70
|
+
export function parametrosDeCadenaPostgres(cadena) {
|
|
71
|
+
let str = cadena ?? '';
|
|
56
72
|
if (!str || str.charAt(0) === '/')
|
|
57
73
|
return null;
|
|
58
74
|
if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {
|
|
@@ -87,7 +103,8 @@ function parametrosDe(cadena) {
|
|
|
87
103
|
* ignora).
|
|
88
104
|
*/
|
|
89
105
|
export function leerSslPostgres(cadena) {
|
|
90
|
-
|
|
106
|
+
/* Recortada: es lo que se guarda (los formularios guardan `trim()`). */
|
|
107
|
+
const p = parametrosDeCadenaPostgres((cadena ?? '').trim());
|
|
91
108
|
if (!p)
|
|
92
109
|
return { dice: false };
|
|
93
110
|
const ficheros = FICHEROS.filter((k) => p[k]);
|
|
@@ -216,6 +233,40 @@ export function pistaDeSslPostgres(mensaje) {
|
|
|
216
233
|
}
|
|
217
234
|
return null;
|
|
218
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
* Los casos con los que se comprueba `ficherosEnCadenaPostgres` contra el
|
|
238
|
+
* driver de verdad (el api y hw-nodes espían `fs.readFileSync` mientras
|
|
239
|
+
* `pg-connection-string` lee cada cadena): `lee` es si el DRIVER abre un
|
|
240
|
+
* fichero. Incluye los dos rodeos medidos el 2026-09-24 —un espacio delante
|
|
241
|
+
* de `/` (el driver no lo toma por socket y lee) y una clave codificada
|
|
242
|
+
* (`ssl%72ootcert`)— y lo que no lee (mayúsculas, sockets, valor vacío).
|
|
243
|
+
* Las rutas empiezan por `/nope` para que el espía las reconozca.
|
|
244
|
+
*/
|
|
245
|
+
export const CASOS_DE_FICHEROS_POSTGRES = [
|
|
246
|
+
{ cadena: 'postgres://u:p@h/db?sslrootcert=/nope1', lee: true },
|
|
247
|
+
{ cadena: ' /x?sslrootcert=/nope2', lee: true },
|
|
248
|
+
{ cadena: 'postgres://u:p@h/db?ssl%72ootcert=/nope3', lee: true },
|
|
249
|
+
{ cadena: 'postgres://u:p@h/db?SSLROOTCERT=/nope4', lee: false },
|
|
250
|
+
{ cadena: 'socket://u:p@/var/run?sslrootcert=/nope5', lee: false },
|
|
251
|
+
{ cadena: '/var/run/postgresql db?sslrootcert=/nope6', lee: false },
|
|
252
|
+
{ cadena: 'postgres://u:p@/db?sslkey=/nope7', lee: true },
|
|
253
|
+
{ cadena: 'postgres://u:p w@h/db?sslcert=/nope8', lee: true },
|
|
254
|
+
{ cadena: 'postgres://u:p@h/db?sslrootcert=/nope9&sslrootcert=', lee: false },
|
|
255
|
+
{ cadena: 'postgres://u:p@h/db?sslrootcert=&sslrootcert=/nope10', lee: true },
|
|
256
|
+
{ cadena: 'postgres://u:p@h/db?sslmode=require&sslcert=/nope11&sslkey=/nope12', lee: true },
|
|
257
|
+
{ cadena: 'postgres://u:p@h/db?sslmode=no-verify&sslpassword=x', lee: false },
|
|
258
|
+
];
|
|
259
|
+
/**
|
|
260
|
+
* Los parámetros de la cadena que el driver leería como FICHEROS del disco de
|
|
261
|
+
* quien conecta —nuestros servidores—. Vacío si no hay ninguno. Devuelve los
|
|
262
|
+
* NOMBRES, nunca los valores: una ruta no se repite en un mensaje.
|
|
263
|
+
*/
|
|
264
|
+
export function ficherosEnCadenaPostgres(cadena) {
|
|
265
|
+
const p = parametrosDeCadenaPostgres(cadena);
|
|
266
|
+
if (!p)
|
|
267
|
+
return [];
|
|
268
|
+
return FICHEROS_DE_POSTGRES.filter((k) => p[k]);
|
|
269
|
+
}
|
|
219
270
|
/** El mensaje con su pista, si la tiene. Lo que devuelven los servicios. Si el
|
|
220
271
|
* error ya pasó por aquí (dos capas que lo envuelven), no la repite. */
|
|
221
272
|
export function conPistaDeSslPostgres(mensaje) {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
* eso el gate es de producto y no de corrección, y por eso `'no-verdict'`
|
|
78
78
|
* existe ahí abajo — sin él, el flujo con el gate puesto se colgaría igual.
|
|
79
79
|
*/
|
|
80
|
-
export declare const NODOS_QUE_CONTESTAN_EN_SYNC: readonly ["schemaValidator"];
|
|
80
|
+
export declare const NODOS_QUE_CONTESTAN_EN_SYNC: readonly ["schemaValidator", "ai"];
|
|
81
81
|
/** Un tipo de nodo de los que saben contestar en `sync`. */
|
|
82
82
|
export type NodoQueContestaEnSync = (typeof NODOS_QUE_CONTESTAN_EN_SYNC)[number];
|
|
83
83
|
/**
|
|
@@ -162,6 +162,23 @@ export type VeredictoDelValidador = {
|
|
|
162
162
|
webhookName?: string;
|
|
163
163
|
nodeName?: string;
|
|
164
164
|
};
|
|
165
|
+
/**
|
|
166
|
+
* Lo que dictamina el AI Node para quien espera en `sync` (2026-09-24).
|
|
167
|
+
*
|
|
168
|
+
* Mucho menos que un validador: el AI Node no aprueba ni rechaza, CONTESTA.
|
|
169
|
+
* `answer` es «tengo respuesta» —el cuerpo es su salida, que la api tiene y
|
|
170
|
+
* este tipo no necesita llevar—; `failed` es que la llamada al modelo (o una
|
|
171
|
+
* herramienta que no se recuperó) falló, y `message` dice por qué.
|
|
172
|
+
*
|
|
173
|
+
* Viaja por el cable como `_sincrono`, igual que el del validador: la
|
|
174
|
+
* respuesta la ARMA la api, que es quien tiene la puerta fresca y el waiter.
|
|
175
|
+
*/
|
|
176
|
+
export type VeredictoDelAiNode = {
|
|
177
|
+
outcome: 'answer';
|
|
178
|
+
} | {
|
|
179
|
+
outcome: 'failed';
|
|
180
|
+
message: string;
|
|
181
|
+
};
|
|
165
182
|
/**
|
|
166
183
|
* Cuánto se le cuenta al cliente de POR QUÉ falló.
|
|
167
184
|
*
|
|
@@ -80,6 +80,10 @@
|
|
|
80
80
|
*/
|
|
81
81
|
export const NODOS_QUE_CONTESTAN_EN_SYNC = [
|
|
82
82
|
'schemaValidator',
|
|
83
|
+
/* [2026-09-24, Ariel] «que también funcione con el AI Node: siempre regresa
|
|
84
|
+
una respuesta». Contesta con su salida y el flujo sigue detrás; ver
|
|
85
|
+
`VeredictoDelAiNode`. */
|
|
86
|
+
'ai',
|
|
83
87
|
];
|
|
84
88
|
/**
|
|
85
89
|
* ¿Este tipo de nodo sabe contestar en `sync`?
|
package/dist/index.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ export { TOOLKITS_POR_TIPO, operacionDeToolkit, esOperacionDestructiva, TIPOS_CO
|
|
|
80
80
|
export { GOOGLE_CONTACTS_TOOLKIT_SPECS, GOOGLE_CONTACTS_TOOLKIT_BY_TOOL_NAME, } from './google-contacts-toolkit.js';
|
|
81
81
|
export type { GoogleContactsToolkitSpec, GoogleContactsToolkitParameter, } from './google-contacts-toolkit.js';
|
|
82
82
|
export type { OperacionDeToolkit } from './toolkits.js';
|
|
83
|
-
export { leerSslPostgres, ponerSslPostgres, pistaDeSslPostgres, conPistaDeSslPostgres, CASOS_DE_SSL_POSTGRES, } from './postgres-ssl.js';
|
|
83
|
+
export { leerSslPostgres, ponerSslPostgres, pistaDeSslPostgres, conPistaDeSslPostgres, CASOS_DE_SSL_POSTGRES, FICHEROS_DE_POSTGRES, parametrosDeCadenaPostgres, ficherosEnCadenaPostgres, CASOS_DE_FICHEROS_POSTGRES, } from './postgres-ssl.js';
|
|
84
84
|
export type { ModoSslPostgres, SslDeLaCadenaPostgres } from './postgres-ssl.js';
|
|
85
85
|
export type { LlmProvider, LlmProviderOption, LlmModelOption, } from './llm-models.js';
|
|
86
86
|
export { LLM_PROVIDERS, LLM_MODELS, MODEL_CONTEXT_WINDOWS, getModelsFor, getDefaultModel, getModelLabel, } from './llm-models.js';
|
|
@@ -88,5 +88,5 @@ export type { ModeloDeOpenRouter, PrecioDeOpenRouter, RespuestaDeModelosDeOpenRo
|
|
|
88
88
|
export { URL_DE_MODELOS_DE_OPENROUTER, opcionesDeModelosDeOpenRouter, ventanaDeContextoDeOpenRouter, } from './openrouter.js';
|
|
89
89
|
export type { CredentialTypeRegistration, CredentialType } from './credentials.js';
|
|
90
90
|
export { CREDENTIAL_TYPES, CREDENTIAL_TYPE_VALUES, credentialTypeValues, getCredentialType, isCredentialType, } from './credentials.js';
|
|
91
|
-
export type { NodoQueContestaEnSync, ResultadoDelValidador, FalloDeValidacion, VeredictoDelValidador, NivelDeDetalle, ModoDePayload, SobreDeRespuesta, TopeDeNumero, RespuestaDelSync, RespuestaHttp, } from './respuesta-del-sync.js';
|
|
91
|
+
export type { NodoQueContestaEnSync, ResultadoDelValidador, FalloDeValidacion, VeredictoDelValidador, VeredictoDelAiNode, NivelDeDetalle, ModoDePayload, SobreDeRespuesta, TopeDeNumero, RespuestaDelSync, RespuestaHttp, } from './respuesta-del-sync.js';
|
|
92
92
|
export { NODOS_QUE_CONTESTAN_EN_SYNC, contestaEnSync, RESULTADOS_DEL_VALIDADOR, NIVELES_DE_DETALLE, MODOS_DE_PAYLOAD, SOBRES_DE_RESPUESTA, TOPES_DE_ESTADO, TOPE_DE_ESPERA_DEL_SYNC, RESPUESTA_DEL_SYNC_POR_DEFECTO, armarRespuestaDelSync, } from './respuesta-del-sync.js';
|
package/dist/index.js
CHANGED
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.GMAIL_SEND_LEGACY_FIELDS = exports.NATIVE_EMAIL_TOOLKIT_BY_TOOL_NAME = exports.GMAIL_TOOLKIT_BY_TOOL_NAME = exports.NATIVE_EMAIL_TOOLKIT_SPECS = exports.GMAIL_SEND_AND_WAIT_TOOL_SPEC = exports.GMAIL_ALL_TOOLKIT_SPECS = exports.GMAIL_TOOLKIT_SPECS = exports.GMAIL_TOOLKIT_OPERATIONS = exports.GMAIL_DROPDOWN_OPERATIONS = exports.GMAIL_OPERATION_GROUPS = exports.GMAIL_OPERATION_SPECS = exports.GMAIL_OPERATIONS = exports.versionCatalogErrors = exports.fieldsLost = exports.fieldsLostBetween = exports.currentVersion = exports.versionSpec = exports.versionsOf = exports.isVersioned = exports.NODE_TYPE_TO_PREFIX = exports.PREFIX_TO_NODE_TYPE = exports.NODE_STATE_KEYS = exports.NODE_COLORS = exports.NODE_DETAIL_PATHS = exports.getNodeRegistryEntry = exports.NODE_REGISTRY = exports.pasaLoQueRecibe = exports.getNodeDispatchConfig = exports.getAllNodeCollections = exports.NODE_DISPATCH = exports.todosLosOutputGroups = exports.outputGroupsFor = exports.esEtiquetaDeSentimiento = exports.SENTIMENT_PORT_SUMMARY = exports.SENTIMENT_PORT_LABEL = exports.SENTIMENT_PORTS = exports.SENTIMENT_UNCLEAR = exports.SENTIMENT_LABELS = exports.resolveNodeId = exports.PREFIX_TO_TYPE = exports.NODE_UI = exports.ALL_NODE_TYPES = exports.isNodeType = exports.isTerminal = exports.canSendToNodes = exports.canReceiveFromNodes = exports.canReceiveFrom = exports.NODE_CONNECTIONS = exports.iterableMeta = exports.singleMeta = void 0;
|
|
4
4
|
exports.isGithubOperation = exports.GITHUB_ITERABLE_OPERATIONS = exports.GITHUB_DROPDOWN_OPERATIONS = exports.GITHUB_OPERATION_SPECS = exports.GITHUB_OPERATIONS = exports.scopesQueFaltanEnShopify = exports.isShopifyOperation = exports.SHOPIFY_PRODUCT_STATUSES = exports.SHOPIFY_CANCEL_REASONS = exports.SHOPIFY_SEARCHABLE_RESOURCES = exports.SHOPIFY_TAGGABLE_RESOURCES = exports.SHOPIFY_OPERATION_SCOPES = exports.SHOPIFY_OPERATION_SPECS = exports.SHOPIFY_OPERATIONS = exports.isMailchimpOperation = exports.MAILCHIMP_CONTACT_STATUSES = exports.MAILCHIMP_OPERATION_SPECS = exports.MAILCHIMP_OPERATIONS = exports.herramientasDeDiscordPara = exports.DISCORD_TOOLKIT_BY_TOOL_NAME = exports.DISCORD_TOOLKIT_SPECS = exports.isDiscordOperation = exports.camposDeDiscordNoDisponibles = exports.discordPuedeEjecutar = exports.operacionesDeDiscordPara = exports.DISCORD_CAPACIDADES_POR_CREDENCIAL = exports.DISCORD_OPERATION_SPECS = exports.DISCORD_OPERATIONS = exports.camposNoDisponiblesPara = exports.puedeEjecutar = exports.operacionesPara = exports.isWhatsAppOperation = exports.WHATSAPP_OPERATIONS = exports.TELEGRAM_TOOLKIT_BY_TOOL_NAME = exports.TELEGRAM_TOOLKIT_SPECS = exports.isTelegramOperation = exports.TELEGRAM_OPERATION_SPECS = exports.TELEGRAM_OPERATIONS = exports.DRIVE_TOOLKIT_BY_TOOL_NAME = exports.DRIVE_TOOLKIT_SPECS = exports.isDriveOperation = exports.DRIVE_OPERATION_SPECS = exports.DRIVE_OPERATIONS = exports.GOOGLE_CALENDAR_TOOLKIT_BY_TOOL_NAME = exports.GOOGLE_CALENDAR_TOOLKIT_SPECS = exports.isGoogleCalendarOperation = exports.GOOGLE_CALENDAR_OPERATION_SPECS = exports.GOOGLE_CALENDAR_OPERATIONS = exports.isGmailOperation = exports.resolveGmailSendFields = void 0;
|
|
5
5
|
exports.NOTION_OPERATION_SPECS = exports.NOTION_OPERATIONS = exports.isGoogleAnalyticsOperation = exports.GOOGLE_ANALYTICS_DROPDOWN_OPERATIONS = exports.GOOGLE_ANALYTICS_OPERATION_SPECS = exports.GOOGLE_ANALYTICS_OPERATIONS = exports.isGoogleContactsOperation = exports.GOOGLE_CONTACTS_DEFAULT_PERSON_FIELDS = exports.GOOGLE_CONTACTS_OPERATION_GROUPS = exports.GOOGLE_CONTACTS_OPERATION_SPECS = exports.GOOGLE_CONTACTS_OPERATIONS_V2 = exports.GOOGLE_CONTACTS_OPERATIONS_V1 = exports.GOOGLE_CONTACTS_OPERATIONS = exports.SHEETS_TOOLKIT_DEFAULTABLE = exports.SHEETS_TOOLKIT_BY_TOOL_NAME = exports.SHEETS_TOOLKIT_SPECS = exports.isSheetsOperation = exports.SHEETS_OPERATION_SPECS = exports.SHEETS_OPERATIONS = exports.herramientasDeSlackPara = exports.SLACK_TOOLKIT_BY_TOOL_NAME = exports.SLACK_TOOLKIT_SPECS = exports.isSlackOperation = exports.camposDeSlackNoDisponibles = exports.slackPuedeEjecutar = exports.operacionesDeSlackPara = exports.SLACK_CAPACIDADES_POR_CREDENCIAL = exports.SLACK_OPERATION_SPECS = exports.SLACK_OPERATIONS = exports.isAirtableOperation = exports.AIRTABLE_ITERABLE_OPERATIONS = exports.AIRTABLE_OPERATION_SPECS = exports.AIRTABLE_OPERATIONS = exports.isCalendlyOperation = exports.CALENDLY_ITERABLE_OPERATIONS = exports.CALENDLY_OPERATION_SPECS = exports.CALENDLY_OPERATIONS = exports.isApifyOperation = exports.APIFY_ITERABLE_OPERATIONS = exports.APIFY_OPERATION_SPECS = exports.APIFY_OPERATIONS = exports.isBucketOperation = exports.BUCKET_ITERABLE_OPERATIONS = exports.BUCKET_OPERATION_SPECS = exports.BUCKET_OPERATIONS = exports.isJiraOperation = exports.JIRA_ITERABLE_OPERATIONS = exports.JIRA_DROPDOWN_OPERATIONS = exports.JIRA_OPERATION_SPECS = exports.JIRA_OPERATIONS = void 0;
|
|
6
|
-
exports.
|
|
7
|
-
exports.armarRespuestaDelSync = exports.RESPUESTA_DEL_SYNC_POR_DEFECTO = exports.TOPE_DE_ESPERA_DEL_SYNC = exports.TOPES_DE_ESTADO = exports.SOBRES_DE_RESPUESTA = exports.MODOS_DE_PAYLOAD = exports.NIVELES_DE_DETALLE = exports.RESULTADOS_DEL_VALIDADOR = exports.contestaEnSync = exports.NODOS_QUE_CONTESTAN_EN_SYNC = exports.isCredentialType = exports.getCredentialType = exports.credentialTypeValues = exports.CREDENTIAL_TYPE_VALUES = exports.CREDENTIAL_TYPES = void 0;
|
|
6
|
+
exports.getDefaultModel = exports.getModelsFor = exports.MODEL_CONTEXT_WINDOWS = exports.LLM_MODELS = exports.LLM_PROVIDERS = exports.CASOS_DE_FICHEROS_POSTGRES = exports.ficherosEnCadenaPostgres = exports.parametrosDeCadenaPostgres = exports.FICHEROS_DE_POSTGRES = exports.CASOS_DE_SSL_POSTGRES = exports.conPistaDeSslPostgres = exports.pistaDeSslPostgres = exports.ponerSslPostgres = exports.leerSslPostgres = exports.GOOGLE_CONTACTS_TOOLKIT_BY_TOOL_NAME = exports.GOOGLE_CONTACTS_TOOLKIT_SPECS = exports.motivoParaNoCorrer = exports.mensajeDeHerramientaBloqueada = exports.MENSAJE_SIN_HERRAMIENTA = exports.herramientaBloqueadaEn = exports.bloqueadasDe = exports.nombresDeHerramientas = exports.admiteBloqueo = exports.tieneModoToolkit = exports.TIPOS_CON_TOOLKIT = exports.esOperacionDestructiva = exports.operacionDeToolkit = exports.TOOLKITS_POR_TIPO = exports.marcarDestructivas = exports.esHerramientaDestructiva = exports.claseDeHerramienta = exports.POSTGRES_TOOLKIT_BY_TOOL_NAME = exports.POSTGRES_TOOLKIT_SPECS = exports.MONGO_TOOLKIT_BY_TOOL_NAME = exports.MONGO_TOOLKIT_SPECS = exports.DOCS_TOOLKIT_DEFAULTABLE = exports.DOCS_TOOLKIT_BY_TOOL_NAME = exports.DOCS_TOOLKIT_SPECS = exports.isDocsOperation = exports.DOCS_OPERATION_SPECS = exports.DOCS_OPERATIONS = exports.isMongoOperation = exports.MONGO_OPERATION_SPECS = exports.MONGO_OPERATIONS = exports.isPostgresOperation = exports.POSTGRES_OPERATION_SPECS = exports.POSTGRES_MODES = exports.POSTGRES_OPERATIONS = exports.isNotionOperation = exports.NOTION_DROPDOWN_OPERATIONS = void 0;
|
|
7
|
+
exports.armarRespuestaDelSync = exports.RESPUESTA_DEL_SYNC_POR_DEFECTO = exports.TOPE_DE_ESPERA_DEL_SYNC = exports.TOPES_DE_ESTADO = exports.SOBRES_DE_RESPUESTA = exports.MODOS_DE_PAYLOAD = exports.NIVELES_DE_DETALLE = exports.RESULTADOS_DEL_VALIDADOR = exports.contestaEnSync = exports.NODOS_QUE_CONTESTAN_EN_SYNC = exports.isCredentialType = exports.getCredentialType = exports.credentialTypeValues = exports.CREDENTIAL_TYPE_VALUES = exports.CREDENTIAL_TYPES = exports.ventanaDeContextoDeOpenRouter = exports.opcionesDeModelosDeOpenRouter = exports.URL_DE_MODELOS_DE_OPENROUTER = exports.getModelLabel = void 0;
|
|
8
8
|
var types_js_1 = require("./types.js");
|
|
9
9
|
Object.defineProperty(exports, "singleMeta", { enumerable: true, get: function () { return types_js_1.singleMeta; } });
|
|
10
10
|
Object.defineProperty(exports, "iterableMeta", { enumerable: true, get: function () { return types_js_1.iterableMeta; } });
|
|
@@ -265,6 +265,10 @@ Object.defineProperty(exports, "ponerSslPostgres", { enumerable: true, get: func
|
|
|
265
265
|
Object.defineProperty(exports, "pistaDeSslPostgres", { enumerable: true, get: function () { return postgres_ssl_js_1.pistaDeSslPostgres; } });
|
|
266
266
|
Object.defineProperty(exports, "conPistaDeSslPostgres", { enumerable: true, get: function () { return postgres_ssl_js_1.conPistaDeSslPostgres; } });
|
|
267
267
|
Object.defineProperty(exports, "CASOS_DE_SSL_POSTGRES", { enumerable: true, get: function () { return postgres_ssl_js_1.CASOS_DE_SSL_POSTGRES; } });
|
|
268
|
+
Object.defineProperty(exports, "FICHEROS_DE_POSTGRES", { enumerable: true, get: function () { return postgres_ssl_js_1.FICHEROS_DE_POSTGRES; } });
|
|
269
|
+
Object.defineProperty(exports, "parametrosDeCadenaPostgres", { enumerable: true, get: function () { return postgres_ssl_js_1.parametrosDeCadenaPostgres; } });
|
|
270
|
+
Object.defineProperty(exports, "ficherosEnCadenaPostgres", { enumerable: true, get: function () { return postgres_ssl_js_1.ficherosEnCadenaPostgres; } });
|
|
271
|
+
Object.defineProperty(exports, "CASOS_DE_FICHEROS_POSTGRES", { enumerable: true, get: function () { return postgres_ssl_js_1.CASOS_DE_FICHEROS_POSTGRES; } });
|
|
268
272
|
var llm_models_js_1 = require("./llm-models.js");
|
|
269
273
|
Object.defineProperty(exports, "LLM_PROVIDERS", { enumerable: true, get: function () { return llm_models_js_1.LLM_PROVIDERS; } });
|
|
270
274
|
Object.defineProperty(exports, "LLM_MODELS", { enumerable: true, get: function () { return llm_models_js_1.LLM_MODELS; } });
|
package/dist/postgres-ssl.d.ts
CHANGED
|
@@ -69,6 +69,25 @@ export type SslDeLaCadenaPostgres =
|
|
|
69
69
|
por: string;
|
|
70
70
|
problema: string;
|
|
71
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* Los parámetros que `pg-connection-string` LEE DEL DISCO con
|
|
74
|
+
* `fs.readFileSync(<valor>)` al construir el cliente (2.12 y 2.14, medido
|
|
75
|
+
* el 2026-09-24). El api y hw-nodes comprueban contra el fuente del driver
|
|
76
|
+
* que no lee ninguno más (`ninguna-conexion-postgres-lee-ficheros.spec.ts`).
|
|
77
|
+
*/
|
|
78
|
+
export declare const FICHEROS_DE_POSTGRES: readonly ["sslcert", "sslkey", "sslrootcert"];
|
|
79
|
+
/**
|
|
80
|
+
* Los parámetros de la cadena EXACTAMENTE como los lee `pg-connection-string`
|
|
81
|
+
* —mismo arreglo de espacios, mismo host de relleno para `@/`, claves
|
|
82
|
+
* decodificadas, la última repetida gana—. `null` si el driver no llega a
|
|
83
|
+
* leer parámetros: un socket (`/ruta` o `socket:`) o una cadena que ni él
|
|
84
|
+
* puede leer.
|
|
85
|
+
*
|
|
86
|
+
* ⚠️ SIN recortar: la usa una guarda de seguridad
|
|
87
|
+
* (`asegurarPostgresSinFicheros` en node-sdk). Con `" /x?sslrootcert=…"`, un
|
|
88
|
+
* recorte vería un socket y dejaría pasar lo que el driver sí lee.
|
|
89
|
+
*/
|
|
90
|
+
export declare function parametrosDeCadenaPostgres(cadena: string): Record<string, string> | null;
|
|
72
91
|
/**
|
|
73
92
|
* Qué hará el driver con el SSL de esta cadena.
|
|
74
93
|
*
|
|
@@ -108,6 +127,25 @@ export declare function ponerSslPostgres(cadena: string, modo: ModoSslPostgres):
|
|
|
108
127
|
* - el servidor exige SSL y se conectó sin él.
|
|
109
128
|
*/
|
|
110
129
|
export declare function pistaDeSslPostgres(mensaje: string): string | null;
|
|
130
|
+
/**
|
|
131
|
+
* Los casos con los que se comprueba `ficherosEnCadenaPostgres` contra el
|
|
132
|
+
* driver de verdad (el api y hw-nodes espían `fs.readFileSync` mientras
|
|
133
|
+
* `pg-connection-string` lee cada cadena): `lee` es si el DRIVER abre un
|
|
134
|
+
* fichero. Incluye los dos rodeos medidos el 2026-09-24 —un espacio delante
|
|
135
|
+
* de `/` (el driver no lo toma por socket y lee) y una clave codificada
|
|
136
|
+
* (`ssl%72ootcert`)— y lo que no lee (mayúsculas, sockets, valor vacío).
|
|
137
|
+
* Las rutas empiezan por `/nope` para que el espía las reconozca.
|
|
138
|
+
*/
|
|
139
|
+
export declare const CASOS_DE_FICHEROS_POSTGRES: ReadonlyArray<{
|
|
140
|
+
cadena: string;
|
|
141
|
+
lee: boolean;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* Los parámetros de la cadena que el driver leería como FICHEROS del disco de
|
|
145
|
+
* quien conecta —nuestros servidores—. Vacío si no hay ninguno. Devuelve los
|
|
146
|
+
* NOMBRES, nunca los valores: una ruta no se repite en un mensaje.
|
|
147
|
+
*/
|
|
148
|
+
export declare function ficherosEnCadenaPostgres(cadena: string): string[];
|
|
111
149
|
/** El mensaje con su pista, si la tiene. Lo que devuelven los servicios. Si el
|
|
112
150
|
* error ya pasó por aquí (dos capas que lo envuelven), no la repite. */
|
|
113
151
|
export declare function conPistaDeSslPostgres(mensaje: string): string;
|
package/dist/postgres-ssl.js
CHANGED
|
@@ -50,16 +50,34 @@
|
|
|
50
50
|
* `problema` y el panel no deja guardarlos.
|
|
51
51
|
*/
|
|
52
52
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
-
exports.CASOS_DE_SSL_POSTGRES = void 0;
|
|
53
|
+
exports.CASOS_DE_SSL_POSTGRES = exports.CASOS_DE_FICHEROS_POSTGRES = exports.FICHEROS_DE_POSTGRES = void 0;
|
|
54
|
+
exports.parametrosDeCadenaPostgres = parametrosDeCadenaPostgres;
|
|
54
55
|
exports.leerSslPostgres = leerSslPostgres;
|
|
55
56
|
exports.ponerSslPostgres = ponerSslPostgres;
|
|
56
57
|
exports.pistaDeSslPostgres = pistaDeSslPostgres;
|
|
58
|
+
exports.ficherosEnCadenaPostgres = ficherosEnCadenaPostgres;
|
|
57
59
|
exports.conPistaDeSslPostgres = conPistaDeSslPostgres;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Los parámetros que `pg-connection-string` LEE DEL DISCO con
|
|
62
|
+
* `fs.readFileSync(<valor>)` al construir el cliente (2.12 y 2.14, medido
|
|
63
|
+
* el 2026-09-24). El api y hw-nodes comprueban contra el fuente del driver
|
|
64
|
+
* que no lee ninguno más (`ninguna-conexion-postgres-lee-ficheros.spec.ts`).
|
|
65
|
+
*/
|
|
66
|
+
exports.FICHEROS_DE_POSTGRES = ['sslcert', 'sslkey', 'sslrootcert'];
|
|
67
|
+
const FICHEROS = exports.FICHEROS_DE_POSTGRES;
|
|
68
|
+
/**
|
|
69
|
+
* Los parámetros de la cadena EXACTAMENTE como los lee `pg-connection-string`
|
|
70
|
+
* —mismo arreglo de espacios, mismo host de relleno para `@/`, claves
|
|
71
|
+
* decodificadas, la última repetida gana—. `null` si el driver no llega a
|
|
72
|
+
* leer parámetros: un socket (`/ruta` o `socket:`) o una cadena que ni él
|
|
73
|
+
* puede leer.
|
|
74
|
+
*
|
|
75
|
+
* ⚠️ SIN recortar: la usa una guarda de seguridad
|
|
76
|
+
* (`asegurarPostgresSinFicheros` en node-sdk). Con `" /x?sslrootcert=…"`, un
|
|
77
|
+
* recorte vería un socket y dejaría pasar lo que el driver sí lee.
|
|
78
|
+
*/
|
|
79
|
+
function parametrosDeCadenaPostgres(cadena) {
|
|
80
|
+
let str = cadena ?? '';
|
|
63
81
|
if (!str || str.charAt(0) === '/')
|
|
64
82
|
return null;
|
|
65
83
|
if (/ |%[^a-f0-9]|%[a-f0-9][^a-f0-9]/i.test(str)) {
|
|
@@ -94,7 +112,8 @@ function parametrosDe(cadena) {
|
|
|
94
112
|
* ignora).
|
|
95
113
|
*/
|
|
96
114
|
function leerSslPostgres(cadena) {
|
|
97
|
-
|
|
115
|
+
/* Recortada: es lo que se guarda (los formularios guardan `trim()`). */
|
|
116
|
+
const p = parametrosDeCadenaPostgres((cadena ?? '').trim());
|
|
98
117
|
if (!p)
|
|
99
118
|
return { dice: false };
|
|
100
119
|
const ficheros = FICHEROS.filter((k) => p[k]);
|
|
@@ -223,6 +242,40 @@ function pistaDeSslPostgres(mensaje) {
|
|
|
223
242
|
}
|
|
224
243
|
return null;
|
|
225
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* Los casos con los que se comprueba `ficherosEnCadenaPostgres` contra el
|
|
247
|
+
* driver de verdad (el api y hw-nodes espían `fs.readFileSync` mientras
|
|
248
|
+
* `pg-connection-string` lee cada cadena): `lee` es si el DRIVER abre un
|
|
249
|
+
* fichero. Incluye los dos rodeos medidos el 2026-09-24 —un espacio delante
|
|
250
|
+
* de `/` (el driver no lo toma por socket y lee) y una clave codificada
|
|
251
|
+
* (`ssl%72ootcert`)— y lo que no lee (mayúsculas, sockets, valor vacío).
|
|
252
|
+
* Las rutas empiezan por `/nope` para que el espía las reconozca.
|
|
253
|
+
*/
|
|
254
|
+
exports.CASOS_DE_FICHEROS_POSTGRES = [
|
|
255
|
+
{ cadena: 'postgres://u:p@h/db?sslrootcert=/nope1', lee: true },
|
|
256
|
+
{ cadena: ' /x?sslrootcert=/nope2', lee: true },
|
|
257
|
+
{ cadena: 'postgres://u:p@h/db?ssl%72ootcert=/nope3', lee: true },
|
|
258
|
+
{ cadena: 'postgres://u:p@h/db?SSLROOTCERT=/nope4', lee: false },
|
|
259
|
+
{ cadena: 'socket://u:p@/var/run?sslrootcert=/nope5', lee: false },
|
|
260
|
+
{ cadena: '/var/run/postgresql db?sslrootcert=/nope6', lee: false },
|
|
261
|
+
{ cadena: 'postgres://u:p@/db?sslkey=/nope7', lee: true },
|
|
262
|
+
{ cadena: 'postgres://u:p w@h/db?sslcert=/nope8', lee: true },
|
|
263
|
+
{ cadena: 'postgres://u:p@h/db?sslrootcert=/nope9&sslrootcert=', lee: false },
|
|
264
|
+
{ cadena: 'postgres://u:p@h/db?sslrootcert=&sslrootcert=/nope10', lee: true },
|
|
265
|
+
{ cadena: 'postgres://u:p@h/db?sslmode=require&sslcert=/nope11&sslkey=/nope12', lee: true },
|
|
266
|
+
{ cadena: 'postgres://u:p@h/db?sslmode=no-verify&sslpassword=x', lee: false },
|
|
267
|
+
];
|
|
268
|
+
/**
|
|
269
|
+
* Los parámetros de la cadena que el driver leería como FICHEROS del disco de
|
|
270
|
+
* quien conecta —nuestros servidores—. Vacío si no hay ninguno. Devuelve los
|
|
271
|
+
* NOMBRES, nunca los valores: una ruta no se repite en un mensaje.
|
|
272
|
+
*/
|
|
273
|
+
function ficherosEnCadenaPostgres(cadena) {
|
|
274
|
+
const p = parametrosDeCadenaPostgres(cadena);
|
|
275
|
+
if (!p)
|
|
276
|
+
return [];
|
|
277
|
+
return exports.FICHEROS_DE_POSTGRES.filter((k) => p[k]);
|
|
278
|
+
}
|
|
226
279
|
/** El mensaje con su pista, si la tiene. Lo que devuelven los servicios. Si el
|
|
227
280
|
* error ya pasó por aquí (dos capas que lo envuelven), no la repite. */
|
|
228
281
|
function conPistaDeSslPostgres(mensaje) {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
* eso el gate es de producto y no de corrección, y por eso `'no-verdict'`
|
|
78
78
|
* existe ahí abajo — sin él, el flujo con el gate puesto se colgaría igual.
|
|
79
79
|
*/
|
|
80
|
-
export declare const NODOS_QUE_CONTESTAN_EN_SYNC: readonly ["schemaValidator"];
|
|
80
|
+
export declare const NODOS_QUE_CONTESTAN_EN_SYNC: readonly ["schemaValidator", "ai"];
|
|
81
81
|
/** Un tipo de nodo de los que saben contestar en `sync`. */
|
|
82
82
|
export type NodoQueContestaEnSync = (typeof NODOS_QUE_CONTESTAN_EN_SYNC)[number];
|
|
83
83
|
/**
|
|
@@ -162,6 +162,23 @@ export type VeredictoDelValidador = {
|
|
|
162
162
|
webhookName?: string;
|
|
163
163
|
nodeName?: string;
|
|
164
164
|
};
|
|
165
|
+
/**
|
|
166
|
+
* Lo que dictamina el AI Node para quien espera en `sync` (2026-09-24).
|
|
167
|
+
*
|
|
168
|
+
* Mucho menos que un validador: el AI Node no aprueba ni rechaza, CONTESTA.
|
|
169
|
+
* `answer` es «tengo respuesta» —el cuerpo es su salida, que la api tiene y
|
|
170
|
+
* este tipo no necesita llevar—; `failed` es que la llamada al modelo (o una
|
|
171
|
+
* herramienta que no se recuperó) falló, y `message` dice por qué.
|
|
172
|
+
*
|
|
173
|
+
* Viaja por el cable como `_sincrono`, igual que el del validador: la
|
|
174
|
+
* respuesta la ARMA la api, que es quien tiene la puerta fresca y el waiter.
|
|
175
|
+
*/
|
|
176
|
+
export type VeredictoDelAiNode = {
|
|
177
|
+
outcome: 'answer';
|
|
178
|
+
} | {
|
|
179
|
+
outcome: 'failed';
|
|
180
|
+
message: string;
|
|
181
|
+
};
|
|
165
182
|
/**
|
|
166
183
|
* Cuánto se le cuenta al cliente de POR QUÉ falló.
|
|
167
184
|
*
|
|
@@ -85,6 +85,10 @@ exports.armarRespuestaDelSync = armarRespuestaDelSync;
|
|
|
85
85
|
*/
|
|
86
86
|
exports.NODOS_QUE_CONTESTAN_EN_SYNC = [
|
|
87
87
|
'schemaValidator',
|
|
88
|
+
/* [2026-09-24, Ariel] «que también funcione con el AI Node: siempre regresa
|
|
89
|
+
una respuesta». Contesta con su salida y el flujo sigue detrás; ver
|
|
90
|
+
`VeredictoDelAiNode`. */
|
|
91
|
+
'ai',
|
|
88
92
|
];
|
|
89
93
|
/**
|
|
90
94
|
* ¿Este tipo de nodo sabe contestar en `sync`?
|
package/package.json
CHANGED