sealbridge 0.2.2 → 0.3.1
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/README.ja.md +492 -30
- package/README.md +522 -109
- package/dist/cli/dist/accept.d.ts +13 -0
- package/dist/cli/dist/accept.js +115 -0
- package/dist/cli/dist/accept.js.map +1 -0
- package/dist/cli/dist/approval-summary.d.ts +1 -1
- package/dist/cli/dist/board.d.ts +10 -9
- package/dist/cli/dist/board.js +62 -31
- package/dist/cli/dist/board.js.map +1 -1
- package/dist/cli/dist/command-identity.d.ts +6 -0
- package/dist/cli/dist/command-identity.js +13 -0
- package/dist/cli/dist/command-identity.js.map +1 -0
- package/dist/cli/dist/config.d.ts +3 -0
- package/dist/cli/dist/config.js +29 -0
- package/dist/cli/dist/config.js.map +1 -0
- package/dist/cli/dist/connections.d.ts +15 -0
- package/dist/cli/dist/connections.js +191 -0
- package/dist/cli/dist/connections.js.map +1 -0
- package/dist/cli/dist/contacts.d.ts +4 -3
- package/dist/cli/dist/contacts.js +39 -28
- package/dist/cli/dist/contacts.js.map +1 -1
- package/dist/cli/dist/doctor.d.ts +9 -0
- package/dist/cli/dist/doctor.js +46 -5
- package/dist/cli/dist/doctor.js.map +1 -1
- package/dist/cli/dist/error-messages.js +22 -0
- package/dist/cli/dist/error-messages.js.map +1 -1
- package/dist/cli/dist/index.js +44 -6
- package/dist/cli/dist/index.js.map +1 -1
- package/dist/cli/dist/invite-output.d.ts +14 -0
- package/dist/cli/dist/invite-output.js +66 -0
- package/dist/cli/dist/invite-output.js.map +1 -0
- package/dist/cli/dist/invite-share.d.ts +6 -3
- package/dist/cli/dist/invite-share.js +40 -15
- package/dist/cli/dist/invite-share.js.map +1 -1
- package/dist/cli/dist/invites-migrate.d.ts +3 -0
- package/dist/cli/dist/invites-migrate.js +33 -0
- package/dist/cli/dist/invites-migrate.js.map +1 -0
- package/dist/cli/dist/mcp.d.ts +7 -5
- package/dist/cli/dist/mcp.js +23 -18
- package/dist/cli/dist/mcp.js.map +1 -1
- package/dist/cli/dist/network.d.ts +11 -1
- package/dist/cli/dist/network.js +150 -87
- package/dist/cli/dist/network.js.map +1 -1
- package/dist/cli/dist/pending.d.ts +8 -0
- package/dist/cli/dist/pending.js +50 -0
- package/dist/cli/dist/pending.js.map +1 -0
- package/dist/cli/dist/public-settings.d.ts +5 -4
- package/dist/cli/dist/public-settings.js +13 -15
- package/dist/cli/dist/public-settings.js.map +1 -1
- package/dist/cli/dist/receipt.d.ts +1 -1
- package/dist/cli/dist/relay-auth.d.ts +3 -0
- package/dist/cli/dist/relay-auth.js +23 -0
- package/dist/cli/dist/relay-auth.js.map +1 -0
- package/dist/cli/dist/requests.d.ts +10 -0
- package/dist/cli/dist/requests.js +91 -0
- package/dist/cli/dist/requests.js.map +1 -0
- package/dist/cli/dist/sdk.d.ts +10 -0
- package/dist/cli/dist/sdk.js +7 -0
- package/dist/cli/dist/sdk.js.map +1 -0
- package/dist/cli/dist/setup-files.d.ts +24 -0
- package/dist/cli/dist/setup-files.js +190 -0
- package/dist/cli/dist/setup-files.js.map +1 -0
- package/dist/cli/dist/setup-hosts.d.ts +29 -0
- package/dist/cli/dist/setup-hosts.js +75 -0
- package/dist/cli/dist/setup-hosts.js.map +1 -0
- package/dist/cli/dist/setup.d.ts +61 -0
- package/dist/cli/dist/setup.js +243 -0
- package/dist/cli/dist/setup.js.map +1 -0
- package/dist/cli/dist/task-input.d.ts +1 -1
- package/dist/cli/dist/wake-hook.d.ts +1 -1
- package/dist/cli/dist/worker-json.d.ts +4 -0
- package/dist/cli/dist/worker-json.js +87 -0
- package/dist/cli/dist/worker-json.js.map +1 -0
- package/dist/examples/two-owner-demo/dist/run-demo.d.ts +13 -13
- package/dist/package.json +1 -1
- package/dist/packages/adapters/dist/command.d.ts +2 -2
- package/dist/packages/adapters/dist/credential-proxy.d.ts +2 -2
- package/dist/packages/adapters/dist/index.d.ts +1 -1
- package/dist/packages/adapters/dist/mcp.d.ts +2 -2
- package/dist/packages/adapters/dist/openai.d.ts +2 -2
- package/dist/packages/adapters/dist/sandbox.d.ts +2 -2
- package/dist/packages/core/dist/connection.d.ts +58 -0
- package/dist/packages/core/dist/connection.js +132 -0
- package/dist/packages/core/dist/connection.js.map +1 -0
- package/dist/packages/core/dist/delivery-status.d.ts +22 -0
- package/dist/packages/core/dist/delivery-status.js +53 -0
- package/dist/packages/core/dist/delivery-status.js.map +1 -0
- package/dist/packages/core/dist/discovery.d.ts +7 -6
- package/dist/packages/core/dist/discovery.js +19 -20
- package/dist/packages/core/dist/discovery.js.map +1 -1
- package/dist/packages/core/dist/edge.d.ts +1 -0
- package/dist/packages/core/dist/edge.js +1 -0
- package/dist/packages/core/dist/edge.js.map +1 -1
- package/dist/packages/core/dist/index.d.ts +3 -0
- package/dist/packages/core/dist/index.js +3 -0
- package/dist/packages/core/dist/index.js.map +1 -1
- package/dist/packages/core/dist/protocol.d.ts +24 -0
- package/dist/packages/core/dist/protocol.js +54 -0
- package/dist/packages/core/dist/protocol.js.map +1 -0
- package/dist/packages/core/dist/receipts.d.ts +1 -0
- package/dist/packages/core/dist/receipts.js +1 -1
- package/dist/packages/core/dist/receipts.js.map +1 -1
- package/dist/packages/core/dist/schema.d.ts +1 -0
- package/dist/packages/core/dist/schema.js +13 -2
- package/dist/packages/core/dist/schema.js.map +1 -1
- package/dist/packages/ledger/dist/index.d.ts +1 -1
- package/dist/packages/relay/dist/admission.d.ts +14 -0
- package/dist/packages/relay/dist/admission.js +70 -0
- package/dist/packages/relay/dist/admission.js.map +1 -0
- package/dist/packages/relay/dist/fetch.d.ts +8 -2
- package/dist/packages/relay/dist/fetch.js +41 -12
- package/dist/packages/relay/dist/fetch.js.map +1 -1
- package/dist/packages/relay/dist/index.d.ts +23 -12
- package/dist/packages/relay/dist/index.js +130 -78
- package/dist/packages/relay/dist/index.js.map +1 -1
- package/dist/packages/relay/dist/journal.d.ts +1 -1
- package/dist/packages/relay/dist/notifications.d.ts +1 -1
- package/dist/packages/relay/dist/retry.d.ts +23 -0
- package/dist/packages/relay/dist/retry.js +43 -1
- package/dist/packages/relay/dist/retry.js.map +1 -1
- package/dist/packages/relay/dist/ssrf.d.ts +3 -2
- package/dist/packages/relay/dist/ssrf.js.map +1 -1
- package/dist/packages/relay/dist/worker.js +1 -1
- package/dist/packages/relay/dist/worker.js.map +1 -1
- package/dist/packages/runtime/dist/a2a.d.ts +1 -1
- package/dist/packages/runtime/dist/a2a.js +1 -1
- package/dist/packages/runtime/dist/adapter.d.ts +2 -2
- package/dist/packages/runtime/dist/application-config.d.ts +20 -0
- package/dist/packages/runtime/dist/application-config.js +218 -0
- package/dist/packages/runtime/dist/application-config.js.map +1 -0
- package/dist/packages/runtime/dist/approval-providers.d.ts +24 -3
- package/dist/packages/runtime/dist/approval-providers.js +79 -3
- package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
- package/dist/packages/runtime/dist/connection-admission-review.d.ts +39 -0
- package/dist/packages/runtime/dist/connection-admission-review.js +86 -0
- package/dist/packages/runtime/dist/connection-admission-review.js.map +1 -0
- package/dist/packages/runtime/dist/connection-persistence.d.ts +35 -0
- package/dist/packages/runtime/dist/connection-persistence.js +181 -0
- package/dist/packages/runtime/dist/connection-persistence.js.map +1 -0
- package/dist/packages/runtime/dist/connection-records.d.ts +167 -0
- package/dist/packages/runtime/dist/connection-records.js +132 -0
- package/dist/packages/runtime/dist/connection-records.js.map +1 -0
- package/dist/packages/runtime/dist/connection-router.d.ts +45 -0
- package/dist/packages/runtime/dist/connection-router.js +130 -0
- package/dist/packages/runtime/dist/connection-router.js.map +1 -0
- package/dist/packages/runtime/dist/connection-service.d.ts +159 -0
- package/dist/packages/runtime/dist/connection-service.js +239 -0
- package/dist/packages/runtime/dist/connection-service.js.map +1 -0
- package/dist/packages/runtime/dist/connection-transport.d.ts +14 -0
- package/dist/packages/runtime/dist/connection-transport.js +89 -0
- package/dist/packages/runtime/dist/connection-transport.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-records.d.ts +180 -0
- package/dist/packages/runtime/dist/delivery-records.js +205 -0
- package/dist/packages/runtime/dist/delivery-records.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-status-router.d.ts +27 -0
- package/dist/packages/runtime/dist/delivery-status-router.js +150 -0
- package/dist/packages/runtime/dist/delivery-status-router.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-status.d.ts +43 -0
- package/dist/packages/runtime/dist/delivery-status.js +193 -0
- package/dist/packages/runtime/dist/delivery-status.js.map +1 -0
- package/dist/packages/runtime/dist/delivery-store.d.ts +125 -0
- package/dist/packages/runtime/dist/delivery-store.js +1047 -0
- package/dist/packages/runtime/dist/delivery-store.js.map +1 -0
- package/dist/packages/runtime/dist/gateway.d.ts +4 -3
- package/dist/packages/runtime/dist/gateway.js.map +1 -1
- package/dist/packages/runtime/dist/held-request-review.d.ts +49 -0
- package/dist/packages/runtime/dist/held-request-review.js +122 -0
- package/dist/packages/runtime/dist/held-request-review.js.map +1 -0
- package/dist/packages/runtime/dist/held-request-store.d.ts +112 -0
- package/dist/packages/runtime/dist/held-request-store.js +290 -0
- package/dist/packages/runtime/dist/held-request-store.js.map +1 -0
- package/dist/packages/runtime/dist/idempotency-store.d.ts +53 -0
- package/dist/packages/runtime/dist/idempotency-store.js +331 -0
- package/dist/packages/runtime/dist/idempotency-store.js.map +1 -0
- package/dist/packages/runtime/dist/inbox.d.ts +1 -1
- package/dist/packages/runtime/dist/index.d.ts +27 -1
- package/dist/packages/runtime/dist/index.js +26 -0
- package/dist/packages/runtime/dist/index.js.map +1 -1
- package/dist/packages/runtime/dist/invite-store.d.ts +76 -0
- package/dist/packages/runtime/dist/invite-store.js +337 -0
- package/dist/packages/runtime/dist/invite-store.js.map +1 -0
- package/dist/packages/runtime/dist/key-store.d.ts +77 -0
- package/dist/packages/runtime/dist/key-store.js +226 -0
- package/dist/packages/runtime/dist/key-store.js.map +1 -0
- package/dist/packages/runtime/dist/local-identity.d.ts +33 -0
- package/dist/packages/runtime/dist/local-identity.js +279 -0
- package/dist/packages/runtime/dist/local-identity.js.map +1 -0
- package/dist/packages/runtime/dist/mcp-rpc.d.ts +19 -0
- package/dist/packages/runtime/dist/mcp-rpc.js +175 -0
- package/dist/packages/runtime/dist/mcp-rpc.js.map +1 -0
- package/dist/packages/runtime/dist/mcp-server.d.ts +46 -19
- package/dist/packages/runtime/dist/mcp-server.js +427 -184
- package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
- package/dist/packages/runtime/dist/mcp-tool-catalog.d.ts +1 -1
- package/dist/packages/runtime/dist/mcp-tool-catalog.js +172 -13
- package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
- package/dist/packages/runtime/dist/mcp.d.ts +2 -2
- package/dist/packages/runtime/dist/message-status.d.ts +32 -0
- package/dist/packages/runtime/dist/message-status.js +29 -0
- package/dist/packages/runtime/dist/message-status.js.map +1 -0
- package/dist/packages/runtime/dist/outbox.d.ts +91 -0
- package/dist/packages/runtime/dist/outbox.js +462 -0
- package/dist/packages/runtime/dist/outbox.js.map +1 -0
- package/dist/packages/runtime/dist/policy.d.ts +1 -1
- package/dist/packages/runtime/dist/protocol-peer-store.d.ts +40 -0
- package/dist/packages/runtime/dist/protocol-peer-store.js +176 -0
- package/dist/packages/runtime/dist/protocol-peer-store.js.map +1 -0
- package/dist/packages/runtime/dist/protocol-release.d.ts +26 -0
- package/dist/packages/runtime/dist/protocol-release.js +76 -0
- package/dist/packages/runtime/dist/protocol-release.js.map +1 -0
- package/dist/packages/runtime/dist/quota.d.ts +1 -1
- package/dist/packages/runtime/dist/relay-selection.d.ts +20 -0
- package/dist/packages/runtime/dist/relay-selection.js +34 -0
- package/dist/packages/runtime/dist/relay-selection.js.map +1 -0
- package/dist/packages/runtime/dist/requester-pending-store.d.ts +59 -0
- package/dist/packages/runtime/dist/requester-pending-store.js +266 -0
- package/dist/packages/runtime/dist/requester-pending-store.js.map +1 -0
- package/dist/packages/runtime/dist/secret-store.d.ts +19 -0
- package/dist/packages/runtime/dist/secret-store.js +51 -0
- package/dist/packages/runtime/dist/secret-store.js.map +1 -0
- package/dist/packages/runtime/dist/session-audit.d.ts +29 -7
- package/dist/packages/runtime/dist/session-audit.js +149 -29
- package/dist/packages/runtime/dist/session-audit.js.map +1 -1
- package/dist/packages/runtime/dist/session.d.ts +101 -9
- package/dist/packages/runtime/dist/session.js +696 -96
- package/dist/packages/runtime/dist/session.js.map +1 -1
- package/dist/packages/runtime/dist/task-journal.d.ts +18 -3
- package/dist/packages/runtime/dist/task-journal.js +271 -18
- package/dist/packages/runtime/dist/task-journal.js.map +1 -1
- package/dist/packages/runtime/dist/verifier.d.ts +3 -2
- package/dist/packages/runtime/dist/verifier.js +1 -0
- package/dist/packages/runtime/dist/verifier.js.map +1 -1
- package/dist/packages/runtime/dist/worker-trust-store.d.ts +111 -0
- package/dist/packages/runtime/dist/worker-trust-store.js +592 -0
- package/dist/packages/runtime/dist/worker-trust-store.js.map +1 -0
- package/dist/packages/sandbox/dist/container.d.ts +1 -1
- package/dist/packages/sandbox/dist/index.d.ts +1 -1
- package/dist/spec/README.ja.md +21 -1
- package/dist/spec/README.md +20 -1
- package/dist/spec/agent-card.schema.json +11 -1
- package/dist/spec/delivery-status.schema.json +106 -0
- package/dist/spec/examples/protocol-versions/sample-agent-card.json +35 -0
- package/dist/spec/examples/sample-delivery-status.json +21 -0
- package/dist/spec/examples/sample-task-manifest.0.1.0.json +173 -0
- package/dist/spec/examples/sample-task-manifest.0.2.0.json +173 -0
- package/dist/spec/task-manifest.0.1.0.schema.json +422 -0
- package/dist/spec/task-manifest.0.2.0.schema.json +422 -0
- package/dist/spec/task-manifest.schema.json +9 -418
- package/docs/sdk.ja.md +133 -0
- package/docs/sdk.md +138 -0
- package/package.json +15 -3
|
@@ -5,5 +5,6 @@ export declare function signUsage(payload: Usage, key: KeyPair): import("./types
|
|
|
5
5
|
export declare function signAck(payload: Ack, key: KeyPair): import("./types.js").Signed<Ack>;
|
|
6
6
|
export declare function signEnvelope(payload: Omit<Envelope, 'type' | 'envelopeId' | 'senderDid'>, key: KeyPair, options?: {
|
|
7
7
|
encrypt?: boolean;
|
|
8
|
+
signedAt?: string;
|
|
8
9
|
}): SignedEnvelope;
|
|
9
10
|
export declare function verifyEnvelope(envelope: SignedEnvelope, recipientDid?: string): boolean;
|
|
@@ -52,7 +52,7 @@ export function signEnvelope(payload, key, options) {
|
|
|
52
52
|
senderDid: envelope.senderDid,
|
|
53
53
|
recipientDid: envelope.recipientDid,
|
|
54
54
|
});
|
|
55
|
-
return signPayload(envelope, key);
|
|
55
|
+
return signPayload(envelope, key, options?.signedAt);
|
|
56
56
|
}
|
|
57
57
|
export function verifyEnvelope(envelope, recipientDid) {
|
|
58
58
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipts.js","sourceRoot":"","sources":["../src/receipts.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAAU,EACV,MAAe,EACf,GAAY,EACZ,WAAiC,UAAU;IAE3C,OAAO,WAAW,CAChB;QACE,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,UAAU,EAAE;QACvB,MAAM;QACN,IAAI;QACJ,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC5B,QAAQ;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,EACD,GAAG,CACJ,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,cAAc,CAC5B,OAAwB,EACxB,QAAgB,EAChB,MAAc,EACd,IAAU,EACV,MAAe;IAEf,IAAI,CAAC;QACH,cAAc,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,OAAO,CACL,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC/B,CAAC,CAAC,MAAM,KAAK,MAAM;YACnB,CAAC,CAAC,IAAI,KAAK,IAAI;YACf,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC;YACjC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAC1B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,OAAc,EAAE,GAAY;IACpD,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AACD,MAAM,UAAU,OAAO,CAAC,OAAY,EAAE,GAAY;IAChD,IAAI,OAAO,CAAC,WAAW,KAAK,GAAG,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACrE,OAAO,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AACD,MAAM,UAAU,YAAY,CAC1B,OAA4D,EAC5D,GAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"receipts.js","sourceRoot":"","sources":["../src/receipts.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { Ajv2020 } from 'ajv/dist/2020.js';
|
|
|
2
2
|
import type { TaskManifest, Schema } from './types.js';
|
|
3
3
|
export declare function createAjv(): Ajv2020;
|
|
4
4
|
export declare const specDirectory: URL;
|
|
5
|
+
export declare const SCHEMA_NAMES: readonly ["task-manifest", "task-manifest.0.1.0", "task-manifest.0.2.0", "agent-card", "delivery-status", "envelope", "usage-receipt", "ack-receipt", "capability-token", "approval-receipt", "audit-entry"];
|
|
5
6
|
export declare function loadSchema(name: string): Schema;
|
|
6
7
|
/** Spec files are static. Rebuilding Ajv for every envelope check dominates a session. */
|
|
7
8
|
export declare function schemaRegistry(): Ajv2020;
|
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
import { readFileSync, readdirSync } from 'node:fs';
|
|
3
3
|
import { Ajv2020 } from 'ajv/dist/2020.js';
|
|
4
4
|
import formats from 'ajv-formats';
|
|
5
|
+
import { isManifestProtocolVersion } from './protocol.js';
|
|
5
6
|
export function createAjv() {
|
|
6
7
|
const ajv = new Ajv2020({ allErrors: true, strict: false, validateFormats: true });
|
|
7
8
|
formats(ajv);
|
|
8
9
|
return ajv;
|
|
9
10
|
}
|
|
10
11
|
export const specDirectory = new URL('../../../spec/', import.meta.url);
|
|
12
|
+
export const SCHEMA_NAMES = [
|
|
13
|
+
'task-manifest', 'task-manifest.0.1.0', 'task-manifest.0.2.0', 'agent-card',
|
|
14
|
+
'delivery-status', 'envelope', 'usage-receipt', 'ack-receipt', 'capability-token', 'approval-receipt', 'audit-entry',
|
|
15
|
+
];
|
|
11
16
|
export function loadSchema(name) {
|
|
12
|
-
if (
|
|
17
|
+
if (!SCHEMA_NAMES.some(known => known === name))
|
|
13
18
|
throw new Error('INVALID_SCHEMA_NAME');
|
|
14
19
|
return JSON.parse(readFileSync(new URL(name + '.schema.json', specDirectory), 'utf8'));
|
|
15
20
|
}
|
|
@@ -25,13 +30,19 @@ export function schemaRegistry() {
|
|
|
25
30
|
return ajv;
|
|
26
31
|
}
|
|
27
32
|
export function validateSchema(name, value) {
|
|
33
|
+
if (!SCHEMA_NAMES.some(known => known === name))
|
|
34
|
+
throw new Error('INVALID_SCHEMA_NAME');
|
|
28
35
|
const ajv = schemaRegistry();
|
|
29
36
|
const validate = ajv.getSchema(name);
|
|
30
37
|
if (!validate(value))
|
|
31
38
|
throw new Error('SCHEMA_VIOLATION: ' + ajv.errorsText(validate.errors));
|
|
32
39
|
}
|
|
33
40
|
export function validateManifest(value) {
|
|
34
|
-
|
|
41
|
+
const version = value && typeof value === 'object' && !Array.isArray(value)
|
|
42
|
+
? value.protocolVersion : undefined;
|
|
43
|
+
if (version !== undefined && !isManifestProtocolVersion(version))
|
|
44
|
+
throw new Error('PROTOCOL_VERSION_UNSUPPORTED');
|
|
45
|
+
validateSchema(isManifestProtocolVersion(version) ? 'task-manifest.' + version : 'task-manifest', value);
|
|
35
46
|
}
|
|
36
47
|
export function assertSynchronousSchema(schema) {
|
|
37
48
|
if (!schema || typeof schema !== 'object')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,OAAO,MAAM,aAAa,CAAC;AAElC,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IAClF,OAA2C,CAAC,GAAG,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AACD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxE,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Status-only send failures; response text is never included in diagnostics. */
|
|
2
|
+
export declare class RelayAdmissionError extends Error {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
readonly retryAfterMs?: number | undefined;
|
|
5
|
+
readonly code = "RELAY_RETRY_LATER";
|
|
6
|
+
constructor(status: number, retryAfterMs?: number | undefined);
|
|
7
|
+
}
|
|
8
|
+
export declare class RelayDuplicateEnvelopeError extends Error {
|
|
9
|
+
readonly status: number;
|
|
10
|
+
readonly code = "REPLAYED_ENVELOPE";
|
|
11
|
+
constructor(status?: number);
|
|
12
|
+
}
|
|
13
|
+
/** Decode at most 1 KiB and only the two documented admission responses. */
|
|
14
|
+
export declare function decodeAdmissionError(response: Response): Promise<Error>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/** Status-only send failures; response text is never included in diagnostics. */
|
|
3
|
+
export class RelayAdmissionError extends Error {
|
|
4
|
+
status;
|
|
5
|
+
retryAfterMs;
|
|
6
|
+
code = 'RELAY_RETRY_LATER';
|
|
7
|
+
constructor(status, retryAfterMs) {
|
|
8
|
+
super('RELAY_REJECTED: ' + status);
|
|
9
|
+
this.status = status;
|
|
10
|
+
this.retryAfterMs = retryAfterMs;
|
|
11
|
+
this.name = 'RelayAdmissionError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class RelayDuplicateEnvelopeError extends Error {
|
|
15
|
+
status;
|
|
16
|
+
code = 'REPLAYED_ENVELOPE';
|
|
17
|
+
constructor(status = 400) {
|
|
18
|
+
super('RELAY_REJECTED: ' + status);
|
|
19
|
+
this.status = status;
|
|
20
|
+
this.name = 'RelayDuplicateEnvelopeError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Decode at most 1 KiB and only the two documented admission responses. */
|
|
24
|
+
export async function decodeAdmissionError(response) {
|
|
25
|
+
let value;
|
|
26
|
+
const reader = response.body?.getReader();
|
|
27
|
+
if (reader) {
|
|
28
|
+
try {
|
|
29
|
+
const chunks = [];
|
|
30
|
+
let size = 0;
|
|
31
|
+
for (;;) {
|
|
32
|
+
const part = await reader.read();
|
|
33
|
+
if (part.done)
|
|
34
|
+
break;
|
|
35
|
+
size += part.value.byteLength;
|
|
36
|
+
if (size > 1024)
|
|
37
|
+
break;
|
|
38
|
+
chunks.push(part.value);
|
|
39
|
+
}
|
|
40
|
+
if (size <= 1024) {
|
|
41
|
+
const bytes = new Uint8Array(size);
|
|
42
|
+
let offset = 0;
|
|
43
|
+
for (const chunk of chunks) {
|
|
44
|
+
bytes.set(chunk, offset);
|
|
45
|
+
offset += chunk.length;
|
|
46
|
+
}
|
|
47
|
+
const parsed = JSON.parse(new TextDecoder().decode(bytes));
|
|
48
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
49
|
+
value = parsed;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch { /* Malformed responses retain status-only behavior. */ }
|
|
53
|
+
finally {
|
|
54
|
+
await reader.cancel().catch(() => { });
|
|
55
|
+
reader.releaseLock();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (response.status === 400 && value?.error === 'REPLAYED_ENVELOPE' &&
|
|
59
|
+
Object.keys(value).join(',') === 'error')
|
|
60
|
+
return new RelayDuplicateEnvelopeError();
|
|
61
|
+
if (response.status === 429) {
|
|
62
|
+
const hint = value?.error === 'RELAY_RETRY_LATER' && value.retryable === true &&
|
|
63
|
+
Object.keys(value).sort().join(',') === 'error,retryAfterMs,retryable' &&
|
|
64
|
+
Number.isSafeInteger(value.retryAfterMs) && Number(value.retryAfterMs) > 0 && Number(value.retryAfterMs) <= 3_600_000
|
|
65
|
+
? Number(value.retryAfterMs) : undefined;
|
|
66
|
+
return new RelayAdmissionError(429, hint);
|
|
67
|
+
}
|
|
68
|
+
return new Error('RELAY_REJECTED: ' + response.status);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission.js","sourceRoot":"","sources":["../src/admission.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SignedEnvelope, SignedAgentCard, RelayAuthAction, KeyPair } from '
|
|
1
|
+
import type { SignedEnvelope, SignedAgentCard, RelayAuthAction, KeyPair } from '../../core/dist/edge.js';
|
|
2
2
|
import type { RelayWakeOptions, RelayWakeAttempt, RelayOperation, SignedRelayDeliveryStatus } from './notifications.js';
|
|
3
3
|
export * from './notifications.js';
|
|
4
4
|
export declare function verifyRelayEnvelope(e: SignedEnvelope, recipient?: string): boolean;
|
|
@@ -203,7 +203,7 @@ export declare function relayHttpHeaders(kind?: 'json' | 'empty' | 'sse'): Recor
|
|
|
203
203
|
* Names that the live relay does not throw today stay listed so a later
|
|
204
204
|
* constant code is not replaced by RELAY_INTERNAL_ERROR.
|
|
205
205
|
*/
|
|
206
|
-
export declare const KNOWN_RELAY_ERROR_CODES: readonly ["INVALID_ENVELOPE", "INVALID_SIGNED_ENVELOPE", "ENVELOPE_EXPIRED", "REPLAYED_ENVELOPE", "DUPLICATE_ENVELOPE_ID", "ENVELOPE_TOO_LARGE", "RELAY_CAPACITY", "RELAY_QUEUE_FULL", "QUEUE_BYTES_EXCEEDED", "QUEUE_LIMIT_EXCEEDED", "RELAY_BYTE_BUDGET_EXCEEDED", "SENDER_QUOTA_EXCEEDED", "INVALID_RECIPIENT_DID", "MISSING_RECIPIENT_DID", "INVALID_DID", "RELAY_TAMPERING_DETECTED", "INVALID_AGENT_CARD", "INVALID_AGENT_SNAPSHOT", "AMBIGUOUS_AGENT_CARD_OWNER", "AGENT_CARD_EXPIRED", "AGENT_CARD_EXPIRY_TOO_LONG", "AGENT_CARD_DELEGATION_REQUIRED", "AGENT_DELEGATION_REQUIRED", "AGENT_CARD_DELEGATION_INVALID", "AGENT_CARD_TOO_LARGE", "AGENT_REGISTRY_FULL", "AGENT_CARD_TTL_INVALID", "AGENT_OWNER_OR_VERSION_MISMATCH", "NO_AGENT_REGISTERED", "RELAY_UNAUTHORIZED", "RELAY_AUTH_REQUIRED", "RELAY_AUTH_INVALID", "RELAY_AUTH_SIGNATURE_INVALID", "RELAY_AUTH_RECIPIENT_MISMATCH", "RELAY_AUTH_ACTION_MISMATCH", "RELAY_AUTH_EXPIRED", "RELAY_AUTH_FUTURE_ISSUED_AT", "RELAY_AUTH_REPLAYED", "RELAY_AUTH_NONCE_INVALID", "RELAY_AUTH_ORIGIN_REQUIRED", "RELAY_AUTH_ORIGIN_MISMATCH", "RELAY_QUERY_AUTH_DISABLED", "INVALID_RELAY_ORIGIN", "RATE_LIMITED", "RATE_LIMITER_UNAVAILABLE", "PAYLOAD_TOO_LARGE", "BODY_TOO_LARGE", "MISSING_BODY", "INVALID_JSON", "INVALID_UNICODE", "INVALID_LIMIT", "INVALID_RELAY_LIMIT", "INVALID_TIMEOUT", "INVALID_WAIT", "MISSING_ENVELOPE_ID", "UNSUPPORTED_METHOD", "NOT_FOUND", "WEBSOCKET_UPGRADE_REQUIRED", "INVALID_REQUEST", "INVALID_RELAY_SNAPSHOT", "RELAY_INTERNAL_ERROR"];
|
|
206
|
+
export declare const KNOWN_RELAY_ERROR_CODES: readonly ["INVALID_ENVELOPE", "INVALID_SIGNED_ENVELOPE", "ENVELOPE_EXPIRED", "REPLAYED_ENVELOPE", "DUPLICATE_ENVELOPE_ID", "ENVELOPE_TOO_LARGE", "RELAY_CAPACITY", "RELAY_RETRY_LATER", "RELAY_QUEUE_FULL", "QUEUE_BYTES_EXCEEDED", "QUEUE_LIMIT_EXCEEDED", "RELAY_BYTE_BUDGET_EXCEEDED", "SENDER_QUOTA_EXCEEDED", "INVALID_RECIPIENT_DID", "MISSING_RECIPIENT_DID", "INVALID_DID", "RELAY_TAMPERING_DETECTED", "INVALID_AGENT_CARD", "INVALID_AGENT_SNAPSHOT", "AMBIGUOUS_AGENT_CARD_OWNER", "AGENT_CARD_EXPIRED", "AGENT_CARD_EXPIRY_TOO_LONG", "AGENT_CARD_DELEGATION_REQUIRED", "AGENT_DELEGATION_REQUIRED", "AGENT_CARD_DELEGATION_INVALID", "AGENT_CARD_TOO_LARGE", "AGENT_REGISTRY_FULL", "AGENT_CARD_TTL_INVALID", "AGENT_OWNER_OR_VERSION_MISMATCH", "NO_AGENT_REGISTERED", "RELAY_UNAUTHORIZED", "RELAY_AUTH_REQUIRED", "RELAY_AUTH_INVALID", "RELAY_AUTH_SIGNATURE_INVALID", "RELAY_AUTH_RECIPIENT_MISMATCH", "RELAY_AUTH_ACTION_MISMATCH", "RELAY_AUTH_EXPIRED", "RELAY_AUTH_FUTURE_ISSUED_AT", "RELAY_AUTH_REPLAYED", "RELAY_AUTH_NONCE_INVALID", "RELAY_AUTH_ORIGIN_REQUIRED", "RELAY_AUTH_ORIGIN_MISMATCH", "RELAY_QUERY_AUTH_DISABLED", "INVALID_RELAY_ORIGIN", "RATE_LIMITED", "RATE_LIMITER_UNAVAILABLE", "PAYLOAD_TOO_LARGE", "BODY_TOO_LARGE", "MISSING_BODY", "INVALID_JSON", "INVALID_UNICODE", "INVALID_LIMIT", "INVALID_RELAY_LIMIT", "INVALID_TIMEOUT", "INVALID_WAIT", "MISSING_ENVELOPE_ID", "UNSUPPORTED_METHOD", "NOT_FOUND", "WEBSOCKET_UPGRADE_REQUIRED", "INVALID_REQUEST", "INVALID_RELAY_SNAPSHOT", "RELAY_INTERNAL_ERROR"];
|
|
207
207
|
/**
|
|
208
208
|
* Public error code for an untrusted caller.
|
|
209
209
|
* Parser and URL failures become INVALID_REQUEST. Any other message is returned
|
|
@@ -219,6 +219,12 @@ export interface MappedRelayError {
|
|
|
219
219
|
export declare function mapRelayError(error: unknown): MappedRelayError;
|
|
220
220
|
/** Auth failures that must stay 401s with a stable error code. */
|
|
221
221
|
export declare function relayAuthFailure(error: unknown): string | undefined;
|
|
222
|
+
/** Shared HTTP and WebSocket admission error fields. */
|
|
223
|
+
export declare function relayErrorBody(error: unknown): {
|
|
224
|
+
error: string;
|
|
225
|
+
retryable?: true;
|
|
226
|
+
retryAfterMs?: number;
|
|
227
|
+
};
|
|
222
228
|
export declare function relayErrorResponse(error: unknown, relay?: InMemoryRelay): Response;
|
|
223
229
|
/**
|
|
224
230
|
* Bearer credential for a relay request.
|
|
@@ -29,7 +29,7 @@ export const DEFAULT_MAX_ENVELOPE_BYTES = 256 * 1024;
|
|
|
29
29
|
export const DEFAULT_MAX_QUEUE_SIZE = 256;
|
|
30
30
|
/** Sum of queued envelope JSON sizes for one recipient. */
|
|
31
31
|
export const DEFAULT_MAX_QUEUE_BYTES_PER_RECIPIENT = 4 * 1024 * 1024;
|
|
32
|
-
export const DEFAULT_ENVELOPE_TTL_MS =
|
|
32
|
+
export const DEFAULT_ENVELOPE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
33
33
|
export const DEFAULT_SEEN_TTL_MS = 60 * 60 * 1000;
|
|
34
34
|
export const DEFAULT_AUTH_SEEN_TTL_MS = 10 * 60 * 1000;
|
|
35
35
|
export const DEFAULT_AGENT_CARD_TTL_MS = 60 * 60 * 1000;
|
|
@@ -37,7 +37,13 @@ export const DEFAULT_AGENT_CARD_TTL_MS = 60 * 60 * 1000;
|
|
|
37
37
|
export const DEFAULT_MAX_SEEN_ENTRIES = 4096;
|
|
38
38
|
export const DEFAULT_MAX_QUEUES = 10000;
|
|
39
39
|
export const DEFAULT_MAX_AGENTS = 10000;
|
|
40
|
+
const CONNECTION_CONTROL_EVENTS = new Set([
|
|
41
|
+
'CONNECTION_REQUEST',
|
|
42
|
+
'CONNECTION_ACCEPTED',
|
|
43
|
+
'CONNECTION_ACK',
|
|
44
|
+
]);
|
|
40
45
|
const WORKER_PRIMARY_EVENTS = new Set([
|
|
46
|
+
...CONNECTION_CONTROL_EVENTS,
|
|
41
47
|
'PROPOSE',
|
|
42
48
|
'REVOKE',
|
|
43
49
|
'VERIFY_ACCEPT',
|
|
@@ -69,6 +75,11 @@ const BILATERAL_AUDIT_EVENTS = new Set([
|
|
|
69
75
|
]);
|
|
70
76
|
export function classifyEnvelopeRole(envelope, state) {
|
|
71
77
|
const { eventType: type, seq, senderDid, recipientDid } = envelope.payload;
|
|
78
|
+
// Control delivery does not participate in bilateral task role/sequence inference.
|
|
79
|
+
if (type === 'DELIVERY_STATUS')
|
|
80
|
+
return 'requester';
|
|
81
|
+
if (CONNECTION_CONTROL_EVENTS.has(type))
|
|
82
|
+
return 'worker';
|
|
72
83
|
const cross = senderDid !== recipientDid;
|
|
73
84
|
if (WORKER_PRIMARY_EVENTS.has(type)) {
|
|
74
85
|
if (state) {
|
|
@@ -619,21 +630,25 @@ export class InMemoryRelay {
|
|
|
619
630
|
if (!verifyRelayEnvelope(envelope))
|
|
620
631
|
throw new Error('INVALID_ENVELOPE');
|
|
621
632
|
this.evictExpired();
|
|
622
|
-
|
|
633
|
+
const id = envelope.payload.envelopeId;
|
|
634
|
+
if (this.seen.has(id) || this.operations.has('expiry:' + id) ||
|
|
635
|
+
[...this.queues.values()].some(queue => queue.some(item => item.envelope.payload.envelopeId === id)))
|
|
623
636
|
throw new Error('REPLAYED_ENVELOPE');
|
|
624
637
|
const did = envelope.payload.recipientDid;
|
|
625
638
|
const queue = this.queues.get(did) ?? [];
|
|
626
639
|
const bytes = Buffer.byteLength(JSON.stringify(envelope));
|
|
627
|
-
if (
|
|
628
|
-
throw new Error('
|
|
629
|
-
if (
|
|
630
|
-
|
|
640
|
+
if (bytes > this.maxEnvelopeBytes || bytes > this.maxQueueBytesPerRecipient)
|
|
641
|
+
throw new Error('ENVELOPE_TOO_LARGE');
|
|
642
|
+
if ((!this.queues.has(did) && this.queues.size >= this.maxQueues) ||
|
|
643
|
+
queue.length >= this.maxQueueSize)
|
|
644
|
+
throw new Error('RELAY_RETRY_LATER');
|
|
631
645
|
if (this.queuedBytes(queue) + bytes > this.maxQueueBytesPerRecipient)
|
|
632
|
-
throw new Error('
|
|
646
|
+
throw new Error('RELAY_RETRY_LATER');
|
|
633
647
|
if (this.senderCount(queue, envelope.payload.senderDid) >= this.maxEnvelopesPerSender)
|
|
634
|
-
throw new Error('
|
|
648
|
+
throw new Error('RELAY_RETRY_LATER');
|
|
635
649
|
this.remember(this.seen, envelope.payload.envelopeId, this.maxSeenEntries, this.seenTtlMs);
|
|
636
|
-
const role = classifyEnvelopeRole(envelope,
|
|
650
|
+
const role = classifyEnvelopeRole(envelope, CONNECTION_CONTROL_EVENTS.has(envelope.payload.eventType)
|
|
651
|
+
? undefined : this.stateForTask(envelope.payload.taskId));
|
|
637
652
|
const wire = structuredClone(envelope);
|
|
638
653
|
const stored = this.tamper ? this.tamper(wire) : wire;
|
|
639
654
|
queue.push({
|
|
@@ -879,7 +894,8 @@ export class InMemoryRelay {
|
|
|
879
894
|
leasedUntil: leaseExpiry.get(envelope.payload.envelopeId),
|
|
880
895
|
bytes: Buffer.byteLength(JSON.stringify(envelope)),
|
|
881
896
|
expiresAt: envelopeExpiry.get(envelope.payload.envelopeId) ?? this.now() + this.envelopeTtlMs,
|
|
882
|
-
role: classifyEnvelopeRole(envelope,
|
|
897
|
+
role: classifyEnvelopeRole(envelope, CONNECTION_CONTROL_EVENTS.has(envelope.payload.eventType)
|
|
898
|
+
? undefined : this.stateForTask(envelope.payload.taskId)),
|
|
883
899
|
})));
|
|
884
900
|
}
|
|
885
901
|
this.seen = new Map(snapshot.seen.map((id) => [id, seenExpiry.get(id) ?? this.now() + this.seenTtlMs]));
|
|
@@ -969,6 +985,7 @@ export const KNOWN_RELAY_ERROR_CODES = [
|
|
|
969
985
|
'DUPLICATE_ENVELOPE_ID',
|
|
970
986
|
'ENVELOPE_TOO_LARGE',
|
|
971
987
|
'RELAY_CAPACITY',
|
|
988
|
+
'RELAY_RETRY_LATER',
|
|
972
989
|
'RELAY_QUEUE_FULL',
|
|
973
990
|
'QUEUE_BYTES_EXCEEDED',
|
|
974
991
|
'QUEUE_LIMIT_EXCEEDED',
|
|
@@ -1034,6 +1051,7 @@ const RELAY_ERROR_STATUS = {
|
|
|
1034
1051
|
DUPLICATE_ENVELOPE_ID: 400,
|
|
1035
1052
|
ENVELOPE_TOO_LARGE: 400,
|
|
1036
1053
|
RELAY_CAPACITY: 400,
|
|
1054
|
+
RELAY_RETRY_LATER: 429,
|
|
1037
1055
|
RELAY_QUEUE_FULL: 400,
|
|
1038
1056
|
INVALID_RECIPIENT_DID: 400,
|
|
1039
1057
|
MISSING_RECIPIENT_DID: 400,
|
|
@@ -1124,14 +1142,25 @@ export function relayAuthFailure(error) {
|
|
|
1124
1142
|
const code = sanitizeRelayErrorCode(error);
|
|
1125
1143
|
return RELAY_ERROR_STATUS[code] === 401 ? code : undefined;
|
|
1126
1144
|
}
|
|
1145
|
+
/** Shared HTTP and WebSocket admission error fields. */
|
|
1146
|
+
export function relayErrorBody(error) {
|
|
1147
|
+
const code = sanitizeRelayErrorCode(error);
|
|
1148
|
+
return code === 'RELAY_RETRY_LATER'
|
|
1149
|
+
? { error: code, retryable: true, retryAfterMs: 60_000 }
|
|
1150
|
+
: { error: code };
|
|
1151
|
+
}
|
|
1127
1152
|
export function relayErrorResponse(error, relay) {
|
|
1128
1153
|
const mapped = mapRelayError(error);
|
|
1154
|
+
const body = relayErrorBody(error);
|
|
1129
1155
|
if (mapped.status === 429) {
|
|
1130
|
-
|
|
1156
|
+
const retryAfter = body.retryAfterMs !== undefined
|
|
1157
|
+
? Math.ceil(body.retryAfterMs / 1000)
|
|
1158
|
+
: (relay?.retryAfterSeconds() ?? 60);
|
|
1159
|
+
return Response.json(body, {
|
|
1131
1160
|
status: 429,
|
|
1132
1161
|
headers: {
|
|
1133
1162
|
...relayHttpHeaders('json'),
|
|
1134
|
-
'retry-after': String(
|
|
1163
|
+
'retry-after': String(retryAfter),
|
|
1135
1164
|
},
|
|
1136
1165
|
});
|
|
1137
1166
|
}
|