sealbridge 0.2.1 → 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/README.ja.md +499 -31
- package/README.md +529 -110
- 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 +24 -0
- package/dist/cli/dist/error-messages.js.map +1 -1
- package/dist/cli/dist/index.js +54 -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/codex-config.d.ts +15 -0
- package/dist/packages/adapters/dist/codex-config.js +171 -0
- package/dist/packages/adapters/dist/codex-config.js.map +1 -0
- package/dist/packages/adapters/dist/command.d.ts +7 -3
- package/dist/packages/adapters/dist/command.js +74 -24
- package/dist/packages/adapters/dist/command.js.map +1 -1
- package/dist/packages/adapters/dist/credential-proxy.d.ts +4 -2
- package/dist/packages/adapters/dist/credential-proxy.js +5 -0
- package/dist/packages/adapters/dist/credential-proxy.js.map +1 -1
- 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/adapters/dist/windows-command.d.ts +6 -0
- package/dist/packages/adapters/dist/windows-command.js +37 -0
- package/dist/packages/adapters/dist/windows-command.js.map +1 -0
- 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 +222 -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 +278 -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/command-environment.d.ts +2 -0
- package/dist/packages/sandbox/dist/command-environment.js +29 -0
- package/dist/packages/sandbox/dist/command-environment.js.map +1 -0
- package/dist/packages/sandbox/dist/container.d.ts +1 -1
- package/dist/packages/sandbox/dist/index.d.ts +2 -1
- package/dist/packages/sandbox/dist/index.js +1 -0
- package/dist/packages/sandbox/dist/index.js.map +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
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RecipientDeliveryState, SignedEnvelope, TaskManifest } from '../../core/dist/index.js';
|
|
2
|
+
import { GatewayDeliveryService } from './outbox.js';
|
|
3
|
+
import type { OutboxRecordV1 } from './delivery-records.js';
|
|
4
|
+
import type { HeldRecord, HeldTransitionSink } from './held-request-store.js';
|
|
5
|
+
import { WorkerTrustStore } from './worker-trust-store.js';
|
|
6
|
+
type ConnectionState = 'none' | 'pending' | 'connected' | 'blocked';
|
|
7
|
+
export interface DeliveryStatusOptions {
|
|
8
|
+
relayUrl?: string;
|
|
9
|
+
onPublish?: () => void;
|
|
10
|
+
connectionState?: (peer: string) => ConnectionState;
|
|
11
|
+
relayForPeer?: (peer: string) => string | undefined;
|
|
12
|
+
}
|
|
13
|
+
/** Content-free recipient lifecycle, separate from inspection and task execution. */
|
|
14
|
+
declare class RecipientDeliveryCoordinatorImplementation {
|
|
15
|
+
readonly service: GatewayDeliveryService;
|
|
16
|
+
readonly options: DeliveryStatusOptions;
|
|
17
|
+
private readonly pendingAdmissions;
|
|
18
|
+
constructor(service: GatewayDeliveryService, options?: DeliveryStatusOptions);
|
|
19
|
+
private connections;
|
|
20
|
+
connection(peer: string): ConnectionState;
|
|
21
|
+
private relay;
|
|
22
|
+
begin(messageId: string): void;
|
|
23
|
+
end(messageId: string): void;
|
|
24
|
+
admit(envelope: SignedEnvelope, manifest: TaskManifest, connected: boolean, held: boolean, occurredAt?: number): void;
|
|
25
|
+
/** A validated legacy grant may record its real adapter boundary without asserting owner opening. */
|
|
26
|
+
handoff(envelope: SignedEnvelope, manifest: TaskManifest): void;
|
|
27
|
+
observe(id: string, state: RecipientDeliveryState): void;
|
|
28
|
+
private recordObservation;
|
|
29
|
+
/** Complete references for frames already committed before an interrupted observation write. */
|
|
30
|
+
private reconcileLocked;
|
|
31
|
+
readonly transition: HeldTransitionSink;
|
|
32
|
+
private recoverHeld;
|
|
33
|
+
reconcile(records?: HeldRecord[]): void;
|
|
34
|
+
dispatchAllowed(record: OutboxRecordV1): boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Attach local terminal intents for owner CLI operations; lifecycle startup remains explicit. */
|
|
37
|
+
export declare function attachHeldDeliveryStatus(owner: import('../../core/dist/index.js').KeyPair, review: import('./held-request-review.js').HeldRequestReview, identityOptions: import('./key-store.js').IdentityStoreOptions, store: WorkerTrustStore, now?: () => number): GatewayDeliveryService;
|
|
38
|
+
export type RecipientDeliveryCoordinator = Pick<RecipientDeliveryCoordinatorImplementation, keyof RecipientDeliveryCoordinatorImplementation>;
|
|
39
|
+
export declare const RecipientDeliveryCoordinator: {
|
|
40
|
+
new (service: GatewayDeliveryService, options?: DeliveryStatusOptions): RecipientDeliveryCoordinator;
|
|
41
|
+
readonly prototype: RecipientDeliveryCoordinator;
|
|
42
|
+
};
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { deliveryStatusRoutingId, digest, openEnvelope, projectDeliveryState, signDeliveryStatus, signEnvelope, validateManifest, verifySigned, verifyEnvelope, isEncryptedEnvelopePayload } from '../../core/dist/index.js';
|
|
3
|
+
import { GatewayDeliveryService } from './outbox.js';
|
|
4
|
+
import { DELIVERY_RETENTION_MS, UUID, deliveryError } from './delivery-records.js';
|
|
5
|
+
import { WorkerTrustStore, workerIntakePath } from './worker-trust-store.js';
|
|
6
|
+
/** Content-free recipient lifecycle, separate from inspection and task execution. */
|
|
7
|
+
class RecipientDeliveryCoordinatorImplementation {
|
|
8
|
+
service;
|
|
9
|
+
options;
|
|
10
|
+
pendingAdmissions = new Set();
|
|
11
|
+
constructor(service, options = {}) {
|
|
12
|
+
this.service = service;
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
connections() {
|
|
16
|
+
return new WorkerTrustStore(this.service.owner, { path: workerIntakePath(this.service.owner.did, this.service.options.identityOptions),
|
|
17
|
+
...this.service.options.identityOptions, now: this.service.store.now });
|
|
18
|
+
}
|
|
19
|
+
connection(peer) { return this.options.connectionState?.(peer) ?? this.connections().connectionState(peer); }
|
|
20
|
+
relay(peer) {
|
|
21
|
+
const url = this.options.relayUrl ?? this.options.relayForPeer?.(peer);
|
|
22
|
+
if (url)
|
|
23
|
+
return url;
|
|
24
|
+
const connection = this.connections().listConnections().find(c => c.peerOwnerDid === peer);
|
|
25
|
+
return connection && 'relayUrl' in connection ? connection.relayUrl : undefined;
|
|
26
|
+
}
|
|
27
|
+
begin(messageId) { this.pendingAdmissions.add(messageId); }
|
|
28
|
+
end(messageId) { this.pendingAdmissions.delete(messageId); }
|
|
29
|
+
admit(envelope, manifest, connected, held, occurredAt = this.service.store.now()) {
|
|
30
|
+
if (manifest.protocolVersion !== '0.2.0' || !UUID.test(envelope.payload.envelopeId) || !isEncryptedEnvelopePayload(envelope.payload.payload))
|
|
31
|
+
return;
|
|
32
|
+
const id = envelope.payload.envelopeId;
|
|
33
|
+
const body = openEnvelope(envelope, this.service.owner);
|
|
34
|
+
validateManifest(body?.proposal?.payload);
|
|
35
|
+
if (!verifyEnvelope(envelope, this.service.owner.did) || envelope.payload.eventType !== 'PROPOSE' || envelope.payload.seq !== 0 ||
|
|
36
|
+
envelope.payload.taskId !== manifest.taskId || envelope.payload.senderDid !== manifest.requester.ownerDid ||
|
|
37
|
+
manifest.worker?.ownerDid !== this.service.owner.did || digest(body.proposal.payload) !== digest(manifest) ||
|
|
38
|
+
!verifySigned(body.proposal, manifest.requester.ownerDid))
|
|
39
|
+
throw deliveryError('INVALID_DELIVERY_STATUS');
|
|
40
|
+
this.service.store.preparedTransaction(() => {
|
|
41
|
+
const previous = this.service.store.read('observations', id);
|
|
42
|
+
if (previous) {
|
|
43
|
+
if (previous.originalEnvelopeDigest !== digest(envelope))
|
|
44
|
+
throw deliveryError('DELIVERY_RECORD_CONFLICT');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (!held)
|
|
48
|
+
return; // Legacy grants have no synthetic held/opened facts.
|
|
49
|
+
if (this.service.store.ids('observations').length >= this.service.store.limits.messages)
|
|
50
|
+
throw deliveryError('OUTBOX_FULL');
|
|
51
|
+
this.service.store.write('observations', id, { version: 1, messageId: id, localOwnerDid: this.service.owner.did,
|
|
52
|
+
senderDid: manifest.requester.ownerDid, taskId: manifest.taskId, originalEnvelopeDigest: digest(envelope),
|
|
53
|
+
createdAt: Date.parse(manifest.createdAt), deliveryDeadline: Date.parse(manifest.deadline),
|
|
54
|
+
retainUntil: Math.max(Date.parse(manifest.createdAt), Date.parse(manifest.deadline)) + DELIVERY_RETENTION_MS,
|
|
55
|
+
protocolVersion: '0.2.0', disclosure: connected ? 'connected' : 'coarse', latestState: 'received_held', nextRevision: 1,
|
|
56
|
+
facts: [{ state: 'received_held', occurredAt }], published: [] });
|
|
57
|
+
});
|
|
58
|
+
if (held)
|
|
59
|
+
this.observe(id, 'received_held');
|
|
60
|
+
}
|
|
61
|
+
/** A validated legacy grant may record its real adapter boundary without asserting owner opening. */
|
|
62
|
+
handoff(envelope, manifest) {
|
|
63
|
+
const id = envelope.payload.envelopeId;
|
|
64
|
+
if (manifest.protocolVersion !== '0.2.0' || !UUID.test(id) || !isEncryptedEnvelopePayload(envelope.payload.payload))
|
|
65
|
+
return;
|
|
66
|
+
const firstHandoff = !this.service.store.read('observations', id);
|
|
67
|
+
if (firstHandoff) {
|
|
68
|
+
const now = this.service.store.now(), connected = this.connection(manifest.requester.ownerDid) === 'connected';
|
|
69
|
+
this.service.store.preparedTransaction(() => {
|
|
70
|
+
if (this.service.store.ids('observations').length >= this.service.store.limits.messages)
|
|
71
|
+
throw deliveryError('OUTBOX_FULL');
|
|
72
|
+
this.service.store.write('observations', id, {
|
|
73
|
+
version: 1, messageId: id, localOwnerDid: this.service.owner.did, senderDid: manifest.requester.ownerDid,
|
|
74
|
+
taskId: manifest.taskId, originalEnvelopeDigest: digest(envelope), createdAt: Date.parse(manifest.createdAt),
|
|
75
|
+
deliveryDeadline: Date.parse(manifest.deadline), retainUntil: Math.max(Date.parse(manifest.createdAt), Date.parse(manifest.deadline)) + DELIVERY_RETENTION_MS,
|
|
76
|
+
protocolVersion: '0.2.0', disclosure: connected ? 'connected' : 'coarse',
|
|
77
|
+
latestState: 'handed_to_agent', nextRevision: 1, facts: [{ state: 'handed_to_agent', occurredAt: now }], published: [],
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
if (!connected)
|
|
81
|
+
return; // Immutable coarse admission never publishes adapter detail.
|
|
82
|
+
}
|
|
83
|
+
this.recordObservation(id, 'handed_to_agent', firstHandoff);
|
|
84
|
+
}
|
|
85
|
+
observe(id, state) { this.recordObservation(id, state); }
|
|
86
|
+
recordObservation(id, state, firstHandoff = false) {
|
|
87
|
+
if (!UUID.test(id))
|
|
88
|
+
return;
|
|
89
|
+
this.service.store.preparedTransaction(() => {
|
|
90
|
+
let r = this.service.store.read('observations', id);
|
|
91
|
+
if (!r || this.service.store.now() >= r.retainUntil)
|
|
92
|
+
return;
|
|
93
|
+
this.reconcileLocked(r);
|
|
94
|
+
r = this.service.store.read('observations', id);
|
|
95
|
+
let fact = r.facts.find(f => f.state === state);
|
|
96
|
+
const existingDetail = !!fact && !['received_held', 'closed'].includes(state) && !firstHandoff;
|
|
97
|
+
if (!fact) {
|
|
98
|
+
if (r.latestState === 'closed' || state === 'received_held' || state === 'opened' && r.latestState === 'handed_to_agent')
|
|
99
|
+
return;
|
|
100
|
+
fact = { state, occurredAt: this.service.store.now() };
|
|
101
|
+
r = { ...r, facts: [...r.facts, fact], latestState: state };
|
|
102
|
+
this.service.store.write('observations', id, r);
|
|
103
|
+
}
|
|
104
|
+
if (existingDetail || r.published.some(p => p.status.payload.state === state) || !projectDeliveryState(state, r.disclosure, this.connection(r.senderDid)))
|
|
105
|
+
return;
|
|
106
|
+
const relayUrl = this.relay(r.senderDid);
|
|
107
|
+
if (!relayUrl)
|
|
108
|
+
throw deliveryError('OUTBOX_STORE_INVALID');
|
|
109
|
+
const status = signDeliveryStatus({ type: 'DeliveryStatus', version: 1, messageId: id, taskId: r.taskId,
|
|
110
|
+
senderDid: r.senderDid, recipientDid: r.localOwnerDid, state, revision: r.nextRevision,
|
|
111
|
+
occurredAt: fact.occurredAt, retainUntil: r.retainUntil }, this.service.owner);
|
|
112
|
+
const envelope = signEnvelope({ taskId: deliveryStatusRoutingId(id), recipientDid: r.senderDid,
|
|
113
|
+
seq: r.nextRevision, eventType: 'DELIVERY_STATUS', payload: status }, this.service.owner, { encrypt: true, signedAt: new Date(this.service.store.now()).toISOString() });
|
|
114
|
+
this.service.enqueueLocked([envelope], { messageId: id, peerOwnerDid: r.senderDid, relayUrl,
|
|
115
|
+
deliveryDeadline: Math.min(fact.occurredAt + 86400_000, r.retainUntil), kind: 'delivery-status' });
|
|
116
|
+
this.service.store.write('observations', id, { ...r, nextRevision: r.nextRevision + 1,
|
|
117
|
+
published: [...r.published, { revision: r.nextRevision, status, envelopeId: envelope.payload.envelopeId }] });
|
|
118
|
+
});
|
|
119
|
+
this.options.onPublish?.();
|
|
120
|
+
}
|
|
121
|
+
/** Complete references for frames already committed before an interrupted observation write. */
|
|
122
|
+
reconcileLocked(initial) {
|
|
123
|
+
let r = initial;
|
|
124
|
+
for (const o of this.service.store.statusOutbox(r.messageId, r.published.map(p => p.envelopeId)).sort((a, b) => a.ordinal - b.ordinal)) {
|
|
125
|
+
if (r.published.some(p => p.envelopeId === o.envelopeId))
|
|
126
|
+
continue;
|
|
127
|
+
const fact = r.facts.at(-1);
|
|
128
|
+
if (o.ordinal !== r.nextRevision || o.peerOwnerDid !== r.senderDid || o.envelope.payload.taskId !== deliveryStatusRoutingId(r.messageId) ||
|
|
129
|
+
o.envelope.payload.eventType !== 'DELIVERY_STATUS')
|
|
130
|
+
throw deliveryError('DELIVERY_RECORD_CONFLICT');
|
|
131
|
+
// Ed25519 and the original fact timestamp reproduce the inner signed bytes. The
|
|
132
|
+
// encrypted outer frame remains exactly the prepared, locally signed outbox frame.
|
|
133
|
+
const status = signDeliveryStatus({ type: 'DeliveryStatus', version: 1, messageId: r.messageId, taskId: r.taskId,
|
|
134
|
+
senderDid: r.senderDid, recipientDid: r.localOwnerDid, state: fact.state, revision: o.ordinal,
|
|
135
|
+
occurredAt: fact.occurredAt, retainUntil: r.retainUntil }, this.service.owner);
|
|
136
|
+
if (!this.service.store.read('batches', o.batchId))
|
|
137
|
+
this.service.store.write('batches', o.batchId, { version: 1, batchId: o.batchId, messageId: o.messageId, localOwnerDid: r.localOwnerDid,
|
|
138
|
+
envelopeIds: [o.envelopeId], createdAt: o.createdAt, committed: true });
|
|
139
|
+
r = { ...r, nextRevision: r.nextRevision + 1, published: [...r.published, { revision: o.ordinal, status, envelopeId: o.envelopeId }] };
|
|
140
|
+
this.service.store.write('observations', r.messageId, r);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
transition = (record, transition) => {
|
|
144
|
+
if (record.kind !== 'task' || !UUID.test(record.envelope.payload.envelopeId) || this.pendingAdmissions.has(record.envelope.payload.envelopeId))
|
|
145
|
+
return;
|
|
146
|
+
this.recoverHeld(record);
|
|
147
|
+
const observation = this.service.store.read('observations', record.envelope.payload.envelopeId);
|
|
148
|
+
if (observation?.latestState === 'closed')
|
|
149
|
+
this.observe(observation.messageId, 'closed');
|
|
150
|
+
if (transition !== 'completed')
|
|
151
|
+
this.observe(record.envelope.payload.envelopeId, transition === 'held' ? 'received_held' : 'closed');
|
|
152
|
+
};
|
|
153
|
+
recoverHeld(record) {
|
|
154
|
+
if (record.kind !== 'task' || !UUID.test(record.envelope.payload.envelopeId))
|
|
155
|
+
return;
|
|
156
|
+
if (this.service.store.read('observations', record.envelope.payload.envelopeId))
|
|
157
|
+
return;
|
|
158
|
+
const body = openEnvelope(record.envelope, this.service.owner);
|
|
159
|
+
const m = body.proposal?.payload;
|
|
160
|
+
validateManifest(m);
|
|
161
|
+
if (!verifySigned(body.proposal, record.senderOwnerDid) || m.requester.ownerDid !== record.senderOwnerDid ||
|
|
162
|
+
m.worker?.ownerDid !== this.service.owner.did || m.taskId !== record.taskId)
|
|
163
|
+
throw deliveryError('INVALID_DELIVERY_STATUS');
|
|
164
|
+
this.admit(record.envelope, m, false, true, record.receivedAt);
|
|
165
|
+
}
|
|
166
|
+
reconcile(records = []) {
|
|
167
|
+
for (const record of records)
|
|
168
|
+
if (!this.pendingAdmissions.has(record.envelope.payload.envelopeId))
|
|
169
|
+
this.transition(record, 'held');
|
|
170
|
+
if (this.service.store.ids('observations').length)
|
|
171
|
+
this.service.store.preparedTransaction(() => {
|
|
172
|
+
for (const r of this.service.store.snapshot('observations'))
|
|
173
|
+
this.reconcileLocked(r);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
dispatchAllowed(record) {
|
|
177
|
+
if (record.kind !== 'delivery-status')
|
|
178
|
+
return true;
|
|
179
|
+
const r = this.service.store.read('observations', record.messageId);
|
|
180
|
+
const published = r?.published.find(p => p.envelopeId === record.envelopeId);
|
|
181
|
+
return !!r && !!published && !!projectDeliveryState(published.status.payload.state, r.disclosure, this.connection(r.senderDid));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** Attach local terminal intents for owner CLI operations; lifecycle startup remains explicit. */
|
|
185
|
+
export function attachHeldDeliveryStatus(owner, review, identityOptions, store, now) {
|
|
186
|
+
const service = new GatewayDeliveryService(owner, { identityOptions, now, resolveTransport: () => { throw deliveryError('RELAY_UNAVAILABLE'); } });
|
|
187
|
+
service.recipientStatus = new RecipientDeliveryCoordinator(service, { connectionState: peer => store.connectionState(peer),
|
|
188
|
+
relayForPeer: peer => { const c = store.listConnections().find(c => c.peerOwnerDid === peer); return c && 'relayUrl' in c ? c.relayUrl : undefined; } });
|
|
189
|
+
review.store.setTransitionSink(service.recipientStatus.transition);
|
|
190
|
+
return service;
|
|
191
|
+
}
|
|
192
|
+
export const RecipientDeliveryCoordinator = RecipientDeliveryCoordinatorImplementation;
|
|
193
|
+
//# sourceMappingURL=delivery-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-status.js","sourceRoot":"","sources":["../src/delivery-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import type { KeyPair, SignedEnvelope } from '../../core/dist/index.js';
|
|
3
|
+
import type { LocalIdentityOptions } from './local-identity.js';
|
|
4
|
+
import type { DeliveryLimits, DeliveryRecords, InboundReceiptV1, MessageRecordV1, OutboxRecordV1 } from './delivery-records.js';
|
|
5
|
+
export interface DeliveryStoreOptions extends LocalIdentityOptions {
|
|
6
|
+
now?: () => number;
|
|
7
|
+
limits?: Partial<DeliveryLimits>;
|
|
8
|
+
}
|
|
9
|
+
export declare function deliveryRoot(did: string, options?: LocalIdentityOptions): string;
|
|
10
|
+
type Kind = keyof DeliveryRecords;
|
|
11
|
+
export interface DeliveryWrite {
|
|
12
|
+
kind: Kind;
|
|
13
|
+
id: string;
|
|
14
|
+
record: DeliveryRecords[Kind];
|
|
15
|
+
}
|
|
16
|
+
export interface PreparedDeliveryWrite extends DeliveryWrite {
|
|
17
|
+
temporary: string;
|
|
18
|
+
bytes: Buffer;
|
|
19
|
+
published?: true;
|
|
20
|
+
}
|
|
21
|
+
type StatusMessage = Pick<MessageRecordV1, 'messageId' | 'relayUrl' | 'protocolVersion' | 'retainUntil'>;
|
|
22
|
+
type OutboxSummary = Pick<OutboxRecordV1, 'envelopeId' | 'messageId' | 'batchId' | 'state' | 'kind' | 'ordinal' | 'nextAttemptAt' | 'lease'> & {
|
|
23
|
+
bytes: number;
|
|
24
|
+
};
|
|
25
|
+
/** Signer-scoped records. Construction and reads have no publication or cleanup side effects. */
|
|
26
|
+
declare class DeliveryStoreImplementation {
|
|
27
|
+
readonly owner: KeyPair;
|
|
28
|
+
readonly options: DeliveryStoreOptions;
|
|
29
|
+
readonly root: string;
|
|
30
|
+
readonly limits: DeliveryLimits;
|
|
31
|
+
readonly io: typeof fs;
|
|
32
|
+
readonly platform: NodeJS.Platform;
|
|
33
|
+
readonly now: () => number;
|
|
34
|
+
private generationFd?;
|
|
35
|
+
private stagedWrites?;
|
|
36
|
+
private transactionDirectories?;
|
|
37
|
+
private transactionReads?;
|
|
38
|
+
private readonly verified;
|
|
39
|
+
private verifiedBytes;
|
|
40
|
+
private preparedMode;
|
|
41
|
+
private readonly idempotencyLeaseMs;
|
|
42
|
+
private outboxIndex?;
|
|
43
|
+
private readonly idempotencyIndexes;
|
|
44
|
+
private messageIndex?;
|
|
45
|
+
private readonly inspected;
|
|
46
|
+
private readonly listings;
|
|
47
|
+
private forget;
|
|
48
|
+
/** Reuse verified records only while file identity, permissions and timestamps match. */
|
|
49
|
+
private remember;
|
|
50
|
+
constructor(owner: KeyPair, options?: DeliveryStoreOptions);
|
|
51
|
+
path(kind: Kind, id: string): string;
|
|
52
|
+
private directories;
|
|
53
|
+
private inspectPath;
|
|
54
|
+
private inspect;
|
|
55
|
+
private directoryStamp;
|
|
56
|
+
private generationStamp;
|
|
57
|
+
private listingStamp;
|
|
58
|
+
private adoptIdempotencyStamp;
|
|
59
|
+
/** Lazily held for this signer lock, including multiple record publications. */
|
|
60
|
+
private openGeneration;
|
|
61
|
+
private publishIdempotencyChange;
|
|
62
|
+
ids(kind: Kind, onError?: (error: Error) => void): string[];
|
|
63
|
+
read<K extends Kind>(kind: K, id: string): DeliveryRecords[K] | undefined;
|
|
64
|
+
snapshot<K extends Kind>(kind: K, onError?: (error: Error) => void): DeliveryRecords[K][];
|
|
65
|
+
scan<K extends Kind>(kind: K, signal: AbortSignal): AsyncGenerator<DeliveryRecords[K]>;
|
|
66
|
+
getMessage(id: string): MessageRecordV1 | undefined;
|
|
67
|
+
findTask(taskId: string): MessageRecordV1[];
|
|
68
|
+
/** All cross-process changes use this short lock; no callback performs I/O to a relay. */
|
|
69
|
+
transaction<T>(change: () => T): T;
|
|
70
|
+
/** Caller holds the signer lock. */
|
|
71
|
+
write<K extends Kind>(kind: K, id: string, record: DeliveryRecords[K]): void;
|
|
72
|
+
private checkObservation;
|
|
73
|
+
/** Creating/removing an unpublished temporary does not change the indexed JSON records. */
|
|
74
|
+
private temporaryChange;
|
|
75
|
+
private stageWrites;
|
|
76
|
+
private openWrites;
|
|
77
|
+
/** Synchronous callers also close written handles before acquiring the publication lock. */
|
|
78
|
+
prepareWritesSync(writes: DeliveryWrite[]): PreparedDeliveryWrite[];
|
|
79
|
+
/** Complete unique temporary writes outside the signer lock; close handles before publication. */
|
|
80
|
+
prepareWrites(writes: DeliveryWrite[]): Promise<PreparedDeliveryWrite[]>;
|
|
81
|
+
/** C4 synchronous lifecycle writes: plan under lock, write outside, then recheck before publication.
|
|
82
|
+
* Callbacks only read and stage record replacements; they may run again after a concurrent writer.
|
|
83
|
+
*/
|
|
84
|
+
preparedTransaction<T>(change: () => T): T;
|
|
85
|
+
/** Caller holds the signer lock. Prepared writes have completed and their handles are closed. */
|
|
86
|
+
publishWrite(write: PreparedDeliveryWrite): void;
|
|
87
|
+
discardWrites(writes: PreparedDeliveryWrite[]): void;
|
|
88
|
+
remove(kind: Kind, id: string): void;
|
|
89
|
+
/** Gateway entry points load/reconcile indexes in bounded slices before synchronous publication. */
|
|
90
|
+
prepare(signal?: AbortSignal): Promise<void>;
|
|
91
|
+
/** Retain only routing metadata; recovery yields and local writes keep it current. */
|
|
92
|
+
private prepareStatusMessages;
|
|
93
|
+
statusMessages(onError?: (error: Error) => void): StatusMessage[];
|
|
94
|
+
/** Resolve status candidates from metadata without reopening unrelated task ciphertext. */
|
|
95
|
+
statusOutbox(messageId?: string, published?: readonly string[]): OutboxRecordV1[];
|
|
96
|
+
/** Metadata only: local atomic writes update this index without scanning retained ciphertext. */
|
|
97
|
+
private summaries;
|
|
98
|
+
pending(messageId: string): OutboxSummary[];
|
|
99
|
+
/** Reconcile C2 capacity metadata outside the signer lock, yielding between retained records. */
|
|
100
|
+
prepareIdempotency(): Promise<void>;
|
|
101
|
+
/** Caller holds the signer lock. Reread both inventories and validate every listed record. */
|
|
102
|
+
private refreshIdempotencyIndexes;
|
|
103
|
+
/** Caller holds the signer lock. Unchanged retained results require no file scans or reopens. */
|
|
104
|
+
reserveIdempotencyCapacity(now: number): void;
|
|
105
|
+
assertCapacity(records: OutboxRecordV1[], message?: MessageRecordV1): void;
|
|
106
|
+
/** Read-only preflight; publication rechecks capacity under the signer lock. */
|
|
107
|
+
checkAvailable(envelopes?: number): void;
|
|
108
|
+
committed(batchId: string): OutboxRecordV1[];
|
|
109
|
+
finishBatch(batchId: string): void;
|
|
110
|
+
receipt(envelope: SignedEnvelope, deadline: number, state: InboundReceiptV1['state'], outcomeCode?: string): InboundReceiptV1;
|
|
111
|
+
receiptPrepared(envelope: SignedEnvelope, deadline: number, state: InboundReceiptV1['state'], signal?: AbortSignal): Promise<void>;
|
|
112
|
+
/** Caller holds the signer lock, including when publishing a task checkpoint. */
|
|
113
|
+
receiptLocked(envelope: SignedEnvelope, deadline: number, state: InboundReceiptV1['state'], outcomeCode?: string): InboundReceiptV1;
|
|
114
|
+
private nextReceipt;
|
|
115
|
+
private maintenanceSteps;
|
|
116
|
+
maintain(onError?: (error: Error) => void): void;
|
|
117
|
+
/** One batch (at most two frames) or one retained record per event-loop turn. */
|
|
118
|
+
maintainInBackground(onError: (error: Error) => void, signal: AbortSignal): Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
export type DeliveryStore = Pick<DeliveryStoreImplementation, keyof DeliveryStoreImplementation>;
|
|
121
|
+
export declare const DeliveryStore: {
|
|
122
|
+
new (owner: KeyPair, options?: DeliveryStoreOptions): DeliveryStore;
|
|
123
|
+
readonly prototype: DeliveryStore;
|
|
124
|
+
};
|
|
125
|
+
export {};
|