sealbridge 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.ja.md +4 -2
  2. package/README.md +6 -2
  3. package/dist/cli/dist/accept.d.ts +2 -1
  4. package/dist/cli/dist/accept.js +19 -8
  5. package/dist/cli/dist/accept.js.map +1 -1
  6. package/dist/cli/dist/board.js +21 -0
  7. package/dist/cli/dist/board.js.map +1 -1
  8. package/dist/cli/dist/config.js +1 -1
  9. package/dist/cli/dist/config.js.map +1 -1
  10. package/dist/cli/dist/connections.js +7 -2
  11. package/dist/cli/dist/connections.js.map +1 -1
  12. package/dist/cli/dist/contacts.js +6 -1
  13. package/dist/cli/dist/contacts.js.map +1 -1
  14. package/dist/cli/dist/index.js +65 -20
  15. package/dist/cli/dist/index.js.map +1 -1
  16. package/dist/cli/dist/invite-links.d.ts +14 -0
  17. package/dist/cli/dist/invite-links.js +263 -0
  18. package/dist/cli/dist/invite-links.js.map +1 -0
  19. package/dist/cli/dist/invite-output.d.ts +1 -1
  20. package/dist/cli/dist/invite-output.js +3 -2
  21. package/dist/cli/dist/invite-output.js.map +1 -1
  22. package/dist/cli/dist/invite-share.js +14 -0
  23. package/dist/cli/dist/invite-share.js.map +1 -1
  24. package/dist/cli/dist/invites-migrate.js +1 -1
  25. package/dist/cli/dist/invites-migrate.js.map +1 -1
  26. package/dist/cli/dist/mcp.js +1 -1
  27. package/dist/cli/dist/mcp.js.map +1 -1
  28. package/dist/cli/dist/network.js +107 -48
  29. package/dist/cli/dist/network.js.map +1 -1
  30. package/dist/cli/dist/pending.js +1 -1
  31. package/dist/cli/dist/pending.js.map +1 -1
  32. package/dist/cli/dist/receipt.d.ts +12 -2
  33. package/dist/cli/dist/receipt.js +10 -5
  34. package/dist/cli/dist/receipt.js.map +1 -1
  35. package/dist/cli/dist/requests.js +1 -1
  36. package/dist/cli/dist/requests.js.map +1 -1
  37. package/dist/cli/dist/sdk.d.ts +6 -4
  38. package/dist/cli/dist/sdk.js +3 -2
  39. package/dist/cli/dist/sdk.js.map +1 -1
  40. package/dist/cli/dist/setup.js +1 -1
  41. package/dist/cli/dist/setup.js.map +1 -1
  42. package/dist/cli/dist/tasks.js +1 -1
  43. package/dist/cli/dist/tasks.js.map +1 -1
  44. package/dist/examples/two-owner-demo/dist/run-demo.js +3 -1
  45. package/dist/examples/two-owner-demo/dist/run-demo.js.map +1 -1
  46. package/dist/package.json +1 -1
  47. package/dist/packages/core/dist/context-grant.d.ts +13 -0
  48. package/dist/packages/core/dist/context-grant.js +65 -0
  49. package/dist/packages/core/dist/context-grant.js.map +1 -0
  50. package/dist/packages/core/dist/delegation.d.ts +17 -0
  51. package/dist/packages/core/dist/delegation.js +126 -0
  52. package/dist/packages/core/dist/delegation.js.map +1 -0
  53. package/dist/packages/core/dist/edge.d.ts +2 -0
  54. package/dist/packages/core/dist/edge.js +2 -0
  55. package/dist/packages/core/dist/edge.js.map +1 -1
  56. package/dist/packages/core/dist/index.d.ts +4 -0
  57. package/dist/packages/core/dist/index.js +4 -0
  58. package/dist/packages/core/dist/index.js.map +1 -1
  59. package/dist/packages/core/dist/invite-link.d.ts +72 -0
  60. package/dist/packages/core/dist/invite-link.js +225 -0
  61. package/dist/packages/core/dist/invite-link.js.map +1 -0
  62. package/dist/packages/core/dist/invite-sas.d.ts +7 -0
  63. package/dist/packages/core/dist/invite-sas.js +15 -0
  64. package/dist/packages/core/dist/invite-sas.js.map +1 -0
  65. package/dist/packages/core/dist/relay-auth.d.ts +1 -1
  66. package/dist/packages/core/dist/relay-auth.js +1 -1
  67. package/dist/packages/core/dist/relay-auth.js.map +1 -1
  68. package/dist/packages/core/dist/schema.d.ts +1 -1
  69. package/dist/packages/core/dist/schema.js +4 -0
  70. package/dist/packages/core/dist/schema.js.map +1 -1
  71. package/dist/packages/core/dist/types.d.ts +52 -0
  72. package/dist/packages/ledger/dist/index.d.ts +70 -2
  73. package/dist/packages/ledger/dist/index.js +404 -26
  74. package/dist/packages/ledger/dist/index.js.map +1 -1
  75. package/dist/packages/relay/dist/fetch.js +4 -0
  76. package/dist/packages/relay/dist/fetch.js.map +1 -1
  77. package/dist/packages/relay/dist/invites.d.ts +42 -0
  78. package/dist/packages/relay/dist/invites.js +347 -0
  79. package/dist/packages/relay/dist/invites.js.map +1 -0
  80. package/dist/packages/relay/dist/worker.d.ts +3 -0
  81. package/dist/packages/relay/dist/worker.js +21 -0
  82. package/dist/packages/relay/dist/worker.js.map +1 -1
  83. package/dist/packages/runtime/dist/a2a.js +1 -1
  84. package/dist/packages/runtime/dist/adapter.d.ts +1 -0
  85. package/dist/packages/runtime/dist/approval-providers.d.ts +4 -0
  86. package/dist/packages/runtime/dist/approval-providers.js +3 -0
  87. package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
  88. package/dist/packages/runtime/dist/connection-persistence.d.ts +1 -1
  89. package/dist/packages/runtime/dist/context-grant-audit.d.ts +8 -0
  90. package/dist/packages/runtime/dist/context-grant-audit.js +41 -0
  91. package/dist/packages/runtime/dist/context-grant-audit.js.map +1 -0
  92. package/dist/packages/runtime/dist/delegation.d.ts +37 -0
  93. package/dist/packages/runtime/dist/delegation.js +125 -0
  94. package/dist/packages/runtime/dist/delegation.js.map +1 -0
  95. package/dist/packages/runtime/dist/gateway.d.ts +1 -0
  96. package/dist/packages/runtime/dist/gateway.js.map +1 -1
  97. package/dist/packages/runtime/dist/index.d.ts +2 -0
  98. package/dist/packages/runtime/dist/index.js +2 -0
  99. package/dist/packages/runtime/dist/index.js.map +1 -1
  100. package/dist/packages/runtime/dist/mcp-server.js +22 -8
  101. package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
  102. package/dist/packages/runtime/dist/mcp-tool-catalog.js +44 -5
  103. package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
  104. package/dist/packages/runtime/dist/protocol-release.js +5 -2
  105. package/dist/packages/runtime/dist/protocol-release.js.map +1 -1
  106. package/dist/packages/runtime/dist/session-audit.d.ts +6 -1
  107. package/dist/packages/runtime/dist/session-audit.js +35 -4
  108. package/dist/packages/runtime/dist/session-audit.js.map +1 -1
  109. package/dist/packages/runtime/dist/session.d.ts +21 -1
  110. package/dist/packages/runtime/dist/session.js +427 -62
  111. package/dist/packages/runtime/dist/session.js.map +1 -1
  112. package/dist/packages/runtime/dist/task-journal.d.ts +10 -1
  113. package/dist/packages/runtime/dist/task-journal.js +26 -1
  114. package/dist/packages/runtime/dist/task-journal.js.map +1 -1
  115. package/dist/packages/runtime/dist/verifier.d.ts +5 -2
  116. package/dist/packages/runtime/dist/verifier.js +14 -4
  117. package/dist/packages/runtime/dist/verifier.js.map +1 -1
  118. package/dist/spec/audit-entry.schema.json +25 -1
  119. package/dist/spec/audit-evidence.schema.json +179 -0
  120. package/dist/spec/audit-file-record.schema.json +177 -0
  121. package/dist/spec/audit-interruption.schema.json +110 -0
  122. package/dist/spec/context-grant-audit-payload.schema.json +24 -0
  123. package/dist/spec/context-grant.schema.json +146 -0
  124. package/dist/spec/delegation-attachment.schema.json +167 -0
  125. package/dist/spec/delegation-link.schema.json +141 -0
  126. package/dist/spec/examples/context-pooling/approval_redelegation/sample-delegation-attachment.json +413 -0
  127. package/dist/spec/examples/context-pooling/hand_over/sample-context-grant.json +18 -0
  128. package/dist/spec/examples/context-pooling/hand_over/sample-task-manifest.0.2.0.json +94 -0
  129. package/dist/spec/examples/context-pooling/sample-context-grant-audit-payload.json +4 -0
  130. package/dist/spec/examples/context-pooling/view_only/sample-context-grant.json +18 -0
  131. package/dist/spec/examples/context-pooling/view_only/sample-task-manifest.0.2.0.json +94 -0
  132. package/dist/spec/examples/sample-audit-evidence.json +138 -0
  133. package/dist/spec/examples/sample-audit-file-record.json +31 -0
  134. package/dist/spec/examples/sample-audit-interruption.json +29 -0
  135. package/dist/spec/task-manifest.0.2.0.schema.json +87 -1
  136. package/docs/context-grants.md +221 -0
  137. package/docs/sdk.ja.md +4 -0
  138. package/docs/sdk.md +4 -0
  139. package/package.json +3 -2
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
4
4
  import { generateKeyPair, validateSchema, signApproval } from '../../packages/core/dist/index.js';
5
- import { parseJsonl, verifyAudit } from '../../packages/ledger/dist/index.js';
5
+ import { parseAuditJsonl, verifyAuditEvidence } from '../../packages/ledger/dist/index.js';
6
6
  import { runDemo } from '../../examples/two-owner-demo/dist/run-demo.js';
7
7
  import { networkCommand } from './network.js';
8
8
  import { mcpServerCommand } from './mcp.js';
@@ -20,9 +20,19 @@ import { acceptCommand } from './accept.js';
20
20
  import { invitesMigrateCommand } from './invites-migrate.js';
21
21
  import { formatCliError } from './error-messages.js';
22
22
  const read = (path) => JSON.parse(readFileSync(path, 'utf8'));
23
+ function parseAuditJson(text) {
24
+ try {
25
+ return JSON.parse(text);
26
+ }
27
+ catch {
28
+ // Parser messages may quote input. JSON bundles and anchors have no JSONL location.
29
+ throw new SyntaxError('Invalid JSON');
30
+ }
31
+ }
23
32
  const USAGE = 'Usage: sealbridge <setup|config|doctor|keygen|validate|approve|audit-verify|receipt|contacts|connections|requests|tasks|pending|board|demo|relay|worker|delegate|discover|invite|accept|invites|mcp-server>';
24
33
  const AUDIT_VERIFY_USAGE = 'Usage: sealbridge audit-verify <audit.jsonl|bundle.json> [trust-anchor.json] ' +
25
- '[--expect-final-state <state>] [--expect-last-hash <hash>] [--expect-entry-count <n>]';
34
+ '[--expect-final-state <state>] [--expect-last-hash <hash>] [--expect-entry-count <n>] [--expect-closure-kind bilateral|interruption] [--expect-interruption-hash <hash>]\n' +
35
+ 'Exit codes: 0 bilateral VALID; 2 UNILATERALLY_CLOSED (valid:false); 1 invalid or unreadable.';
26
36
  function auditVerifyFlag(args, index, name) {
27
37
  const value = args[index + 1];
28
38
  if (!value || value.startsWith('--'))
@@ -34,6 +44,8 @@ function parseAuditVerifyArgs(args) {
34
44
  let expectedFinalState;
35
45
  let expectedLastEntryHash;
36
46
  let expectedEntryCount;
47
+ let expectedClosureKind;
48
+ let expectedInterruptionHash;
37
49
  for (let i = 0; i < args.length; i++) {
38
50
  const arg = args[i];
39
51
  if (arg === '--expect-final-state') {
@@ -50,6 +62,21 @@ function parseAuditVerifyArgs(args) {
50
62
  i++;
51
63
  continue;
52
64
  }
65
+ if (arg === '--expect-closure-kind') {
66
+ if (expectedClosureKind !== undefined)
67
+ throw new Error('Duplicate option: ' + arg);
68
+ const value = auditVerifyFlag(args, i++, arg);
69
+ if (value !== 'bilateral' && value !== 'interruption')
70
+ throw new Error('INVALID_EXPECT_CLOSURE_KIND');
71
+ expectedClosureKind = value;
72
+ continue;
73
+ }
74
+ if (arg === '--expect-interruption-hash') {
75
+ if (expectedInterruptionHash !== undefined)
76
+ throw new Error('Duplicate option: ' + arg);
77
+ expectedInterruptionHash = auditVerifyFlag(args, i++, arg);
78
+ continue;
79
+ }
53
80
  if (arg === '--expect-entry-count') {
54
81
  if (expectedEntryCount !== undefined)
55
82
  throw new Error('Duplicate option: ' + arg);
@@ -75,6 +102,8 @@ function parseAuditVerifyArgs(args) {
75
102
  expectedFinalState,
76
103
  expectedLastEntryHash,
77
104
  expectedEntryCount,
105
+ expectedClosureKind,
106
+ expectedInterruptionHash,
78
107
  };
79
108
  }
80
109
  function save(path, value, privateFile = false) {
@@ -100,7 +129,7 @@ async function main(args) {
100
129
  console.log(JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version);
101
130
  break;
102
131
  case 'doctor':
103
- if (rest.length === 1 && rest[0] === '--help')
132
+ if (rest.includes('--help') || rest.includes('-h'))
104
133
  console.log('Usage: sealbridge doctor [--offline] [--key <file>]\nReports identity backend, selection source, and presence without creating keys. Use config key-store file|keychain to persist selection; SEALBRIDGE_KEY_STORE overrides it, and --key selects a file. --offline skips the relay health request.');
105
134
  else
106
135
  await doctorCommand(parseDoctorArgs(rest));
@@ -150,7 +179,7 @@ async function main(args) {
150
179
  await mcpServerCommand(rest);
151
180
  break;
152
181
  case 'keygen': {
153
- if (rest.length === 1 && (rest[0] === '--help' || rest[0] === '-h')) {
182
+ if (rest.includes('--help') || rest.includes('-h')) {
154
183
  console.log('Usage: sealbridge keygen <owner.private.json>');
155
184
  break;
156
185
  }
@@ -164,7 +193,7 @@ async function main(args) {
164
193
  break;
165
194
  }
166
195
  case 'validate': {
167
- if (rest.length === 1 && (rest[0] === '--help' || rest[0] === '-h')) {
196
+ if (rest.includes('--help') || rest.includes('-h')) {
168
197
  console.log('Usage: sealbridge validate [schema-name] <file.json>');
169
198
  break;
170
199
  }
@@ -176,8 +205,12 @@ async function main(args) {
176
205
  break;
177
206
  }
178
207
  case 'approve': {
208
+ if (rest.includes('--help') || rest.includes('-h')) {
209
+ console.log('Usage: sealbridge approve <key.private.json> <gate> <taskId> <target.json> <approval.json>');
210
+ break;
211
+ }
179
212
  const [keyFile, gate, taskId, targetFile, outputFile] = rest;
180
- if (!keyFile || !gate || !taskId || !targetFile || !outputFile)
213
+ if (rest.length !== 5 || !keyFile || !gate || !taskId || !targetFile || !outputFile)
181
214
  throw new Error('Usage: sealbridge approve <key.private.json> <gate> <taskId> <target.json> <approval.json>');
182
215
  if (![
183
216
  'contract_acceptance',
@@ -194,23 +227,29 @@ async function main(args) {
194
227
  break;
195
228
  }
196
229
  case 'audit-verify': {
230
+ if (rest.includes('--help') || rest.includes('-h')) {
231
+ console.log(AUDIT_VERIFY_USAGE);
232
+ break;
233
+ }
197
234
  const parsed = parseAuditVerifyArgs(rest);
198
235
  const input = readFileSync(parsed.input, 'utf8');
199
236
  const bundle = parsed.input.endsWith('.jsonl')
200
- ? parseJsonl(input)
201
- : JSON.parse(input);
237
+ ? parseAuditJsonl(input)
238
+ : parseAuditJson(input);
202
239
  const options = {};
203
240
  if (parsed.anchorPath) {
204
- const file = read(parsed.anchorPath);
241
+ const file = parseAuditJson(readFileSync(parsed.anchorPath, 'utf8'));
205
242
  if (!file || typeof file !== 'object' || Array.isArray(file))
206
243
  throw new Error('INVALID_TRUST_ANCHOR');
207
244
  // A positional trust-anchor file still pins taskId and actors, as before.
208
245
  options.trustAnchor = file;
209
- options.taskId = typeof file.taskId === 'string' ? file.taskId : '';
210
- options.actors =
211
- Array.isArray(file.actors) && file.actors.length === 2
212
- ? file.actors
213
- : ['', ''];
246
+ if (!bundle || typeof bundle !== 'object' || !('interruption' in bundle)) {
247
+ options.taskId = typeof file.taskId === 'string' ? file.taskId : '';
248
+ options.actors =
249
+ Array.isArray(file.actors) && file.actors.length === 2
250
+ ? file.actors
251
+ : ['', ''];
252
+ }
214
253
  if (typeof file.head === 'string')
215
254
  options.head = file.head;
216
255
  }
@@ -220,24 +259,30 @@ async function main(args) {
220
259
  options.expectedLastEntryHash = parsed.expectedLastEntryHash;
221
260
  if (parsed.expectedEntryCount !== undefined)
222
261
  options.expectedEntryCount = parsed.expectedEntryCount;
262
+ options.expectedClosureKind = parsed.expectedClosureKind;
263
+ options.expectedInterruptionHash = parsed.expectedInterruptionHash;
223
264
  const anchored = parsed.anchorPath !== undefined ||
224
265
  parsed.expectedFinalState !== undefined ||
225
266
  parsed.expectedLastEntryHash !== undefined ||
226
- parsed.expectedEntryCount !== undefined;
227
- const result = verifyAudit(bundle, anchored ? options : undefined);
267
+ parsed.expectedEntryCount !== undefined || parsed.expectedClosureKind !== undefined || parsed.expectedInterruptionHash !== undefined;
268
+ const result = verifyAuditEvidence(bundle, anchored ? options : undefined);
228
269
  console.log(JSON.stringify(result));
229
270
  if (!result.valid)
230
- process.exitCode = 1;
271
+ process.exitCode = result.status === 'UNILATERALLY_CLOSED' ? 2 : 1;
231
272
  break;
232
273
  }
233
274
  case 'demo': {
234
- if (rest.length === 1 && (rest[0] === '--help' || rest[0] === '-h')) {
275
+ if (rest.includes('--help') || rest.includes('-h')) {
235
276
  console.log('Usage: sealbridge demo [--audit-dir <directory>]');
236
277
  break;
237
278
  }
238
- const index = rest.indexOf('--audit-dir'), directory = index >= 0 ? rest[index + 1] : undefined;
239
- if (index >= 0 && !directory)
279
+ if (rest.length && rest[0] !== '--audit-dir')
280
+ throw new Error('Unknown option: ' + rest[0]);
281
+ const directory = rest[1];
282
+ if (rest.length && (!directory || directory.startsWith('-')))
240
283
  throw new Error('Missing --audit-dir value');
284
+ if (rest.length > 2)
285
+ throw new Error('Usage: sealbridge demo [--audit-dir <directory>]');
241
286
  if (directory)
242
287
  mkdirSync(directory, { recursive: true, mode: 0o700 });
243
288
  console.log(JSON.stringify(await runDemo(directory), null, 2));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { KeyPair, RevocationList } from '../../packages/core/dist/index.js';
2
+ import type { IdentityStoreOptions, InviteStoreOptions } from '../../packages/runtime/dist/index.js';
3
+ export declare const SHORT_INVITE_USAGE = "Usage: sealbridge invite create [--share token|link] [--key FILE] [--relay URL] [--name TEXT] [--expires-in SECONDS] [--link-expires-in 300..259200] [--output stdout|file:PATH|fd:N] [--qr terminal|none] [--png FILE] [--svg FILE] [--allow-private-relay]\n sealbridge invite links list | cancel <linkRef> [--key FILE]";
4
+ export interface LinkCommandOptions {
5
+ identityOptions?: IdentityStoreOptions;
6
+ fetch?: typeof fetch;
7
+ }
8
+ /** Reread signed cancellation notices for running CLI workers on each admission check. */
9
+ export declare function linkRevocations(owner: KeyPair, options?: IdentityStoreOptions): RevocationList;
10
+ export declare function claimInviteLink(value: string, options?: InviteStoreOptions & {
11
+ fetch?: typeof fetch;
12
+ }): Promise<string>;
13
+ export declare function createInviteCommand(args: string[], options?: LinkCommandOptions): Promise<void>;
14
+ export declare function inviteLinksCommand(args: string[], options?: LinkCommandOptions): Promise<void>;
@@ -0,0 +1,263 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import * as fs from 'node:fs';
3
+ import { join, dirname } from 'node:path';
4
+ import { createHash, randomBytes } from 'node:crypto';
5
+ import QRCode from 'qrcode';
6
+ import { createInviteToken, createSignedAgentCard, createRelayAuthToken, generateInviteLinkKey, deriveInviteLinkKeys, inviteLinkClaimTag, inviteLinkExpiry, encryptInviteLink, packInviteLinkCiphertext, parseInviteLink, unpackInviteLinkCiphertext, decryptInviteLink, parseAndVerifyInviteToken, digest, normalizeRelayOrigin, inviteLinkVerificationNumber, signPayload, verifySigned, createRevocationNotice, RevocationRegistry } from '../../packages/core/dist/index.js';
7
+ import { HttpRelayClient } from '../../packages/relay/dist/index.js';
8
+ import { LiveProtocol, readApplicationConfig } from '../../packages/runtime/dist/index.js';
9
+ import { resolveDataRoot, ensurePrivateDirectory, inspectPrivateDirectory, writePrivateFile, readPrivateFile } from '../../packages/runtime/dist/local-identity.js';
10
+ import { commandIdentity } from './command-identity.js';
11
+ import { parseInviteOutput, deliverInvite } from './invite-output.js';
12
+ export const SHORT_INVITE_USAGE = 'Usage: sealbridge invite create [--share token|link] [--key FILE] [--relay URL] [--name TEXT] [--expires-in SECONDS] [--link-expires-in 300..259200] [--output stdout|file:PATH|fd:N] [--qr terminal|none] [--png FILE] [--svg FILE] [--allow-private-relay]\n sealbridge invite links list | cancel <linkRef> [--key FILE]';
13
+ const UNSUPPORTED = 'INVITE_LINK_UNSUPPORTED_RELAY: この relay は短いリンクを受け付けませんでした。古い relay か、わざと断っているのかは区別できません。ほかの relay を使うか、--share token を自分で選んでください';
14
+ const UNAVAILABLE = 'INVITE_LINK_UNAVAILABLE: このリンクは使えません。期限切れ、使用済み、または途中が欠けています。送ってくれた人に、新しいリンクを頼んでください。';
15
+ function directory(owner, options) {
16
+ return join(resolveDataRoot(options), 'invite-links', createHash('sha256').update(owner.did).digest('hex'));
17
+ }
18
+ function saveRecord(owner, record, options) {
19
+ const dir = directory(owner, options);
20
+ ensurePrivateDirectory(dir, fs);
21
+ writePrivateFile(join(dir, record.id + '.json'), Buffer.from(JSON.stringify(signPayload(record, owner))), fs);
22
+ }
23
+ function records(owner, options) {
24
+ const dir = directory(owner, options);
25
+ if (!fs.existsSync(dir))
26
+ return [];
27
+ inspectPrivateDirectory(dir, fs);
28
+ return fs.readdirSync(dir).filter(n => /^[A-Za-z0-9_-]{22}\.json$/.test(n)).map(name => {
29
+ const data = JSON.parse(readPrivateFile(join(dir, name), fs, 8192));
30
+ if (!verifySigned(data, owner.did) || data.payload.type !== 'CreatedInviteLink' || data.payload.ownerDid !== owner.did || data.payload.id + '.json' !== name ||
31
+ !/^sha256:[a-f0-9]{64}$/.test(data.payload.inviteDigest))
32
+ throw new Error('INVITE_LINK_STORE_INVALID');
33
+ return data.payload;
34
+ });
35
+ }
36
+ /** Reread signed cancellation notices for running CLI workers on each admission check. */
37
+ export function linkRevocations(owner, options = {}) {
38
+ const registry = (targetType, targetId) => {
39
+ const result = new RevocationRegistry();
40
+ if (targetType !== 'invite' || !/^sha256:[a-f0-9]{64}$/.test(targetId))
41
+ return result;
42
+ const path = join(directory(owner, options), 'revoked', targetId.slice(7) + '.json');
43
+ const text = readPrivateFile(path, fs, 16384);
44
+ if (text)
45
+ result.revoke(JSON.parse(text), owner.did);
46
+ return result;
47
+ };
48
+ return { isRevoked: (type, id) => registry(type, id).isRevoked(type, id),
49
+ assertNotRevoked: (type, id) => registry(type, id).assertNotRevoked(type, id),
50
+ noticesFor: (type, id) => registry(type, id).noticesFor(type, id) };
51
+ }
52
+ function transport(relay, options, allowPrivateRelay = false) {
53
+ return new HttpRelayClient(relay, options.fetch ?? fetch, { allowPrivateRelay }).fetcher;
54
+ }
55
+ async function requestJson(fetcher, relay, path, method, owner, body) {
56
+ let response;
57
+ try {
58
+ response = await fetcher(relay + path, { method, redirect: 'error', signal: AbortSignal.timeout(15000),
59
+ headers: { ...(owner ? { authorization: 'Bearer ' + createRelayAuthToken(owner, { action: 'invite-manage', origin: relay }) } : {}),
60
+ ...(body === undefined ? {} : { 'content-type': 'application/json' }) },
61
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }) });
62
+ }
63
+ catch {
64
+ throw new Error('INVITE_LINK_RELAY_UNAVAILABLE');
65
+ }
66
+ if (response.status === 404) {
67
+ throw new Error(path === '/v1/capabilities' || path === '/v1/invites' ? UNSUPPORTED : UNAVAILABLE);
68
+ }
69
+ if (!response.ok)
70
+ throw new Error(response.status === 429 ? 'INVITE_LINK_RATE_LIMITED' : 'INVITE_LINK_RELAY_REJECTED');
71
+ // Bound untrusted responses independently of Content-Length.
72
+ const reader = response.body?.getReader();
73
+ if (!reader)
74
+ throw new Error('INVALID_INVITE_LINK_RESPONSE');
75
+ const chunks = [];
76
+ let size = 0;
77
+ try {
78
+ for (;;) {
79
+ const { value, done } = await reader.read();
80
+ if (done)
81
+ break;
82
+ size += value.length;
83
+ if (size > 24000) {
84
+ await reader.cancel();
85
+ throw new Error();
86
+ }
87
+ chunks.push(value);
88
+ }
89
+ return JSON.parse(Buffer.concat(chunks).toString());
90
+ }
91
+ catch {
92
+ throw new Error('INVALID_INVITE_LINK_RESPONSE');
93
+ }
94
+ finally {
95
+ reader.releaseLock();
96
+ }
97
+ }
98
+ export async function claimInviteLink(value, options = {}) {
99
+ const parsed = parseInviteLink(value, options.relayPolicy), keys = deriveInviteLinkKeys(parsed.k);
100
+ const fetcher = transport(parsed.relayOrigin, { fetch: options.fetch }, options.relayPolicy?.allowPrivateRelay);
101
+ const capabilities = await requestJson(fetcher, parsed.relayOrigin, '/v1/capabilities', 'GET');
102
+ if (capabilities?.inviteLinks !== 1)
103
+ throw new Error(UNSUPPORTED);
104
+ const claim = { id: keys.id.toString('base64url'), tag: inviteLinkClaimTag(keys.accessKey, keys.id).toString('base64url'), claimNonce: randomBytes(32).toString('base64url') };
105
+ let response;
106
+ try {
107
+ response = await requestJson(fetcher, parsed.relayOrigin, '/v1/invites/claim', 'POST', undefined, claim);
108
+ }
109
+ catch (error) {
110
+ // A lost reply may follow a successful claim. Reuse the same nonce once,
111
+ // inside the relay's 120-second recovery window; terminal refusals stay terminal.
112
+ if (!(error instanceof Error) || !['INVITE_LINK_RELAY_UNAVAILABLE', 'INVALID_INVITE_LINK_RESPONSE'].includes(error.message))
113
+ throw error;
114
+ response = await requestJson(fetcher, parsed.relayOrigin, '/v1/invites/claim', 'POST', undefined, claim);
115
+ }
116
+ const encrypted = unpackInviteLinkCiphertext(response);
117
+ const token = decryptInviteLink(encrypted, parsed.k, parsed.relayOrigin);
118
+ const invite = parseAndVerifyInviteToken(token, Date.now(), options.relayPolicy);
119
+ if (normalizeRelayOrigin(invite.relayUrl) !== parsed.relayOrigin)
120
+ throw new Error('INVITE_LINK_RELAY_MISMATCH');
121
+ return token;
122
+ }
123
+ function flags(args) {
124
+ const result = new Map();
125
+ for (let i = 0; i < args.length; i++) {
126
+ const arg = args[i];
127
+ if (result.has(arg) || !['--key', '--relay', '--name', '--expires-in', '--share', '--link-expires-in', '--output', '--qr', '--png', '--svg', '--allow-private-relay'].includes(arg))
128
+ throw new Error('INVALID_INVITE_OPTION');
129
+ if (arg === '--allow-private-relay')
130
+ result.set(arg, 'true');
131
+ else {
132
+ if (!args[i + 1] || args[i + 1].startsWith('--'))
133
+ throw new Error('INVALID_INVITE_OPTION');
134
+ result.set(arg, args[++i]);
135
+ }
136
+ }
137
+ return result;
138
+ }
139
+ export async function createInviteCommand(args, options = {}) {
140
+ if (args.includes('--help') || args.includes('-h')) {
141
+ console.log(SHORT_INVITE_USAGE);
142
+ return;
143
+ }
144
+ const f = flags(args), share = f.get('--share') ?? 'token';
145
+ if (share !== 'token' && share !== 'link')
146
+ throw new Error('INVALID_INVITE_SHARE');
147
+ if (share === 'token' && ['--link-expires-in', '--qr', '--png', '--svg'].some(n => f.has(n)))
148
+ throw new Error('INVITE_LINK_OPTIONS_REQUIRE_LINK');
149
+ const output = parseInviteOutput(f.get('--output'));
150
+ const ttl = Number(f.get('--link-expires-in') ?? 86400), qr = f.get('--qr') ?? 'terminal';
151
+ if (share === 'link' && (!Number.isInteger(ttl) || ttl < 300 || ttl > 259200 || !['terminal', 'none'].includes(qr)))
152
+ throw new Error('INVALID_INVITE_LINK_OPTION');
153
+ const tokenTtl = Number(f.get('--expires-in') ?? (share === 'link' ? ttl + 86400 : 3600));
154
+ if (!Number.isInteger(tokenTtl) || tokenTtl < 1 || tokenTtl > 2592000)
155
+ throw new Error('INVALID_EXPIRES_IN');
156
+ const relay = f.get('--relay') ?? readApplicationConfig({ ...options.identityOptions, allowPrivateRelay: f.has('--allow-private-relay') }).relays[0];
157
+ const relayOrigin = normalizeRelayOrigin(relay);
158
+ if (share === 'link' && (new URL(relay).protocol !== 'https:' || new URL(relay).pathname !== '/' || new URL(relay).search || new URL(relay).hash || new URL(relay).username || new URL(relay).password))
159
+ throw new Error('INVALID_INVITE_LINK_RELAY');
160
+ const now = Date.now(), expiresAt = new Date(now + tokenTtl * 1000).toISOString();
161
+ const owner = (await commandIdentity('worker', f.get('--key'), options.identityOptions ?? {}));
162
+ const card = createSignedAgentCard({ name: f.get('--name') ?? 'Sealbridge Worker', agentDid: owner.did,
163
+ relayEndpoint: relay, skills: [{ id: 'json-task', name: 'JSON task' }], protocolVersions: new LiveProtocol().receiveVersions(),
164
+ now, ...(share === 'link' ? { expiresAt } : {}) }, owner);
165
+ const token = createInviteToken({ agentCard: card, issuedAt: new Date(now).toISOString(), expiresInSeconds: tokenTtl }, owner);
166
+ // Token creation only signs locally; private-relay opt-in applies when dialing.
167
+ // Link creation contacts the relay and must retain the caller's network policy.
168
+ const inviteDigest = digest(parseAndVerifyInviteToken(token, now, { allowPrivateRelay: share === 'token' || f.has('--allow-private-relay') }));
169
+ const verificationNumber = inviteLinkVerificationNumber(inviteDigest);
170
+ if (share === 'token') {
171
+ deliverInvite(output, token, true);
172
+ console.error(JSON.stringify({ verificationNumber, expiresAt }));
173
+ return;
174
+ }
175
+ const deadline = inviteLinkExpiry(now, ttl * 1000).expiresAt, k = generateInviteLinkKey(), keys = deriveInviteLinkKeys(k);
176
+ const link = 'https://sealbridge.app/j#v=1&k=' + k + (relayOrigin === 'https://relay.sealbridge.dev' ? '' : '&r=' + encodeURIComponent(new URL(relayOrigin).host));
177
+ parseInviteLink(link, { allowPrivateRelay: f.has('--allow-private-relay') });
178
+ const encrypted = packInviteLinkCiphertext(encryptInviteLink(token, k, { relayOrigin, expiresAt: deadline, now }));
179
+ const linkRef = encrypted.id;
180
+ const fetcher = transport(relayOrigin, options, f.has('--allow-private-relay'));
181
+ const capabilities = await requestJson(fetcher, relayOrigin, '/v1/capabilities', 'GET');
182
+ if (capabilities?.inviteLinks !== 1)
183
+ throw new Error(UNSUPPORTED);
184
+ // Persist only cancellation/status metadata before admission, including when
185
+ // the admission reply is interrupted and its outcome cannot be determined.
186
+ saveRecord(owner, { type: 'CreatedInviteLink', ownerDid: owner.did, id: linkRef, relayOrigin, inviteDigest, expiresAt: deadline }, options.identityOptions ?? {});
187
+ await requestJson(fetcher, relayOrigin, '/v1/invites', 'POST', owner, { ...encrypted,
188
+ tagHash: createHash('sha256').update(inviteLinkClaimTag(keys.accessKey, keys.id)).digest('base64url') });
189
+ deliverInvite(output, link, true);
190
+ console.error(JSON.stringify({ verificationNumber, linkRef, expiresAt: deadline }));
191
+ if (qr === 'terminal' && process.stderr.isTTY)
192
+ process.stderr.write(await QRCode.toString(link, { type: 'terminal', errorCorrectionLevel: 'L', margin: 4 }));
193
+ else if (qr === 'terminal')
194
+ console.error('QR は端末でだけ出します');
195
+ for (const format of ['png', 'svg'])
196
+ if (f.has('--' + format)) {
197
+ const path = f.get('--' + format);
198
+ inspectPrivateDirectory(dirname(path), fs);
199
+ const data = format === 'png' ? await QRCode.toBuffer(link, { errorCorrectionLevel: 'L', margin: 4 }) : Buffer.from(await QRCode.toString(link, { type: 'svg', errorCorrectionLevel: 'L', margin: 4 }));
200
+ try {
201
+ writePrivateFile(path, data, fs);
202
+ }
203
+ catch {
204
+ throw new Error('INVITE_OUTPUT_UNAVAILABLE');
205
+ }
206
+ }
207
+ }
208
+ export async function inviteLinksCommand(args, options = {}) {
209
+ if (args.includes('--help') || args.includes('-h')) {
210
+ console.log(SHORT_INVITE_USAGE);
211
+ return;
212
+ }
213
+ const [action, ...rest] = args;
214
+ const linkRef = action === 'cancel' ? rest.shift() : undefined;
215
+ if (!['list', 'cancel'].includes(action) || (action === 'cancel' && !/^[A-Za-z0-9_-]{22}$/.test(linkRef ?? '')))
216
+ throw new Error(SHORT_INVITE_USAGE);
217
+ const f = flags(rest);
218
+ if ([...f.keys()].some(k => !['--key', '--allow-private-relay'].includes(k)))
219
+ throw new Error('INVALID_INVITE_OPTION');
220
+ const owner = await commandIdentity('worker', f.get('--key'), options.identityOptions ?? {}, false);
221
+ if (!owner) {
222
+ if (action === 'cancel')
223
+ throw new Error('INVITE_LINK_NOT_FOUND');
224
+ console.log(JSON.stringify({ links: [] }));
225
+ return;
226
+ }
227
+ const saved = records(owner, options.identityOptions ?? {});
228
+ if (action === 'list') {
229
+ const links = [];
230
+ for (const r of saved) {
231
+ const fetcher = transport(r.relayOrigin, options, f.has('--allow-private-relay'));
232
+ let value;
233
+ try {
234
+ value = await requestJson(fetcher, r.relayOrigin, '/v1/invites/' + r.id + '/status', 'GET', owner);
235
+ }
236
+ catch (error) {
237
+ if (!(error instanceof Error) || error.message !== UNAVAILABLE)
238
+ throw error;
239
+ // An interrupted/failed creation can leave only the local cancellation
240
+ // record. Keep other links inspectable even when this ID is absent.
241
+ links.push({ linkRef: r.id, relay: r.relayOrigin, error: 'INVITE_LINK_UNAVAILABLE' });
242
+ continue;
243
+ }
244
+ if (!value || value.id !== r.id || value.expiresAt !== r.expiresAt || !['unused', 'claimed', 'expired', 'cancelled', 'locked_out'].includes(String(value.status)) ||
245
+ (value.claimedAt !== undefined && (typeof value.claimedAt !== 'string' || !Number.isFinite(Date.parse(value.claimedAt)))))
246
+ throw new Error('INVALID_INVITE_LINK_RESPONSE');
247
+ const status = { id: r.id, status: value.status, expiresAt: r.expiresAt, ...(value.claimedAt ? { claimedAt: new Date(value.claimedAt).toISOString() } : {}) };
248
+ links.push({ linkRef: r.id, relay: r.relayOrigin, status });
249
+ }
250
+ console.log(JSON.stringify({ links }));
251
+ return;
252
+ }
253
+ const r = saved.find(r => r.id === linkRef);
254
+ if (!r)
255
+ throw new Error('INVITE_LINK_NOT_FOUND');
256
+ const path = join(directory(owner, options.identityOptions ?? {}), 'revoked', r.inviteDigest.slice(7) + '.json');
257
+ ensurePrivateDirectory(dirname(path), fs);
258
+ if (!readPrivateFile(path, fs, 16384))
259
+ writePrivateFile(path, Buffer.from(JSON.stringify(createRevocationNotice({ targetType: 'invite', targetId: r.inviteDigest, reason: 'Invite link cancelled' }, owner))), fs);
260
+ await requestJson(transport(r.relayOrigin, options, f.has('--allow-private-relay')), r.relayOrigin, '/v1/invites/' + r.id, 'DELETE', owner);
261
+ console.log(JSON.stringify({ linkRef: r.id, cancelled: true, tokenRevoked: true }));
262
+ }
263
+ //# sourceMappingURL=invite-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-links.js","sourceRoot":"","sources":["../src/invite-links.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,4 @@ export type InviteOutput = {
11
11
  };
12
12
  export declare function parseInviteOutput(value: string | true | undefined): InviteOutput;
13
13
  /** The caller owns inherited descriptors and the existing destination directory. */
14
- export declare function deliverInvite(output: InviteOutput, token: string): void;
14
+ export declare function deliverInvite(output: InviteOutput, token: string, singleLine?: boolean): void;
@@ -26,14 +26,15 @@ export function parseInviteOutput(value) {
26
26
  throw new Error('INVALID_INVITE_OUTPUT');
27
27
  }
28
28
  /** The caller owns inherited descriptors and the existing destination directory. */
29
- export function deliverInvite(output, token) {
29
+ export function deliverInvite(output, token, singleLine = false) {
30
30
  if (output.kind === 'fd')
31
31
  requireFdOutputSupport();
32
32
  if (output.kind === 'none')
33
33
  return;
34
34
  if (output.kind === 'stdout') {
35
35
  console.log(token);
36
- console.log('https://sealbridge.app/i#' + token);
36
+ if (!singleLine)
37
+ console.log('https://sealbridge.app/i#' + token);
37
38
  return;
38
39
  }
39
40
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"invite-output.js","sourceRoot":"","sources":["../src/invite-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invite-output.js","sourceRoot":"","sources":["../src/invite-output.ts"],"names":[],"mappings":"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"}
@@ -117,6 +117,16 @@ async function confirm(message) {
117
117
  }
118
118
  }
119
119
  export async function inviteShareCommand(action, args, identityOptions = {}) {
120
+ const usage = 'Usage: sealbridge invite open --file <invite> [--key <file>] [--contacts <file>] [--out <file>] [--save-contact <name>]\n' +
121
+ ' sealbridge invite share --file <invite> --host <https-url> [--png <file>] [--svg <file>]\n' +
122
+ ' sealbridge invite request-reissue --file <invite> --out <file> [--key <file>]\n' +
123
+ ' sealbridge invite reissue --file <invite> --out <file> [--key <file>] [--agent-key <file>] [--request <file>]';
124
+ if (action === '--help' || action === '-h' || args.includes('--help') || args.includes('-h')) {
125
+ console.log(usage);
126
+ return;
127
+ }
128
+ if (!['open', 'share', 'request-reissue', 'reissue'].includes(action))
129
+ throw new Error(usage);
120
130
  const allowed = ['--file', '--host', '--png', '--svg', '--save-contact', '--key', '--agent-key', '--contacts', '--out', '--request'];
121
131
  const flags = new Map();
122
132
  for (let i = 0; i < args.length; i += 2) {
@@ -126,6 +136,10 @@ export async function inviteShareCommand(action, args, identityOptions = {}) {
126
136
  }
127
137
  const need = (name) => { const v = flags.get('--' + name); if (!v)
128
138
  throw new Error('Missing --' + name); return v; };
139
+ if (action === 'request-reissue' || action === 'reissue')
140
+ need('out');
141
+ if (action === 'share')
142
+ need('host');
129
143
  const value = readFileSync(need('file'), 'utf8').trim();
130
144
  if (action === 'open') {
131
145
  const p = openInvite(value);