sealbridge 0.4.2 → 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.
- package/README.ja.md +4 -2
- package/README.md +6 -2
- package/dist/cli/dist/accept.d.ts +2 -1
- package/dist/cli/dist/accept.js +18 -7
- package/dist/cli/dist/accept.js.map +1 -1
- package/dist/cli/dist/index.js +46 -13
- package/dist/cli/dist/index.js.map +1 -1
- package/dist/cli/dist/invite-links.d.ts +14 -0
- package/dist/cli/dist/invite-links.js +263 -0
- package/dist/cli/dist/invite-links.js.map +1 -0
- package/dist/cli/dist/invite-output.d.ts +1 -1
- package/dist/cli/dist/invite-output.js +3 -2
- package/dist/cli/dist/invite-output.js.map +1 -1
- package/dist/cli/dist/network.js +16 -23
- package/dist/cli/dist/network.js.map +1 -1
- package/dist/cli/dist/receipt.d.ts +12 -2
- package/dist/cli/dist/receipt.js +6 -5
- package/dist/cli/dist/receipt.js.map +1 -1
- package/dist/cli/dist/sdk.d.ts +6 -4
- package/dist/cli/dist/sdk.js +3 -2
- package/dist/cli/dist/sdk.js.map +1 -1
- package/dist/examples/two-owner-demo/dist/run-demo.js +3 -1
- package/dist/examples/two-owner-demo/dist/run-demo.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/packages/core/dist/context-grant.d.ts +13 -0
- package/dist/packages/core/dist/context-grant.js +65 -0
- package/dist/packages/core/dist/context-grant.js.map +1 -0
- package/dist/packages/core/dist/delegation.d.ts +17 -0
- package/dist/packages/core/dist/delegation.js +126 -0
- package/dist/packages/core/dist/delegation.js.map +1 -0
- package/dist/packages/core/dist/edge.d.ts +2 -0
- package/dist/packages/core/dist/edge.js +2 -0
- package/dist/packages/core/dist/edge.js.map +1 -1
- package/dist/packages/core/dist/index.d.ts +4 -0
- package/dist/packages/core/dist/index.js +4 -0
- package/dist/packages/core/dist/index.js.map +1 -1
- package/dist/packages/core/dist/invite-link.d.ts +72 -0
- package/dist/packages/core/dist/invite-link.js +225 -0
- package/dist/packages/core/dist/invite-link.js.map +1 -0
- package/dist/packages/core/dist/invite-sas.d.ts +7 -0
- package/dist/packages/core/dist/invite-sas.js +15 -0
- package/dist/packages/core/dist/invite-sas.js.map +1 -0
- package/dist/packages/core/dist/relay-auth.d.ts +1 -1
- package/dist/packages/core/dist/relay-auth.js +1 -1
- package/dist/packages/core/dist/relay-auth.js.map +1 -1
- package/dist/packages/core/dist/schema.d.ts +1 -1
- package/dist/packages/core/dist/schema.js +4 -0
- package/dist/packages/core/dist/schema.js.map +1 -1
- package/dist/packages/core/dist/types.d.ts +52 -0
- package/dist/packages/ledger/dist/index.d.ts +70 -2
- package/dist/packages/ledger/dist/index.js +404 -26
- package/dist/packages/ledger/dist/index.js.map +1 -1
- package/dist/packages/relay/dist/fetch.js +4 -0
- package/dist/packages/relay/dist/fetch.js.map +1 -1
- package/dist/packages/relay/dist/invites.d.ts +42 -0
- package/dist/packages/relay/dist/invites.js +347 -0
- package/dist/packages/relay/dist/invites.js.map +1 -0
- package/dist/packages/relay/dist/worker.d.ts +3 -0
- package/dist/packages/relay/dist/worker.js +21 -0
- package/dist/packages/relay/dist/worker.js.map +1 -1
- package/dist/packages/runtime/dist/a2a.js +1 -1
- package/dist/packages/runtime/dist/adapter.d.ts +1 -0
- package/dist/packages/runtime/dist/approval-providers.d.ts +4 -0
- package/dist/packages/runtime/dist/approval-providers.js +3 -0
- package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
- package/dist/packages/runtime/dist/connection-persistence.d.ts +1 -1
- package/dist/packages/runtime/dist/context-grant-audit.d.ts +8 -0
- package/dist/packages/runtime/dist/context-grant-audit.js +41 -0
- package/dist/packages/runtime/dist/context-grant-audit.js.map +1 -0
- package/dist/packages/runtime/dist/delegation.d.ts +37 -0
- package/dist/packages/runtime/dist/delegation.js +125 -0
- package/dist/packages/runtime/dist/delegation.js.map +1 -0
- package/dist/packages/runtime/dist/gateway.d.ts +1 -0
- package/dist/packages/runtime/dist/gateway.js.map +1 -1
- package/dist/packages/runtime/dist/index.d.ts +2 -0
- package/dist/packages/runtime/dist/index.js +2 -0
- package/dist/packages/runtime/dist/index.js.map +1 -1
- package/dist/packages/runtime/dist/mcp-server.js +22 -8
- package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
- package/dist/packages/runtime/dist/mcp-tool-catalog.js +44 -5
- package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
- package/dist/packages/runtime/dist/session-audit.d.ts +6 -1
- package/dist/packages/runtime/dist/session-audit.js +35 -4
- package/dist/packages/runtime/dist/session-audit.js.map +1 -1
- package/dist/packages/runtime/dist/session.d.ts +21 -1
- package/dist/packages/runtime/dist/session.js +427 -62
- package/dist/packages/runtime/dist/session.js.map +1 -1
- package/dist/packages/runtime/dist/task-journal.d.ts +10 -1
- package/dist/packages/runtime/dist/task-journal.js +26 -1
- package/dist/packages/runtime/dist/task-journal.js.map +1 -1
- package/dist/packages/runtime/dist/verifier.d.ts +5 -2
- package/dist/packages/runtime/dist/verifier.js +14 -4
- package/dist/packages/runtime/dist/verifier.js.map +1 -1
- package/dist/spec/audit-entry.schema.json +25 -1
- package/dist/spec/audit-evidence.schema.json +179 -0
- package/dist/spec/audit-file-record.schema.json +177 -0
- package/dist/spec/audit-interruption.schema.json +110 -0
- package/dist/spec/context-grant-audit-payload.schema.json +24 -0
- package/dist/spec/context-grant.schema.json +146 -0
- package/dist/spec/delegation-attachment.schema.json +167 -0
- package/dist/spec/delegation-link.schema.json +141 -0
- package/dist/spec/examples/context-pooling/approval_redelegation/sample-delegation-attachment.json +413 -0
- package/dist/spec/examples/context-pooling/hand_over/sample-context-grant.json +18 -0
- package/dist/spec/examples/context-pooling/hand_over/sample-task-manifest.0.2.0.json +94 -0
- package/dist/spec/examples/context-pooling/sample-context-grant-audit-payload.json +4 -0
- package/dist/spec/examples/context-pooling/view_only/sample-context-grant.json +18 -0
- package/dist/spec/examples/context-pooling/view_only/sample-task-manifest.0.2.0.json +94 -0
- package/dist/spec/examples/sample-audit-evidence.json +138 -0
- package/dist/spec/examples/sample-audit-file-record.json +31 -0
- package/dist/spec/examples/sample-audit-interruption.json +29 -0
- package/dist/spec/task-manifest.0.2.0.schema.json +87 -1
- package/docs/context-grants.md +221 -0
- package/docs/sdk.ja.md +4 -0
- package/docs/sdk.md +4 -0
- package/package.json +3 -2
package/README.ja.md
CHANGED
|
@@ -14,7 +14,7 @@ Windows PowerShell:
|
|
|
14
14
|
irm https://sealbridge.dev/install.ps1 | iex
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
インストーラーは sealbridge 0.
|
|
17
|
+
インストーラーは npm で公開待ちの sealbridge 0.5.0 を固定指定しています。更新したインストーラーは sealbridge@0.5.0 の npm 公開後にのみデプロイしてください。Node 22以上があれば `npm i -g sealbridge` または `npx sealbridge@latest` も使えます。
|
|
18
18
|
|
|
19
19
|
Node 22 以上と同じインストール先の npm が正常に動く場合は再利用します。それ以外は既存の Node を変更せず、npm 同梱の Node をユーザー専用ディレクトリに導入します。Nodeが必要な場合は公式Node 22.22.0のチェックサムを検証します。秘密情報の入力・テレメトリー・管理者権限・Git・pnpmは不要です。macOS/Linuxでは新しいターミナルを開くか `. "$HOME/.profile"` を実行してください(パイプ実行では親シェルのPATHを変更できません)。Windowsでは現在と次回のPATHを設定します。`sealbridge doctor`、`sealbridge demo` で確認できます。doctorは中継器のヘルスチェックを1回行います。オフライン警告があってもインストールは保持します。
|
|
20
20
|
|
|
@@ -49,7 +49,7 @@ Node 22 以上と同じインストール先の npm が正常に動く場合は
|
|
|
49
49
|
|
|
50
50
|
30秒のデモ、音声なし — [MP4を見る](docs/media/sealbridge-demo.mp4)。
|
|
51
51
|
|
|
52
|
-
> **ステータス**: Sealbridge `v0.
|
|
52
|
+
> **ステータス**: Sealbridge `v0.5.0` を 2026-11-06 UTC 付けのリリースとして npm パッケージ `sealbridge` で準備中で、公開待ちです。Sealbridge `v0.4.1` は 2026-11-05 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.4.0` は 2026-11-05 UTC に npm パッケージ `sealbridge` として公開されました。Sealbridge `v0.3.0` は 2026-11-03 UTC に npm パッケージ `sealbridge` として公開されました。以前の `v1.0.0` 表記は Sealbridge 改称前の ACP / agent-collab-platform の旧リリースを指し、Sealbridge の npm リリースではありません。
|
|
53
53
|
> **目的**: 異なる所有者の自律エージェントが、相手のランタイムや認証情報を信頼せずに、仕事の分割・委譲・実行・検証・検収を行うためのオープンソースのプロトコルと参照実装です。
|
|
54
54
|
> **作成者**: [@takapon01234](https://x.com/takapon01234)
|
|
55
55
|
|
|
@@ -905,3 +905,5 @@ relay のデプロイは不要です。
|
|
|
905
905
|
受信側の主張は双方向監査とは別で、引き渡しは既読・実行の証明ではありません。
|
|
906
906
|
委任結果のキャッシュや保留の明示的な再依頼とは別の読み取りです。relay の配備は不要で、
|
|
907
907
|
詳細な観測には相手の C4 対応が必要です。[relay の動作](docs/relay-reliability.ja.md)を参照してください。
|
|
908
|
+
|
|
909
|
+
ワーカーの `--audit-interruption-format 1`(`WorkerNodeOptions.auditInterruptionFormat: 1`)で、PROPOSE 一件だけの承認待ちに対する単独署名の中断終端を明示的に有効化できます。先に監査の読み取り側を更新してください。検証結果は `UNILATERALLY_CLOSED`・`valid:false`・`audit-verify` 終了コード 2 となり、双方の完了合意を表しません。[形式・復元・照合規則(英語)](docs/audit-interruption.md)を参照してください。
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Sealbridge
|
|
2
2
|
|
|
3
|
+
Optional context selections and delivery modes: [Context grants (CP1)](docs/context-grants.md).
|
|
4
|
+
|
|
3
5
|
## Install
|
|
4
6
|
|
|
5
7
|
macOS / Linux:
|
|
@@ -14,7 +16,7 @@ Windows PowerShell:
|
|
|
14
16
|
irm https://sealbridge.dev/install.ps1 | iex
|
|
15
17
|
```
|
|
16
18
|
|
|
17
|
-
The installers pin sealbridge 0.
|
|
19
|
+
The installers pin sealbridge 0.5.0, pending publication on npm. Deploy the updated installers only after sealbridge@0.5.0 is on npm. With Node 22+, you can also use `npm i -g sealbridge` or `npx sealbridge@latest`.
|
|
18
20
|
|
|
19
21
|
The installer reuses Node 22 or newer only when its co-installed npm runs successfully; otherwise it installs Node with bundled npm in a user-local directory without changing the existing Node. It verifies the official Node 22.22.0 archive checksum when Node is needed, and asks for no secrets. No telemetry, sudo, Git or pnpm is required. On macOS/Linux open a new terminal or run `. "$HOME/.profile"` after installing; a piped shell cannot change its parent shell's PATH. Windows updates the current session and user PATH. Run `sealbridge doctor`, then `sealbridge demo`. Doctor makes one relay health request; offline warnings do not undo installation.
|
|
20
22
|
|
|
@@ -51,7 +53,7 @@ To uninstall, download the same script and run `sh install.sh --uninstall` or `&
|
|
|
51
53
|
|
|
52
54
|
30-second demo, no audio — [watch the MP4](docs/media/sealbridge-demo.mp4).
|
|
53
55
|
|
|
54
|
-
> **Status**: Sealbridge `v0.
|
|
56
|
+
> **Status**: Sealbridge `v0.5.0` is being prepared for release dated 2026-11-06 UTC on npm as `sealbridge`; publication is pending. Sealbridge `v0.4.1` was published on npm as `sealbridge` on 2026-11-05 UTC. Sealbridge `v0.4.0` was published on npm as `sealbridge` on 2026-11-05 UTC. Sealbridge `v0.3.0` was published on npm as `sealbridge` on 2026-11-03 UTC. The earlier `v1.0.0` label refers to the legacy pre-Sealbridge ACP / agent-collab-platform release, not a Sealbridge npm release.
|
|
55
57
|
> **Target**: An open-source protocol and reference implementation that lets autonomous agents owned by different people split, delegate, run, verify, and accept work without trusting each other's runtimes or credentials.
|
|
56
58
|
> **Author**: [@takapon01234](https://x.com/takapon01234)
|
|
57
59
|
|
|
@@ -314,6 +316,8 @@ The file is created or restricted to mode `0600`; rejected proposals are omitted
|
|
|
314
316
|
and write failures stop execution. Treat this file as private task data, and keep
|
|
315
317
|
it outside your repository. This also works with the default sandbox echo worker.
|
|
316
318
|
|
|
319
|
+
Workers can opt into PROPOSE-only local interruption terminals with `--audit-interruption-format 1` (`WorkerNodeOptions.auditInterruptionFormat: 1`) after updating readers. A verified worker-only terminal is `UNILATERALLY_CLOSED`, `valid:false`, and `audit-verify` exit 2; it does not establish bilateral completion. See [audit interruption format and recovery](docs/audit-interruption.md).
|
|
320
|
+
|
|
317
321
|
Worker restart recovery is enabled automatically when `--inbox` or `--audit` is
|
|
318
322
|
configured (`WorkerNodeOptions.inboxPath` / `auditPath`). The worker writes private,
|
|
319
323
|
signed, fsynced task checkpoints to `<inboxPath>.tasks.jsonl`, or
|
|
@@ -6,8 +6,9 @@ interface AcceptOptions extends InviteStoreOptions, IdentityStoreOptions {
|
|
|
6
6
|
unref?: () => unknown;
|
|
7
7
|
};
|
|
8
8
|
output?: Writable;
|
|
9
|
+
fetch?: typeof fetch;
|
|
9
10
|
readPaste?: () => Promise<string>;
|
|
10
11
|
}
|
|
11
|
-
/** User-operated import
|
|
12
|
+
/** User-operated import. Only short links contact the relay; import grants no consent. */
|
|
12
13
|
export declare function acceptCommand(command: 'accept' | 'invites', args: string[], options?: AcceptOptions): Promise<void>;
|
|
13
14
|
export {};
|
package/dist/cli/dist/accept.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
import { claimInviteLink } from './invite-links.js';
|
|
3
|
+
import { digest, parseAndVerifyInviteToken, inviteLinkVerificationNumber } from '../../packages/core/dist/index.js';
|
|
2
4
|
import { createInterface } from 'node:readline';
|
|
3
5
|
import { InviteStore, inspectStoredIdentity, resolveStoredIdentity } from '../../packages/runtime/dist/index.js';
|
|
4
|
-
const USAGE = 'Usage: sealbridge accept <link> [--alias <slug>] [--allow-private-relay] | accept --paste [--alias <slug>] [--allow-private-relay] | accept --stdin [--alias <slug>] [--allow-private-relay] | invites list | invites remove <alias-or-ref>';
|
|
6
|
+
const USAGE = 'Usage: sealbridge accept <link> [--alias <slug>] [--allow-private-relay] [--no-network] | accept --paste [--alias <slug>] [--allow-private-relay] | accept --stdin [--alias <slug>] [--allow-private-relay] | invites list | invites remove <alias-or-ref>';
|
|
5
7
|
// Allow the existing 64 KiB token bound plus link framing and whitespace.
|
|
6
8
|
const MAX_STDIN_BYTES = 68 * 1024;
|
|
7
9
|
const STDIN_TIMEOUT_MS = 10_000;
|
|
@@ -72,11 +74,11 @@ async function paste(options) {
|
|
|
72
74
|
reader.once('error', () => { reject(new Error('INVITE_INPUT_UNAVAILABLE')); reader.close(); });
|
|
73
75
|
});
|
|
74
76
|
}
|
|
75
|
-
/** User-operated import
|
|
77
|
+
/** User-operated import. Only short links contact the relay; import grants no consent. */
|
|
76
78
|
export async function acceptCommand(command, args, options = {}) {
|
|
77
79
|
if (args.includes('--help') || args.includes('-h')) {
|
|
78
80
|
console.log(USAGE + (command === 'accept'
|
|
79
|
-
? '\n--stdin reads one link from a pipe or file until EOF (68 KiB, 10 seconds); TTY input is rejected. Use --paste at a terminal. Output is token-free JSON.\n--allow-private-relay permits loopback/private relay invitations for this import; blocked by default.' : ''));
|
|
81
|
+
? '\n--stdin reads one link from a pipe or file until EOF (68 KiB, 10 seconds); TTY input is rejected. Use --paste at a terminal. Output is token-free JSON with verificationNumber and relayContacted. --no-network refuses short links requiring relay access.\n--allow-private-relay permits loopback/private relay invitations for this import; blocked by default.' : ''));
|
|
80
82
|
return;
|
|
81
83
|
}
|
|
82
84
|
if (command === 'invites') {
|
|
@@ -89,7 +91,7 @@ export async function acceptCommand(command, args, options = {}) {
|
|
|
89
91
|
? { invites: store?.list() ?? [] } : { removed: store?.remove(args[1]) ?? false }));
|
|
90
92
|
return;
|
|
91
93
|
}
|
|
92
|
-
let alias, link, usePaste = false, useStdin = false, allowPrivateRelay = false;
|
|
94
|
+
let alias, link, usePaste = false, useStdin = false, allowPrivateRelay = false, noNetwork = false;
|
|
93
95
|
for (let i = 0; i < args.length; i++) {
|
|
94
96
|
const arg = args[i];
|
|
95
97
|
if (arg === '--alias' && alias === undefined && args[i + 1] && !args[i + 1].startsWith('--'))
|
|
@@ -98,6 +100,8 @@ export async function acceptCommand(command, args, options = {}) {
|
|
|
98
100
|
usePaste = true;
|
|
99
101
|
else if (arg === '--stdin' && !useStdin)
|
|
100
102
|
useStdin = true;
|
|
103
|
+
else if (arg === '--no-network' && !noNetwork)
|
|
104
|
+
noNetwork = true;
|
|
101
105
|
else if (arg === '--allow-private-relay' && !allowPrivateRelay)
|
|
102
106
|
allowPrivateRelay = true;
|
|
103
107
|
else if (!arg.startsWith('--') && link === undefined)
|
|
@@ -111,9 +115,16 @@ export async function acceptCommand(command, args, options = {}) {
|
|
|
111
115
|
link = (await paste(options)).trim();
|
|
112
116
|
if (useStdin)
|
|
113
117
|
link = await readStdin(options);
|
|
118
|
+
const shortLink = /^(?:https:\/\/sealbridge\.app\/j|sealbridge:\/\/join)/.test(link);
|
|
119
|
+
if (shortLink && noNetwork)
|
|
120
|
+
throw new Error('INVITE_LINK_NETWORK_REQUIRED: this invitation requires the relay; --no-network refused it');
|
|
121
|
+
const relayPolicy = { ...options.relayPolicy, allowPrivateRelay };
|
|
122
|
+
if (shortLink)
|
|
123
|
+
link = await claimInviteLink(link, { ...options, relayPolicy });
|
|
124
|
+
const invite = parseAndVerifyInviteToken(link, options.now?.() ?? Date.now(), relayPolicy);
|
|
125
|
+
const verificationNumber = inviteLinkVerificationNumber(digest(invite));
|
|
114
126
|
const owner = await resolveStoredIdentity('requester', options);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
})).import(link, alias)));
|
|
127
|
+
const result = await (await InviteStore.open(owner, { ...options, relayPolicy })).import(link, alias, shortLink ? { pendingConfirmation: true } : undefined);
|
|
128
|
+
console.log(JSON.stringify({ ...result, verificationNumber, relayContacted: shortLink }));
|
|
118
129
|
}
|
|
119
130
|
//# sourceMappingURL=accept.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accept.js","sourceRoot":"","sources":["../src/accept.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"accept.js","sourceRoot":"","sources":["../src/accept.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/dist/index.js
CHANGED
|
@@ -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 {
|
|
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) {
|
|
@@ -205,20 +234,22 @@ async function main(args) {
|
|
|
205
234
|
const parsed = parseAuditVerifyArgs(rest);
|
|
206
235
|
const input = readFileSync(parsed.input, 'utf8');
|
|
207
236
|
const bundle = parsed.input.endsWith('.jsonl')
|
|
208
|
-
?
|
|
209
|
-
:
|
|
237
|
+
? parseAuditJsonl(input)
|
|
238
|
+
: parseAuditJson(input);
|
|
210
239
|
const options = {};
|
|
211
240
|
if (parsed.anchorPath) {
|
|
212
|
-
const file =
|
|
241
|
+
const file = parseAuditJson(readFileSync(parsed.anchorPath, 'utf8'));
|
|
213
242
|
if (!file || typeof file !== 'object' || Array.isArray(file))
|
|
214
243
|
throw new Error('INVALID_TRUST_ANCHOR');
|
|
215
244
|
// A positional trust-anchor file still pins taskId and actors, as before.
|
|
216
245
|
options.trustAnchor = file;
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
+
}
|
|
222
253
|
if (typeof file.head === 'string')
|
|
223
254
|
options.head = file.head;
|
|
224
255
|
}
|
|
@@ -228,14 +259,16 @@ async function main(args) {
|
|
|
228
259
|
options.expectedLastEntryHash = parsed.expectedLastEntryHash;
|
|
229
260
|
if (parsed.expectedEntryCount !== undefined)
|
|
230
261
|
options.expectedEntryCount = parsed.expectedEntryCount;
|
|
262
|
+
options.expectedClosureKind = parsed.expectedClosureKind;
|
|
263
|
+
options.expectedInterruptionHash = parsed.expectedInterruptionHash;
|
|
231
264
|
const anchored = parsed.anchorPath !== undefined ||
|
|
232
265
|
parsed.expectedFinalState !== undefined ||
|
|
233
266
|
parsed.expectedLastEntryHash !== undefined ||
|
|
234
|
-
parsed.expectedEntryCount !== undefined;
|
|
235
|
-
const result =
|
|
267
|
+
parsed.expectedEntryCount !== undefined || parsed.expectedClosureKind !== undefined || parsed.expectedInterruptionHash !== undefined;
|
|
268
|
+
const result = verifyAuditEvidence(bundle, anchored ? options : undefined);
|
|
236
269
|
console.log(JSON.stringify(result));
|
|
237
270
|
if (!result.valid)
|
|
238
|
-
process.exitCode = 1;
|
|
271
|
+
process.exitCode = result.status === 'UNILATERALLY_CLOSED' ? 2 : 1;
|
|
239
272
|
break;
|
|
240
273
|
}
|
|
241
274
|
case 'demo': {
|
|
@@ -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
|