@hostwebhook/node-types 1.89.0 → 1.90.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.
@@ -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';
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;
@@ -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
- const FICHEROS = ['sslcert', 'sslkey', 'sslrootcert'];
52
- /** Los parámetros de la cadena, como los lee `pg-connection-string`. `null`
53
- * si no se puede leer (el driver también fallaría) o si es un socket. */
54
- function parametrosDe(cadena) {
55
- let str = (cadena ?? '').trim();
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
- const p = parametrosDe(cadena);
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) {
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';
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.ventanaDeContextoDeOpenRouter = exports.opcionesDeModelosDeOpenRouter = exports.URL_DE_MODELOS_DE_OPENROUTER = exports.getModelLabel = exports.getDefaultModel = exports.getModelsFor = exports.MODEL_CONTEXT_WINDOWS = exports.LLM_MODELS = exports.LLM_PROVIDERS = 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 = 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; } });
@@ -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;
@@ -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
- const FICHEROS = ['sslcert', 'sslkey', 'sslrootcert'];
59
- /** Los parámetros de la cadena, como los lee `pg-connection-string`. `null`
60
- * si no se puede leer (el driver también fallaría) o si es un socket. */
61
- function parametrosDe(cadena) {
62
- let str = (cadena ?? '').trim();
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
- const p = parametrosDe(cadena);
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hostwebhook/node-types",
3
- "version": "1.89.0",
3
+ "version": "1.90.0",
4
4
  "description": "Shared node type definitions, connection rules, and dispatch config for HostWebhook",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/esm/index.js",