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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
import { createInterface } from 'node:readline';
|
|
3
|
-
import { signApproval, signPayload, verifyApproval, digest } from '../../core/dist/index.js';
|
|
3
|
+
import { signApproval, signPayload, verifyApproval, digest, assertConnectionsOptions } from '../../core/dist/index.js';
|
|
4
4
|
export class ProposalRejectedError extends Error {
|
|
5
5
|
reason;
|
|
6
6
|
approved = false;
|
|
@@ -40,6 +40,7 @@ function budgetLimit(policy, field) {
|
|
|
40
40
|
export function evaluateContractAcceptance(policy, details, from) {
|
|
41
41
|
if (!policy)
|
|
42
42
|
return { approved: true };
|
|
43
|
+
assertConnectionsOptions(policy);
|
|
43
44
|
const manifest = proposedManifest(details);
|
|
44
45
|
const limited = budgetFields.some((field) => policy[field] !== undefined);
|
|
45
46
|
if (limited && !manifest)
|
|
@@ -75,8 +76,6 @@ export function evaluateContractAcceptance(policy, details, from) {
|
|
|
75
76
|
policy.maxWallClockSeconds,
|
|
76
77
|
};
|
|
77
78
|
}
|
|
78
|
-
if (policy.allowAnyRequester)
|
|
79
|
-
return { approved: true };
|
|
80
79
|
const allow = (policy.allowedRequesterDids ?? []).map((did) => did.trim()).filter(Boolean);
|
|
81
80
|
if (allow.length === 0)
|
|
82
81
|
return { approved: true };
|
|
@@ -98,6 +97,7 @@ export function evaluateContractAcceptance(policy, details, from) {
|
|
|
98
97
|
export class InteractiveCliApprovalProvider {
|
|
99
98
|
owner;
|
|
100
99
|
options;
|
|
100
|
+
kind = 'human';
|
|
101
101
|
constructor(owner, options = {}) {
|
|
102
102
|
this.owner = owner;
|
|
103
103
|
this.options = options;
|
|
@@ -146,6 +146,7 @@ export class PolicyAutoApprovalProvider {
|
|
|
146
146
|
owner;
|
|
147
147
|
policy;
|
|
148
148
|
options;
|
|
149
|
+
kind = 'policy';
|
|
149
150
|
constructor(owner, policy = {
|
|
150
151
|
requiredGates: [],
|
|
151
152
|
autoApprove: ['contract_acceptance', 'final_verification'],
|
|
@@ -153,6 +154,8 @@ export class PolicyAutoApprovalProvider {
|
|
|
153
154
|
this.owner = owner;
|
|
154
155
|
this.policy = policy;
|
|
155
156
|
this.options = options;
|
|
157
|
+
if (options.acceptance)
|
|
158
|
+
assertConnectionsOptions(options.acceptance);
|
|
156
159
|
}
|
|
157
160
|
async approve(r) {
|
|
158
161
|
if (r.gate === 'contract_acceptance') {
|
|
@@ -266,4 +269,77 @@ export class WebhookApprovalProvider {
|
|
|
266
269
|
return signApproval(r.taskId, r.gate, r.target, this.owner, 'APPROVED');
|
|
267
270
|
}
|
|
268
271
|
}
|
|
272
|
+
/** Host form decisions are serialized per MCP connection and never use terminal IO. */
|
|
273
|
+
export class McpFormApprovalProvider {
|
|
274
|
+
owner;
|
|
275
|
+
options;
|
|
276
|
+
queue = Promise.resolve();
|
|
277
|
+
constructor(owner, options) {
|
|
278
|
+
this.owner = owner;
|
|
279
|
+
this.options = options;
|
|
280
|
+
}
|
|
281
|
+
assertAvailable() {
|
|
282
|
+
if (!this.options.available())
|
|
283
|
+
throw new Error('APPROVAL_CHANNEL_UNAVAILABLE: The host does not support MCP form elicitation. Use a host that supports elicitation, or --approval-webhook.');
|
|
284
|
+
}
|
|
285
|
+
async approve(request) {
|
|
286
|
+
this.assertAvailable();
|
|
287
|
+
const review = JSON.stringify({
|
|
288
|
+
taskId: request.taskId, gate: request.gate, target: request.target,
|
|
289
|
+
targetDigest: digest(request.target), details: request.details ?? null,
|
|
290
|
+
}, null, 2);
|
|
291
|
+
if (Buffer.byteLength(review) > 64 * 1024)
|
|
292
|
+
throw new Error('APPROVAL_REVIEW_TOO_LARGE');
|
|
293
|
+
const remaining = request.deadline
|
|
294
|
+
? Date.parse(request.deadline) - (this.options.now ?? Date.now)() : Infinity;
|
|
295
|
+
const timeoutMs = Math.min(this.options.timeoutMs ?? 60000, remaining);
|
|
296
|
+
if (!(timeoutMs > 0))
|
|
297
|
+
throw new Error('APPROVAL_TIMEOUT');
|
|
298
|
+
const controller = new AbortController();
|
|
299
|
+
const abort = () => controller.abort(new Error('APPROVAL_ABORTED'));
|
|
300
|
+
request.signal?.addEventListener('abort', abort, { once: true });
|
|
301
|
+
if (request.signal?.aborted)
|
|
302
|
+
abort();
|
|
303
|
+
const timer = setTimeout(() => controller.abort(new Error('APPROVAL_TIMEOUT')), timeoutMs);
|
|
304
|
+
let release;
|
|
305
|
+
const previous = this.queue;
|
|
306
|
+
this.queue = new Promise((resolve) => { release = resolve; });
|
|
307
|
+
let onAbort;
|
|
308
|
+
try {
|
|
309
|
+
const result = await Promise.race([
|
|
310
|
+
previous.then(() => {
|
|
311
|
+
if (controller.signal.aborted)
|
|
312
|
+
throw controller.signal.reason;
|
|
313
|
+
return this.options.request({
|
|
314
|
+
mode: 'form', message: 'Review this Sealbridge action:\n' + review,
|
|
315
|
+
requestedSchema: {
|
|
316
|
+
type: 'object', properties: {
|
|
317
|
+
approved: { type: 'boolean', title: 'Approve this specific action', default: false },
|
|
318
|
+
}, required: ['approved'],
|
|
319
|
+
},
|
|
320
|
+
}, controller.signal);
|
|
321
|
+
}),
|
|
322
|
+
new Promise((_resolve, reject) => {
|
|
323
|
+
onAbort = () => reject(controller.signal.reason);
|
|
324
|
+
controller.signal.addEventListener('abort', onAbort, { once: true });
|
|
325
|
+
if (controller.signal.aborted)
|
|
326
|
+
onAbort();
|
|
327
|
+
}),
|
|
328
|
+
]);
|
|
329
|
+
if (controller.signal.aborted)
|
|
330
|
+
throw controller.signal.reason;
|
|
331
|
+
const response = result;
|
|
332
|
+
if (!response || response.action !== 'accept' || response.content?.approved !== true)
|
|
333
|
+
throw new Error('APPROVAL_REJECTED');
|
|
334
|
+
return signApproval(request.taskId, request.gate, request.target, this.owner, 'APPROVED');
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
clearTimeout(timer);
|
|
338
|
+
request.signal?.removeEventListener('abort', abort);
|
|
339
|
+
controller.signal.removeEventListener('abort', onAbort);
|
|
340
|
+
// A cancelled queued entry must not let later entries overtake the active form.
|
|
341
|
+
void previous.then(release);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
269
345
|
//# sourceMappingURL=approval-providers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-providers.js","sourceRoot":"","sources":["../src/approval-providers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"approval-providers.js","sourceRoot":"","sources":["../src/approval-providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ConnectionRouterOptions } from './connection-router.js';
|
|
2
|
+
import type { HeldRequestStoreOptions } from './held-request-store.js';
|
|
3
|
+
export interface InboundConnectionSummary {
|
|
4
|
+
id: string;
|
|
5
|
+
requestId: string;
|
|
6
|
+
requestDigest: string;
|
|
7
|
+
localOwnerDid: string;
|
|
8
|
+
peerOwnerDid: string;
|
|
9
|
+
peerAgentDid: string;
|
|
10
|
+
shortLocalOwnerDid: string;
|
|
11
|
+
shortPeerOwnerDid: string;
|
|
12
|
+
shortPeerAgentDid: string;
|
|
13
|
+
peerDisplayName?: string;
|
|
14
|
+
inviteAlias?: string;
|
|
15
|
+
createdAt: string;
|
|
16
|
+
receivedAt: number;
|
|
17
|
+
expiresAt: number;
|
|
18
|
+
relayUrl: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ConnectionAdmissionReviewOptions extends Omit<ConnectionRouterOptions, 'review' | 'humanReview'> {
|
|
21
|
+
heldOptions?: HeldRequestStoreOptions;
|
|
22
|
+
/** Optional local label lookup by public invite digest. No invitation is resolved. */
|
|
23
|
+
inviteAlias?: (inviteDigest: string) => string | undefined;
|
|
24
|
+
}
|
|
25
|
+
/** Owner-facing admission queue. The host calls decisions only for explicit owner actions. */
|
|
26
|
+
export declare class ConnectionAdmissionReview {
|
|
27
|
+
private readonly options;
|
|
28
|
+
private readonly review;
|
|
29
|
+
private readonly now;
|
|
30
|
+
constructor(options: ConnectionAdmissionReviewOptions);
|
|
31
|
+
private entries;
|
|
32
|
+
/** Read-only public metadata projection; messages, task content and tokens are omitted. */
|
|
33
|
+
list(): InboundConnectionSummary[];
|
|
34
|
+
private entry;
|
|
35
|
+
/** Explicit owner approval grants limited connection consent; it never opens a task. */
|
|
36
|
+
approve(id: string): Promise<import("./connection-service.js").ConnectionServiceResult>;
|
|
37
|
+
/** Reject uses the existing peer cooldown and discards that peer's held content. */
|
|
38
|
+
reject(id: string): void;
|
|
39
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { digest, openEnvelope } from '../../core/dist/index.js';
|
|
3
|
+
import { ConnectionRouter } from './connection-router.js';
|
|
4
|
+
import { HeldRequestReview, heldContentDigest } from './held-request-review.js';
|
|
5
|
+
import { openConnectionFrame } from './connection-transport.js';
|
|
6
|
+
function label(value) {
|
|
7
|
+
return [...value.replace(/acp-invite:[A-Za-z0-9_-]+/g, '[invitation]')
|
|
8
|
+
.replace(/[\p{Cc}\p{Cf}]/gu, '')].slice(0, 120).join('');
|
|
9
|
+
}
|
|
10
|
+
const shortDid = (did) => did.slice(0, 16) + '…' + did.slice(-8);
|
|
11
|
+
/** Owner-facing admission queue. The host calls decisions only for explicit owner actions. */
|
|
12
|
+
export class ConnectionAdmissionReview {
|
|
13
|
+
options;
|
|
14
|
+
review;
|
|
15
|
+
now;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
if (options.store.ownerDid !== options.owner.did)
|
|
19
|
+
throw new Error('INVALID_CONNECTION_OWNER');
|
|
20
|
+
this.now = options.now ?? Date.now;
|
|
21
|
+
this.review = new HeldRequestReview(options.owner, { ...options.heldOptions, now: this.now });
|
|
22
|
+
}
|
|
23
|
+
entries() {
|
|
24
|
+
const controls = this.options.store.controlSnapshot();
|
|
25
|
+
return this.review.store.records().filter(record => record.kind === 'connection' && record.expiresAt > this.now())
|
|
26
|
+
.flatMap(record => {
|
|
27
|
+
const control = controls.find(c => c.direction === 'incoming' && c.active && !c.accepted &&
|
|
28
|
+
c.offer.requestId === record.requestId && c.offer.relayUrl === this.options.relayUrl &&
|
|
29
|
+
Date.parse(c.offer.expiresAt) > this.now());
|
|
30
|
+
if (!control || this.options.store.connectionState(control.offer.fromOwnerDid) !== 'pending')
|
|
31
|
+
return [];
|
|
32
|
+
const frame = openConnectionFrame(record.envelope, this.options.owner);
|
|
33
|
+
if (frame.event.payload.type !== 'ConnectionRequest' || digest(frame.event) !== control.offer.requestDigest ||
|
|
34
|
+
frame.event.payload.fromOwnerDid !== record.senderOwnerDid ||
|
|
35
|
+
heldContentDigest('connection', openEnvelope(record.envelope, this.options.owner)) !== record.contentDigest)
|
|
36
|
+
throw new Error('INVALID_CONNECTION_REQUEST');
|
|
37
|
+
return [{ record, request: frame.event, offer: control.offer }];
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Read-only public metadata projection; messages, task content and tokens are omitted. */
|
|
41
|
+
list() {
|
|
42
|
+
return this.entries().map(({ record, request, offer }) => {
|
|
43
|
+
const p = request.payload, peerAgentDid = p.agentCard.payload.agentDid;
|
|
44
|
+
const alias = p.inviteDigest ? this.options.inviteAlias?.(p.inviteDigest) : undefined;
|
|
45
|
+
return { id: record.id, requestId: p.requestId, requestDigest: offer.requestDigest,
|
|
46
|
+
localOwnerDid: this.options.owner.did, peerOwnerDid: p.fromOwnerDid, peerAgentDid,
|
|
47
|
+
shortLocalOwnerDid: shortDid(this.options.owner.did), shortPeerOwnerDid: shortDid(p.fromOwnerDid),
|
|
48
|
+
shortPeerAgentDid: shortDid(peerAgentDid), peerDisplayName: label(p.agentCard.payload.name),
|
|
49
|
+
...(alias === undefined ? {} : { inviteAlias: label(alias) }),
|
|
50
|
+
createdAt: p.createdAt, receivedAt: record.receivedAt, expiresAt: record.expiresAt, relayUrl: offer.relayUrl };
|
|
51
|
+
}).sort((a, b) => a.receivedAt - b.receivedAt || a.id.localeCompare(b.id));
|
|
52
|
+
}
|
|
53
|
+
entry(id) {
|
|
54
|
+
const entry = this.entries().find(e => e.record.id === id || e.offer.requestId === id);
|
|
55
|
+
if (!entry)
|
|
56
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
57
|
+
return entry;
|
|
58
|
+
}
|
|
59
|
+
/** Explicit owner approval grants limited connection consent; it never opens a task. */
|
|
60
|
+
async approve(id) {
|
|
61
|
+
const { record } = this.entry(id);
|
|
62
|
+
this.options.assertPeer?.(record.senderOwnerDid);
|
|
63
|
+
// This provider exists only during this owner operation, never on the receiving router.
|
|
64
|
+
const review = new HeldRequestReview(this.options.owner, { ...this.options.heldOptions, now: this.now,
|
|
65
|
+
provider: { async inspect(envelope, context) {
|
|
66
|
+
const frame = openConnectionFrame(envelope, context.owner);
|
|
67
|
+
if (context.kind !== 'connection' || frame.event.payload.type !== 'ConnectionRequest' ||
|
|
68
|
+
context.envelopeDigest !== digest(envelope) ||
|
|
69
|
+
context.contentDigest !== heldContentDigest('connection', openEnvelope(envelope, context.owner)))
|
|
70
|
+
throw new Error('INVALID_CONNECTION_REQUEST');
|
|
71
|
+
return { ownerDid: context.owner.did, kind: context.kind, envelopeDigest: context.envelopeDigest,
|
|
72
|
+
contentDigest: context.contentDigest, status: 'complete',
|
|
73
|
+
reportDigest: digest({ type: 'ConnectionAdmissionMetadata', v: 1, requestDigest: digest(frame.event) }) };
|
|
74
|
+
} } });
|
|
75
|
+
const router = new ConnectionRouter({ ...this.options, review,
|
|
76
|
+
humanReview: { kind: 'human', review: async () => true } });
|
|
77
|
+
return router.approve(record.envelope);
|
|
78
|
+
}
|
|
79
|
+
/** Reject uses the existing peer cooldown and discards that peer's held content. */
|
|
80
|
+
reject(id) {
|
|
81
|
+
const { offer } = this.entry(id);
|
|
82
|
+
this.options.store.rejectConnection(offer.fromOwnerDid);
|
|
83
|
+
this.review.discardPeer(offer.fromOwnerDid);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=connection-admission-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-admission-review.js","sourceRoot":"","sources":["../src/connection-admission-review.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAchE,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,4BAA4B,EAAE,cAAc,CAAC;aACnE,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzE,8FAA8F;AAC9F,MAAM,OAAO,yBAAyB;IAGP;IAFZ,MAAM,CAAoB;IAC1B,GAAG,CAAe;IACnC,YAA6B,OAAyC;QAAzC,YAAO,GAAP,OAAO,CAAkC;QACpE,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9F,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChG,CAAC;IACO,OAAO;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;aAC/G,OAAO,CAAC,MAAM,CAAC,EAAE;YAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ;gBACtF,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ;gBACpF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACxG,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvE,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,aAAa;gBACvG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,MAAM,CAAC,cAAc;gBAC1D,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,aAAa;gBAC7G,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAkC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACP,CAAC;IACD,2FAA2F;IAC3F,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACvD,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvE,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtF,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa;gBAChF,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,YAAY;gBACjF,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;gBACjG,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC3F,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7D,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnH,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IACO,KAAK,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,wFAAwF;IACxF,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjD,wFAAwF;QACxF,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG;YACnG,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO;oBACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,mBAAmB;wBACjF,OAAO,CAAC,cAAc,KAAK,MAAM,CAAC,QAAQ,CAAC;wBAC3C,OAAO,CAAC,aAAa,KAAK,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;wBAClG,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc;wBAC9F,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU;wBACxD,YAAY,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9G,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM;YAC3D,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IACD,oFAAoF;IACpF,MAAM,CAAC,EAAU;QACf,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ConnectionAccepted, Signed } from '../../core/dist/index.js';
|
|
2
|
+
import type { WorkerTrustStore } from './worker-trust-store.js';
|
|
3
|
+
import type { ConnectionAcceptanceCommit, ConnectionOffer, ConnectionOutboxEntry, ConnectionPersistencePort } from './connection-service.js';
|
|
4
|
+
export interface StoredControlRecord {
|
|
5
|
+
offer: ConnectionOffer;
|
|
6
|
+
direction: 'incoming' | 'outgoing';
|
|
7
|
+
active: boolean;
|
|
8
|
+
consentDigest?: string;
|
|
9
|
+
consent?: ConnectionAcceptanceCommit['consent'];
|
|
10
|
+
accepted?: Signed<ConnectionAccepted>;
|
|
11
|
+
outbox: ConnectionOutboxEntry[];
|
|
12
|
+
acknowledgement?: ConnectionOutboxEntry;
|
|
13
|
+
}
|
|
14
|
+
export declare function validStoredControls(records: StoredControlRecord[], ownerDid: string): boolean;
|
|
15
|
+
/** PR2 lifecycle and PR3 exchange commit under the same owner-signed file lock. */
|
|
16
|
+
export declare class StoredConnectionExchange implements ConnectionPersistencePort {
|
|
17
|
+
readonly store: WorkerTrustStore;
|
|
18
|
+
constructor(store: WorkerTrustStore);
|
|
19
|
+
private peer;
|
|
20
|
+
private record;
|
|
21
|
+
private pending;
|
|
22
|
+
private commit;
|
|
23
|
+
private lookup;
|
|
24
|
+
outgoing(id: string): Promise<ConnectionOffer | undefined>;
|
|
25
|
+
incoming(id: string): Promise<ConnectionOffer | undefined>;
|
|
26
|
+
recordOutgoing(...[o, consent, outbox, now]: Parameters<ConnectionPersistencePort['recordOutgoing']>): Promise<void>;
|
|
27
|
+
recordIncoming(o: ConnectionOffer, now: number): Promise<"pending" | "accepted">;
|
|
28
|
+
private acceptInto;
|
|
29
|
+
accept(c: ConnectionAcceptanceCommit): Promise<void>;
|
|
30
|
+
redeem(c: Parameters<ConnectionPersistencePort['redeem']>[0]): Promise<"inactive" | "first" | "same" | "other">;
|
|
31
|
+
applyAccepted(c: Parameters<ConnectionPersistencePort['applyAccepted']>[0]): Promise<void>;
|
|
32
|
+
acknowledge(ack: Parameters<ConnectionPersistencePort['acknowledge']>[0], id: string): Promise<void>;
|
|
33
|
+
listOutbox(now: number): Promise<ConnectionOutboxEntry[]>;
|
|
34
|
+
markSent(id: string): Promise<void>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { digest, verifySigned, verifyEnvelope, verifyConnectionAccepted, verifyConnectionAck } from '../../core/dist/index.js';
|
|
3
|
+
export function validStoredControls(records, ownerDid) {
|
|
4
|
+
return Array.isArray(records) && records.length <= 1000 &&
|
|
5
|
+
new Set(records.map(r => r.offer.requestId)).size === records.length && records.every(r => {
|
|
6
|
+
const o = r.offer;
|
|
7
|
+
return ['incoming', 'outgoing'].includes(r.direction) && typeof r.active === 'boolean' &&
|
|
8
|
+
typeof o?.requestId === 'string' && /^sha256:[a-f0-9]{64}$/.test(o.requestDigest) &&
|
|
9
|
+
(r.direction === 'incoming' ? o.toOwnerDid : o.fromOwnerDid) === ownerDid &&
|
|
10
|
+
(o.peerDisplayName === undefined || typeof o.peerDisplayName === 'string' && o.peerDisplayName.length > 0) &&
|
|
11
|
+
Number.isFinite(Date.parse(o.createdAt)) && Date.parse(o.expiresAt) > Date.parse(o.createdAt) &&
|
|
12
|
+
Date.parse(o.expiresAt) - Date.parse(o.createdAt) <= 14 * 86400000 &&
|
|
13
|
+
(!r.accepted || verifyConnectionAccepted(r.accepted)) &&
|
|
14
|
+
(!r.consentDigest || /^sha256:[a-f0-9]{64}$/.test(r.consentDigest)) &&
|
|
15
|
+
(!r.consent || digest(r.consent) === r.consentDigest && ('payload' in r.consent ?
|
|
16
|
+
verifySigned(r.consent, ownerDid) && r.consent.payload.requestDigest === o.requestDigest :
|
|
17
|
+
r.consent.inviteDigest === o.inviteDigest)) &&
|
|
18
|
+
Array.isArray(r.outbox) && r.outbox.length <= 2 && r.outbox.every(b => b.requestId === o.requestId && b.envelope.payload.taskId === 'conn_' + o.requestId &&
|
|
19
|
+
b.envelope.payload.senderDid === ownerDid && b.envelope.payload.recipientDid === (r.direction === 'incoming' ? o.fromOwnerDid : o.toOwnerDid) &&
|
|
20
|
+
verifySigned(b.envelope, ownerDid) &&
|
|
21
|
+
verifyEnvelope(b.envelope, b.envelope.payload.recipientDid) &&
|
|
22
|
+
Date.parse(b.deliveryDeadline) <= Date.parse(o.expiresAt));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Display metadata is outside the offer's identity and consent comparison. */
|
|
26
|
+
function offerDigest({ peerDisplayName: _name, ...offer }) { return digest(offer); }
|
|
27
|
+
/** PR2 lifecycle and PR3 exchange commit under the same owner-signed file lock. */
|
|
28
|
+
export class StoredConnectionExchange {
|
|
29
|
+
store;
|
|
30
|
+
constructor(store) {
|
|
31
|
+
this.store = store;
|
|
32
|
+
}
|
|
33
|
+
peer(o) { return o.fromOwnerDid === this.store.ownerDid ? o.toOwnerDid : o.fromOwnerDid; }
|
|
34
|
+
record(s, o, direction, now) {
|
|
35
|
+
const peer = this.peer(o);
|
|
36
|
+
if (s.denials.includes(peer))
|
|
37
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
38
|
+
if (Date.parse(o.expiresAt) <= now)
|
|
39
|
+
throw new Error('CONNECTION_REQUEST_EXPIRED');
|
|
40
|
+
const controls = s.controls ??= [];
|
|
41
|
+
let r = controls.find(r => r.offer.requestId === o.requestId);
|
|
42
|
+
if (r && (!r.active || r.direction !== direction || offerDigest(r.offer) !== offerDigest(o)))
|
|
43
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
44
|
+
if (!r) {
|
|
45
|
+
if (direction === 'incoming' && s.refusals.some(r => r.peerOwnerDid === peer && r.refuseUntil > now))
|
|
46
|
+
throw new Error('CONNECTION_REQUEST_COOLDOWN');
|
|
47
|
+
r = { offer: structuredClone(o), direction, active: true, outbox: [] };
|
|
48
|
+
controls.push(r);
|
|
49
|
+
}
|
|
50
|
+
if (o.peerDisplayName !== undefined)
|
|
51
|
+
r.offer.peerDisplayName ??= o.peerDisplayName;
|
|
52
|
+
return r;
|
|
53
|
+
}
|
|
54
|
+
pending(s, r, now) {
|
|
55
|
+
const o = r.offer, peer = this.peer(o);
|
|
56
|
+
let c = s.connections.find(c => c.peerOwnerDid === peer);
|
|
57
|
+
if (!c) {
|
|
58
|
+
c = { peerOwnerDid: peer, relayUrl: o.relayUrl, state: 'pending',
|
|
59
|
+
...(o.peerAgentDid ? { peerAgentDid: o.peerAgentDid } : {}) };
|
|
60
|
+
s.connections.push(c);
|
|
61
|
+
}
|
|
62
|
+
if (o.peerDisplayName !== undefined)
|
|
63
|
+
c.peerDisplayName ??= o.peerDisplayName;
|
|
64
|
+
if (r.direction === 'incoming')
|
|
65
|
+
c.incoming ??= { requestId: o.requestId, requestDigest: o.requestDigest,
|
|
66
|
+
receivedAt: now, expiresAt: Date.parse(o.expiresAt) };
|
|
67
|
+
else
|
|
68
|
+
c.outgoing ??= { requestId: o.requestId, requestDigest: o.requestDigest, createdAt: Date.parse(o.createdAt),
|
|
69
|
+
expiresAt: Date.parse(o.expiresAt), ownerConsentDigest: r.consentDigest };
|
|
70
|
+
}
|
|
71
|
+
commit(s, r, accepted, now, source) {
|
|
72
|
+
this.pending(s, r, now);
|
|
73
|
+
const c = s.connections.find(c => c.peerOwnerDid === this.peer(r.offer));
|
|
74
|
+
Object.assign(c, { state: 'connected', connectionId: accepted.payload.connectionId, connectedAt: now,
|
|
75
|
+
source, localConsentDigest: r.consentDigest,
|
|
76
|
+
...(r.direction === 'outgoing' ? { remoteAcceptanceDigest: digest(accepted) } : {}) });
|
|
77
|
+
r.accepted = structuredClone(accepted);
|
|
78
|
+
}
|
|
79
|
+
async lookup(id, direction) {
|
|
80
|
+
return this.store.controlSnapshot().find(r => r.offer.requestId === id && r.direction === direction && r.active)?.offer;
|
|
81
|
+
}
|
|
82
|
+
outgoing(id) { return this.lookup(id, 'outgoing'); }
|
|
83
|
+
incoming(id) { return this.lookup(id, 'incoming'); }
|
|
84
|
+
async recordOutgoing(...[o, consent, outbox, now]) {
|
|
85
|
+
this.store.updateControls(s => {
|
|
86
|
+
if (!verifySigned(consent, this.store.ownerDid) || consent.payload.requestDigest !== o.requestDigest)
|
|
87
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
88
|
+
const r = this.record(s, o, 'outgoing', now);
|
|
89
|
+
r.consent = structuredClone(consent);
|
|
90
|
+
r.consentDigest = digest(consent);
|
|
91
|
+
this.pending(s, r, now);
|
|
92
|
+
r.outbox = [structuredClone(outbox)];
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async recordIncoming(o, now) {
|
|
96
|
+
return this.store.updateControls(s => {
|
|
97
|
+
const r = this.record(s, o, 'incoming', now);
|
|
98
|
+
this.pending(s, r, now);
|
|
99
|
+
return r.accepted ? 'accepted' : 'pending';
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
acceptInto(s, c, source) {
|
|
103
|
+
const retained = s.controls?.find(r => r.offer.requestId === c.offer.requestId && r.direction === 'incoming');
|
|
104
|
+
if (!retained?.active || offerDigest(retained.offer) !== offerDigest(c.offer))
|
|
105
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
106
|
+
const r = this.record(s, c.offer, 'incoming', c.now);
|
|
107
|
+
const p = c.accepted.payload;
|
|
108
|
+
if (!verifyConnectionAccepted(c.accepted) || p.fromOwnerDid !== this.store.ownerDid || p.toOwnerDid !== c.offer.fromOwnerDid ||
|
|
109
|
+
p.requestId !== c.offer.requestId || p.requestDigest !== c.offer.requestDigest || p.inviteDigest !== c.offer.inviteDigest)
|
|
110
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
111
|
+
if ('payload' in c.consent ? !verifySigned(c.consent, this.store.ownerDid) || c.consent.payload.requestDigest !== c.offer.requestDigest :
|
|
112
|
+
source !== 'invite' || c.consent.inviteDigest !== c.offer.inviteDigest)
|
|
113
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
114
|
+
if (r.accepted)
|
|
115
|
+
return;
|
|
116
|
+
r.consent = structuredClone(c.consent);
|
|
117
|
+
r.consentDigest = digest(c.consent);
|
|
118
|
+
r.outbox = [structuredClone(c.outbox)];
|
|
119
|
+
this.commit(s, r, c.accepted, c.now, source);
|
|
120
|
+
}
|
|
121
|
+
async accept(c) { this.store.updateControls(s => this.acceptInto(s, c, 'request')); }
|
|
122
|
+
async redeem(c) {
|
|
123
|
+
return this.store.updateControls(s => {
|
|
124
|
+
const b = s.inviteBindings.find(b => b.inviteDigest === c.inviteDigest);
|
|
125
|
+
if (b) {
|
|
126
|
+
if (b.requesterOwnerDid !== c.requesterOwnerDid)
|
|
127
|
+
return 'other';
|
|
128
|
+
const connected = s.connections.some(p => p.peerOwnerDid === b.requesterOwnerDid && p.state === 'connected' && p.connectionId === b.connectionId);
|
|
129
|
+
if (!connected)
|
|
130
|
+
return 'inactive';
|
|
131
|
+
this.acceptInto(s, c, 'invite');
|
|
132
|
+
return 'same';
|
|
133
|
+
}
|
|
134
|
+
this.acceptInto(s, c, 'invite');
|
|
135
|
+
s.inviteBindings.push({ inviteDigest: c.inviteDigest, requesterOwnerDid: c.requesterOwnerDid,
|
|
136
|
+
tokenExpiresAt: Date.parse(c.tokenExpiresAt), boundAt: c.now, connectionId: c.accepted.payload.connectionId });
|
|
137
|
+
return 'first';
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
async applyAccepted(c) {
|
|
141
|
+
this.store.updateControls(s => {
|
|
142
|
+
const existing = s.controls?.find(r => r.offer.requestId === c.offer.requestId);
|
|
143
|
+
if (!existing?.active || !existing.consentDigest)
|
|
144
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
145
|
+
const r = this.record(s, c.offer, 'outgoing', c.now), p = c.accepted.payload;
|
|
146
|
+
if (!verifyConnectionAccepted(c.accepted) || p.fromOwnerDid !== c.offer.toOwnerDid || p.toOwnerDid !== this.store.ownerDid ||
|
|
147
|
+
p.requestId !== c.offer.requestId || p.requestDigest !== c.offer.requestDigest || p.inviteDigest !== c.offer.inviteDigest ||
|
|
148
|
+
!verifyConnectionAck(c.acknowledgement) || c.acknowledgement.payload.fromOwnerDid !== this.store.ownerDid ||
|
|
149
|
+
c.acknowledgement.payload.toOwnerDid !== c.offer.toOwnerDid || c.acknowledgement.payload.acceptedDigest !== digest(c.accepted))
|
|
150
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
151
|
+
if (r.accepted) {
|
|
152
|
+
if (digest(r.accepted) !== digest(c.accepted))
|
|
153
|
+
throw new Error('CONNECTION_NOT_PENDING');
|
|
154
|
+
r.outbox = r.acknowledgement ? [r.acknowledgement] : [];
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this.commit(s, r, c.accepted, c.now, 'request');
|
|
158
|
+
r.acknowledgement = structuredClone(c.outbox);
|
|
159
|
+
r.outbox = [r.acknowledgement];
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
async acknowledge(ack, id) {
|
|
163
|
+
this.store.updateControls(s => {
|
|
164
|
+
const r = s.controls?.find(r => r.offer.requestId === id && r.active), a = r?.accepted;
|
|
165
|
+
if (a && digest(a) === ack.payload.acceptedDigest && a.payload.fromOwnerDid === ack.payload.toOwnerDid &&
|
|
166
|
+
a.payload.toOwnerDid === ack.payload.fromOwnerDid)
|
|
167
|
+
r.outbox = [];
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
async listOutbox(now) {
|
|
171
|
+
return this.store.controlSnapshot().filter(r => r.active)
|
|
172
|
+
.flatMap(r => r.outbox).filter(b => Date.parse(b.deliveryDeadline) > now);
|
|
173
|
+
}
|
|
174
|
+
async markSent(id) {
|
|
175
|
+
this.store.updateControls(s => {
|
|
176
|
+
for (const r of s.controls ?? [])
|
|
177
|
+
r.outbox = r.outbox.filter(b => b.id !== id || b.envelope.payload.eventType !== 'CONNECTION_ACK');
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=connection-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-persistence.js","sourceRoot":"","sources":["../src/connection-persistence.ts"],"names":[],"mappings":"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"}
|