sealbridge 0.0.1 → 0.2.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 (208) hide show
  1. package/NOTICE +43 -0
  2. package/README.ja.md +397 -0
  3. package/README.md +567 -1
  4. package/dist/cli/dist/acp.d.ts +2 -0
  5. package/dist/cli/dist/acp.js +6 -0
  6. package/dist/cli/dist/acp.js.map +1 -0
  7. package/dist/cli/dist/approval-summary.d.ts +2 -0
  8. package/dist/cli/dist/approval-summary.js +32 -0
  9. package/dist/cli/dist/approval-summary.js.map +1 -0
  10. package/dist/cli/dist/board.d.ts +47 -0
  11. package/dist/cli/dist/board.js +255 -0
  12. package/dist/cli/dist/board.js.map +1 -0
  13. package/dist/cli/dist/contacts.d.ts +18 -0
  14. package/dist/cli/dist/contacts.js +154 -0
  15. package/dist/cli/dist/contacts.js.map +1 -0
  16. package/dist/cli/dist/doctor.d.ts +13 -0
  17. package/dist/cli/dist/doctor.js +30 -0
  18. package/dist/cli/dist/doctor.js.map +1 -0
  19. package/dist/cli/dist/error-messages.d.ts +2 -0
  20. package/dist/cli/dist/error-messages.js +24 -0
  21. package/dist/cli/dist/error-messages.js.map +1 -0
  22. package/dist/cli/dist/index.d.ts +2 -0
  23. package/dist/cli/dist/index.js +194 -0
  24. package/dist/cli/dist/index.js.map +1 -0
  25. package/dist/cli/dist/invite-share.d.ts +16 -0
  26. package/dist/cli/dist/invite-share.js +163 -0
  27. package/dist/cli/dist/invite-share.js.map +1 -0
  28. package/dist/cli/dist/mcp.d.ts +17 -0
  29. package/dist/cli/dist/mcp.js +105 -0
  30. package/dist/cli/dist/mcp.js.map +1 -0
  31. package/dist/cli/dist/network.d.ts +1 -0
  32. package/dist/cli/dist/network.js +396 -0
  33. package/dist/cli/dist/network.js.map +1 -0
  34. package/dist/cli/dist/public-settings.d.ts +27 -0
  35. package/dist/cli/dist/public-settings.js +33 -0
  36. package/dist/cli/dist/public-settings.js.map +1 -0
  37. package/dist/cli/dist/receipt.d.ts +39 -0
  38. package/dist/cli/dist/receipt.js +90 -0
  39. package/dist/cli/dist/receipt.js.map +1 -0
  40. package/dist/cli/dist/receive-hook.d.ts +2 -0
  41. package/dist/cli/dist/receive-hook.js +35 -0
  42. package/dist/cli/dist/receive-hook.js.map +1 -0
  43. package/dist/cli/dist/task-input.d.ts +2 -0
  44. package/dist/cli/dist/task-input.js +19 -0
  45. package/dist/cli/dist/task-input.js.map +1 -0
  46. package/dist/cli/dist/wake-hook.d.ts +3 -0
  47. package/dist/cli/dist/wake-hook.js +32 -0
  48. package/dist/cli/dist/wake-hook.js.map +1 -0
  49. package/dist/examples/two-owner-demo/alice-policy.json +4 -0
  50. package/dist/examples/two-owner-demo/bob-policy.json +4 -0
  51. package/dist/examples/two-owner-demo/dist/run-demo.d.ts +71 -0
  52. package/dist/examples/two-owner-demo/dist/run-demo.js +383 -0
  53. package/dist/examples/two-owner-demo/dist/run-demo.js.map +1 -0
  54. package/dist/package.json +1 -0
  55. package/dist/packages/adapters/dist/command.d.ts +122 -0
  56. package/dist/packages/adapters/dist/command.js +378 -0
  57. package/dist/packages/adapters/dist/command.js.map +1 -0
  58. package/dist/packages/adapters/dist/credential-proxy.d.ts +37 -0
  59. package/dist/packages/adapters/dist/credential-proxy.js +363 -0
  60. package/dist/packages/adapters/dist/credential-proxy.js.map +1 -0
  61. package/dist/packages/adapters/dist/index.d.ts +6 -0
  62. package/dist/packages/adapters/dist/index.js +6 -0
  63. package/dist/packages/adapters/dist/index.js.map +1 -0
  64. package/dist/packages/adapters/dist/mcp.d.ts +32 -0
  65. package/dist/packages/adapters/dist/mcp.js +87 -0
  66. package/dist/packages/adapters/dist/mcp.js.map +1 -0
  67. package/dist/packages/adapters/dist/openai.d.ts +23 -0
  68. package/dist/packages/adapters/dist/openai.js +81 -0
  69. package/dist/packages/adapters/dist/openai.js.map +1 -0
  70. package/dist/packages/adapters/dist/sandbox.d.ts +45 -0
  71. package/dist/packages/adapters/dist/sandbox.js +60 -0
  72. package/dist/packages/adapters/dist/sandbox.js.map +1 -0
  73. package/dist/packages/core/dist/capability.d.ts +36 -0
  74. package/dist/packages/core/dist/capability.js +203 -0
  75. package/dist/packages/core/dist/capability.js.map +1 -0
  76. package/dist/packages/core/dist/contract.d.ts +33 -0
  77. package/dist/packages/core/dist/contract.js +97 -0
  78. package/dist/packages/core/dist/contract.js.map +1 -0
  79. package/dist/packages/core/dist/crypto.d.ts +34 -0
  80. package/dist/packages/core/dist/crypto.js +329 -0
  81. package/dist/packages/core/dist/crypto.js.map +1 -0
  82. package/dist/packages/core/dist/discovery.d.ts +129 -0
  83. package/dist/packages/core/dist/discovery.js +527 -0
  84. package/dist/packages/core/dist/discovery.js.map +1 -0
  85. package/dist/packages/core/dist/edge.d.ts +4 -0
  86. package/dist/packages/core/dist/edge.js +6 -0
  87. package/dist/packages/core/dist/edge.js.map +1 -0
  88. package/dist/packages/core/dist/index.d.ts +9 -0
  89. package/dist/packages/core/dist/index.js +10 -0
  90. package/dist/packages/core/dist/index.js.map +1 -0
  91. package/dist/packages/core/dist/receipts.d.ts +9 -0
  92. package/dist/packages/core/dist/receipts.js +67 -0
  93. package/dist/packages/core/dist/receipts.js.map +1 -0
  94. package/dist/packages/core/dist/relay-auth.d.ts +40 -0
  95. package/dist/packages/core/dist/relay-auth.js +106 -0
  96. package/dist/packages/core/dist/relay-auth.js.map +1 -0
  97. package/dist/packages/core/dist/revocation.d.ts +58 -0
  98. package/dist/packages/core/dist/revocation.js +112 -0
  99. package/dist/packages/core/dist/revocation.js.map +1 -0
  100. package/dist/packages/core/dist/schema.d.ts +11 -0
  101. package/dist/packages/core/dist/schema.js +48 -0
  102. package/dist/packages/core/dist/schema.js.map +1 -0
  103. package/dist/packages/core/dist/types.d.ts +172 -0
  104. package/dist/packages/core/dist/types.js +2 -0
  105. package/dist/packages/core/dist/types.js.map +1 -0
  106. package/dist/packages/ledger/dist/index.d.ts +84 -0
  107. package/dist/packages/ledger/dist/index.js +269 -0
  108. package/dist/packages/ledger/dist/index.js.map +1 -0
  109. package/dist/packages/relay/dist/fetch.d.ts +250 -0
  110. package/dist/packages/relay/dist/fetch.js +1401 -0
  111. package/dist/packages/relay/dist/fetch.js.map +1 -0
  112. package/dist/packages/relay/dist/index.d.ts +103 -0
  113. package/dist/packages/relay/dist/index.js +855 -0
  114. package/dist/packages/relay/dist/index.js.map +1 -0
  115. package/dist/packages/relay/dist/journal.d.ts +77 -0
  116. package/dist/packages/relay/dist/journal.js +339 -0
  117. package/dist/packages/relay/dist/journal.js.map +1 -0
  118. package/dist/packages/relay/dist/notifications.d.ts +63 -0
  119. package/dist/packages/relay/dist/notifications.js +55 -0
  120. package/dist/packages/relay/dist/notifications.js.map +1 -0
  121. package/dist/packages/relay/dist/retry.d.ts +12 -0
  122. package/dist/packages/relay/dist/retry.js +59 -0
  123. package/dist/packages/relay/dist/retry.js.map +1 -0
  124. package/dist/packages/relay/dist/ssrf.d.ts +32 -0
  125. package/dist/packages/relay/dist/ssrf.js +213 -0
  126. package/dist/packages/relay/dist/ssrf.js.map +1 -0
  127. package/dist/packages/relay/dist/worker.d.ts +92 -0
  128. package/dist/packages/relay/dist/worker.js +460 -0
  129. package/dist/packages/relay/dist/worker.js.map +1 -0
  130. package/dist/packages/runtime/dist/a2a.d.ts +8 -0
  131. package/dist/packages/runtime/dist/a2a.js +69 -0
  132. package/dist/packages/runtime/dist/a2a.js.map +1 -0
  133. package/dist/packages/runtime/dist/adapter.d.ts +51 -0
  134. package/dist/packages/runtime/dist/adapter.js +2 -0
  135. package/dist/packages/runtime/dist/adapter.js.map +1 -0
  136. package/dist/packages/runtime/dist/approval-providers.d.ts +99 -0
  137. package/dist/packages/runtime/dist/approval-providers.js +269 -0
  138. package/dist/packages/runtime/dist/approval-providers.js.map +1 -0
  139. package/dist/packages/runtime/dist/daily-limit.d.ts +2 -0
  140. package/dist/packages/runtime/dist/daily-limit.js +54 -0
  141. package/dist/packages/runtime/dist/daily-limit.js.map +1 -0
  142. package/dist/packages/runtime/dist/gateway.d.ts +35 -0
  143. package/dist/packages/runtime/dist/gateway.js +92 -0
  144. package/dist/packages/runtime/dist/gateway.js.map +1 -0
  145. package/dist/packages/runtime/dist/inbox.d.ts +10 -0
  146. package/dist/packages/runtime/dist/inbox.js +24 -0
  147. package/dist/packages/runtime/dist/inbox.js.map +1 -0
  148. package/dist/packages/runtime/dist/index.d.ts +13 -0
  149. package/dist/packages/runtime/dist/index.js +14 -0
  150. package/dist/packages/runtime/dist/index.js.map +1 -0
  151. package/dist/packages/runtime/dist/mcp-server.d.ts +90 -0
  152. package/dist/packages/runtime/dist/mcp-server.js +647 -0
  153. package/dist/packages/runtime/dist/mcp-server.js.map +1 -0
  154. package/dist/packages/runtime/dist/mcp-tool-catalog.d.ts +3 -0
  155. package/dist/packages/runtime/dist/mcp-tool-catalog.js +507 -0
  156. package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -0
  157. package/dist/packages/runtime/dist/mcp.d.ts +73 -0
  158. package/dist/packages/runtime/dist/mcp.js +67 -0
  159. package/dist/packages/runtime/dist/mcp.js.map +1 -0
  160. package/dist/packages/runtime/dist/policy.d.ts +19 -0
  161. package/dist/packages/runtime/dist/policy.js +41 -0
  162. package/dist/packages/runtime/dist/policy.js.map +1 -0
  163. package/dist/packages/runtime/dist/quota.d.ts +39 -0
  164. package/dist/packages/runtime/dist/quota.js +147 -0
  165. package/dist/packages/runtime/dist/quota.js.map +1 -0
  166. package/dist/packages/runtime/dist/session-audit.d.ts +107 -0
  167. package/dist/packages/runtime/dist/session-audit.js +520 -0
  168. package/dist/packages/runtime/dist/session-audit.js.map +1 -0
  169. package/dist/packages/runtime/dist/session-timeouts.d.ts +33 -0
  170. package/dist/packages/runtime/dist/session-timeouts.js +62 -0
  171. package/dist/packages/runtime/dist/session-timeouts.js.map +1 -0
  172. package/dist/packages/runtime/dist/session.d.ts +323 -0
  173. package/dist/packages/runtime/dist/session.js +2252 -0
  174. package/dist/packages/runtime/dist/session.js.map +1 -0
  175. package/dist/packages/runtime/dist/task-journal.d.ts +36 -0
  176. package/dist/packages/runtime/dist/task-journal.js +104 -0
  177. package/dist/packages/runtime/dist/task-journal.js.map +1 -0
  178. package/dist/packages/runtime/dist/verifier.d.ts +64 -0
  179. package/dist/packages/runtime/dist/verifier.js +109 -0
  180. package/dist/packages/runtime/dist/verifier.js.map +1 -0
  181. package/dist/packages/sandbox/dist/container.d.ts +33 -0
  182. package/dist/packages/sandbox/dist/container.js +189 -0
  183. package/dist/packages/sandbox/dist/container.js.map +1 -0
  184. package/dist/packages/sandbox/dist/index.d.ts +34 -0
  185. package/dist/packages/sandbox/dist/index.js +179 -0
  186. package/dist/packages/sandbox/dist/index.js.map +1 -0
  187. package/dist/packages/sandbox/dist/permission.d.ts +58 -0
  188. package/dist/packages/sandbox/dist/permission.js +90 -0
  189. package/dist/packages/sandbox/dist/permission.js.map +1 -0
  190. package/dist/spec/README.ja.md +76 -0
  191. package/dist/spec/README.md +135 -0
  192. package/dist/spec/ack-receipt.schema.json +77 -0
  193. package/dist/spec/agent-card.schema.json +83 -0
  194. package/dist/spec/approval-receipt.schema.json +94 -0
  195. package/dist/spec/audit-entry.schema.json +101 -0
  196. package/dist/spec/capability-token.schema.json +133 -0
  197. package/dist/spec/envelope.schema.json +197 -0
  198. package/dist/spec/examples/sample-ack-receipt.json +16 -0
  199. package/dist/spec/examples/sample-agent-card.json +35 -0
  200. package/dist/spec/examples/sample-approval-receipt.json +18 -0
  201. package/dist/spec/examples/sample-audit-entry.json +37 -0
  202. package/dist/spec/examples/sample-capability-token.json +39 -0
  203. package/dist/spec/examples/sample-envelope.json +21 -0
  204. package/dist/spec/examples/sample-task-manifest.json +141 -0
  205. package/dist/spec/examples/sample-usage-receipt.json +19 -0
  206. package/dist/spec/task-manifest.schema.json +422 -0
  207. package/dist/spec/usage-receipt.schema.json +91 -0
  208. package/package.json +61 -5
@@ -0,0 +1,527 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { signPayload, verifySignature, verifySigned, resolveDid, canonicalize } from './crypto.js';
3
+ /** Lifetime applied when createSignedAgentCard is not given an explicit expiresAt. */
4
+ export const DEFAULT_AGENT_CARD_EXPIRY_MS = 24 * 60 * 60 * 1000;
5
+ /** Longest allowed expiresAt - signedAt window. Matches the invite TTL cap of 30 days. */
6
+ export const MAX_AGENT_CARD_EXPIRY_MS = 30 * 24 * 60 * 60 * 1000;
7
+ /** Allowed future clock skew for newly minted invites, capability tokens, and task manifests. */
8
+ export const DEFAULT_CLOCK_SKEW_MS = 60_000;
9
+ export function agentCardDelegationStatement(fields) {
10
+ return {
11
+ type: 'AgentCardDelegation',
12
+ ownerDid: fields.ownerDid,
13
+ agentDid: fields.agentDid,
14
+ relayEndpoint: fields.relayEndpoint,
15
+ expiresAt: fields.expiresAt,
16
+ };
17
+ }
18
+ export const OPEN_POLICY_FIELDS = [
19
+ 'maxInputTokens', 'maxOutputTokens', 'maxToolInvocations', 'maxWallClockSeconds',
20
+ ];
21
+ function validOpenPolicy(value) {
22
+ if (value === undefined)
23
+ return true;
24
+ if (!value || typeof value !== 'object' || Array.isArray(value))
25
+ return false;
26
+ return Object.entries(value).every(([key, limit]) => OPEN_POLICY_FIELDS.some((field) => field === key) &&
27
+ typeof limit === 'number' && Number.isSafeInteger(limit) && limit > 0);
28
+ }
29
+ function relayUrl(value) {
30
+ const u = new URL(value);
31
+ if (!['http:', 'https:'].includes(u.protocol) || u.username || u.password)
32
+ throw new Error('INVALID_RELAY_URL');
33
+ }
34
+ function ssrfBlocked() {
35
+ throw new Error('SSRF_BLOCKED_RELAY_URL');
36
+ }
37
+ function normalizeHost(value) {
38
+ return value.toLowerCase().replace(/^\[|\]$/g, '').split('%')[0].replace(/\.+$/, '');
39
+ }
40
+ function parseNumericPart(part) {
41
+ if (/^0x[0-9a-f]+$/i.test(part))
42
+ return parseInt(part, 16);
43
+ // Leading zeros are octal for inet_aton. A bare 0 stays decimal zero.
44
+ if (/^0[0-7]+$/.test(part))
45
+ return parseInt(part, 8);
46
+ if (/^\d+$/.test(part))
47
+ return Number(part);
48
+ return undefined;
49
+ }
50
+ /** inet_aton forms: a, a.b, a.b.c, a.b.c.d, including hex and octal parts. */
51
+ function decodeInetAton(host) {
52
+ const parts = host.split('.');
53
+ if (parts.length < 1 || parts.length > 4)
54
+ return undefined;
55
+ const nums = parts.map(parseNumericPart);
56
+ if (nums.some((n) => n === undefined || !Number.isSafeInteger(n)))
57
+ return undefined;
58
+ const values = nums;
59
+ const limits = values.length === 1
60
+ ? [0x100000000]
61
+ : values.length === 2
62
+ ? [0x100, 0x1000000]
63
+ : values.length === 3
64
+ ? [0x100, 0x100, 0x10000]
65
+ : [0x100, 0x100, 0x100, 0x100];
66
+ let packed = 0;
67
+ for (let i = 0; i < values.length; i++) {
68
+ if (values[i] < 0 || values[i] >= limits[i])
69
+ return undefined;
70
+ packed = packed * limits[i] + values[i];
71
+ }
72
+ if (packed > 0xffffffff)
73
+ return undefined;
74
+ return [(packed >>> 24) & 255, (packed >>> 16) & 255, (packed >>> 8) & 255, packed & 255];
75
+ }
76
+ function isCanonicalIpv4(host) {
77
+ return /^(?:0|[1-9]\d{0,2})(?:\.(?:0|[1-9]\d{0,2})){3}$/.test(host);
78
+ }
79
+ function isNonCanonicalIpv4(host) {
80
+ if (!host || host.includes(':'))
81
+ return false;
82
+ if (isCanonicalIpv4(host)) {
83
+ const parts = host.split('.').map(Number);
84
+ return parts.some((n) => n > 255);
85
+ }
86
+ return partsLookNumeric(host);
87
+ }
88
+ function partsLookNumeric(host) {
89
+ const parts = host.split('.');
90
+ if (parts.length < 1 || parts.length > 4)
91
+ return false;
92
+ return parts.every((part) => /^0x[0-9a-f]+$/i.test(part) || /^\d+$/.test(part));
93
+ }
94
+ function wordPairToIpv4(hi, lo) {
95
+ return [hi >> 8, hi & 255, lo >> 8, lo & 255];
96
+ }
97
+ function parseIpv6Words(host) {
98
+ let body = host;
99
+ if (body.includes('.')) {
100
+ const last = body.lastIndexOf(':');
101
+ if (last < 0)
102
+ return undefined;
103
+ const tail = decodeInetAton(body.slice(last + 1));
104
+ if (!tail)
105
+ return undefined;
106
+ const hi = ((tail[0] << 8) | tail[1]).toString(16);
107
+ const lo = ((tail[2] << 8) | tail[3]).toString(16);
108
+ body = body.slice(0, last + 1) + hi + ':' + lo;
109
+ }
110
+ const halves = body.split('::');
111
+ if (halves.length > 2)
112
+ return undefined;
113
+ const parseSide = (side) => {
114
+ if (!side)
115
+ return [];
116
+ const words = side.split(':');
117
+ const parsed = [];
118
+ for (const word of words) {
119
+ if (!/^[0-9a-f]{1,4}$/i.test(word))
120
+ return undefined;
121
+ parsed.push(parseInt(word, 16));
122
+ }
123
+ return parsed;
124
+ };
125
+ const left = parseSide(halves[0]);
126
+ const right = halves.length === 2 ? parseSide(halves[1]) : [];
127
+ if (!left || !right)
128
+ return undefined;
129
+ if (halves.length === 1)
130
+ return left.length === 8 ? left : undefined;
131
+ if (left.length + right.length > 7)
132
+ return undefined;
133
+ return [...left, ...Array(8 - left.length - right.length).fill(0), ...right];
134
+ }
135
+ /**
136
+ * Unspecified, link-local, metadata, multicast, and reserved ranges are always blocked.
137
+ * Loopback, RFC1918, CGNAT, benchmarking, documentation, and ULA ranges are blocked
138
+ * unless allowPrivateRelay is exactly true.
139
+ */
140
+ function ipv4Disallowed(octets, privateBlocked) {
141
+ const [a, b, c] = octets;
142
+ if (a === undefined || b === undefined || c === undefined || octets[3] === undefined)
143
+ return true;
144
+ if (octets.some((n) => !Number.isInteger(n) || n < 0 || n > 255))
145
+ return true;
146
+ if (a === 0 || (a === 169 && b === 254) || a >= 224)
147
+ return true;
148
+ if (!privateBlocked)
149
+ return false;
150
+ if (a === 127 || a === 10 || (a === 100 && b >= 64 && b <= 127))
151
+ return true;
152
+ if (a === 172 && b >= 16 && b <= 31)
153
+ return true;
154
+ if (a === 192 && b === 168)
155
+ return true;
156
+ if (a === 198 && (b === 18 || b === 19))
157
+ return true;
158
+ if (a === 192 && b === 0 && (c === 0 || c === 2))
159
+ return true;
160
+ if (a === 198 && b === 51 && c === 100)
161
+ return true;
162
+ if (a === 203 && b === 0 && c === 113)
163
+ return true;
164
+ return false;
165
+ }
166
+ function assertIpv6Allowed(words, privateBlocked) {
167
+ if (words.length !== 8)
168
+ ssrfBlocked();
169
+ if (words.every((word) => word === 0))
170
+ ssrfBlocked();
171
+ if (words[0] === 0xfd00 &&
172
+ words[1] === 0x0ec2 &&
173
+ words.slice(2, 7).every((word) => word === 0) &&
174
+ words[7] === 0x254)
175
+ ssrfBlocked();
176
+ // fe80::/10 link-local and ff00::/8 multicast are never a relay destination.
177
+ if ((words[0] & 0xffc0) === 0xfe80 || (words[0] & 0xff00) === 0xff00)
178
+ ssrfBlocked();
179
+ const embedded = [];
180
+ const mapped = words.slice(0, 5).every((word) => word === 0) && words[5] === 0xffff;
181
+ const compatible = words.slice(0, 6).every((word) => word === 0);
182
+ if (mapped)
183
+ embedded.push(wordPairToIpv4(words[6], words[7]));
184
+ else if (compatible) {
185
+ // ::1 is loopback. Do not treat it as the IPv4-compatible address 0.0.0.1.
186
+ if (words[6] === 0 && words[7] === 1) {
187
+ if (privateBlocked)
188
+ ssrfBlocked();
189
+ }
190
+ else if (words[6] !== 0 || words[7] !== 0)
191
+ embedded.push(wordPairToIpv4(words[6], words[7]));
192
+ }
193
+ if (words[0] === 0x64 && words[1] === 0xff9b && words.slice(2, 6).every((word) => word === 0))
194
+ embedded.push(wordPairToIpv4(words[6], words[7]));
195
+ if (words[0] === 0x64 && words[1] === 0xff9b && words[2] === 0x0001) {
196
+ // RFC 6052 /48 embeds IPv4 around the u byte. A non-zero u byte is not a relay target.
197
+ if (words[4] >> 8 !== 0)
198
+ ssrfBlocked();
199
+ embedded.push([words[3] >> 8, words[3] & 255, words[4] & 255, words[5] >> 8]);
200
+ }
201
+ if (words[0] === 0x2002)
202
+ embedded.push(wordPairToIpv4(words[1], words[2]));
203
+ if (words[0] === 0x2001 && words[1] === 0) {
204
+ embedded.push(wordPairToIpv4(words[2], words[3]));
205
+ embedded.push(wordPairToIpv4(words[6] ^ 0xffff, words[7] ^ 0xffff));
206
+ }
207
+ for (const ip of embedded)
208
+ if (ipv4Disallowed(ip, privateBlocked))
209
+ ssrfBlocked();
210
+ if (privateBlocked && (words[0] & 0xfe00) === 0xfc00)
211
+ ssrfBlocked();
212
+ }
213
+ function assertIpv4Allowed(octets, privateBlocked) {
214
+ if (ipv4Disallowed(octets, privateBlocked))
215
+ ssrfBlocked();
216
+ }
217
+ function rawAuthorityHost(value) {
218
+ const match = /^[a-z][a-z0-9+.-]*:\/\/([^/?#]*)/i.exec(value.trim());
219
+ if (!match || match[1].includes('@'))
220
+ return undefined;
221
+ let authority = match[1];
222
+ if (authority.startsWith('[')) {
223
+ const end = authority.indexOf(']');
224
+ return end > 1 ? normalizeHost(authority.slice(1, end)) : undefined;
225
+ }
226
+ const colon = authority.lastIndexOf(':');
227
+ if (colon > 0 && /^\d+$/.test(authority.slice(colon + 1)))
228
+ authority = authority.slice(0, colon);
229
+ return normalizeHost(authority);
230
+ }
231
+ /** Reject an IP address that must not be used as a relay destination. */
232
+ export function validateIpAddress(ip, options = {}) {
233
+ const privateBlocked = options.allowPrivateRelay !== true;
234
+ const host = normalizeHost(ip.trim());
235
+ if (!host)
236
+ ssrfBlocked();
237
+ if (host.includes(':')) {
238
+ const words = parseIpv6Words(host);
239
+ if (!words)
240
+ ssrfBlocked();
241
+ assertIpv6Allowed(words, privateBlocked);
242
+ return;
243
+ }
244
+ const decoded = decodeInetAton(host);
245
+ if (!decoded || !partsLookNumeric(host))
246
+ ssrfBlocked();
247
+ assertIpv4Allowed(decoded, privateBlocked);
248
+ }
249
+ /** Validate literal endpoints before using an untrusted invite as a network destination. */
250
+ export function validateRelayEndpointUrl(value, options = {}) {
251
+ let u;
252
+ try {
253
+ u = new URL(value);
254
+ }
255
+ catch {
256
+ ssrfBlocked();
257
+ }
258
+ if (!['http:', 'https:', 'ws:', 'wss:'].includes(u.protocol) || u.username || u.password)
259
+ ssrfBlocked();
260
+ const host = normalizeHost(u.hostname);
261
+ if (!host || host === 'metadata.google.internal' || host === 'metadata.goog')
262
+ ssrfBlocked();
263
+ // Private and loopback destinations stay blocked unless the caller opts in.
264
+ const privateBlocked = options.allowPrivateRelay !== true;
265
+ const raw = rawAuthorityHost(value);
266
+ if (raw && raw !== host && (isNonCanonicalIpv4(raw) || partsLookNumeric(raw))) {
267
+ const decoded = decodeInetAton(raw);
268
+ if (!decoded || ipv4Disallowed(decoded, privateBlocked))
269
+ ssrfBlocked();
270
+ }
271
+ if (host.includes(':')) {
272
+ const words = parseIpv6Words(host);
273
+ if (!words)
274
+ ssrfBlocked();
275
+ assertIpv6Allowed(words, privateBlocked);
276
+ return;
277
+ }
278
+ if (partsLookNumeric(host)) {
279
+ const decoded = decodeInetAton(host);
280
+ if (!decoded)
281
+ ssrfBlocked();
282
+ assertIpv4Allowed(decoded, privateBlocked);
283
+ return;
284
+ }
285
+ if (privateBlocked &&
286
+ (host === 'localhost' ||
287
+ host.endsWith('.localhost') ||
288
+ host.endsWith('.local') ||
289
+ host.endsWith('.internal')))
290
+ ssrfBlocked();
291
+ }
292
+ function resolveAgentKey(options, agentKey) {
293
+ if (agentKey &&
294
+ options.agentKey &&
295
+ (agentKey.did !== options.agentKey.did || agentKey.privateKey !== options.agentKey.privateKey))
296
+ throw new Error('AGENT_DELEGATION_REQUIRED');
297
+ return agentKey ?? options.agentKey;
298
+ }
299
+ export function createSignedAgentCard(options, owner, agentKey) {
300
+ const resolvedAgentKey = resolveAgentKey(options, agentKey);
301
+ const signedAt = new Date().toISOString();
302
+ const expiresAt = options.expiresAt ?? new Date(Date.parse(signedAt) + DEFAULT_AGENT_CARD_EXPIRY_MS).toISOString();
303
+ if (options.agentDid !== owner.did) {
304
+ if (!resolvedAgentKey || resolvedAgentKey.did !== options.agentDid)
305
+ throw new Error('AGENT_DELEGATION_REQUIRED');
306
+ }
307
+ else if (resolvedAgentKey && resolvedAgentKey.did !== owner.did) {
308
+ throw new Error('AGENT_DELEGATION_REQUIRED');
309
+ }
310
+ const delegationFields = {
311
+ ownerDid: owner.did,
312
+ agentDid: options.agentDid,
313
+ relayEndpoint: options.relayEndpoint,
314
+ expiresAt,
315
+ };
316
+ const agentDelegation = options.agentDid === owner.did
317
+ ? undefined
318
+ : signPayload(agentCardDelegationStatement(delegationFields), resolvedAgentKey, signedAt)
319
+ .signature;
320
+ if (!validOpenPolicy(options.openPolicy))
321
+ throw new Error('INVALID_AGENT_CARD');
322
+ const card = signPayload({
323
+ type: 'AgentCard',
324
+ version: options.version ?? '0.2.0',
325
+ description: options.description ?? 'Sealbridge worker',
326
+ costModes: options.costModes ?? ['worker_byok'],
327
+ name: options.name,
328
+ skills: options.skills,
329
+ ...(options.accessMode ? { accessMode: options.accessMode } : {}),
330
+ ...(options.openPolicy !== undefined ? { openPolicy: { ...options.openPolicy } } : {}),
331
+ ...delegationFields,
332
+ ...(agentDelegation ? { agentDelegation } : {}),
333
+ }, owner, signedAt);
334
+ if (!verifySignedAgentCard(card))
335
+ throw new Error('INVALID_AGENT_CARD');
336
+ return card;
337
+ }
338
+ function validAgentCardExpiry(expiresAt, signedAt, now) {
339
+ const expires = Date.parse(expiresAt);
340
+ const signed = Date.parse(signedAt);
341
+ return (typeof expiresAt === 'string' &&
342
+ typeof signedAt === 'string' &&
343
+ Number.isFinite(expires) &&
344
+ Number.isFinite(signed) &&
345
+ expires > signed &&
346
+ expires > now &&
347
+ expires - signed <= MAX_AGENT_CARD_EXPIRY_MS);
348
+ }
349
+ export function verifySignedAgentCard(card, now = Date.now()) {
350
+ try {
351
+ const p = card.payload;
352
+ relayUrl(p.relayEndpoint);
353
+ resolveDid(p.agentDid);
354
+ resolveDid(p.ownerDid);
355
+ if (!validAgentCardExpiry(p.expiresAt, card.signature.signedAt, now))
356
+ return false;
357
+ if (p.agentDid === p.ownerDid) {
358
+ if (p.agentDelegation !== undefined)
359
+ return false;
360
+ }
361
+ else if (!p.agentDelegation ||
362
+ !verifySignature(agentCardDelegationStatement({
363
+ ownerDid: p.ownerDid,
364
+ agentDid: p.agentDid,
365
+ relayEndpoint: p.relayEndpoint,
366
+ expiresAt: p.expiresAt,
367
+ }), p.agentDelegation, p.agentDid) ||
368
+ !(Date.parse(p.agentDelegation.signedAt) < Date.parse(p.expiresAt)))
369
+ return false;
370
+ return (verifySigned(card, p.ownerDid) &&
371
+ p.type === 'AgentCard' &&
372
+ (p.accessMode === undefined || p.accessMode === 'invite-only' || p.accessMode === 'open') &&
373
+ validOpenPolicy(p.openPolicy) &&
374
+ typeof p.name === 'string' &&
375
+ !!p.name &&
376
+ typeof p.description === 'string' &&
377
+ typeof p.version === 'string' &&
378
+ Array.isArray(p.skills) &&
379
+ p.skills.every((s) => typeof s.id === 'string' && !!s.id && typeof s.name === 'string' &&
380
+ (s.taskTypes === undefined || (Array.isArray(s.taskTypes) && s.taskTypes.every((t) => typeof t === 'string' && !!t)))) &&
381
+ new Set(p.skills.map((s) => s.id)).size === p.skills.length &&
382
+ Array.isArray(p.costModes) &&
383
+ p.costModes.length > 0 &&
384
+ p.costModes.every((m) => ['worker_byok', 'bilateral_quota', 'external_settlement_plugin'].includes(m)));
385
+ }
386
+ catch {
387
+ return false;
388
+ }
389
+ }
390
+ /** Select a verified card independently of directory order. Exact agent DIDs win. */
391
+ export function findDiscoveredAgentCard(rawCards, targetDid, now = Date.now()) {
392
+ if (!Array.isArray(rawCards))
393
+ return undefined;
394
+ const valid = rawCards.filter((card) => verifySignedAgentCard(card, now));
395
+ const exact = valid.filter((card) => card.payload.agentDid === targetDid);
396
+ const matches = exact.length ? exact : valid.filter((card) => card.payload.ownerDid === targetDid);
397
+ const candidateAgents = new Set(matches.map((card) => card.payload.agentDid));
398
+ const owners = new Map();
399
+ for (const card of valid) {
400
+ const { agentDid, ownerDid } = card.payload;
401
+ if (!candidateAgents.has(agentDid))
402
+ continue;
403
+ if (owners.has(agentDid) && owners.get(agentDid) !== ownerDid)
404
+ throw new Error('AMBIGUOUS_AGENT_CARD_OWNER');
405
+ owners.set(agentDid, ownerDid);
406
+ }
407
+ matches.sort((a, b) => {
408
+ const signed = Date.parse(b.signature.signedAt) - Date.parse(a.signature.signedAt);
409
+ if (signed)
410
+ return signed;
411
+ // Equal timestamps also need a stable tie-breaker, including different agents
412
+ // reached through the same owner alias. Avoid locale-dependent ordering.
413
+ const left = canonicalize(a), right = canonicalize(b);
414
+ return left < right ? -1 : left > right ? 1 : 0;
415
+ });
416
+ return matches[0];
417
+ }
418
+ export function toA2AAgentCard(card) {
419
+ if (!verifySignedAgentCard(card))
420
+ throw new Error('INVALID_AGENT_CARD');
421
+ const p = card.payload;
422
+ return {
423
+ name: p.name,
424
+ description: p.description,
425
+ url: p.relayEndpoint,
426
+ version: p.version,
427
+ protocolVersion: '0.3.0',
428
+ capabilities: { streaming: true },
429
+ defaultInputModes: ['application/json'],
430
+ defaultOutputModes: ['application/json'],
431
+ skills: p.skills.map((s) => ({ ...s, description: s.description ?? s.name, tags: ['acp'] })),
432
+ ownerDid: p.ownerDid,
433
+ agentDid: p.agentDid,
434
+ relayEndpoint: p.relayEndpoint,
435
+ expiresAt: p.expiresAt,
436
+ costModes: p.costModes,
437
+ signedAgentCard: card,
438
+ };
439
+ }
440
+ export function createInviteToken(options, owner) {
441
+ if (!verifySignedAgentCard(options.agentCard) || options.agentCard.payload.ownerDid !== owner.did)
442
+ throw new Error('INVALID_AGENT_CARD');
443
+ const issuedAt = options.issuedAt ?? new Date().toISOString(), ttl = options.expiresInSeconds ?? 3600;
444
+ if (!Number.isFinite(Date.parse(issuedAt)) ||
445
+ !Number.isSafeInteger(ttl) ||
446
+ ttl < 1 ||
447
+ ttl > 2592000)
448
+ throw new Error('INVALID_INVITE_EXPIRY');
449
+ const p = options.agentCard.payload;
450
+ const token = Buffer.from(JSON.stringify(signPayload({
451
+ type: 'AgentInvite',
452
+ ownerDid: owner.did,
453
+ agentDid: p.agentDid,
454
+ relayUrl: p.relayEndpoint,
455
+ agentCard: options.agentCard,
456
+ issuedAt,
457
+ expiresAt: new Date(Date.parse(issuedAt) + ttl * 1000).toISOString(),
458
+ }, owner))).toString('base64url');
459
+ return options.format === 'acp' ? 'acp://invite?token=' + token : 'acp-invite:' + token;
460
+ }
461
+ /** Extract invitation material locally; HTTPS links are never fetched. */
462
+ export function inviteTokenFromUri(uri) {
463
+ if (uri.startsWith('acp-invite:'))
464
+ return uri;
465
+ let url;
466
+ try {
467
+ url = new URL(uri);
468
+ }
469
+ catch {
470
+ throw new Error('INVALID_OR_EXPIRED_INVITE');
471
+ }
472
+ if (url.protocol === 'https:') {
473
+ if (!url.hash.startsWith('#acp-invite:') || url.hash === '#acp-invite:')
474
+ throw new Error('INVITE_LINK_TOKEN_REQUIRED: ask the sender for the complete link including #acp-invite:...');
475
+ if (url.username || url.password || url.search || !/^#acp-invite:[A-Za-z0-9_-]+$/.test(url.hash))
476
+ throw new Error('INVALID_INVITE_LINK');
477
+ return url.hash.slice(1);
478
+ }
479
+ if (url.protocol === 'acp:' && url.hostname === 'invite' && url.searchParams.getAll('token').length === 1)
480
+ return 'acp-invite:' + url.searchParams.get('token');
481
+ throw new Error('INVALID_OR_EXPIRED_INVITE');
482
+ }
483
+ export function isInviteTarget(value) {
484
+ return value.startsWith('acp') || value.startsWith('https:');
485
+ }
486
+ export function parseAndVerifyInviteToken(uri, now = Date.now(), options = {}) {
487
+ try {
488
+ const token = inviteTokenFromUri(uri).slice(11);
489
+ if (!/^[\w-]+$/.test(token) || token.length > 65536)
490
+ throw new Error();
491
+ const signed = JSON.parse(Buffer.from(token, 'base64url').toString()), p = signed.payload;
492
+ if (!verifySigned(signed, p.ownerDid) ||
493
+ p.type !== 'AgentInvite' ||
494
+ !verifySignedAgentCard(p.agentCard, Math.min(now, Date.parse(p.issuedAt))) ||
495
+ p.agentCard.payload.ownerDid !== p.ownerDid ||
496
+ p.agentCard.payload.agentDid !== p.agentDid ||
497
+ p.agentCard.payload.relayEndpoint !== p.relayUrl ||
498
+ !Number.isFinite(Date.parse(p.issuedAt)) ||
499
+ !Number.isFinite(Date.parse(p.expiresAt)) ||
500
+ Date.parse(p.issuedAt) > now + DEFAULT_CLOCK_SKEW_MS ||
501
+ Date.parse(p.expiresAt) <= Date.parse(p.issuedAt))
502
+ throw new Error();
503
+ if (!options.allowExpired &&
504
+ (Date.parse(p.expiresAt) <= now || Date.parse(p.agentCard.payload.expiresAt) <= now))
505
+ throw new Error('INVITE_EXPIRED');
506
+ validateRelayEndpointUrl(p.relayUrl, options);
507
+ return p;
508
+ }
509
+ catch (error) {
510
+ if (error instanceof Error && (['SSRF_BLOCKED_RELAY_URL', 'INVITE_EXPIRED', 'INVALID_INVITE_LINK'].includes(error.message) || error.message.startsWith('INVITE_LINK_TOKEN_REQUIRED:')))
511
+ throw error;
512
+ throw new Error('INVALID_OR_EXPIRED_INVITE');
513
+ }
514
+ }
515
+ /** Resolve current signed cards before filtering, so stale advertisements cannot reopen access. */
516
+ export function discoverAgentCards(rawCards, query = {}, now = Date.now()) {
517
+ if (!Array.isArray(rawCards))
518
+ return [];
519
+ const valid = rawCards.filter((card) => verifySignedAgentCard(card, now));
520
+ const targets = query.did ? [query.did] : [...new Set(valid.map((c) => c.payload.agentDid))].sort();
521
+ return targets.map((did) => findDiscoveredAgentCard(valid, did, now)).filter((c) => {
522
+ if (!c || (query.accessMode && c.payload.accessMode !== query.accessMode))
523
+ return false;
524
+ return (!query.skillId && !query.taskType) || c.payload.skills.some((s) => (!query.skillId || s.id === query.skillId) && (!query.taskType || s.taskTypes?.includes(query.taskType)));
525
+ });
526
+ }
527
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './crypto.js';
3
+ export * from './discovery.js';
4
+ export * from './relay-auth.js';
@@ -0,0 +1,6 @@
1
+ // Filesystem-free entry point for edge relays (Node crypto compatibility).
2
+ export * from './types.js';
3
+ export * from './crypto.js';
4
+ export * from './discovery.js';
5
+ export * from './relay-auth.js';
6
+ //# sourceMappingURL=edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge.js","sourceRoot":"","sources":["../src/edge.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './types.js';
2
+ export * from './crypto.js';
3
+ export * from './schema.js';
4
+ export * from './capability.js';
5
+ export * from './receipts.js';
6
+ export * from './contract.js';
7
+ export * from './discovery.js';
8
+ export * from './relay-auth.js';
9
+ export * from './revocation.js';
@@ -0,0 +1,10 @@
1
+ export * from './types.js';
2
+ export * from './crypto.js';
3
+ export * from './schema.js';
4
+ export * from './capability.js';
5
+ export * from './receipts.js';
6
+ export * from './contract.js';
7
+ export * from './discovery.js';
8
+ export * from './relay-auth.js';
9
+ export * from './revocation.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Ack, Approval, ApprovalReceipt, Envelope, Gate, KeyPair, SignedEnvelope, Usage } from './types.js';
2
+ export declare function signApproval(taskId: string, gate: Gate, target: unknown, key: KeyPair, decision?: Approval['decision']): ApprovalReceipt;
3
+ export declare function verifyApproval(receipt: ApprovalReceipt, ownerDid: string, taskId: string, gate: Gate, target: unknown): boolean;
4
+ export declare function signUsage(payload: Usage, key: KeyPair): import("./types.js").Signed<Usage>;
5
+ export declare function signAck(payload: Ack, key: KeyPair): import("./types.js").Signed<Ack>;
6
+ export declare function signEnvelope(payload: Omit<Envelope, 'type' | 'envelopeId' | 'senderDid'>, key: KeyPair, options?: {
7
+ encrypt?: boolean;
8
+ }): SignedEnvelope;
9
+ export declare function verifyEnvelope(envelope: SignedEnvelope, recipientDid?: string): boolean;