@hostwebhook/node-types 1.63.0 → 1.65.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/connections.js +4 -2
- package/dist/credentials.js +28 -0
- package/dist/dispatch.js +2 -0
- package/dist/github-operations.d.ts +147 -0
- package/dist/github-operations.js +555 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +14 -2
- package/dist/jira-operations.d.ts +164 -0
- package/dist/jira-operations.js +474 -0
- package/dist/registry.js +37 -0
- package/dist/types.d.ts +1 -1
- package/dist/ui.js +4 -0
- package/package.json +1 -1
package/dist/connections.js
CHANGED
|
@@ -18,7 +18,7 @@ exports.isNodeType = isNodeType;
|
|
|
18
18
|
const PROCESSING_OUTPUTS = [
|
|
19
19
|
'webhook', 'router', 'filter', 'transform', 'cache', 'code', 'rateLimiter',
|
|
20
20
|
'aggregator', 'conditional', 'delay', 'schemaValidator', 'split', 'markdown', 'fileTransform', 'limit',
|
|
21
|
-
'emailAction', 'gmailAction', 'httpAction', 'mongoAction', 'postgresAction', 'notificationAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'googleAnalyticsAction', 'notionAction', 'vectorStore', 'rssAction', 'socialMediaAction', 'mailchimpAction', 'shopifyAction', 'loop',
|
|
21
|
+
'emailAction', 'gmailAction', 'httpAction', 'mongoAction', 'postgresAction', 'notificationAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'googleAnalyticsAction', 'notionAction', 'vectorStore', 'rssAction', 'socialMediaAction', 'mailchimpAction', 'shopifyAction', 'githubAction', 'loop',
|
|
22
22
|
];
|
|
23
23
|
/** Standard processing input sources */
|
|
24
24
|
const STANDARD_INPUTS = [
|
|
@@ -26,7 +26,7 @@ const STANDARD_INPUTS = [
|
|
|
26
26
|
'cache', 'code', 'rateLimiter', 'aggregator', 'conditional', 'delay', 'schemaValidator', 'split', 'loop', 'markdown', 'fileTransform', 'limit',
|
|
27
27
|
];
|
|
28
28
|
/** Action nodes that can chain (non-terminal) */
|
|
29
|
-
const CHAINABLE_ACTIONS = ['httpAction', 'mongoAction', 'postgresAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'googleAnalyticsAction', 'notionAction', 'vectorStore', 'rssAction', 'socialMediaAction', 'mailchimpAction', 'shopifyAction'];
|
|
29
|
+
const CHAINABLE_ACTIONS = ['httpAction', 'mongoAction', 'postgresAction', 'sheetsAction', 'calendarAction', 'docsAction', 'driveAction', 'firecrawlAction', 'telegramAction', 'whatsappAction', 'discordAction', 'slackAction', 'googleContactsAction', 'googleAnalyticsAction', 'notionAction', 'vectorStore', 'rssAction', 'socialMediaAction', 'mailchimpAction', 'shopifyAction', 'githubAction'];
|
|
30
30
|
/** Full input list for action nodes (standard + chainable actions) */
|
|
31
31
|
const ACTION_INPUTS = [...STANDARD_INPUTS, ...CHAINABLE_ACTIONS];
|
|
32
32
|
exports.NODE_CONNECTIONS = {
|
|
@@ -79,6 +79,8 @@ exports.NODE_CONNECTIONS = {
|
|
|
79
79
|
slackAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
80
80
|
mailchimpAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
81
81
|
shopifyAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
82
|
+
githubAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
83
|
+
jiraAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
82
84
|
googleContactsAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
83
85
|
googleAnalyticsAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
|
84
86
|
notionAction: { acceptsInputFrom: ACTION_INPUTS, canOutputTo: PROCESSING_OUTPUTS },
|
package/dist/credentials.js
CHANGED
|
@@ -113,6 +113,34 @@ exports.CREDENTIAL_TYPES = [
|
|
|
113
113
|
// de autorización, así que una credencial de Shopify sin su dominio es
|
|
114
114
|
// inservible — no un detalle de presentación.
|
|
115
115
|
{ type: 'shopify_oauth2' },
|
|
116
|
+
// La instalación de la GitHub App de HostWebhook. El camino PRINCIPAL: el
|
|
117
|
+
// usuario pulsa "Connect GitHub", elige en qué repos entra, y vuelve.
|
|
118
|
+
//
|
|
119
|
+
// Lo que guarda es un `installationId` y NINGÚN secreto — la private key es
|
|
120
|
+
// de la app y vive en el entorno (`GITHUB_APP_PRIVATE_KEY_BASE64`). El token
|
|
121
|
+
// de instalación es corto y se re-emite firmando con esa llave, así que aquí
|
|
122
|
+
// no hay nada que caduque en la base de datos.
|
|
123
|
+
//
|
|
124
|
+
// Va aparte de `github_pat` por lo mismo que `discord_oauth` va aparte de
|
|
125
|
+
// `discord_bot`: lo que guardan es distinto.
|
|
126
|
+
//
|
|
127
|
+
// ⚠️ No confundir con `GITHUB_OAUTH_CLIENT_ID`/`_SECRET`, que ya existían y
|
|
128
|
+
// son de una OAuth App DISTINTA — la que usa `MCP_OAUTH_PRESETS.github` para
|
|
129
|
+
// llegar al servidor MCP de GitHub. Dos registros, dos pares de credenciales,
|
|
130
|
+
// y conviven a propósito: el MCP es la cola larga dentro del AI Node, esto
|
|
131
|
+
// son los rieles del nodo.
|
|
132
|
+
{ type: 'github_app' },
|
|
133
|
+
// Un fine-grained personal access token pegado por el usuario. La salida de
|
|
134
|
+
// emergencia, detrás de "Use a personal access token instead".
|
|
135
|
+
//
|
|
136
|
+
// Aquí SÍ hay un secreto del usuario, y además caduca: GitHub obliga a
|
|
137
|
+
// ponerles fecha. Un aviso antes de que muera es trabajo pendiente, no de
|
|
138
|
+
// esta versión.
|
|
139
|
+
//
|
|
140
|
+
// Ejecuta exactamente las mismas 14 operaciones que `github_app`. Lo único
|
|
141
|
+
// que cambia es de dónde sale la lista de repositorios del formulario: los
|
|
142
|
+
// del usuario, en vez de los que abarca una instalación.
|
|
143
|
+
{ type: 'github_pat' },
|
|
116
144
|
];
|
|
117
145
|
/**
|
|
118
146
|
* Plain string array — what the Mongoose `enum` field and the
|
package/dist/dispatch.js
CHANGED
|
@@ -54,6 +54,8 @@ exports.NODE_DISPATCH = {
|
|
|
54
54
|
discordAction: { service: 'discordActionsService', collection: 'discordactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
55
55
|
mailchimpAction: { service: 'mailchimpActionsService', collection: 'mailchimpactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
56
56
|
shopifyAction: { service: 'shopifyActionsService', collection: 'shopifyactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
57
|
+
githubAction: { service: 'githubActionsService', collection: 'githubactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
58
|
+
jiraAction: { service: 'jiraActionsService', collection: 'jiraactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
57
59
|
slackAction: { service: 'slackActionsService', collection: 'slackactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
58
60
|
googleContactsAction: { service: 'googleContactsActionsService', collection: 'googlecontactsactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
59
61
|
googleAnalyticsAction: { service: 'googleAnalyticsActionsService', collection: 'googleanalyticsactions', hasFilters: true, outputFields: ['outputNodes'], customDispatch: true, pipelineDispatch: 'excluded' },
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub operation enum — única fuente de verdad para la api, el dashboard y
|
|
3
|
+
* el Message Broker. Lo usan:
|
|
4
|
+
* - la entidad y el DTO de `githubAction` (api): campo `operation` + validación
|
|
5
|
+
* - la página de detalle del dashboard, que pinta el formulario desde los specs
|
|
6
|
+
* - specs de toolkit MCP, si algún día el nodo gana modo herramienta
|
|
7
|
+
*
|
|
8
|
+
* Mismo patrón que `notion-operations.ts` y `shopify-operations.ts`.
|
|
9
|
+
*
|
|
10
|
+
* ── Qué credencial hay debajo ──
|
|
11
|
+
*
|
|
12
|
+
* Dos tipos, y la diferencia se nota en UNA cosa que no es una operación:
|
|
13
|
+
* de dónde sale la lista de repositorios.
|
|
14
|
+
*
|
|
15
|
+
* - `github_app` — la instalación de la GitHub App. El camino principal.
|
|
16
|
+
* Los repos son los que abarca esa instalación.
|
|
17
|
+
* - `github_pat` — un fine-grained token pegado por el usuario. La salida
|
|
18
|
+
* de emergencia, detrás de "Use a personal access token instead".
|
|
19
|
+
* Los repos son los del usuario.
|
|
20
|
+
*
|
|
21
|
+
* Las 14 operaciones de abajo se ejecutan IGUAL con las dos. Lo que cambia es
|
|
22
|
+
* el listado que rellena el formulario, y eso vive en el controlador, no aquí.
|
|
23
|
+
*
|
|
24
|
+
* ── Por qué 14 y no la API entera ──
|
|
25
|
+
*
|
|
26
|
+
* Paridad con lo que la gente encadena en un flujo, no con los docs de GitHub.
|
|
27
|
+
* Abrir un issue, comentarlo, mover un PR, leer o escribir un archivo, disparar
|
|
28
|
+
* un workflow. Lo demás —releases, gists, administración de la organización,
|
|
29
|
+
* búsqueda de código— lo cubre el MCP oficial de GitHub dentro del AI Node, que
|
|
30
|
+
* ya existe y no hay que construir.
|
|
31
|
+
*
|
|
32
|
+
* Y la regla que dejó escrita Notion se respeta al pie: **ninguna operación
|
|
33
|
+
* declarada sin implementar**. El enum ES el contrato de la pantalla — una op
|
|
34
|
+
* declarada se pinta en el desplegable y luego revienta al ejecutarse. Entran
|
|
35
|
+
* cuando entre su código.
|
|
36
|
+
*
|
|
37
|
+
* ── Lo que NO es un parámetro, a propósito ──
|
|
38
|
+
*
|
|
39
|
+
* El `sha`. Actualizar un archivo y crear una rama lo necesitan, y GitHub no
|
|
40
|
+
* perdona uno equivocado. Pedírselo al usuario es pedirle que se equivoque: lo
|
|
41
|
+
* resuelve el nodo, desde la ruta del archivo o el nombre de la rama base. Es
|
|
42
|
+
* el mismo criterio por el que un id de Notion se elige de una lista en vez de
|
|
43
|
+
* teclearse.
|
|
44
|
+
*
|
|
45
|
+
* Tampoco son operaciones listar repos, ramas, etiquetas, asignables o
|
|
46
|
+
* workflows. Una operación existe para producir payload en una corrida; eso
|
|
47
|
+
* otro es para rellenar el formulario, y son endpoints del controlador — como
|
|
48
|
+
* Drive alimenta su `DriveFilePicker`.
|
|
49
|
+
*
|
|
50
|
+
* ── Límites de GitHub que condicionan el diseño ──
|
|
51
|
+
*
|
|
52
|
+
* - 5.000 peticiones/hora autenticadas. Suficiente salvo en bucles largos.
|
|
53
|
+
* - `searchIssues` NO comparte ese cubo: la API de búsqueda va por su cuenta,
|
|
54
|
+
* del orden de 30 por minuto. Por eso está marcada aparte más abajo.
|
|
55
|
+
* - Las escrituras tienen además un límite secundario por ráfaga, y GitHub
|
|
56
|
+
* responde con `Retry-After`. Se respeta con `common/rate-limiter.ts` y
|
|
57
|
+
* `common/retry-transient.ts`, que ya existen. No escribir otro backoff.
|
|
58
|
+
*/
|
|
59
|
+
export declare const GITHUB_OPERATIONS: readonly ["createIssue", "updateIssue", "getIssue", "commentIssue", "listIssues", "createPullRequest", "getPullRequest", "mergePullRequest", "listPullRequests", "getFile", "createOrUpdateFile", "createBranch", "dispatchWorkflow", "searchIssues"];
|
|
60
|
+
export type GithubOperation = (typeof GITHUB_OPERATIONS)[number];
|
|
61
|
+
/** Type guard — para validar entrada no fiable (DTOs, tool calls). */
|
|
62
|
+
export declare function isGithubOperation(value: unknown): value is GithubOperation;
|
|
63
|
+
/**
|
|
64
|
+
* Las operaciones que devuelven un ARRAY y por tanto obligan a marcar
|
|
65
|
+
* `_meta.iterable` en `getOutputPayload`.
|
|
66
|
+
*
|
|
67
|
+
* Está aquí y no sólo en la api porque el error de olvidarlo no falla al
|
|
68
|
+
* compilar: falla en producción, callado, con el nodo de abajo recibiendo el
|
|
69
|
+
* sobre entero en vez de un elemento, y el PayloadViewer pintando rutas con
|
|
70
|
+
* corchetes que nadie puede usar. Que la lista viva en el paquete permite que
|
|
71
|
+
* el test de la api la recorra en vez de repetirla a mano.
|
|
72
|
+
*/
|
|
73
|
+
export declare const GITHUB_ITERABLE_OPERATIONS: readonly GithubOperation[];
|
|
74
|
+
export type GithubParamType =
|
|
75
|
+
/** Selector vivo de repositorios que alcanza la credencial. Guarda
|
|
76
|
+
* `owner/repo`, que es como lo consumen todas las rutas. */
|
|
77
|
+
'githubRepo'
|
|
78
|
+
/** Selector vivo de ramas del repo elegido. Admite escribir una que aún no
|
|
79
|
+
* existe: `createBranch` la crea, y una plantilla puede resolverla. */
|
|
80
|
+
| 'githubBranch'
|
|
81
|
+
/** Etiquetas del repo elegido, selección múltiple. */
|
|
82
|
+
| 'githubLabels'
|
|
83
|
+
/** Usuarios asignables en el repo elegido, selección múltiple. */
|
|
84
|
+
| 'githubAssignees'
|
|
85
|
+
/** Workflows del repo que declaran `workflow_dispatch`. Los demás no se
|
|
86
|
+
* pueden disparar, así que no se ofrecen. */
|
|
87
|
+
| 'githubWorkflow'
|
|
88
|
+
/** Texto con autocompletado de `{{payload.*}}`. */
|
|
89
|
+
| 'template'
|
|
90
|
+
/** Área de texto larga, también con autocompletado. */
|
|
91
|
+
| 'textarea'
|
|
92
|
+
/** `<select>` normal; las etiquetas no son los valores, `options` obliga. */
|
|
93
|
+
| 'select' | 'number'
|
|
94
|
+
/**
|
|
95
|
+
* `<select>` de `''` / `'true'` / `'false'` que se guarda como BOOLEANO, o
|
|
96
|
+
* no se guarda si es `''`. "— sin tocar —" tiene que significar que la clave
|
|
97
|
+
* no viaja, no que viaja en `false`.
|
|
98
|
+
*/
|
|
99
|
+
| 'booleanSelect'
|
|
100
|
+
/** Área de texto para JSON crudo. */
|
|
101
|
+
| 'json';
|
|
102
|
+
export interface GithubParamSpec {
|
|
103
|
+
/** La clave de `operationConfig`. Es lo que lee la api, no un nombre de UI. */
|
|
104
|
+
name: string;
|
|
105
|
+
label: string;
|
|
106
|
+
type: GithubParamType;
|
|
107
|
+
required?: boolean;
|
|
108
|
+
/** Ayuda bajo el campo. Texto plano: el paquete no lleva React. */
|
|
109
|
+
description?: string;
|
|
110
|
+
placeholder?: string;
|
|
111
|
+
/** Prerrellenado cuando la config guardada no trae valor para esta clave. */
|
|
112
|
+
default?: string | number;
|
|
113
|
+
/** Obligatorio en `select` y `booleanSelect` — etiqueta y valor difieren. */
|
|
114
|
+
options?: ReadonlyArray<{
|
|
115
|
+
value: string;
|
|
116
|
+
label: string;
|
|
117
|
+
}>;
|
|
118
|
+
min?: number;
|
|
119
|
+
max?: number;
|
|
120
|
+
/** Se pinta en la pestaña "Advanced" en vez de en "Config". */
|
|
121
|
+
advanced?: boolean;
|
|
122
|
+
/** Sólo visible cuando un campo hermano vale uno de estos. */
|
|
123
|
+
showWhen?: {
|
|
124
|
+
field: string;
|
|
125
|
+
in: ReadonlyArray<string>;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export interface GithubOperationSpec {
|
|
129
|
+
/** Etiqueta de la fila en el desplegable de operación. */
|
|
130
|
+
label: string;
|
|
131
|
+
/** Sub-línea bajo la etiqueta. */
|
|
132
|
+
description: string;
|
|
133
|
+
/** Ruta a la que mapea, tal cual, para poder cotejarla con los docs. */
|
|
134
|
+
apiRoute: string;
|
|
135
|
+
/** Esquema de parámetros. El orden ES el orden en pantalla. */
|
|
136
|
+
params: GithubParamSpec[];
|
|
137
|
+
}
|
|
138
|
+
export declare const GITHUB_OPERATION_SPECS: Record<GithubOperation, GithubOperationSpec>;
|
|
139
|
+
/**
|
|
140
|
+
* Lo que se ofrece en el desplegable de operación.
|
|
141
|
+
*
|
|
142
|
+
* Hoy son todas. Existe como constante aparte —y no como alias de
|
|
143
|
+
* `GITHUB_OPERATIONS`— porque es exactamente el punto donde otros nodos han
|
|
144
|
+
* necesitado esconder una op sin sacarla del enum: retirarla del enum rompe
|
|
145
|
+
* las que ya estaban guardadas en la base de datos.
|
|
146
|
+
*/
|
|
147
|
+
export declare const GITHUB_DROPDOWN_OPERATIONS: readonly GithubOperation[];
|