@hostwebhook/node-types 1.68.0 → 1.70.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/calendar-toolkit.d.ts +1 -1
- package/dist/connections.d.ts +1 -1
- package/dist/credentials.d.ts +89 -2
- package/dist/credentials.js +31 -4
- package/dist/discord-operations.d.ts +1 -1
- package/dist/discord-operations.js +4 -4
- package/dist/discord-toolkit.d.ts +1 -1
- package/dist/discord-toolkit.js +3 -3
- package/dist/dispatch.d.ts +1 -1
- package/dist/docs-toolkit.d.ts +1 -1
- package/dist/drive-toolkit.d.ts +1 -1
- package/dist/esm/calendar-operations.d.ts +67 -0
- package/dist/esm/calendar-operations.js +176 -0
- package/dist/esm/calendar-toolkit.d.ts +50 -0
- package/dist/esm/calendar-toolkit.js +152 -0
- package/dist/esm/capacidad-de-credencial.d.ts +75 -0
- package/dist/esm/capacidad-de-credencial.js +68 -0
- package/dist/esm/connections.d.ts +17 -0
- package/dist/esm/connections.js +106 -0
- package/dist/esm/credentials.d.ts +144 -0
- package/dist/esm/credentials.js +199 -0
- package/dist/esm/discord-operations.d.ts +104 -0
- package/dist/esm/discord-operations.js +407 -0
- package/dist/esm/discord-toolkit.d.ts +64 -0
- package/dist/esm/discord-toolkit.js +260 -0
- package/dist/esm/dispatch.d.ts +16 -0
- package/dist/esm/dispatch.js +76 -0
- package/dist/esm/docs-operations.d.ts +99 -0
- package/dist/esm/docs-operations.js +127 -0
- package/dist/esm/docs-toolkit.d.ts +42 -0
- package/dist/esm/docs-toolkit.js +97 -0
- package/dist/esm/drive-operations.d.ts +103 -0
- package/dist/esm/drive-operations.js +319 -0
- package/dist/esm/drive-toolkit.d.ts +54 -0
- package/dist/esm/drive-toolkit.js +177 -0
- package/dist/esm/github-operations.d.ts +147 -0
- package/dist/esm/github-operations.js +551 -0
- package/dist/esm/gmail-operations.d.ts +190 -0
- package/dist/esm/gmail-operations.js +560 -0
- package/dist/esm/google-analytics-operations.d.ts +99 -0
- package/dist/esm/google-analytics-operations.js +222 -0
- package/dist/esm/google-contacts-operations.d.ts +93 -0
- package/dist/esm/google-contacts-operations.js +363 -0
- package/dist/esm/index.d.ts +66 -0
- package/dist/esm/index.js +50 -0
- package/dist/esm/jira-operations.d.ts +164 -0
- package/dist/esm/jira-operations.js +470 -0
- package/dist/esm/llm-models.d.ts +101 -0
- package/dist/esm/llm-models.js +230 -0
- package/dist/esm/mailchimp-operations.d.ts +56 -0
- package/dist/esm/mailchimp-operations.js +155 -0
- package/dist/esm/mongo-operations.d.ts +61 -0
- package/dist/esm/mongo-operations.js +120 -0
- package/dist/esm/notion-operations.d.ts +125 -0
- package/dist/esm/notion-operations.js +511 -0
- package/dist/esm/openrouter.d.ts +142 -0
- package/dist/esm/openrouter.js +99 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/postgres-operations.d.ts +60 -0
- package/dist/esm/postgres-operations.js +75 -0
- package/dist/esm/registry.d.ts +160 -0
- package/dist/esm/registry.js +555 -0
- package/dist/esm/sheets-operations.d.ts +78 -0
- package/dist/esm/sheets-operations.js +150 -0
- package/dist/esm/sheets-toolkit.d.ts +49 -0
- package/dist/esm/sheets-toolkit.js +127 -0
- package/dist/esm/shopify-operations.d.ts +95 -0
- package/dist/esm/shopify-operations.js +259 -0
- package/dist/esm/slack-operations.d.ts +81 -0
- package/dist/esm/slack-operations.js +244 -0
- package/dist/esm/slack-toolkit.d.ts +60 -0
- package/dist/esm/slack-toolkit.js +235 -0
- package/dist/esm/telegram-operations.d.ts +104 -0
- package/dist/esm/telegram-operations.js +351 -0
- package/dist/esm/telegram-toolkit.d.ts +52 -0
- package/dist/esm/telegram-toolkit.js +183 -0
- package/dist/esm/types.d.ts +149 -0
- package/dist/esm/types.js +8 -0
- package/dist/esm/ui.d.ts +13 -0
- package/dist/esm/ui.js +150 -0
- package/dist/esm/whatsapp-operations.d.ts +23 -0
- package/dist/esm/whatsapp-operations.js +36 -0
- package/dist/index.d.ts +66 -66
- package/dist/index.js +185 -185
- package/dist/openrouter.d.ts +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/sheets-toolkit.d.ts +1 -1
- package/dist/slack-operations.d.ts +1 -1
- package/dist/slack-operations.js +4 -4
- package/dist/slack-toolkit.d.ts +1 -1
- package/dist/slack-toolkit.js +3 -3
- package/dist/telegram-toolkit.d.ts +1 -1
- package/dist/ui.d.ts +1 -1
- package/package.json +21 -3
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry — order matters for fallthrough behavior in pickers (most
|
|
3
|
+
* common types first), but not for correctness.
|
|
4
|
+
*/
|
|
5
|
+
export const CREDENTIAL_TYPES = [
|
|
6
|
+
{ type: 'google_service_account' },
|
|
7
|
+
{ type: 'oauth2_google' },
|
|
8
|
+
{ type: 'oauth2_atlassian' },
|
|
9
|
+
{ type: 'mongodb', ssrfValidated: true, tunnelable: true },
|
|
10
|
+
{ type: 'postgres', ssrfValidated: true, tunnelable: true },
|
|
11
|
+
{ type: 'slack_webhook' },
|
|
12
|
+
{ type: 'slack_oauth' },
|
|
13
|
+
{ type: 'discord_webhook' },
|
|
14
|
+
{ type: 'llm_anthropic' },
|
|
15
|
+
{ type: 'llm_openai' },
|
|
16
|
+
{ type: 'llm_google' },
|
|
17
|
+
// La clave de API de Groq (`gsk_…`), que el usuario saca de
|
|
18
|
+
// https://console.groq.com/keys y pega. Un secreto suyo, sin OAuth de por
|
|
19
|
+
// medio, igual que los tres de arriba y que `llm_openrouter` de abajo.
|
|
20
|
+
//
|
|
21
|
+
// El sufijo es `groq` por la misma regla que explica el bloque de
|
|
22
|
+
// OpenRouter: de aquí salen `getModelsFor`/`getDefaultModel` quitando el
|
|
23
|
+
// prefijo `llm_`, así que lo que quede detrás tiene que ser LITERALMENTE el
|
|
24
|
+
// `LlmProvider`, y ése es `'groq'`.
|
|
25
|
+
//
|
|
26
|
+
// 🔥 Llega TARDE, y el agujero que tapa no era teórico: `groq` es un
|
|
27
|
+
// `LlmProvider` de pleno derecho desde hace tiempo —está en `LLM_PROVIDERS`,
|
|
28
|
+
// con sus cinco modelos en `LLM_MODELS.groq`— pero no tenía tipo de
|
|
29
|
+
// credencial. O sea que el proveedor se podía ELEGIR en el selector y no
|
|
30
|
+
// había dónde guardar su clave: una rama del catálogo inalcanzable, sin un
|
|
31
|
+
// solo error que lo dijera. El resto de la lista se anota antes de que la
|
|
32
|
+
// api exista precisamente para no llegar a esto.
|
|
33
|
+
{ type: 'llm_groq' },
|
|
34
|
+
// La clave de API de OpenRouter (`sk-or-v1-…`). Un secreto pegado por el
|
|
35
|
+
// usuario, igual que los tres de arriba: no hay OAuth de por medio.
|
|
36
|
+
//
|
|
37
|
+
// El sufijo es `openrouter` y no `open_router` porque de aquí sale
|
|
38
|
+
// `getModelsFor`/`getDefaultModel` quitando el prefijo `llm_` — el resto
|
|
39
|
+
// tiene que ser LITERALMENTE el `LlmProvider`, y ése es `'openrouter'`.
|
|
40
|
+
//
|
|
41
|
+
// ⚠️ Se anota aquí ANTES de que exista nada en la api, por lo que cuenta el
|
|
42
|
+
// bloque de Mailchimp más abajo: de esta lista salen el `enum` de Mongoose y
|
|
43
|
+
// el validador del DTO, y un tipo que falte ahí no rompe al compilar — mata
|
|
44
|
+
// el `create` de la credencial en runtime, con el usuario delante.
|
|
45
|
+
//
|
|
46
|
+
// ⚠️ El vecino que faltaba y que este bloque dejó escrito —`groq` sin su
|
|
47
|
+
// `llm_groq`— ya está arriba. Lo que queda de aquel aviso es la regla que lo
|
|
48
|
+
// hizo posible, y por eso la cubre ahora un test: cada `LlmProvider` de
|
|
49
|
+
// `LLM_PROVIDERS` tiene que tener su `llm_*` en esta lista.
|
|
50
|
+
{ type: 'llm_openrouter' },
|
|
51
|
+
{ type: 'llm_ollama' },
|
|
52
|
+
{ type: 'firecrawl' },
|
|
53
|
+
{ type: 'http_auth' },
|
|
54
|
+
{ type: 'aws_s3' },
|
|
55
|
+
{ type: 'memory_contextwindow' },
|
|
56
|
+
{ type: 'memory_mongodb', ssrfValidated: true, tunnelable: true },
|
|
57
|
+
{ type: 'mcp_server' },
|
|
58
|
+
{ type: 'voice_agent' },
|
|
59
|
+
{ type: 'telegram_bot' },
|
|
60
|
+
{ type: 'whatsapp_business' },
|
|
61
|
+
{ type: 'discord_bot' },
|
|
62
|
+
// Instalar la app de HostWebhook en un servidor de Discord, vía OAuth.
|
|
63
|
+
//
|
|
64
|
+
// Es un tipo aparte de `discord_bot` y no una bandera en metadata porque
|
|
65
|
+
// lo que guarda es DISTINTO: `discord_bot` lleva el token que pegó el
|
|
66
|
+
// usuario; éste no lleva ningún secreto — el bot token es de la aplicación
|
|
67
|
+
// y vive en el entorno. Lo que guarda es a qué servidor se autorizó.
|
|
68
|
+
//
|
|
69
|
+
// Discord no devuelve un bot token por OAuth (es estático de la app), así
|
|
70
|
+
// que los dos caminos coexisten: OAuth para el caso normal, y el token
|
|
71
|
+
// propio para quien quiera un bot con su marca.
|
|
72
|
+
{ type: 'discord_oauth' },
|
|
73
|
+
{ type: 'bluesky_app_password' },
|
|
74
|
+
{ type: 'twitter_oauth2' },
|
|
75
|
+
{ type: 'mastodon_oauth2' },
|
|
76
|
+
{ type: 'linkedin_oauth2' },
|
|
77
|
+
{ type: 'threads_oauth2' },
|
|
78
|
+
{ type: 'instagram_oauth2' },
|
|
79
|
+
{ type: 'facebook_oauth2' },
|
|
80
|
+
// El secreto de una integración INTERNA de Notion (empieza por `ntn_`),
|
|
81
|
+
// pegado por el usuario. Un solo workspace, no caduca.
|
|
82
|
+
//
|
|
83
|
+
// Va aparte de un futuro `notion_oauth` por la misma razón que
|
|
84
|
+
// `discord_bot` va aparte de `discord_oauth`: lo que guardan es distinto.
|
|
85
|
+
// Aquí hay un secreto del usuario; en OAuth habría un access_token y un
|
|
86
|
+
// refresh_token de una app de HostWebhook.
|
|
87
|
+
//
|
|
88
|
+
// Y el orden importa: la URL de autorización de una integración PÚBLICA de
|
|
89
|
+
// Notion sólo se rellena tras mandarla a revisión de Notion, así que el
|
|
90
|
+
// camino interno es el único que funciona el primer día.
|
|
91
|
+
{ type: 'notion_internal' },
|
|
92
|
+
// El OAuth de HostWebhook contra Notion: el usuario autoriza y elige qué
|
|
93
|
+
// páginas comparte, sin salir del producto.
|
|
94
|
+
//
|
|
95
|
+
// Va aparte de `notion_internal` por la misma razón que `discord_oauth` va
|
|
96
|
+
// aparte de `discord_bot`: lo que guardan es distinto. Ahí hay un secreto
|
|
97
|
+
// del usuario; aquí, un access_token y un refresh_token de NUESTRA app, más
|
|
98
|
+
// el `workspace_id` que Notion devuelve en el mismo intercambio.
|
|
99
|
+
//
|
|
100
|
+
// Y para que conste, porque estuvo escrito al revés en el ADR-0005 antes de
|
|
101
|
+
// corregirlo: montar esto NO espera a ninguna revisión de Notion. El
|
|
102
|
+
// formulario de Distribution entrega client id, secret y URL de
|
|
103
|
+
// autorización al pulsar Submit; la revisión de 5-10 días es para salir en
|
|
104
|
+
// su galería, o sea para que te encuentren, no para que funcione.
|
|
105
|
+
{ type: 'notion_oauth' },
|
|
106
|
+
// El OAuth de HostWebhook contra Mailchimp.
|
|
107
|
+
//
|
|
108
|
+
// Faltaba, y el síntoma no señalaba aquí. La api ya tenía el flujo entero
|
|
109
|
+
// —`mailchimp-oauth.service.ts`, su controlador, su DTO y sus presets— y el
|
|
110
|
+
// usuario autorizaba bien; lo que moría era el `create` de la credencial:
|
|
111
|
+
//
|
|
112
|
+
// ERROR [CredentialsController] Mailchimp OAuth callback failed:
|
|
113
|
+
// Credential validation failed: type: `mailchimp_oauth2` is not a valid
|
|
114
|
+
// enum value for path `type`.
|
|
115
|
+
//
|
|
116
|
+
// Porque de esta lista salen las DOS validaciones que ve ese documento: el
|
|
117
|
+
// `enum` de Mongoose en `credential.entity.ts` y el `@IsIn` del DTO. La api
|
|
118
|
+
// declaraba el string por su cuenta (`MAILCHIMP_CREDENTIAL_TYPE`) sin
|
|
119
|
+
// anotarlo `: CredentialType`, así que TypeScript lo dio por bueno y sólo
|
|
120
|
+
// reventó en producción, contra un cliente que no podía conectar su cuenta.
|
|
121
|
+
//
|
|
122
|
+
// Lleva `_oauth2` y no `_oauth` —al revés que `notion_oauth`— porque ése es
|
|
123
|
+
// el string que la api ya guarda y que el dashboard ya filtra en
|
|
124
|
+
// `components/triggers/registry.tsx` (`scopeFilter: "mailchimp_oauth2"`).
|
|
125
|
+
// Renombrarlo ahora rompería las credenciales que hayan llegado a existir:
|
|
126
|
+
// el `type` es la clave por la que los nodos las referencian.
|
|
127
|
+
{ type: 'mailchimp_oauth2' },
|
|
128
|
+
// El OAuth de HostWebhook contra Shopify.
|
|
129
|
+
//
|
|
130
|
+
// Se anota aquí ANTES de escribir el servicio, precisamente por lo que
|
|
131
|
+
// cuenta el bloque de Mailchimp de arriba: la api puede tener el flujo
|
|
132
|
+
// entero y bien, y aun así el `create` de la credencial muere con un enum
|
|
133
|
+
// de Mongoose que TypeScript no ve. Es el mismo agujero, y ya sabemos que
|
|
134
|
+
// no avisa al compilar.
|
|
135
|
+
//
|
|
136
|
+
// Lleva `_oauth2` por coherencia con `mailchimp_oauth2`, y porque el
|
|
137
|
+
// `scopeFilter` del dashboard filtra por esta cadena exacta.
|
|
138
|
+
//
|
|
139
|
+
// Una nota sobre lo que este tipo GUARDA, que aquí no se ve: el dominio de
|
|
140
|
+
// la tienda (`{shop}.myshopify.com`) viaja DENTRO del blob cifrado, igual
|
|
141
|
+
// que el `dc` de Mailchimp. Es parte del host de toda llamada y de la URL
|
|
142
|
+
// de autorización, así que una credencial de Shopify sin su dominio es
|
|
143
|
+
// inservible — no un detalle de presentación.
|
|
144
|
+
{ type: 'shopify_oauth2' },
|
|
145
|
+
// La instalación de la GitHub App de HostWebhook. El camino PRINCIPAL: el
|
|
146
|
+
// usuario pulsa "Connect GitHub", elige en qué repos entra, y vuelve.
|
|
147
|
+
//
|
|
148
|
+
// Lo que guarda es un `installationId` y NINGÚN secreto — la private key es
|
|
149
|
+
// de la app y vive en el entorno (`GITHUB_APP_PRIVATE_KEY_BASE64`). El token
|
|
150
|
+
// de instalación es corto y se re-emite firmando con esa llave, así que aquí
|
|
151
|
+
// no hay nada que caduque en la base de datos.
|
|
152
|
+
//
|
|
153
|
+
// Va aparte de `github_pat` por lo mismo que `discord_oauth` va aparte de
|
|
154
|
+
// `discord_bot`: lo que guardan es distinto.
|
|
155
|
+
//
|
|
156
|
+
// ⚠️ No confundir con `GITHUB_OAUTH_CLIENT_ID`/`_SECRET`, que ya existían y
|
|
157
|
+
// son de una OAuth App DISTINTA — la que usa `MCP_OAUTH_PRESETS.github` para
|
|
158
|
+
// llegar al servidor MCP de GitHub. Dos registros, dos pares de credenciales,
|
|
159
|
+
// y conviven a propósito: el MCP es la cola larga dentro del AI Node, esto
|
|
160
|
+
// son los rieles del nodo.
|
|
161
|
+
{ type: 'github_app' },
|
|
162
|
+
// Un fine-grained personal access token pegado por el usuario. La salida de
|
|
163
|
+
// emergencia, detrás de "Use a personal access token instead".
|
|
164
|
+
//
|
|
165
|
+
// Aquí SÍ hay un secreto del usuario, y además caduca: GitHub obliga a
|
|
166
|
+
// ponerles fecha. Un aviso antes de que muera es trabajo pendiente, no de
|
|
167
|
+
// esta versión.
|
|
168
|
+
//
|
|
169
|
+
// Ejecuta exactamente las mismas 14 operaciones que `github_app`. Lo único
|
|
170
|
+
// que cambia es de dónde sale la lista de repositorios del formulario: los
|
|
171
|
+
// del usuario, en vez de los que abarca una instalación.
|
|
172
|
+
{ type: 'github_pat' },
|
|
173
|
+
/* ⚠️ `as const satisfies …` y no `: readonly CredentialTypeRegistration[]`.
|
|
174
|
+
Los dos comprueban lo mismo —que cada entrada tenga la forma del registro—,
|
|
175
|
+
pero la ANOTACIÓN además ENSANCHA lo que se guarda: con ella cada `type` se
|
|
176
|
+
recuerda como `string`, y entonces `CredentialType` de más abajo es
|
|
177
|
+
literalmente `string`. O sea que la promesa de su comentario («un typo al
|
|
178
|
+
asignar falla al compilar») era falsa desde el primer día: `const t:
|
|
179
|
+
CredentialType = 'llm_openroutr'` compilaba sin rechistar.
|
|
180
|
+
|
|
181
|
+
`satisfies` comprueba y NO ensancha, así que los literales sobreviven y la
|
|
182
|
+
unión es de verdad. El control está en `tipos-de-credencial.test.ts`. */
|
|
183
|
+
];
|
|
184
|
+
/**
|
|
185
|
+
* Plain string array — what the Mongoose `enum` field and the
|
|
186
|
+
* class-validator `@IsIn(...)` decorator both consume. Keep it as a
|
|
187
|
+
* readonly array so misuse (push/pop) breaks at compile time.
|
|
188
|
+
*/
|
|
189
|
+
export const CREDENTIAL_TYPE_VALUES = CREDENTIAL_TYPES.map((c) => c.type);
|
|
190
|
+
/** Mutable copy for APIs that take `string[]` (Mongoose `enum`,
|
|
191
|
+
* class-validator). The array itself is freshly built each access
|
|
192
|
+
* so callers can't mutate the canonical list. */
|
|
193
|
+
export const credentialTypeValues = () => [...CREDENTIAL_TYPE_VALUES];
|
|
194
|
+
export function getCredentialType(type) {
|
|
195
|
+
return CREDENTIAL_TYPES.find((c) => c.type === type);
|
|
196
|
+
}
|
|
197
|
+
export function isCredentialType(type) {
|
|
198
|
+
return CREDENTIAL_TYPE_VALUES.includes(type);
|
|
199
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discord Bot API operation enum — single source of truth across the
|
|
3
|
+
* API, Dashboard, and any future consumers (Message Broker, MCP server).
|
|
4
|
+
* Used by:
|
|
5
|
+
* - discordAction entity / DTO (api): operation field + validation
|
|
6
|
+
* - dashboard DiscordAction operation picker + form generation
|
|
7
|
+
* - MCP toolkit-specs expansion (one aiEnabled discordAction → N tools)
|
|
8
|
+
*
|
|
9
|
+
* Targets Discord API v10 (the current stable as of 2026). Each op maps
|
|
10
|
+
* to a single REST call — most go through the Bot Token to the channel/
|
|
11
|
+
* guild/user resource. createThread + createChannel + sendDM each have
|
|
12
|
+
* their own multi-step flows handled inside the dispatcher.
|
|
13
|
+
*
|
|
14
|
+
* Phase 1 covers 17 ops that handle the bulk of bot automation
|
|
15
|
+
* (messaging, channel CRUD, threads, DMs, role membership, lookups).
|
|
16
|
+
* Phase 1.5 candidates (kick / ban / timeout / role CRUD / bulk delete /
|
|
17
|
+
* forum-post create) extend this list — bump the package and re-install
|
|
18
|
+
* in consumers, same pattern as Gmail / Calendar / Drive / Telegram.
|
|
19
|
+
*/
|
|
20
|
+
import { type CapacidadesPorCredencial } from './capacidad-de-credencial.js';
|
|
21
|
+
export declare const DISCORD_OPERATIONS: readonly ["sendMessage", "editMessage", "deleteMessage", "getMessage", "addReaction", "removeReaction", "pinMessage", "createChannel", "editChannel", "deleteChannel", "getChannel", "listChannels", "createThread", "sendDM", "addRole", "removeRole", "getMember"];
|
|
22
|
+
export type DiscordOperation = (typeof DISCORD_OPERATIONS)[number];
|
|
23
|
+
/** Type guard — useful when validating untrusted input (DTOs, tool calls). */
|
|
24
|
+
export declare function isDiscordOperation(value: unknown): value is DiscordOperation;
|
|
25
|
+
export interface DiscordParamSpec {
|
|
26
|
+
/** Field key — also the property name on operationConfig / payload. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** UI label. Carries the "(optional)" suffix when the form shows one. */
|
|
29
|
+
label: string;
|
|
30
|
+
/**
|
|
31
|
+
* Param type for form rendering + AI tool schema.
|
|
32
|
+
*
|
|
33
|
+
* `channel`, `string`, `text`, `number`, `boolean` and `emoji` mean the same
|
|
34
|
+
* as in SlackParamSpec. `guild`, `role`, `member` and `select` are Discord's
|
|
35
|
+
* own: the first three map to its resource pickers, and `select` is a fixed
|
|
36
|
+
* option list (channel kind, thread kind, archive window) that Slack has no
|
|
37
|
+
* equivalent for.
|
|
38
|
+
*/
|
|
39
|
+
type: 'channel' | 'guild' | 'role' | 'member' | 'string' | 'text' | 'number' | 'boolean' | 'emoji' | 'select';
|
|
40
|
+
/** Required at submit time. */
|
|
41
|
+
required?: boolean;
|
|
42
|
+
/** Human description — also used as the AI tool param description. */
|
|
43
|
+
description: string;
|
|
44
|
+
/** Hint shown inside the input. */
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
/** Value to show when the stored one is undefined. */
|
|
47
|
+
default?: string | number | boolean;
|
|
48
|
+
/** `select` only — the fixed option list, in display order. */
|
|
49
|
+
options?: Array<{
|
|
50
|
+
value: string | number;
|
|
51
|
+
label: string;
|
|
52
|
+
}>;
|
|
53
|
+
/** `number` only. */
|
|
54
|
+
min?: number;
|
|
55
|
+
max?: number;
|
|
56
|
+
/** `text` only — height of the textarea. */
|
|
57
|
+
rows?: number;
|
|
58
|
+
/** `channel` only — let categories be picked, for parent-category fields. */
|
|
59
|
+
allowCategories?: boolean;
|
|
60
|
+
/** `boolean` only — the bold line beside the switch. */
|
|
61
|
+
switchLabel?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface DiscordOperationSpec {
|
|
64
|
+
/** UI label for the operation picker. */
|
|
65
|
+
label: string;
|
|
66
|
+
/** Description shown in the picker + reused by the AI tool description
|
|
67
|
+
* when the user hasn't set a custom one on the entity. */
|
|
68
|
+
description: string;
|
|
69
|
+
/** Route the operation maps to in Discord's docs (discord.com/developers). */
|
|
70
|
+
apiMethod: string;
|
|
71
|
+
/** Parameter schema. Order matters for form rendering. */
|
|
72
|
+
params: DiscordParamSpec[];
|
|
73
|
+
}
|
|
74
|
+
export declare const DISCORD_OPERATION_SPECS: Record<DiscordOperation, DiscordOperationSpec>;
|
|
75
|
+
/**
|
|
76
|
+
* Lo que puede hacer una credencial de Discord que NO es de bot.
|
|
77
|
+
*
|
|
78
|
+
* Medido contra la documentación de Discord, no de memoria:
|
|
79
|
+
* https://docs.discord.com/developers/resources/webhook
|
|
80
|
+
*
|
|
81
|
+
* `Execute Webhook` publica, y `Get/Edit/Delete Webhook Message` leen, editan y
|
|
82
|
+
* borran mensajes — pero **sólo los que envió ese mismo webhook**, y sólo en el
|
|
83
|
+
* canal para el que se creó. Las otras 13 (reacciones, pins, CRUD de canales,
|
|
84
|
+
* crear hilos, DMs, roles, miembros) piden un Bot Token: la propia doc las
|
|
85
|
+
* marca con `MANAGE_WEBHOOKS` o con permisos de guild.
|
|
86
|
+
*
|
|
87
|
+
* Los tres campos que se caen de `sendMessage`, uno por uno:
|
|
88
|
+
*
|
|
89
|
+
* - `channelId`: la URL del webhook YA dice el canal. El endpoint ni siquiera
|
|
90
|
+
* acepta `channel_id`.
|
|
91
|
+
* - `replyToMessageId`: `Execute Webhook` no acepta `message_reference`. No
|
|
92
|
+
* es que venga fijado — es que responder no existe por esta vía.
|
|
93
|
+
* - `interactionReply`: contestar a un slash command es cosa de la
|
|
94
|
+
* aplicación, no de un webhook.
|
|
95
|
+
*
|
|
96
|
+
* `threadId` SÍ se queda: `?thread_id=` es parámetro de query del endpoint.
|
|
97
|
+
*/
|
|
98
|
+
export declare const DISCORD_CAPACIDADES_POR_CREDENCIAL: CapacidadesPorCredencial<DiscordOperation>;
|
|
99
|
+
/** Las operaciones que ofrecer para una credencial de Discord. */
|
|
100
|
+
export declare function operacionesDeDiscordPara(tipoDeCredencial: string | null | undefined): readonly DiscordOperation[];
|
|
101
|
+
/** Si esa credencial puede ejecutar esa operación de Discord. */
|
|
102
|
+
export declare function discordPuedeEjecutar(tipoDeCredencial: string | null | undefined, operacion: DiscordOperation): boolean;
|
|
103
|
+
/** Los campos que esa credencial de Discord no deja elegir. */
|
|
104
|
+
export declare function camposDeDiscordNoDisponibles(tipoDeCredencial: string | null | undefined): ReadonlySet<string>;
|