@rolealpha/n8n-nodes-rolealpha 0.0.0-stage → 0.5.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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -2
  3. package/dist/credentials/ApprovalSealApi.credentials.d.ts +7 -0
  4. package/dist/credentials/ApprovalSealApi.credentials.js +29 -0
  5. package/dist/credentials/ApprovalSealApi.credentials.js.map +1 -0
  6. package/dist/credentials/RoleAlphaAgentKeysApi.credentials.d.ts +11 -0
  7. package/dist/credentials/RoleAlphaAgentKeysApi.credentials.js +35 -0
  8. package/dist/credentials/RoleAlphaAgentKeysApi.credentials.js.map +1 -0
  9. package/dist/credentials/RoleAlphaWebhookApi.credentials.d.ts +8 -0
  10. package/dist/credentials/RoleAlphaWebhookApi.credentials.js +23 -0
  11. package/dist/credentials/RoleAlphaWebhookApi.credentials.js.map +1 -0
  12. package/dist/lib/agentRun.d.ts +73 -0
  13. package/dist/lib/agentRun.js +170 -0
  14. package/dist/lib/agentRun.js.map +1 -0
  15. package/dist/lib/agents.d.ts +19 -0
  16. package/dist/lib/agents.js +91 -0
  17. package/dist/lib/agents.js.map +1 -0
  18. package/dist/lib/graph.d.ts +155 -0
  19. package/dist/lib/graph.js +380 -0
  20. package/dist/lib/graph.js.map +1 -0
  21. package/dist/lib/keys.d.ts +12 -0
  22. package/dist/lib/keys.js +53 -0
  23. package/dist/lib/keys.js.map +1 -0
  24. package/dist/lib/mcp.d.ts +52 -0
  25. package/dist/lib/mcp.js +201 -0
  26. package/dist/lib/mcp.js.map +1 -0
  27. package/dist/lib/prompt.d.ts +52 -0
  28. package/dist/lib/prompt.js +180 -0
  29. package/dist/lib/prompt.js.map +1 -0
  30. package/dist/lib/schedule.d.ts +37 -0
  31. package/dist/lib/schedule.js +106 -0
  32. package/dist/lib/schedule.js.map +1 -0
  33. package/dist/lib/seal.d.ts +22 -0
  34. package/dist/lib/seal.js +79 -0
  35. package/dist/lib/seal.js.map +1 -0
  36. package/dist/lib/settings.d.ts +55 -0
  37. package/dist/lib/settings.js +105 -0
  38. package/dist/lib/settings.js.map +1 -0
  39. package/dist/lib/share.d.ts +156 -0
  40. package/dist/lib/share.js +208 -0
  41. package/dist/lib/share.js.map +1 -0
  42. package/dist/lib/waits.d.ts +142 -0
  43. package/dist/lib/waits.js +339 -0
  44. package/dist/lib/waits.js.map +1 -0
  45. package/dist/lib/webhook.d.ts +12 -0
  46. package/dist/lib/webhook.js +50 -0
  47. package/dist/lib/webhook.js.map +1 -0
  48. package/dist/nodes/ApprovalSeal/ApprovalSeal.node.d.ts +9 -0
  49. package/dist/nodes/ApprovalSeal/ApprovalSeal.node.js +141 -0
  50. package/dist/nodes/ApprovalSeal/ApprovalSeal.node.js.map +1 -0
  51. package/dist/nodes/ApprovalSeal/approvalSeal.svg +1 -0
  52. package/dist/nodes/RoleAlpha/RoleAlpha.node.d.ts +5 -0
  53. package/dist/nodes/RoleAlpha/RoleAlpha.node.js +1099 -0
  54. package/dist/nodes/RoleAlpha/RoleAlpha.node.js.map +1 -0
  55. package/dist/nodes/RoleAlpha/roleAlpha.svg +1 -0
  56. package/dist/nodes/RoleAlphaTrigger/RoleAlphaTrigger.node.d.ts +9 -0
  57. package/dist/nodes/RoleAlphaTrigger/RoleAlphaTrigger.node.js +61 -0
  58. package/dist/nodes/RoleAlphaTrigger/RoleAlphaTrigger.node.js.map +1 -0
  59. package/dist/nodes/RoleAlphaTrigger/roleAlpha.svg +1 -0
  60. package/package.json +56 -4
@@ -0,0 +1,380 @@
1
+ "use strict";
2
+ /**
3
+ * Traversal of the roleALPHA graph. Nothing here knows a concrete role, person
4
+ * or step: everything is read at run time, starting from an agent or a step.
5
+ *
6
+ * Edge directions (roleALPHA conventions):
7
+ * Role --RESPONSIBLE_FOR--> Step Role --DECIDES_ON--> Step
8
+ * Role --ACCOUNTABLE_FOR--> Step Policy --APPLIES_TO--> Step
9
+ * Successor --DEPENDS_ON--> Predecessor Parent --HAS_SUBPROCESS--> Child
10
+ * Person --EXECUTES--> Role Agent --AGENT_FULFILLS_ROLE--> Role
11
+ * Circle --IS_IMPLEMENTED_BY--> Role
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.McpGraphSource = void 0;
15
+ exports.normalizeEmail = normalizeEmail;
16
+ exports.toDetails = toDetails;
17
+ exports.toRelationships = toRelationships;
18
+ exports.toSearchHits = toSearchHits;
19
+ exports.toStepSummary = toStepSummary;
20
+ exports.findStepByCustomId = findStepByCustomId;
21
+ exports.getRoleHolders = getRoleHolders;
22
+ exports.getCircle = getCircle;
23
+ exports.getCircleLeads = getCircleLeads;
24
+ exports.getStep = getStep;
25
+ exports.getAgentRoles = getAgentRoles;
26
+ exports.getDuties = getDuties;
27
+ exports.responsibleRolesFor = responsibleRolesFor;
28
+ exports.getDecider = getDecider;
29
+ exports.checkApprover = checkApprover;
30
+ // ---------------------------------------------------------------- helpers
31
+ function obj(value) {
32
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
33
+ }
34
+ function str(value) {
35
+ if (typeof value === 'string')
36
+ return value.trim() === '' ? null : value;
37
+ if (typeof value === 'number')
38
+ return String(value);
39
+ return null;
40
+ }
41
+ function list(value, keys) {
42
+ if (Array.isArray(value))
43
+ return value;
44
+ const o = obj(value);
45
+ for (const key of keys)
46
+ if (Array.isArray(o[key]))
47
+ return o[key];
48
+ return [];
49
+ }
50
+ function normalizeEmail(value) {
51
+ const raw = typeof value === 'string' ? value : '';
52
+ const bracket = /<([^<>\s]+@[^<>\s]+)>\s*$/.exec(raw);
53
+ return (bracket ? bracket[1] : raw).trim().toLowerCase();
54
+ }
55
+ function toDetails(raw, uuid) {
56
+ let o = obj(raw);
57
+ if (o.entity && typeof o.entity === 'object')
58
+ o = obj(o.entity);
59
+ const data = obj(o.descJsonb ?? o.desc_jsonb ?? o.data);
60
+ return {
61
+ uuid: str(o.uuid) ?? uuid,
62
+ name: str(o.name) ?? '',
63
+ customId: str(o.customerId ?? o.customer_id ?? o.customId),
64
+ entityType: str(o.entityTypeName ?? o.entityType ?? o.type) ?? '',
65
+ data,
66
+ };
67
+ }
68
+ function toRelationships(raw) {
69
+ return list(raw, ['relationships', 'items', 'results'])
70
+ .map(obj)
71
+ .map((r) => ({
72
+ id: (r.relationshipId ?? r.id),
73
+ type: str(r.relationType ?? r.type) ?? '',
74
+ direction: (str(r.direction) === 'incoming' ? 'incoming' : 'outgoing'),
75
+ uuid: str(r.connectedEntityUuid ?? r.entityUuid ?? r.uuid) ?? '',
76
+ name: str(r.connectedEntityName ?? r.name) ?? '',
77
+ entityType: str(r.connectedEntityType ?? r.entityType) ?? '',
78
+ }))
79
+ .filter((r) => r.uuid !== '' && r.type !== '');
80
+ }
81
+ function toSearchHits(raw) {
82
+ return list(raw, ['results', 'entities', 'items', 'data'])
83
+ .map(obj)
84
+ .map((h) => ({
85
+ uuid: str(h.uuid ?? h.entityUuid ?? h.id) ?? '',
86
+ name: str(h.name) ?? '',
87
+ customId: str(h.customerId ?? h.customer_id ?? h.customId),
88
+ entityType: str(h.entityType ?? h.entityTypeName ?? h.type) ?? '',
89
+ }))
90
+ .filter((h) => h.uuid !== '');
91
+ }
92
+ function edges(rels, type, direction) {
93
+ const seen = new Set();
94
+ const out = [];
95
+ for (const r of rels) {
96
+ if (r.type !== type || r.direction !== direction || seen.has(r.uuid))
97
+ continue;
98
+ seen.add(r.uuid);
99
+ out.push({ uuid: r.uuid, name: r.name, entityType: r.entityType });
100
+ }
101
+ return out;
102
+ }
103
+ function isPersonType(entityType) {
104
+ return /person/i.test(entityType);
105
+ }
106
+ function isAgentType(entityType) {
107
+ return /agent/i.test(entityType);
108
+ }
109
+ function toStepSummary(d) {
110
+ return {
111
+ uuid: d.uuid,
112
+ name: d.name,
113
+ entityType: d.entityType,
114
+ customId: d.customId,
115
+ subtype: str(d.data.subtype),
116
+ status: str(d.data.status),
117
+ frequency: str(d.data.frequency),
118
+ dueDate: str(d.data.termin ?? d.data.dueDate),
119
+ description: str(d.data.description),
120
+ criteria: str(d.data.kriterien ?? d.data.criteria),
121
+ result: str(d.data.ergebnis ?? d.data.result),
122
+ };
123
+ }
124
+ // ---------------------------------------------------------------- MCP-backed source
125
+ /** Graph source on top of the roleALPHA MCP. Caches per instance (one per node execution). */
126
+ class McpGraphSource {
127
+ client;
128
+ organisation;
129
+ detailCache = new Map();
130
+ relCache = new Map();
131
+ constructor(client, organisation) {
132
+ this.client = client;
133
+ this.organisation = organisation;
134
+ }
135
+ details(uuid) {
136
+ let hit = this.detailCache.get(uuid);
137
+ if (!hit) {
138
+ hit = this.client
139
+ .callTool('get_entity_details', { entityUuid: uuid, organisation: this.organisation })
140
+ .then((raw) => toDetails(raw, uuid));
141
+ this.detailCache.set(uuid, hit);
142
+ }
143
+ return hit;
144
+ }
145
+ relationships(uuid) {
146
+ let hit = this.relCache.get(uuid);
147
+ if (!hit) {
148
+ hit = this.client
149
+ .callTool('get_entity_relationships', { entityUuid: uuid, organisation: this.organisation })
150
+ .then(toRelationships);
151
+ this.relCache.set(uuid, hit);
152
+ }
153
+ return hit;
154
+ }
155
+ async search(query, entityType) {
156
+ const args = { query, organisation: this.organisation };
157
+ if (entityType)
158
+ args.entityType = entityType;
159
+ return toSearchHits(await this.client.callTool('search_entities', args));
160
+ }
161
+ }
162
+ exports.McpGraphSource = McpGraphSource;
163
+ // ---------------------------------------------------------------- traversal
164
+ async function findStepByCustomId(src, customId) {
165
+ const wanted = customId.trim();
166
+ if (wanted === '')
167
+ return null;
168
+ const hits = await src.search(wanted);
169
+ // The search also matches entities that merely mention the ID, so confirm the exact custom ID.
170
+ const candidates = hits.filter((h) => h.customId === null || h.customId === wanted);
171
+ for (const hit of candidates) {
172
+ const d = await src.details(hit.uuid);
173
+ if (d.customId === wanted && (d.entityType === '' || /value creation|process/i.test(d.entityType))) {
174
+ return toStepSummary(d);
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ async function getRoleHolders(src, roleUuid) {
180
+ const rels = await src.relationships(roleUuid);
181
+ const persons = [];
182
+ for (const p of edges(rels, 'EXECUTES', 'incoming').filter((r) => r.entityType === '' || isPersonType(r.entityType))) {
183
+ const d = await src.details(p.uuid);
184
+ const email = normalizeEmail(d.data.email);
185
+ const name = [str(d.data.firstName), str(d.data.lastName)].filter(Boolean).join(' ') || d.name || p.name;
186
+ persons.push({ uuid: p.uuid, name, email: email === '' ? null : email, entityType: p.entityType });
187
+ }
188
+ const agents = [];
189
+ for (const a of edges(rels, 'AGENT_FULFILLS_ROLE', 'incoming').filter((r) => r.entityType === '' || isAgentType(r.entityType))) {
190
+ const d = await src.details(a.uuid);
191
+ agents.push({ uuid: a.uuid, name: d.name || a.name, status: str(d.data.status), entityType: a.entityType });
192
+ }
193
+ return { persons, agents };
194
+ }
195
+ async function getCircle(src, roleUuid) {
196
+ const rels = await src.relationships(roleUuid);
197
+ for (const parent of edges(rels, 'IS_IMPLEMENTED_BY', 'incoming')) {
198
+ const d = await src.details(parent.uuid);
199
+ if (str(d.data.subtype) === 'circle')
200
+ return { uuid: d.uuid, name: d.name, entityType: d.entityType };
201
+ }
202
+ return null;
203
+ }
204
+ const LEAD_SUBTYPES = new Set(['lead', 'lead_link', 'lead-link', 'lead link', 'circle_lead']);
205
+ /**
206
+ * The role that leads the circle of each given role, read from roleALPHA at run time:
207
+ * a role inside the circle flagged as lead (leadLink / lead / subtype), else one whose purpose
208
+ * names it the Lead Link, else one whose custom ID ends in ":lead", else a role that decides on
209
+ * or is accountable for the circle itself. Persons first, agents after, as holders.
210
+ */
211
+ async function getCircleLeads(src, roleUuids) {
212
+ const byCircle = new Map();
213
+ for (const roleUuid of Array.from(new Set(roleUuids))) {
214
+ const circle = await getCircle(src, roleUuid);
215
+ if (!circle)
216
+ continue;
217
+ const known = byCircle.get(circle.uuid);
218
+ const role = await src.details(roleUuid);
219
+ if (known) {
220
+ known.roles.push({ uuid: role.uuid, name: role.name, entityType: role.entityType });
221
+ continue;
222
+ }
223
+ const rels = await src.relationships(circle.uuid);
224
+ const members = edges(rels, 'IS_IMPLEMENTED_BY', 'outgoing');
225
+ const details = await Promise.all(members.map((m) => src.details(m.uuid)));
226
+ const pick = (test) => details.find(test) ?? null;
227
+ let basis = null;
228
+ let found = pick((d) => d.data.leadLink === true || d.data.lead === true || LEAD_SUBTYPES.has(String(d.data.subtype ?? '').toLowerCase()));
229
+ if (found)
230
+ basis = 'flag';
231
+ if (!found && (found = pick((d) => /\blead[\s-]?link\b/i.test(String(d.data.purpose ?? '')))))
232
+ basis = 'lead-link';
233
+ if (!found && (found = pick((d) => /(^|:)lead$/i.test(String(d.customId ?? '')))))
234
+ basis = 'custom-id';
235
+ if (!found) {
236
+ const deciding = [...edges(rels, 'DECIDES_ON', 'incoming'), ...edges(rels, 'ACCOUNTABLE_FOR', 'incoming')].filter((r) => !isPersonType(r.entityType ?? ''));
237
+ if (deciding.length > 0) {
238
+ found = await src.details(deciding[0].uuid);
239
+ basis = 'decides-on-circle';
240
+ }
241
+ }
242
+ const lead = found ? { uuid: found.uuid, name: found.name, entityType: found.entityType, holders: await getRoleHolders(src, found.uuid) } : null;
243
+ byCircle.set(circle.uuid, { circle, lead, basis, roles: [{ uuid: role.uuid, name: role.name, entityType: role.entityType }] });
244
+ }
245
+ return Array.from(byCircle.values());
246
+ }
247
+ async function withHolders(src, roles) {
248
+ const out = [];
249
+ for (const role of roles)
250
+ out.push({ ...role, holders: await getRoleHolders(src, role.uuid) });
251
+ return out;
252
+ }
253
+ function textList(value) {
254
+ if (Array.isArray(value))
255
+ return value.map((v) => (typeof v === 'string' ? v.trim() : JSON.stringify(v))).filter(Boolean);
256
+ return typeof value === 'string' && value.trim() !== '' ? [value.trim()] : [];
257
+ }
258
+ /** Purpose, accountabilities and domains of each role, so every role on a step can see what the others deliver and where. */
259
+ async function withRoleBodies(src, roles) {
260
+ const out = [];
261
+ for (const role of roles) {
262
+ const d = await src.details(role.uuid);
263
+ out.push({ ...role, purpose: str(d.data.purpose), accountabilities: textList(d.data.accountabilities), domains: textList(d.data.domains) });
264
+ }
265
+ return out;
266
+ }
267
+ async function getStep(src, stepUuid, opts = {}) {
268
+ const [d, rels] = await Promise.all([src.details(stepUuid), src.relationships(stepUuid)]);
269
+ const roles = (type) => edges(rels, type, 'incoming').filter((r) => !isPersonType(r.entityType ?? ''));
270
+ const policies = [];
271
+ for (const p of edges(rels, 'APPLIES_TO', 'incoming')) {
272
+ const pd = await src.details(p.uuid);
273
+ policies.push({
274
+ uuid: p.uuid,
275
+ name: pd.name || p.name,
276
+ entityType: p.entityType,
277
+ description: str(pd.data.description ?? pd.data.body ?? pd.data.text),
278
+ version: str(pd.data.version),
279
+ status: str(pd.data.status),
280
+ });
281
+ }
282
+ let responsibleRoles = roles('RESPONSIBLE_FOR');
283
+ let decidingRoles = roles('DECIDES_ON');
284
+ let accountableRoles = roles('ACCOUNTABLE_FOR');
285
+ if (opts.resolveHolders) {
286
+ responsibleRoles = await withHolders(src, responsibleRoles);
287
+ decidingRoles = await withHolders(src, decidingRoles);
288
+ accountableRoles = await withHolders(src, accountableRoles);
289
+ }
290
+ if (opts.roleDetails)
291
+ responsibleRoles = await withRoleBodies(src, responsibleRoles);
292
+ return {
293
+ ...toStepSummary(d),
294
+ predecessors: edges(rels, 'DEPENDS_ON', 'outgoing'),
295
+ successors: edges(rels, 'DEPENDS_ON', 'incoming'),
296
+ parents: edges(rels, 'HAS_SUBPROCESS', 'incoming'),
297
+ children: edges(rels, 'HAS_SUBPROCESS', 'outgoing'),
298
+ responsibleRoles,
299
+ decidingRoles,
300
+ accountableRoles,
301
+ policies,
302
+ };
303
+ }
304
+ /** The roles an agent fulfils, read from the graph (used when no context bundle is at hand). */
305
+ async function getAgentRoles(src, agentUuid) {
306
+ return edges(await src.relationships(agentUuid), 'AGENT_FULFILLS_ROLE', 'outgoing');
307
+ }
308
+ /** Every step the given roles are responsible for, one entry per role and step. */
309
+ async function getDuties(src, roleUuids) {
310
+ const duties = [];
311
+ for (const roleUuid of Array.from(new Set(roleUuids))) {
312
+ const [role, rels, circle] = await Promise.all([src.details(roleUuid), src.relationships(roleUuid), getCircle(src, roleUuid)]);
313
+ for (const step of edges(rels, 'RESPONSIBLE_FOR', 'outgoing')) {
314
+ const d = await src.details(step.uuid);
315
+ duties.push({ role: { uuid: role.uuid, name: role.name, entityType: role.entityType }, circle, step: toStepSummary(d) });
316
+ }
317
+ }
318
+ return duties;
319
+ }
320
+ /** Which of the given roles is responsible for the step. Empty means: not responsible. */
321
+ async function responsibleRolesFor(src, stepUuid, roleUuids) {
322
+ const wanted = new Set(roleUuids);
323
+ return edges(await src.relationships(stepUuid), 'RESPONSIBLE_FOR', 'incoming').filter((r) => wanted.has(r.uuid));
324
+ }
325
+ /** Role first, then person: DECIDES_ON wins; without it the ACCOUNTABLE_FOR role decides. */
326
+ async function getDecider(src, stepUuid) {
327
+ const rels = await src.relationships(stepUuid);
328
+ const deciding = edges(rels, 'DECIDES_ON', 'incoming').filter((r) => !isPersonType(r.entityType ?? ''));
329
+ if (deciding.length > 0)
330
+ return { basis: 'DECIDES_ON', roles: await withHolders(src, deciding) };
331
+ const accountable = edges(rels, 'ACCOUNTABLE_FOR', 'incoming').filter((r) => !isPersonType(r.entityType ?? ''));
332
+ if (accountable.length > 0)
333
+ return { basis: 'ACCOUNTABLE_FOR', roles: await withHolders(src, accountable) };
334
+ return { basis: null, roles: [] };
335
+ }
336
+ /**
337
+ * Fail-closed check whether the acting person may decide on the step right now.
338
+ * Only persons decide; agents filling the deciding role never count.
339
+ */
340
+ async function checkApprover(src, stepUuid, actor) {
341
+ const email = normalizeEmail(actor);
342
+ const denied = (reason, decider) => ({
343
+ allowed: false,
344
+ reason,
345
+ basis: decider?.basis ?? null,
346
+ role: null,
347
+ person: null,
348
+ candidates: (decider?.roles ?? []).map((r) => ({
349
+ role: { uuid: r.uuid, name: r.name },
350
+ persons: (r.holders?.persons ?? []).map((p) => p.name),
351
+ })),
352
+ });
353
+ if (email === '' || !email.includes('@'))
354
+ return denied('No valid address for the acting person', null);
355
+ let decider;
356
+ try {
357
+ decider = await getDecider(src, stepUuid);
358
+ }
359
+ catch (error) {
360
+ return denied(`roleALPHA could not be read: ${error.message}`, null);
361
+ }
362
+ if (decider.roles.length === 0)
363
+ return denied('No role decides on or is accountable for this step', decider);
364
+ for (const role of decider.roles) {
365
+ const person = (role.holders?.persons ?? []).find((p) => p.email === email);
366
+ if (person) {
367
+ return {
368
+ allowed: true,
369
+ reason: `${role.name} (${decider.basis}) is filled by ${person.name}`,
370
+ basis: decider.basis,
371
+ role: { uuid: role.uuid, name: role.name },
372
+ person,
373
+ candidates: [],
374
+ };
375
+ }
376
+ }
377
+ const filled = decider.roles.some((r) => (r.holders?.persons ?? []).some((p) => p.email));
378
+ return denied(filled ? 'The acting person does not fill the deciding role' : 'Nobody with an address fills the deciding role', decider);
379
+ }
380
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../lib/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The agent keyring: one credential holds the keys of every agent this n8n runs.
3
+ * A new agent runs as soon as its key is added — no new credential, no new workflow.
4
+ */
5
+ export interface AgentKey {
6
+ agentUuid: string;
7
+ key: string;
8
+ label: string | null;
9
+ }
10
+ /** Accepts `{ "<agentUuid>": "agt_…" }` or `[{ "agentUuid": "…", "key": "agt_…", "label": "…" }]`. */
11
+ export declare function parseKeyring(raw: string): AgentKey[];
12
+ export declare function keyFor(keyring: AgentKey[], agentUuid: string): string;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * The agent keyring: one credential holds the keys of every agent this n8n runs.
4
+ * A new agent runs as soon as its key is added — no new credential, no new workflow.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseKeyring = parseKeyring;
8
+ exports.keyFor = keyFor;
9
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
10
+ /** Accepts `{ "<agentUuid>": "agt_…" }` or `[{ "agentUuid": "…", "key": "agt_…", "label": "…" }]`. */
11
+ function parseKeyring(raw) {
12
+ const text = (raw ?? '').trim();
13
+ if (text === '')
14
+ return [];
15
+ let parsed;
16
+ try {
17
+ parsed = JSON.parse(text);
18
+ }
19
+ catch {
20
+ throw new Error('Agent keys must be JSON');
21
+ }
22
+ const entries = Array.isArray(parsed)
23
+ ? parsed.map((e) => {
24
+ const o = (e ?? {});
25
+ return { agentUuid: String(o.agentUuid ?? ''), key: String(o.key ?? ''), label: typeof o.label === 'string' ? o.label : null };
26
+ })
27
+ : Object.entries((parsed ?? {})).map(([agentUuid, key]) => ({
28
+ agentUuid,
29
+ key: String(key ?? ''),
30
+ label: null,
31
+ }));
32
+ const seen = new Set();
33
+ for (const e of entries) {
34
+ e.agentUuid = e.agentUuid.trim().toLowerCase();
35
+ e.key = e.key.trim();
36
+ if (!UUID.test(e.agentUuid))
37
+ throw new Error(`Not an agent UUID: "${e.agentUuid}"`);
38
+ if (!e.key.startsWith('agt_'))
39
+ throw new Error(`Key for ${e.agentUuid} does not start with agt_`);
40
+ if (seen.has(e.agentUuid))
41
+ throw new Error(`Agent ${e.agentUuid} is listed twice`);
42
+ seen.add(e.agentUuid);
43
+ }
44
+ return entries;
45
+ }
46
+ function keyFor(keyring, agentUuid) {
47
+ const wanted = String(agentUuid ?? '').trim().toLowerCase();
48
+ const hit = keyring.find((k) => k.agentUuid === wanted);
49
+ if (!hit)
50
+ throw new Error(`No key configured for agent ${wanted || '(empty)'}`);
51
+ return hit.key;
52
+ }
53
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../lib/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Minimal MCP client over Streamable HTTP. The transport is injected so the
3
+ * node can route requests through n8n's credential helpers and tests can fake it.
4
+ */
5
+ export interface HttpReply {
6
+ status: number;
7
+ headers: Record<string, string | string[] | undefined>;
8
+ body: string;
9
+ }
10
+ export type Transport = (body: unknown, headers: Record<string, string>) => Promise<HttpReply>;
11
+ export declare class McpError extends Error {
12
+ readonly code?: number | undefined;
13
+ constructor(message: string, code?: number | undefined);
14
+ }
15
+ interface JsonRpcMessage {
16
+ jsonrpc?: string;
17
+ id?: number | string | null;
18
+ result?: unknown;
19
+ error?: {
20
+ code?: number;
21
+ message?: string;
22
+ };
23
+ }
24
+ /** Reads a JSON-RPC reply that arrived either as plain JSON or as an SSE stream. */
25
+ export declare function parseRpcBody(body: string, id?: number | string): JsonRpcMessage;
26
+ /** Unwraps a tools/call result. `content[].text` may be a JSON string or an object. */
27
+ export declare function unwrapToolResult(result: unknown): unknown;
28
+ /** Waits before a repeated call; injected so tests run without delay. */
29
+ export type Sleep = (ms: number) => Promise<void>;
30
+ /** Wait before repeat `attempt` (0-based): Retry-After if the server sent one, else 1, 2, 4, 8 s plus jitter. */
31
+ export declare function retryDelay(reply: HttpReply | undefined, attempt: number, random?: () => number): number;
32
+ export declare class McpClient {
33
+ private readonly transport;
34
+ private readonly clientName;
35
+ private readonly sleep;
36
+ private sessionId?;
37
+ private nextId;
38
+ private ready?;
39
+ private renewing;
40
+ constructor(transport: Transport, clientName?: string, sleep?: Sleep);
41
+ /** Sends one request; repeats it while the server turns it away for load. */
42
+ private send;
43
+ private rpc;
44
+ private initialize;
45
+ listTools(): Promise<Array<{
46
+ name: string;
47
+ description?: string;
48
+ inputSchema?: unknown;
49
+ }>>;
50
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
51
+ }
52
+ export {};