@atlasauth/emulator-core 0.1.0 → 0.3.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/adopt.d.ts +50 -0
- package/dist/adopt.js +57 -0
- package/dist/adopt.js.map +1 -0
- package/dist/coverage.d.ts +15 -0
- package/dist/coverage.js +31 -0
- package/dist/coverage.js.map +1 -0
- package/dist/crypto-util.d.ts +10 -0
- package/dist/crypto-util.js +76 -0
- package/dist/crypto-util.js.map +1 -0
- package/dist/custom-html.d.ts +57 -0
- package/dist/custom-html.js +491 -0
- package/dist/custom-html.js.map +1 -0
- package/dist/engine.d.ts +34 -3
- package/dist/engine.js +57 -8
- package/dist/engine.js.map +1 -1
- package/dist/error-catalog.js +16 -0
- package/dist/error-catalog.js.map +1 -1
- package/dist/event-gate.d.ts +3 -0
- package/dist/event-gate.js +430 -0
- package/dist/event-gate.js.map +1 -0
- package/dist/generic.js +14 -2
- package/dist/generic.js.map +1 -1
- package/dist/handlers/access-signals.d.ts +48 -0
- package/dist/handlers/access-signals.js +76 -0
- package/dist/handlers/access-signals.js.map +1 -0
- package/dist/handlers/approvals.d.ts +2 -0
- package/dist/handlers/approvals.js +418 -0
- package/dist/handlers/approvals.js.map +1 -0
- package/dist/handlers/authz-data.d.ts +2 -0
- package/dist/handlers/authz-data.js +627 -0
- package/dist/handlers/authz-data.js.map +1 -0
- package/dist/handlers/authz-layers.d.ts +229 -0
- package/dist/handlers/authz-layers.js +786 -0
- package/dist/handlers/authz-layers.js.map +1 -0
- package/dist/handlers/authz-state.d.ts +80 -0
- package/dist/handlers/authz-state.js +175 -0
- package/dist/handlers/authz-state.js.map +1 -0
- package/dist/handlers/authz.d.ts +2 -0
- package/dist/handlers/authz.js +410 -0
- package/dist/handlers/authz.js.map +1 -0
- package/dist/handlers/billing.d.ts +100 -0
- package/dist/handlers/billing.js +877 -0
- package/dist/handlers/billing.js.map +1 -0
- package/dist/handlers/cedar-ext.d.ts +35 -0
- package/dist/handlers/cedar-ext.js +174 -0
- package/dist/handlers/cedar-ext.js.map +1 -0
- package/dist/handlers/cedar.d.ts +146 -0
- package/dist/handlers/cedar.js +689 -0
- package/dist/handlers/cedar.js.map +1 -0
- package/dist/handlers/connections.d.ts +5 -0
- package/dist/handlers/connections.js +561 -0
- package/dist/handlers/connections.js.map +1 -0
- package/dist/handlers/control.js +6 -1
- package/dist/handlers/control.js.map +1 -1
- package/dist/handlers/device.d.ts +47 -0
- package/dist/handlers/device.js +665 -0
- package/dist/handlers/device.js.map +1 -0
- package/dist/handlers/emu3-misc.d.ts +38 -0
- package/dist/handlers/emu3-misc.js +1056 -0
- package/dist/handlers/emu3-misc.js.map +1 -0
- package/dist/handlers/emu4-actions-access.d.ts +46 -0
- package/dist/handlers/emu4-actions-access.js +107 -0
- package/dist/handlers/emu4-actions-access.js.map +1 -0
- package/dist/handlers/emu4-actions-catalog-extra.d.ts +3 -0
- package/dist/handlers/emu4-actions-catalog-extra.js +204 -0
- package/dist/handlers/emu4-actions-catalog-extra.js.map +1 -0
- package/dist/handlers/emu4-actions-catalog.d.ts +3 -0
- package/dist/handlers/emu4-actions-catalog.js +143 -0
- package/dist/handlers/emu4-actions-catalog.js.map +1 -0
- package/dist/handlers/emu4-actions-def.d.ts +50 -0
- package/dist/handlers/emu4-actions-def.js +250 -0
- package/dist/handlers/emu4-actions-def.js.map +1 -0
- package/dist/handlers/emu4-actions-sandbox.d.ts +36 -0
- package/dist/handlers/emu4-actions-sandbox.js +318 -0
- package/dist/handlers/emu4-actions-sandbox.js.map +1 -0
- package/dist/handlers/emu4-actions-typegen.d.ts +5 -0
- package/dist/handlers/emu4-actions-typegen.js +73 -0
- package/dist/handlers/emu4-actions-typegen.js.map +1 -0
- package/dist/handlers/emu4-actions.d.ts +2 -0
- package/dist/handlers/emu4-actions.js +506 -0
- package/dist/handlers/emu4-actions.js.map +1 -0
- package/dist/handlers/emu4-authz-trust.d.ts +40 -0
- package/dist/handlers/emu4-authz-trust.js +488 -0
- package/dist/handlers/emu4-authz-trust.js.map +1 -0
- package/dist/handlers/emu4-authz.d.ts +2 -0
- package/dist/handlers/emu4-authz.js +752 -0
- package/dist/handlers/emu4-authz.js.map +1 -0
- package/dist/handlers/emu4-billing-core.d.ts +23 -0
- package/dist/handlers/emu4-billing-core.js +22 -0
- package/dist/handlers/emu4-billing-core.js.map +1 -0
- package/dist/handlers/emu4-billing-x.d.ts +2 -0
- package/dist/handlers/emu4-billing-x.js +489 -0
- package/dist/handlers/emu4-billing-x.js.map +1 -0
- package/dist/handlers/emu4-billing.d.ts +14 -0
- package/dist/handlers/emu4-billing.js +846 -0
- package/dist/handlers/emu4-billing.js.map +1 -0
- package/dist/handlers/emu4-clones.d.ts +2 -0
- package/dist/handlers/emu4-clones.js +322 -0
- package/dist/handlers/emu4-clones.js.map +1 -0
- package/dist/handlers/emu4-compliance.d.ts +8 -0
- package/dist/handlers/emu4-compliance.js +39 -0
- package/dist/handlers/emu4-compliance.js.map +1 -0
- package/dist/handlers/emu4-config.d.ts +14 -0
- package/dist/handlers/emu4-config.js +148 -0
- package/dist/handlers/emu4-config.js.map +1 -0
- package/dist/handlers/emu4-cookies.d.ts +8 -0
- package/dist/handlers/emu4-cookies.js +248 -0
- package/dist/handlers/emu4-cookies.js.map +1 -0
- package/dist/handlers/emu4-erasure.d.ts +2 -0
- package/dist/handlers/emu4-erasure.js +587 -0
- package/dist/handlers/emu4-erasure.js.map +1 -0
- package/dist/handlers/emu4-federation.d.ts +8 -0
- package/dist/handlers/emu4-federation.js +18 -0
- package/dist/handlers/emu4-federation.js.map +1 -0
- package/dist/handlers/emu4-journey-math.d.ts +42 -0
- package/dist/handlers/emu4-journey-math.js +99 -0
- package/dist/handlers/emu4-journey-math.js.map +1 -0
- package/dist/handlers/emu4-messaging.d.ts +21 -0
- package/dist/handlers/emu4-messaging.js +595 -0
- package/dist/handlers/emu4-messaging.js.map +1 -0
- package/dist/handlers/emu4-minors.d.ts +7 -0
- package/dist/handlers/emu4-minors.js +408 -0
- package/dist/handlers/emu4-minors.js.map +1 -0
- package/dist/handlers/emu4-oauth-audit.d.ts +5 -0
- package/dist/handlers/emu4-oauth-audit.js +17 -0
- package/dist/handlers/emu4-oauth-audit.js.map +1 -0
- package/dist/handlers/emu4-oauth-auth.d.ts +83 -0
- package/dist/handlers/emu4-oauth-auth.js +363 -0
- package/dist/handlers/emu4-oauth-auth.js.map +1 -0
- package/dist/handlers/emu4-oauth-delivery.d.ts +68 -0
- package/dist/handlers/emu4-oauth-delivery.js +207 -0
- package/dist/handlers/emu4-oauth-delivery.js.map +1 -0
- package/dist/handlers/emu4-oauth-keys.d.ts +11 -0
- package/dist/handlers/emu4-oauth-keys.js +268 -0
- package/dist/handlers/emu4-oauth-keys.js.map +1 -0
- package/dist/handlers/emu4-oauth-pub.d.ts +36 -0
- package/dist/handlers/emu4-oauth-pub.js +420 -0
- package/dist/handlers/emu4-oauth-pub.js.map +1 -0
- package/dist/handlers/emu4-oauth.d.ts +10 -0
- package/dist/handlers/emu4-oauth.js +23 -0
- package/dist/handlers/emu4-oauth.js.map +1 -0
- package/dist/handlers/emu4-policies.d.ts +2 -0
- package/dist/handlers/emu4-policies.js +408 -0
- package/dist/handlers/emu4-policies.js.map +1 -0
- package/dist/handlers/emu4-region.d.ts +2 -0
- package/dist/handlers/emu4-region.js +189 -0
- package/dist/handlers/emu4-region.js.map +1 -0
- package/dist/handlers/emu4-saml.d.ts +12 -0
- package/dist/handlers/emu4-saml.js +532 -0
- package/dist/handlers/emu4-saml.js.map +1 -0
- package/dist/handlers/emu4-shared.d.ts +44 -0
- package/dist/handlers/emu4-shared.js +90 -0
- package/dist/handlers/emu4-shared.js.map +1 -0
- package/dist/handlers/emu4-snapshots.d.ts +38 -0
- package/dist/handlers/emu4-snapshots.js +231 -0
- package/dist/handlers/emu4-snapshots.js.map +1 -0
- package/dist/handlers/emu4-sns.d.ts +9 -0
- package/dist/handlers/emu4-sns.js +21 -0
- package/dist/handlers/emu4-sns.js.map +1 -0
- package/dist/handlers/emu4-trust-binding.d.ts +27 -0
- package/dist/handlers/emu4-trust-binding.js +344 -0
- package/dist/handlers/emu4-trust-binding.js.map +1 -0
- package/dist/handlers/emu4-trust.d.ts +35 -0
- package/dist/handlers/emu4-trust.js +543 -0
- package/dist/handlers/emu4-trust.js.map +1 -0
- package/dist/handlers/federation.d.ts +2 -0
- package/dist/handlers/federation.js +481 -0
- package/dist/handlers/federation.js.map +1 -0
- package/dist/handlers/fga-engine.d.ts +78 -0
- package/dist/handlers/fga-engine.js +663 -0
- package/dist/handlers/fga-engine.js.map +1 -0
- package/dist/handlers/governance.d.ts +2 -0
- package/dist/handlers/governance.js +460 -0
- package/dist/handlers/governance.js.map +1 -0
- package/dist/handlers/hooks.js +17 -1
- package/dist/handlers/hooks.js.map +1 -1
- package/dist/handlers/index.d.ts +5 -1
- package/dist/handlers/index.js +45 -3
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/keys.js +6 -1
- package/dist/handlers/keys.js.map +1 -1
- package/dist/handlers/machines.js +61 -8
- package/dist/handlers/machines.js.map +1 -1
- package/dist/handlers/messaging.d.ts +6 -0
- package/dist/handlers/messaging.js +893 -0
- package/dist/handlers/messaging.js.map +1 -0
- package/dist/handlers/oauth-adv.d.ts +191 -0
- package/dist/handlers/oauth-adv.js +1305 -0
- package/dist/handlers/oauth-adv.js.map +1 -0
- package/dist/handlers/oauth-flows.d.ts +52 -0
- package/dist/handlers/oauth-flows.js +480 -0
- package/dist/handlers/oauth-flows.js.map +1 -0
- package/dist/handlers/oauth.d.ts +96 -0
- package/dist/handlers/oauth.js +793 -0
- package/dist/handlers/oauth.js.map +1 -0
- package/dist/handlers/orgs.js +6 -0
- package/dist/handlers/orgs.js.map +1 -1
- package/dist/handlers/passkeys.d.ts +3 -0
- package/dist/handlers/passkeys.js +293 -0
- package/dist/handlers/passkeys.js.map +1 -0
- package/dist/handlers/platform.d.ts +20 -0
- package/dist/handlers/platform.js +472 -0
- package/dist/handlers/platform.js.map +1 -0
- package/dist/handlers/round2.d.ts +8 -0
- package/dist/handlers/round2.js +372 -0
- package/dist/handlers/round2.js.map +1 -0
- package/dist/handlers/scim.d.ts +4 -0
- package/dist/handlers/scim.js +595 -0
- package/dist/handlers/scim.js.map +1 -0
- package/dist/handlers/sessions.d.ts +9 -3
- package/dist/handlers/sessions.js +76 -38
- package/dist/handlers/sessions.js.map +1 -1
- package/dist/handlers/support.d.ts +20 -0
- package/dist/handlers/support.js +62 -0
- package/dist/handlers/support.js.map +1 -0
- package/dist/handlers/users.js +7 -0
- package/dist/handlers/users.js.map +1 -1
- package/dist/handlers/workflows.d.ts +2 -0
- package/dist/handlers/workflows.js +428 -0
- package/dist/handlers/workflows.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/jwe.d.ts +18 -0
- package/dist/jwe.js +101 -0
- package/dist/jwe.js.map +1 -0
- package/dist/jws.d.ts +41 -0
- package/dist/jws.js +135 -0
- package/dist/jws.js.map +1 -0
- package/dist/messages.d.ts +7 -0
- package/dist/messages.js +8 -4
- package/dist/messages.js.map +1 -1
- package/dist/messaging-callbacks.d.ts +100 -0
- package/dist/messaging-callbacks.js +767 -0
- package/dist/messaging-callbacks.js.map +1 -0
- package/dist/openapi.js +41 -1
- package/dist/openapi.js.map +1 -1
- package/dist/parity-bin.js +3 -1
- package/dist/parity-bin.js.map +1 -1
- package/dist/parity-emu3-authz.d.ts +3 -0
- package/dist/parity-emu3-authz.js +61 -0
- package/dist/parity-emu3-authz.js.map +1 -0
- package/dist/parity-emu3-billing.d.ts +3 -0
- package/dist/parity-emu3-billing.js +25 -0
- package/dist/parity-emu3-billing.js.map +1 -0
- package/dist/parity-emu3-messaging.d.ts +3 -0
- package/dist/parity-emu3-messaging.js +27 -0
- package/dist/parity-emu3-messaging.js.map +1 -0
- package/dist/parity-emu3-misc.d.ts +2 -0
- package/dist/parity-emu3-misc.js +63 -0
- package/dist/parity-emu3-misc.js.map +1 -0
- package/dist/parity-emu3-oauth.d.ts +2 -0
- package/dist/parity-emu3-oauth.js +39 -0
- package/dist/parity-emu3-oauth.js.map +1 -0
- package/dist/parity-emu4-actions.d.ts +2 -0
- package/dist/parity-emu4-actions.js +38 -0
- package/dist/parity-emu4-actions.js.map +1 -0
- package/dist/parity-emu4-authz.d.ts +3 -0
- package/dist/parity-emu4-authz.js +68 -0
- package/dist/parity-emu4-authz.js.map +1 -0
- package/dist/parity-emu4-billing.d.ts +6 -0
- package/dist/parity-emu4-billing.js +44 -0
- package/dist/parity-emu4-billing.js.map +1 -0
- package/dist/parity-emu4-compliance.d.ts +2 -0
- package/dist/parity-emu4-compliance.js +92 -0
- package/dist/parity-emu4-compliance.js.map +1 -0
- package/dist/parity-emu4-federation.d.ts +2 -0
- package/dist/parity-emu4-federation.js +33 -0
- package/dist/parity-emu4-federation.js.map +1 -0
- package/dist/parity-emu4-messaging.d.ts +3 -0
- package/dist/parity-emu4-messaging.js +42 -0
- package/dist/parity-emu4-messaging.js.map +1 -0
- package/dist/parity-emu4-oauth.d.ts +2 -0
- package/dist/parity-emu4-oauth.js +55 -0
- package/dist/parity-emu4-oauth.js.map +1 -0
- package/dist/parity-emu4-trust.d.ts +2 -0
- package/dist/parity-emu4-trust.js +41 -0
- package/dist/parity-emu4-trust.js.map +1 -0
- package/dist/parity-routes.d.ts +14 -0
- package/dist/parity-routes.js +439 -0
- package/dist/parity-routes.js.map +1 -0
- package/dist/parity.d.ts +10 -3
- package/dist/parity.js +14 -5
- package/dist/parity.js.map +1 -1
- package/dist/sns-cert.d.ts +9 -0
- package/dist/sns-cert.js +101 -0
- package/dist/sns-cert.js.map +1 -0
- package/dist/tokens.d.ts +85 -3
- package/dist/tokens.js +196 -24
- package/dist/tokens.js.map +1 -1
- package/dist/webauthn-virtual.d.ts +70 -0
- package/dist/webauthn-virtual.js +186 -0
- package/dist/webauthn-virtual.js.map +1 -0
- package/dist/webhook-ext.d.ts +16 -0
- package/dist/webhook-ext.js +218 -0
- package/dist/webhook-ext.js.map +1 -0
- package/dist/webhooks.d.ts +3 -0
- package/dist/webhooks.js +37 -3
- package/dist/webhooks.js.map +1 -1
- 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/jwe.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact JWE decryption on Web Crypto only (like `jws.ts`), for request objects a client encrypts to the emulator's
|
|
3
|
+
* published encryption key: key management `RSA-OAEP-256` or `ECDH-ES` (P-256, direct), content encryption
|
|
4
|
+
* `A128GCM`, `A256GCM`, `A128CBC-HS256` or `A256CBC-HS512`. The same lists the real provider accepts.
|
|
5
|
+
*/
|
|
6
|
+
export declare const OP_DECRYPT_ALGS: readonly ["RSA-OAEP-256", "ECDH-ES"];
|
|
7
|
+
export type OpDecryptAlg = (typeof OP_DECRYPT_ALGS)[number];
|
|
8
|
+
export declare const JWE_ENCS: readonly ["A128GCM", "A256GCM", "A128CBC-HS256", "A256CBC-HS512"];
|
|
9
|
+
export declare const isOpDecryptAlg: (v: unknown) => v is OpDecryptAlg;
|
|
10
|
+
export interface OpEncKey {
|
|
11
|
+
alg: OpDecryptAlg;
|
|
12
|
+
kid: string;
|
|
13
|
+
publicJwk: Record<string, any>;
|
|
14
|
+
privateKey: CryptoKey;
|
|
15
|
+
}
|
|
16
|
+
export declare function generateEncKey(alg: OpDecryptAlg, kid: string): Promise<OpEncKey>;
|
|
17
|
+
/** The plaintext of a compact JWE, or null when it is malformed, names another key, or fails authentication. Never throws. */
|
|
18
|
+
export declare function decryptJwe(jwe: string, key: OpEncKey): Promise<string | null>;
|