@atlasauth/emulator-core 0.1.0 → 0.2.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 (111) hide show
  1. package/dist/adopt.d.ts +50 -0
  2. package/dist/adopt.js +57 -0
  3. package/dist/adopt.js.map +1 -0
  4. package/dist/coverage.d.ts +15 -0
  5. package/dist/coverage.js +31 -0
  6. package/dist/coverage.js.map +1 -0
  7. package/dist/crypto-util.d.ts +10 -0
  8. package/dist/crypto-util.js +76 -0
  9. package/dist/crypto-util.js.map +1 -0
  10. package/dist/engine.d.ts +33 -2
  11. package/dist/engine.js +53 -8
  12. package/dist/engine.js.map +1 -1
  13. package/dist/error-catalog.js +8 -0
  14. package/dist/error-catalog.js.map +1 -1
  15. package/dist/event-gate.d.ts +3 -0
  16. package/dist/event-gate.js +372 -0
  17. package/dist/event-gate.js.map +1 -0
  18. package/dist/generic.js +9 -1
  19. package/dist/generic.js.map +1 -1
  20. package/dist/handlers/approvals.d.ts +2 -0
  21. package/dist/handlers/approvals.js +365 -0
  22. package/dist/handlers/approvals.js.map +1 -0
  23. package/dist/handlers/authz.d.ts +2 -0
  24. package/dist/handlers/authz.js +347 -0
  25. package/dist/handlers/authz.js.map +1 -0
  26. package/dist/handlers/billing.d.ts +2 -0
  27. package/dist/handlers/billing.js +398 -0
  28. package/dist/handlers/billing.js.map +1 -0
  29. package/dist/handlers/connections.d.ts +2 -0
  30. package/dist/handlers/connections.js +332 -0
  31. package/dist/handlers/connections.js.map +1 -0
  32. package/dist/handlers/device.d.ts +47 -0
  33. package/dist/handlers/device.js +648 -0
  34. package/dist/handlers/device.js.map +1 -0
  35. package/dist/handlers/federation.d.ts +2 -0
  36. package/dist/handlers/federation.js +481 -0
  37. package/dist/handlers/federation.js.map +1 -0
  38. package/dist/handlers/governance.d.ts +2 -0
  39. package/dist/handlers/governance.js +460 -0
  40. package/dist/handlers/governance.js.map +1 -0
  41. package/dist/handlers/hooks.js +4 -1
  42. package/dist/handlers/hooks.js.map +1 -1
  43. package/dist/handlers/index.d.ts +5 -1
  44. package/dist/handlers/index.js +32 -3
  45. package/dist/handlers/index.js.map +1 -1
  46. package/dist/handlers/keys.js +6 -1
  47. package/dist/handlers/keys.js.map +1 -1
  48. package/dist/handlers/machines.js +55 -8
  49. package/dist/handlers/machines.js.map +1 -1
  50. package/dist/handlers/messaging.d.ts +4 -0
  51. package/dist/handlers/messaging.js +486 -0
  52. package/dist/handlers/messaging.js.map +1 -0
  53. package/dist/handlers/oauth-flows.d.ts +28 -0
  54. package/dist/handlers/oauth-flows.js +419 -0
  55. package/dist/handlers/oauth-flows.js.map +1 -0
  56. package/dist/handlers/oauth.d.ts +75 -0
  57. package/dist/handlers/oauth.js +608 -0
  58. package/dist/handlers/oauth.js.map +1 -0
  59. package/dist/handlers/passkeys.d.ts +3 -0
  60. package/dist/handlers/passkeys.js +293 -0
  61. package/dist/handlers/passkeys.js.map +1 -0
  62. package/dist/handlers/platform.d.ts +15 -0
  63. package/dist/handlers/platform.js +454 -0
  64. package/dist/handlers/platform.js.map +1 -0
  65. package/dist/handlers/round2.d.ts +8 -0
  66. package/dist/handlers/round2.js +372 -0
  67. package/dist/handlers/round2.js.map +1 -0
  68. package/dist/handlers/scim.d.ts +2 -0
  69. package/dist/handlers/scim.js +408 -0
  70. package/dist/handlers/scim.js.map +1 -0
  71. package/dist/handlers/sessions.d.ts +7 -3
  72. package/dist/handlers/sessions.js +55 -25
  73. package/dist/handlers/sessions.js.map +1 -1
  74. package/dist/handlers/support.d.ts +20 -0
  75. package/dist/handlers/support.js +62 -0
  76. package/dist/handlers/support.js.map +1 -0
  77. package/dist/handlers/users.js +4 -0
  78. package/dist/handlers/users.js.map +1 -1
  79. package/dist/handlers/workflows.d.ts +2 -0
  80. package/dist/handlers/workflows.js +428 -0
  81. package/dist/handlers/workflows.js.map +1 -0
  82. package/dist/index.d.ts +8 -0
  83. package/dist/index.js +23 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/jws.d.ts +41 -0
  86. package/dist/jws.js +133 -0
  87. package/dist/jws.js.map +1 -0
  88. package/dist/messages.d.ts +7 -0
  89. package/dist/messages.js +8 -4
  90. package/dist/messages.js.map +1 -1
  91. package/dist/parity-bin.js +3 -1
  92. package/dist/parity-bin.js.map +1 -1
  93. package/dist/parity-routes.d.ts +14 -0
  94. package/dist/parity-routes.js +421 -0
  95. package/dist/parity-routes.js.map +1 -0
  96. package/dist/parity.d.ts +10 -3
  97. package/dist/parity.js +14 -5
  98. package/dist/parity.js.map +1 -1
  99. package/dist/tokens.d.ts +17 -0
  100. package/dist/tokens.js +46 -0
  101. package/dist/tokens.js.map +1 -1
  102. package/dist/webauthn-virtual.d.ts +70 -0
  103. package/dist/webauthn-virtual.js +186 -0
  104. package/dist/webauthn-virtual.js.map +1 -0
  105. package/dist/webhook-ext.d.ts +16 -0
  106. package/dist/webhook-ext.js +218 -0
  107. package/dist/webhook-ext.js.map +1 -0
  108. package/dist/webhooks.d.ts +3 -0
  109. package/dist/webhooks.js +37 -3
  110. package/dist/webhooks.js.map +1 -1
  111. package/package.json +2 -2
@@ -0,0 +1,428 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.workflowHandlers = workflowHandlers;
4
+ const errors_1 = require("../errors");
5
+ const store_1 = require("../store");
6
+ const support_1 = require("./support");
7
+ const util_1 = require("./util");
8
+ /**
9
+ * Webhook dead letters, Action versions with staged rollout, workflow runs (with cancel and retry from a step) and app
10
+ * events (with the all-organizations broadcast). Actions and workflows themselves are the generic CRUD layer's rows; the
11
+ * versions, runs and events here are real state on top of them.
12
+ */
13
+ const bad = (message, param) => new errors_1.EmulatorError('VALIDATION_FAILED', message, param);
14
+ const MAX_VERSIONS = 50;
15
+ const MAX_BROADCAST = 500;
16
+ const MAX_EVENT_BYTES = 256 * 1024;
17
+ const st = (0, support_1.engineState)((e) => ({ acked: new Set(), versions: new Map(), runs: new store_1.Table('workflow_runs', e.clock.now, 'wfr'), events: new store_1.Table('app_events', e.clock.now, 'apev'), approvals: new Map() }));
18
+ // ── dead letters ─────────────────────────────────────────────────────
19
+ /** Exhausted deliveries of an endpoint: the last attempt for an event failed and no retry is left (attempts reached the retry budget), not yet acknowledged. */
20
+ function deadLetters(e, endpointId) {
21
+ const budget = (e.options.webhookRetryDelaysMs ?? [1000, 5000, 30000]).length + 1;
22
+ const last = new Map();
23
+ for (const d of e.webhooks.deliveries)
24
+ if (d.endpoint_id === endpointId)
25
+ last.set(d.event_id, d);
26
+ return [...last.values()].filter((d) => !d.success && d.attempt >= budget && !st(e).acked.has(d.id)).reverse();
27
+ }
28
+ const dlqView = (d) => ({ object: 'webhook_dead_letter', delivery_id: d.id, event_id: d.event_id, event_type: d.event_type, attempts: d.attempt, last_status: d.response_status, last_error: d.error, failed_at: d.at });
29
+ function ids(body) {
30
+ const v = body.delivery_ids;
31
+ if (!Array.isArray(v) || !v.length || v.length > 100 || v.some((x) => typeof x !== 'string' || !x))
32
+ throw bad('delivery_ids is a list of 1 to 100 delivery ids.', 'delivery_ids');
33
+ return [...new Set(v)];
34
+ }
35
+ // ── action versions ──────────────────────────────────────────────────
36
+ const actionOf = (e, id) => {
37
+ const a = e.generic.get('actions')?.get(id);
38
+ if (!a)
39
+ throw (0, errors_1.notFound)('Action');
40
+ return a;
41
+ };
42
+ const bucketOf = (actionId, who) => {
43
+ let h = 2166136261;
44
+ for (const ch of `${actionId}:${who}`)
45
+ h = Math.imul(h ^ ch.charCodeAt(0), 16777619) >>> 0;
46
+ return h % 100;
47
+ };
48
+ const versionView = (a, v) => ({ object: 'action_version', action_id: a.id, version: v.version, code: v.code, note: v.note ?? null, live: a.live_version === v.version, staged: a.staged?.version === v.version, created_at: v.created_at });
49
+ const rolloutView = (a) => ({ object: 'action_rollout', action_id: a.id, live_version: a.live_version ?? null, staged: a.staged ? { version: a.staged.version, percent: a.staged.percent } : null });
50
+ const snapshot = (e, a, note = null) => {
51
+ const list = st(e).versions.get(a.id) ?? [];
52
+ if (list.length >= MAX_VERSIONS)
53
+ throw new errors_1.EmulatorError('CONFLICT', `An action keeps at most ${MAX_VERSIONS} versions.`);
54
+ const v = { version: (list[list.length - 1]?.version ?? 0) + 1, code: a.code ?? '', note, created_at: e.clock.now() };
55
+ st(e).versions.set(a.id, [...list, v]);
56
+ return v;
57
+ };
58
+ const EGRESS = /^(\*\.)?[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i;
59
+ // ── workflow runs ────────────────────────────────────────────────────
60
+ const workflowOf = (e, id) => {
61
+ const w = e.generic.get('workflows')?.get(id);
62
+ if (!w)
63
+ throw (0, errors_1.notFound)('Workflow');
64
+ return w;
65
+ };
66
+ const runOf = (e, w, id) => {
67
+ const r = st(e).runs.get(id);
68
+ if (!r || r.workflow_id !== w.id)
69
+ throw (0, errors_1.notFound)('Workflow run');
70
+ return r;
71
+ };
72
+ const stepKey = (s, i) => String(s?.id ?? s?.name ?? `step_${i}`);
73
+ const runView = (r) => ({ object: 'workflow_run', id: r.id, workflow_id: r.workflow_id, status: r.status, input: r.input, vars: r.vars, steps: r.steps, current_step: r.current_step ?? null, error: r.error ?? null, started_at: r.started_at, finished_at: r.finished_at ?? null });
74
+ /** Run steps from `from` until one fails, waits for an approval, or the end. Earlier step outputs and the variables are kept. */
75
+ function advance(e, w, r, from) {
76
+ const defs = Array.isArray(w.steps) ? w.steps : [];
77
+ r.status = 'running';
78
+ for (let i = from; i < defs.length; i++) {
79
+ const d = defs[i];
80
+ const key = stepKey(d, i);
81
+ const rec = (status, extra = {}) => {
82
+ const at = r.steps.findIndex((s) => s.step === key);
83
+ const row = { step: key, type: d.type, status, ...extra };
84
+ if (at >= 0)
85
+ r.steps[at] = row;
86
+ else
87
+ r.steps.push(row);
88
+ };
89
+ r.current_step = key;
90
+ if (d.type === 'approval') {
91
+ const id = e.db.newId('wfa');
92
+ st(e).approvals.set(id, { id, run_id: r.id, workflow_id: w.id, step: key, status: 'pending' });
93
+ rec('waiting_approval', { approval_id: id });
94
+ r.status = 'waiting_approval';
95
+ r.stopped_at = i;
96
+ e.webhooks.emit('workflow.approval_needed', { object: 'workflow_approval', id, workflow_id: w.id, run_id: r.id, step: key });
97
+ return;
98
+ }
99
+ if (d.type === 'set_variable' && typeof d.name === 'string')
100
+ r.vars[d.name] = d.value ?? null;
101
+ if (d.fail === true || r.input?.fail_step === key) {
102
+ rec('failed', { error: 'step failed' });
103
+ r.status = 'failed';
104
+ r.error = `Step ${key} failed.`;
105
+ r.stopped_at = i;
106
+ r.finished_at = e.clock.now();
107
+ e.webhooks.emit('workflow.run_failed', { object: 'workflow_run', id: r.id, workflow_id: w.id, step: key });
108
+ return;
109
+ }
110
+ rec('succeeded', { output: d.type === 'set_variable' ? { [d.name]: d.value ?? null } : {} });
111
+ }
112
+ r.status = 'succeeded';
113
+ r.current_step = null;
114
+ r.stopped_at = defs.length;
115
+ r.finished_at = e.clock.now();
116
+ e.webhooks.emit('workflow.run_succeeded', { object: 'workflow_run', id: r.id, workflow_id: w.id });
117
+ }
118
+ // ── app events ───────────────────────────────────────────────────────
119
+ const eventView = (r) => ({ object: 'app_event', id: r.id, type: r.type, organization_id: r.organization_id, data: r.data, idempotency_key: r.idempotency_key ?? null, endpoints: r.endpoints, created_at: r.created_at });
120
+ const orgEndpoints = (e, orgId) => (e.generic.get('organizations/app_webhook_endpoints')?.filter((x) => x._parent === orgId && !x.disabled_at) ?? []);
121
+ function publishTo(e, orgId, type, data, key) {
122
+ const s = st(e);
123
+ if (key) {
124
+ const have = s.events.find((x) => x.organization_id === orgId && x.idempotency_key === key);
125
+ if (have)
126
+ return { row: have, created: false };
127
+ }
128
+ const row = s.events.insert({ type, organization_id: orgId, data, idempotency_key: key, endpoints: orgEndpoints(e, orgId).length, created_at: e.clock.now() });
129
+ return { row, created: true };
130
+ }
131
+ function workflowHandlers() {
132
+ const endpointOf = (e, id) => {
133
+ const ep = e.db.endpoints.get(id);
134
+ if (!ep)
135
+ throw (0, errors_1.notFound)('Webhook endpoint');
136
+ return ep;
137
+ };
138
+ return [
139
+ // ── DLQ ──
140
+ {
141
+ method: 'GET',
142
+ pattern: '/v1/webhook_endpoints/:id/dlq',
143
+ handler: (c) => {
144
+ endpointOf(c.engine, c.params.id);
145
+ const page = (0, store_1.paginate)(deadLetters(c.engine, c.params.id ?? ''), (0, util_1.pageOf)(c));
146
+ return { body: { object: 'list', data: page.data.map(dlqView), has_more: page.has_more, next_cursor: page.next_cursor } };
147
+ },
148
+ },
149
+ {
150
+ method: 'POST',
151
+ pattern: '/v1/webhook_endpoints/:id/dlq/ack',
152
+ handler: (c) => {
153
+ endpointOf(c.engine, c.params.id);
154
+ const open = new Set(deadLetters(c.engine, c.params.id ?? '').map((d) => d.id));
155
+ const want = ids(c.body);
156
+ const acked = want.filter((i) => open.has(i));
157
+ for (const i of acked)
158
+ st(c.engine).acked.add(i);
159
+ return { body: { object: 'webhook_dlq_ack', acknowledged: acked.length, not_found: want.length - acked.length } };
160
+ },
161
+ },
162
+ {
163
+ method: 'POST',
164
+ pattern: '/v1/webhook_endpoints/:id/dlq/requeue',
165
+ handler: async (c) => {
166
+ const e = c.engine;
167
+ endpointOf(e, c.params.id);
168
+ const open = new Map(deadLetters(e, c.params.id ?? '').map((d) => [d.id, d]));
169
+ const want = ids(c.body);
170
+ let requeued = 0;
171
+ for (const i of want) {
172
+ const d = open.get(i);
173
+ if (!d)
174
+ continue;
175
+ st(e).acked.add(i); // out of the queue; a new failure lands there again as a new delivery
176
+ if (await e.webhooks.redeliver(c.params.id ?? '', d.event_id))
177
+ requeued++;
178
+ }
179
+ return { body: { object: 'webhook_dlq_requeue', requeued, not_found: want.length - requeued } };
180
+ },
181
+ },
182
+ // ── action versions ──
183
+ {
184
+ method: 'GET',
185
+ pattern: '/v1/actions/:id/versions',
186
+ handler: (c) => {
187
+ const a = actionOf(c.engine, c.params.id);
188
+ const list = [...(st(c.engine).versions.get(a.id) ?? [])].reverse();
189
+ return { body: { object: 'list', data: list.map((v) => versionView(a, v)), has_more: false, next_cursor: null } };
190
+ },
191
+ },
192
+ {
193
+ method: 'POST',
194
+ pattern: '/v1/actions/:id/versions',
195
+ handler: (c) => {
196
+ const e = c.engine;
197
+ const a = actionOf(e, c.params.id);
198
+ if (c.body.note !== undefined && c.body.note !== null && (typeof c.body.note !== 'string' || c.body.note.length > 500))
199
+ throw bad('note is text up to 500 characters.', 'note');
200
+ const v = snapshot(e, typeof c.body.code === 'string' ? { ...a, code: c.body.code } : a, c.body.note ?? null);
201
+ if (a.live_version === undefined)
202
+ a.live_version = v.version; // the first version goes live; later ones are staged or promoted
203
+ return { status: 201, body: versionView(a, v) };
204
+ },
205
+ },
206
+ {
207
+ method: 'GET',
208
+ pattern: '/v1/actions/:id/versions/:version',
209
+ handler: (c) => {
210
+ const a = actionOf(c.engine, c.params.id);
211
+ const v = (st(c.engine).versions.get(a.id) ?? []).find((x) => String(x.version) === c.params.version);
212
+ if (!v)
213
+ throw (0, errors_1.notFound)('Action version');
214
+ return { body: versionView(a, v) };
215
+ },
216
+ },
217
+ {
218
+ // 1-99 stages the newest unpromoted version for that share of runs; 100 promotes it; 0 aborts the stage.
219
+ method: 'PATCH',
220
+ pattern: '/v1/actions/:id/rollout',
221
+ handler: (c) => {
222
+ const e = c.engine;
223
+ const a = actionOf(e, c.params.id);
224
+ const percent = (0, support_1.intIn)(c.body.percent, 'percent', 0, 100);
225
+ const list = st(e).versions.get(a.id) ?? [];
226
+ const target = a.staged?.version ?? c.body.version ?? list[list.length - 1]?.version;
227
+ if (!list.find((v) => v.version === target))
228
+ throw new errors_1.EmulatorError('CONFLICT', 'There is no version to roll out: publish one first.');
229
+ if (percent === 0) {
230
+ if (!a.staged)
231
+ throw new errors_1.EmulatorError('CONFLICT', 'No rollout is staged.');
232
+ a.staged = null;
233
+ }
234
+ else if (percent === 100) {
235
+ a.live_version = target;
236
+ a.staged = null;
237
+ }
238
+ else {
239
+ if (target === a.live_version)
240
+ throw new errors_1.EmulatorError('CONFLICT', 'That version is already live.');
241
+ a.staged = { version: target, percent };
242
+ }
243
+ return { body: rolloutView(a) };
244
+ },
245
+ },
246
+ {
247
+ method: 'POST',
248
+ pattern: '/v1/actions/:id/rollback',
249
+ handler: (c) => {
250
+ const e = c.engine;
251
+ const a = actionOf(e, c.params.id);
252
+ const list = st(e).versions.get(a.id) ?? [];
253
+ const want = c.body.version === undefined ? list.filter((v) => v.version < (a.live_version ?? Infinity)).pop()?.version : (0, support_1.intIn)(c.body.version, 'version', 1, 1_000_000);
254
+ const v = list.find((x) => x.version === want);
255
+ if (!v)
256
+ throw new errors_1.EmulatorError('CONFLICT', 'There is no earlier version to roll back to.');
257
+ a.live_version = v.version;
258
+ a.staged = null;
259
+ a.code = v.code;
260
+ return { body: rolloutView(a) };
261
+ },
262
+ },
263
+ {
264
+ // A direct edit of code becomes a new live version, and is refused while a rollout is staged. Other fields update as written.
265
+ method: 'PATCH',
266
+ pattern: '/v1/actions/:id',
267
+ handler: (c) => {
268
+ const e = c.engine;
269
+ const a = actionOf(e, c.params.id);
270
+ const b = c.body;
271
+ if (b.egress_allowlist !== undefined) {
272
+ if (!Array.isArray(b.egress_allowlist) || b.egress_allowlist.length > 50 || b.egress_allowlist.some((h) => typeof h !== 'string' || !EGRESS.test(h)))
273
+ throw bad('egress_allowlist is a list of up to 50 hosts: an exact host or *.host.', 'egress_allowlist');
274
+ }
275
+ if (b.code !== undefined && a.staged)
276
+ throw new errors_1.EmulatorError('CONFLICT', 'A rollout is staged: promote or abort it before editing the code.');
277
+ for (const [k, v] of Object.entries(b))
278
+ if (!['id', 'object', 'created_at', 'updated_at', 'live_version', 'staged'].includes(k) && !k.startsWith('_'))
279
+ a[k] = v;
280
+ a.updated_at = e.clock.now();
281
+ if (typeof b.code === 'string')
282
+ a.live_version = snapshot(e, a, 'edit').version;
283
+ const { _parent, staged, live_version, ...out } = a;
284
+ return { body: { ...out, live_version: live_version ?? null, staged: staged ?? null } };
285
+ },
286
+ },
287
+ {
288
+ // Emulator: which version a run for `user_id` would use (a stable bucket per action and user; a coin toss without one).
289
+ method: 'POST',
290
+ pattern: '/__emulator/actions/:id/resolve',
291
+ public: true,
292
+ handler: (c) => {
293
+ const a = actionOf(c.engine, c.params.id);
294
+ const who = typeof c.body.user_id === 'string' ? c.body.user_id : String(Math.random());
295
+ const useStaged = a.staged && bucketOf(a.id, who) < a.staged.percent;
296
+ return { body: { version: useStaged ? a.staged.version : (a.live_version ?? null), staged: !!useStaged } };
297
+ },
298
+ },
299
+ // ── workflow runs ──
300
+ {
301
+ method: 'POST',
302
+ pattern: '/v1/workflows/:id/run',
303
+ handler: (c) => {
304
+ const e = c.engine;
305
+ const w = workflowOf(e, c.params.id);
306
+ if (w.enabled === false)
307
+ throw new errors_1.EmulatorError('CONFLICT', 'The workflow is disabled.');
308
+ const r = st(e).runs.insert({ workflow_id: w.id, status: 'running', input: c.body.input ?? {}, vars: {}, steps: [], started_at: e.clock.now() });
309
+ advance(e, w, r, 0);
310
+ return { status: 202, body: runView(r) };
311
+ },
312
+ },
313
+ { method: 'GET', pattern: '/v1/workflows/:id/runs', handler: (c) => (0, util_1.listReply)(c, st(c.engine).runs.filter((r) => r.workflow_id === workflowOf(c.engine, c.params.id).id && (!c.query.get('status') || r.status === c.query.get('status'))), runView) },
314
+ { method: 'GET', pattern: '/v1/workflows/:id/runs/:runId', handler: (c) => ({ body: runView(runOf(c.engine, workflowOf(c.engine, c.params.id), c.params.runId)) }) },
315
+ {
316
+ method: 'POST',
317
+ pattern: '/v1/workflows/:id/runs/:runId/resume',
318
+ handler: (c) => {
319
+ const e = c.engine;
320
+ const w = workflowOf(e, c.params.id);
321
+ const r = runOf(e, w, c.params.runId);
322
+ if (r.status !== 'waiting_approval')
323
+ throw new errors_1.EmulatorError('CONFLICT', `This run is ${r.status}, not waiting for an approval.`);
324
+ for (const a of st(e).approvals.values())
325
+ if (a.run_id === r.id && a.status === 'pending')
326
+ a.status = 'approved';
327
+ e.webhooks.emit('workflow.approval_decided', { object: 'workflow_approval', run_id: r.id, decision: 'approved' });
328
+ advance(e, w, r, r.stopped_at + 1);
329
+ return { body: runView(r) };
330
+ },
331
+ },
332
+ {
333
+ // Only a run that is still going (running or waiting for an approval) can be cancelled; pending approvals close with it.
334
+ method: 'POST',
335
+ pattern: '/v1/workflows/:id/runs/:runId/cancel',
336
+ handler: (c) => {
337
+ const e = c.engine;
338
+ const w = workflowOf(e, c.params.id);
339
+ const r = runOf(e, w, c.params.runId);
340
+ if (r.status !== 'running' && r.status !== 'waiting_approval')
341
+ throw new errors_1.EmulatorError('CONFLICT', `This run is ${r.status} and cannot be cancelled.`);
342
+ for (const a of st(e).approvals.values())
343
+ if (a.run_id === r.id && a.status === 'pending')
344
+ a.status = 'cancelled';
345
+ for (const s of r.steps)
346
+ if (s.status === 'waiting_approval')
347
+ s.status = 'cancelled';
348
+ r.status = 'cancelled';
349
+ r.finished_at = e.clock.now();
350
+ e.webhooks.emit('workflow.run_cancelled', { object: 'workflow_run', id: r.id, workflow_id: w.id });
351
+ return { body: runView(r) };
352
+ },
353
+ },
354
+ {
355
+ // From a step (by id or name) at or before where the run stopped; variables and the outputs of earlier steps are kept.
356
+ method: 'POST',
357
+ pattern: '/v1/workflows/:id/runs/:runId/retry',
358
+ handler: (c) => {
359
+ const e = c.engine;
360
+ const w = workflowOf(e, c.params.id);
361
+ const r = runOf(e, w, c.params.runId);
362
+ if (r.status !== 'failed' && r.status !== 'cancelled')
363
+ throw new errors_1.EmulatorError('CONFLICT', `Only a failed or cancelled run can be retried; this one is ${r.status}.`);
364
+ const defs = Array.isArray(w.steps) ? w.steps : [];
365
+ const from = c.body.from_step === undefined ? r.stopped_at : defs.findIndex((d, i) => stepKey(d, i) === c.body.from_step);
366
+ if (typeof from !== 'number' || from < 0)
367
+ throw bad('from_step is not a step of this workflow.', 'from_step');
368
+ if (from > (r.stopped_at ?? 0))
369
+ throw bad('A retry can start at or before the step the run stopped at, not after it.', 'from_step');
370
+ r.steps = r.steps.filter((s) => defs.findIndex((d, i) => stepKey(d, i) === s.step) < from);
371
+ r.error = null;
372
+ r.finished_at = null;
373
+ if (r.input?.fail_step)
374
+ r.input = { ...r.input, fail_step: null };
375
+ advance(e, w, r, from);
376
+ return { body: runView(r) };
377
+ },
378
+ },
379
+ // ── app events ──
380
+ {
381
+ method: 'POST',
382
+ pattern: '/v1/app_events',
383
+ handler: (c) => {
384
+ const e = c.engine;
385
+ const b = c.body;
386
+ const org = b.organization_id ?? b.org;
387
+ if (typeof b.type !== 'string' || !b.type)
388
+ throw bad('type is required.', 'type');
389
+ if (!b.data || typeof b.data !== 'object' || Array.isArray(b.data))
390
+ throw bad('data must be an object.', 'data');
391
+ if (JSON.stringify(b.data).length > MAX_EVENT_BYTES)
392
+ throw bad('data can be at most 256 KB.', 'data');
393
+ const key = b.idempotency_key ?? null;
394
+ if (key !== null && (typeof key !== 'string' || !key || key.length > 255))
395
+ throw bad('idempotency_key is up to 255 characters.', 'idempotency_key');
396
+ const types = e.generic.get('app_event_types');
397
+ if (types && types.size && !types.find((t) => t.name === b.type || t.type === b.type || t.key === b.type))
398
+ throw bad(`${b.type} is not a registered app event type.`, 'type');
399
+ if (org === '*') {
400
+ // One event per organization with an active endpoint, each with its own idempotency key.
401
+ const targets = e.db.organizations.all().filter((o) => orgEndpoints(e, o.id).length).map((o) => o.id);
402
+ if (targets.length > MAX_BROADCAST)
403
+ throw bad(`A broadcast reaches at most ${MAX_BROADCAST} organizations; ${targets.length} have an active endpoint.`, 'organization_id');
404
+ const made = targets.map((id) => publishTo(e, id, b.type, b.data, key ? `${key}:${id}` : null));
405
+ return { status: 201, body: { object: 'app_event_broadcast', count: made.length, created: made.filter((m) => m.created).length, events: made.map((m) => eventView(m.row)) } };
406
+ }
407
+ if (typeof org !== 'string' || !org)
408
+ throw bad('organization_id is required (or "*" to broadcast).', 'organization_id');
409
+ if (!e.db.organizations.get(org))
410
+ throw (0, errors_1.notFound)('Organization');
411
+ const r = publishTo(e, org, b.type, b.data, key);
412
+ return { status: r.created ? 201 : 200, body: eventView(r.row) };
413
+ },
414
+ },
415
+ { method: 'GET', pattern: '/v1/app_events', handler: (c) => (0, util_1.listReply)(c, st(c.engine).events.filter((x) => (!c.query.get('organization_id') || x.organization_id === c.query.get('organization_id')) && (!c.query.get('type') || x.type === c.query.get('type'))), eventView) },
416
+ {
417
+ method: 'GET',
418
+ pattern: '/v1/app_events/:id',
419
+ handler: (c) => {
420
+ const r = st(c.engine).events.get(c.params.id);
421
+ if (!r)
422
+ throw (0, errors_1.notFound)('App event');
423
+ return { body: eventView(r) };
424
+ },
425
+ },
426
+ ];
427
+ }
428
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/handlers/workflows.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,3 +14,11 @@ export { FEED_RESOURCES } from './feed';
14
14
  export type { ChangeEntry, FeedResource } from './feed';
15
15
  export { runScenario } from './scenario';
16
16
  export type { Scenario } from './scenario';
17
+ export { adoptMembership, adoptOrganization, adoptSession, adoptUser } from './adopt';
18
+ export type { AdoptUser } from './adopt';
19
+ export { VirtualAuthenticator, createVirtualAuthenticator } from './webauthn-virtual';
20
+ export type { CreationOptions, RequestOptions, VirtualAuthenticatorOptions } from './webauthn-virtual';
21
+ export { pkceChallenge } from './crypto-util';
22
+ export { GATED_EVENTS, WILDCARD_GATE_DATE } from './event-gate';
23
+ export { annotateCoverage, coverageList } from './coverage';
24
+ export { PARITY_EXEMPT, extraParityRequests, fullParityRequests, uncoveredRoutes, waveParityRequests } from './parity-routes';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runScenario = exports.FEED_RESOURCES = exports.DEFAULT_TEST_ISSUER = exports.signDelivery = exports.MessageSink = exports.createClock = exports.validate = exports.synthesize = exports.OpenApiIndex = exports.errorBody = exports.EmulatorError = exports.createEmulatorEngine = exports.Engine = void 0;
3
+ exports.waveParityRequests = exports.uncoveredRoutes = exports.fullParityRequests = exports.extraParityRequests = exports.PARITY_EXEMPT = exports.coverageList = exports.annotateCoverage = exports.WILDCARD_GATE_DATE = exports.GATED_EVENTS = exports.pkceChallenge = exports.createVirtualAuthenticator = exports.VirtualAuthenticator = exports.adoptUser = exports.adoptSession = exports.adoptOrganization = exports.adoptMembership = exports.runScenario = exports.FEED_RESOURCES = exports.DEFAULT_TEST_ISSUER = exports.signDelivery = exports.MessageSink = exports.createClock = exports.validate = exports.synthesize = exports.OpenApiIndex = exports.errorBody = exports.EmulatorError = exports.createEmulatorEngine = exports.Engine = void 0;
4
4
  var engine_1 = require("./engine");
5
5
  Object.defineProperty(exports, "Engine", { enumerable: true, get: function () { return engine_1.Engine; } });
6
6
  Object.defineProperty(exports, "createEmulatorEngine", { enumerable: true, get: function () { return engine_1.createEmulatorEngine; } });
@@ -23,4 +23,26 @@ var feed_1 = require("./feed");
23
23
  Object.defineProperty(exports, "FEED_RESOURCES", { enumerable: true, get: function () { return feed_1.FEED_RESOURCES; } });
24
24
  var scenario_1 = require("./scenario");
25
25
  Object.defineProperty(exports, "runScenario", { enumerable: true, get: function () { return scenario_1.runScenario; } });
26
+ var adopt_1 = require("./adopt");
27
+ Object.defineProperty(exports, "adoptMembership", { enumerable: true, get: function () { return adopt_1.adoptMembership; } });
28
+ Object.defineProperty(exports, "adoptOrganization", { enumerable: true, get: function () { return adopt_1.adoptOrganization; } });
29
+ Object.defineProperty(exports, "adoptSession", { enumerable: true, get: function () { return adopt_1.adoptSession; } });
30
+ Object.defineProperty(exports, "adoptUser", { enumerable: true, get: function () { return adopt_1.adoptUser; } });
31
+ var webauthn_virtual_1 = require("./webauthn-virtual");
32
+ Object.defineProperty(exports, "VirtualAuthenticator", { enumerable: true, get: function () { return webauthn_virtual_1.VirtualAuthenticator; } });
33
+ Object.defineProperty(exports, "createVirtualAuthenticator", { enumerable: true, get: function () { return webauthn_virtual_1.createVirtualAuthenticator; } });
34
+ var crypto_util_1 = require("./crypto-util");
35
+ Object.defineProperty(exports, "pkceChallenge", { enumerable: true, get: function () { return crypto_util_1.pkceChallenge; } });
36
+ var event_gate_1 = require("./event-gate");
37
+ Object.defineProperty(exports, "GATED_EVENTS", { enumerable: true, get: function () { return event_gate_1.GATED_EVENTS; } });
38
+ Object.defineProperty(exports, "WILDCARD_GATE_DATE", { enumerable: true, get: function () { return event_gate_1.WILDCARD_GATE_DATE; } });
39
+ var coverage_1 = require("./coverage");
40
+ Object.defineProperty(exports, "annotateCoverage", { enumerable: true, get: function () { return coverage_1.annotateCoverage; } });
41
+ Object.defineProperty(exports, "coverageList", { enumerable: true, get: function () { return coverage_1.coverageList; } });
42
+ var parity_routes_1 = require("./parity-routes");
43
+ Object.defineProperty(exports, "PARITY_EXEMPT", { enumerable: true, get: function () { return parity_routes_1.PARITY_EXEMPT; } });
44
+ Object.defineProperty(exports, "extraParityRequests", { enumerable: true, get: function () { return parity_routes_1.extraParityRequests; } });
45
+ Object.defineProperty(exports, "fullParityRequests", { enumerable: true, get: function () { return parity_routes_1.fullParityRequests; } });
46
+ Object.defineProperty(exports, "uncoveredRoutes", { enumerable: true, get: function () { return parity_routes_1.uncoveredRoutes; } });
47
+ Object.defineProperty(exports, "waveParityRequests", { enumerable: true, get: function () { return parity_routes_1.waveParityRequests; } });
26
48
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAwD;AAA/C,gGAAA,MAAM,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAErC,mCAAoD;AAA3C,uGAAA,aAAa,OAAA;AAAE,mGAAA,SAAS,OAAA;AACjC,qCAA+D;AAAtD,uGAAA,YAAY,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAE3C,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AAEpB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AAErB,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,+BAAwC;AAA/B,sGAAA,cAAc,OAAA;AAEvB,uCAAyC;AAAhC,uGAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAAwD;AAA/C,gGAAA,MAAM,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAErC,mCAAoD;AAA3C,uGAAA,aAAa,OAAA;AAAE,mGAAA,SAAS,OAAA;AACjC,qCAA+D;AAAtD,uGAAA,YAAY,OAAA;AAAE,qGAAA,UAAU,OAAA;AAAE,mGAAA,QAAQ,OAAA;AAE3C,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AAEpB,uCAA0C;AAAjC,wGAAA,YAAY,OAAA;AAErB,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,+BAAwC;AAA/B,sGAAA,cAAc,OAAA;AAEvB,uCAAyC;AAAhC,uGAAA,WAAW,OAAA;AAEpB,iCAAsF;AAA7E,wGAAA,eAAe,OAAA;AAAE,0GAAA,iBAAiB,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,kGAAA,SAAS,OAAA;AAEpE,uDAAsF;AAA7E,wHAAA,oBAAoB,OAAA;AAAE,8HAAA,0BAA0B,OAAA;AAEzD,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AACtB,2CAAgE;AAAvD,0GAAA,YAAY,OAAA;AAAE,gHAAA,kBAAkB,OAAA;AACzC,uCAA4D;AAAnD,4GAAA,gBAAgB,OAAA;AAAE,wGAAA,YAAY,OAAA;AACvC,iDAA8H;AAArH,8GAAA,aAAa,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAAE,gHAAA,eAAe,OAAA;AAAE,mHAAA,kBAAkB,OAAA"}
package/dist/jws.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ /** JWS and DPoP helpers on Web Crypto only (no node:crypto), so the engine still runs in a browser worker. */
2
+ export declare const b64urlDecode: (s: string) => Uint8Array;
3
+ export interface DecodedJwt {
4
+ header: Record<string, any>;
5
+ payload: Record<string, any>;
6
+ signingInput: string;
7
+ signature: Uint8Array;
8
+ }
9
+ /** Split and parse a compact JWS; null when it is not one. Does not verify anything. */
10
+ export declare function decodeJwt(token: string): DecodedJwt | null;
11
+ export declare const SUPPORTED_ALGS: string[];
12
+ /** Verify a JWS signature with a public JWK. Never throws; a private-key JWK is refused. */
13
+ export declare function verifyJws(jwt: DecodedJwt, jwk: Record<string, any>): Promise<boolean>;
14
+ /** RFC 7638 thumbprint of a public JWK (base64url SHA-256); null for a key type the engine does not read. */
15
+ export declare function jwkThumbprintOf(jwk: Record<string, any>): Promise<string | null>;
16
+ /** `*` any run of characters, `?` one character; anchored. */
17
+ export declare const globMatch: (pattern: string, value: string) => boolean;
18
+ export declare const DPOP_IAT_WINDOW_S = 300;
19
+ export interface DpopCheck {
20
+ proof: string;
21
+ htm: string;
22
+ /** The URL the request was sent to; query and fragment are ignored (RFC 9449 section 4.3). */
23
+ htu: string;
24
+ nowMs: number;
25
+ /** When the proof accompanies an access token, the token it must hash (`ath`). */
26
+ accessToken?: string;
27
+ /** The server nonce the proof must carry, when one was issued. */
28
+ nonce?: string;
29
+ }
30
+ /** Validate a DPoP proof per RFC 9449. Returns the key thumbprint and jti, or throws Error(reason). Replay (jti) is the caller's. */
31
+ export declare function verifyDpopProof(c: DpopCheck): Promise<{
32
+ jkt: string;
33
+ jti: string;
34
+ iat: number;
35
+ }>;
36
+ /**
37
+ * The client certificate thumbprint (`x5t#S256`) a trusted edge forwarded, for mTLS binding. The emulator has no TLS, so
38
+ * it reads what a proxy would set: `x-client-cert` (PEM, optionally URL-encoded) or `x-client-cert-sha256` (the
39
+ * fingerprint, hex or base64url). Returns undefined when neither is present, null when one is present but unreadable.
40
+ */
41
+ export declare function forwardedCertThumbprint(headers: Headers): Promise<string | undefined | null>;