sealbridge 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/README.ja.md +492 -30
  2. package/README.md +522 -109
  3. package/dist/cli/dist/accept.d.ts +13 -0
  4. package/dist/cli/dist/accept.js +115 -0
  5. package/dist/cli/dist/accept.js.map +1 -0
  6. package/dist/cli/dist/approval-summary.d.ts +1 -1
  7. package/dist/cli/dist/board.d.ts +10 -9
  8. package/dist/cli/dist/board.js +62 -31
  9. package/dist/cli/dist/board.js.map +1 -1
  10. package/dist/cli/dist/command-identity.d.ts +6 -0
  11. package/dist/cli/dist/command-identity.js +13 -0
  12. package/dist/cli/dist/command-identity.js.map +1 -0
  13. package/dist/cli/dist/config.d.ts +3 -0
  14. package/dist/cli/dist/config.js +29 -0
  15. package/dist/cli/dist/config.js.map +1 -0
  16. package/dist/cli/dist/connections.d.ts +15 -0
  17. package/dist/cli/dist/connections.js +191 -0
  18. package/dist/cli/dist/connections.js.map +1 -0
  19. package/dist/cli/dist/contacts.d.ts +4 -3
  20. package/dist/cli/dist/contacts.js +39 -28
  21. package/dist/cli/dist/contacts.js.map +1 -1
  22. package/dist/cli/dist/doctor.d.ts +9 -0
  23. package/dist/cli/dist/doctor.js +46 -5
  24. package/dist/cli/dist/doctor.js.map +1 -1
  25. package/dist/cli/dist/error-messages.js +22 -0
  26. package/dist/cli/dist/error-messages.js.map +1 -1
  27. package/dist/cli/dist/index.js +44 -6
  28. package/dist/cli/dist/index.js.map +1 -1
  29. package/dist/cli/dist/invite-output.d.ts +14 -0
  30. package/dist/cli/dist/invite-output.js +66 -0
  31. package/dist/cli/dist/invite-output.js.map +1 -0
  32. package/dist/cli/dist/invite-share.d.ts +6 -3
  33. package/dist/cli/dist/invite-share.js +40 -15
  34. package/dist/cli/dist/invite-share.js.map +1 -1
  35. package/dist/cli/dist/invites-migrate.d.ts +3 -0
  36. package/dist/cli/dist/invites-migrate.js +33 -0
  37. package/dist/cli/dist/invites-migrate.js.map +1 -0
  38. package/dist/cli/dist/mcp.d.ts +7 -5
  39. package/dist/cli/dist/mcp.js +23 -18
  40. package/dist/cli/dist/mcp.js.map +1 -1
  41. package/dist/cli/dist/network.d.ts +11 -1
  42. package/dist/cli/dist/network.js +150 -87
  43. package/dist/cli/dist/network.js.map +1 -1
  44. package/dist/cli/dist/pending.d.ts +8 -0
  45. package/dist/cli/dist/pending.js +50 -0
  46. package/dist/cli/dist/pending.js.map +1 -0
  47. package/dist/cli/dist/public-settings.d.ts +5 -4
  48. package/dist/cli/dist/public-settings.js +13 -15
  49. package/dist/cli/dist/public-settings.js.map +1 -1
  50. package/dist/cli/dist/receipt.d.ts +1 -1
  51. package/dist/cli/dist/relay-auth.d.ts +3 -0
  52. package/dist/cli/dist/relay-auth.js +23 -0
  53. package/dist/cli/dist/relay-auth.js.map +1 -0
  54. package/dist/cli/dist/requests.d.ts +10 -0
  55. package/dist/cli/dist/requests.js +91 -0
  56. package/dist/cli/dist/requests.js.map +1 -0
  57. package/dist/cli/dist/sdk.d.ts +10 -0
  58. package/dist/cli/dist/sdk.js +7 -0
  59. package/dist/cli/dist/sdk.js.map +1 -0
  60. package/dist/cli/dist/setup-files.d.ts +24 -0
  61. package/dist/cli/dist/setup-files.js +190 -0
  62. package/dist/cli/dist/setup-files.js.map +1 -0
  63. package/dist/cli/dist/setup-hosts.d.ts +29 -0
  64. package/dist/cli/dist/setup-hosts.js +75 -0
  65. package/dist/cli/dist/setup-hosts.js.map +1 -0
  66. package/dist/cli/dist/setup.d.ts +61 -0
  67. package/dist/cli/dist/setup.js +243 -0
  68. package/dist/cli/dist/setup.js.map +1 -0
  69. package/dist/cli/dist/task-input.d.ts +1 -1
  70. package/dist/cli/dist/wake-hook.d.ts +1 -1
  71. package/dist/cli/dist/worker-json.d.ts +4 -0
  72. package/dist/cli/dist/worker-json.js +87 -0
  73. package/dist/cli/dist/worker-json.js.map +1 -0
  74. package/dist/examples/two-owner-demo/dist/run-demo.d.ts +13 -13
  75. package/dist/package.json +1 -1
  76. package/dist/packages/adapters/dist/command.d.ts +2 -2
  77. package/dist/packages/adapters/dist/credential-proxy.d.ts +2 -2
  78. package/dist/packages/adapters/dist/index.d.ts +1 -1
  79. package/dist/packages/adapters/dist/mcp.d.ts +2 -2
  80. package/dist/packages/adapters/dist/openai.d.ts +2 -2
  81. package/dist/packages/adapters/dist/sandbox.d.ts +2 -2
  82. package/dist/packages/core/dist/connection.d.ts +58 -0
  83. package/dist/packages/core/dist/connection.js +132 -0
  84. package/dist/packages/core/dist/connection.js.map +1 -0
  85. package/dist/packages/core/dist/delivery-status.d.ts +22 -0
  86. package/dist/packages/core/dist/delivery-status.js +53 -0
  87. package/dist/packages/core/dist/delivery-status.js.map +1 -0
  88. package/dist/packages/core/dist/discovery.d.ts +7 -6
  89. package/dist/packages/core/dist/discovery.js +19 -20
  90. package/dist/packages/core/dist/discovery.js.map +1 -1
  91. package/dist/packages/core/dist/edge.d.ts +1 -0
  92. package/dist/packages/core/dist/edge.js +1 -0
  93. package/dist/packages/core/dist/edge.js.map +1 -1
  94. package/dist/packages/core/dist/index.d.ts +3 -0
  95. package/dist/packages/core/dist/index.js +3 -0
  96. package/dist/packages/core/dist/index.js.map +1 -1
  97. package/dist/packages/core/dist/protocol.d.ts +24 -0
  98. package/dist/packages/core/dist/protocol.js +54 -0
  99. package/dist/packages/core/dist/protocol.js.map +1 -0
  100. package/dist/packages/core/dist/receipts.d.ts +1 -0
  101. package/dist/packages/core/dist/receipts.js +1 -1
  102. package/dist/packages/core/dist/receipts.js.map +1 -1
  103. package/dist/packages/core/dist/schema.d.ts +1 -0
  104. package/dist/packages/core/dist/schema.js +13 -2
  105. package/dist/packages/core/dist/schema.js.map +1 -1
  106. package/dist/packages/ledger/dist/index.d.ts +1 -1
  107. package/dist/packages/relay/dist/admission.d.ts +14 -0
  108. package/dist/packages/relay/dist/admission.js +70 -0
  109. package/dist/packages/relay/dist/admission.js.map +1 -0
  110. package/dist/packages/relay/dist/fetch.d.ts +8 -2
  111. package/dist/packages/relay/dist/fetch.js +41 -12
  112. package/dist/packages/relay/dist/fetch.js.map +1 -1
  113. package/dist/packages/relay/dist/index.d.ts +23 -12
  114. package/dist/packages/relay/dist/index.js +130 -78
  115. package/dist/packages/relay/dist/index.js.map +1 -1
  116. package/dist/packages/relay/dist/journal.d.ts +1 -1
  117. package/dist/packages/relay/dist/notifications.d.ts +1 -1
  118. package/dist/packages/relay/dist/retry.d.ts +23 -0
  119. package/dist/packages/relay/dist/retry.js +43 -1
  120. package/dist/packages/relay/dist/retry.js.map +1 -1
  121. package/dist/packages/relay/dist/ssrf.d.ts +3 -2
  122. package/dist/packages/relay/dist/ssrf.js.map +1 -1
  123. package/dist/packages/relay/dist/worker.js +1 -1
  124. package/dist/packages/relay/dist/worker.js.map +1 -1
  125. package/dist/packages/runtime/dist/a2a.d.ts +1 -1
  126. package/dist/packages/runtime/dist/a2a.js +1 -1
  127. package/dist/packages/runtime/dist/adapter.d.ts +2 -2
  128. package/dist/packages/runtime/dist/application-config.d.ts +20 -0
  129. package/dist/packages/runtime/dist/application-config.js +218 -0
  130. package/dist/packages/runtime/dist/application-config.js.map +1 -0
  131. package/dist/packages/runtime/dist/approval-providers.d.ts +24 -3
  132. package/dist/packages/runtime/dist/approval-providers.js +79 -3
  133. package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
  134. package/dist/packages/runtime/dist/connection-admission-review.d.ts +39 -0
  135. package/dist/packages/runtime/dist/connection-admission-review.js +86 -0
  136. package/dist/packages/runtime/dist/connection-admission-review.js.map +1 -0
  137. package/dist/packages/runtime/dist/connection-persistence.d.ts +35 -0
  138. package/dist/packages/runtime/dist/connection-persistence.js +181 -0
  139. package/dist/packages/runtime/dist/connection-persistence.js.map +1 -0
  140. package/dist/packages/runtime/dist/connection-records.d.ts +167 -0
  141. package/dist/packages/runtime/dist/connection-records.js +132 -0
  142. package/dist/packages/runtime/dist/connection-records.js.map +1 -0
  143. package/dist/packages/runtime/dist/connection-router.d.ts +45 -0
  144. package/dist/packages/runtime/dist/connection-router.js +130 -0
  145. package/dist/packages/runtime/dist/connection-router.js.map +1 -0
  146. package/dist/packages/runtime/dist/connection-service.d.ts +159 -0
  147. package/dist/packages/runtime/dist/connection-service.js +239 -0
  148. package/dist/packages/runtime/dist/connection-service.js.map +1 -0
  149. package/dist/packages/runtime/dist/connection-transport.d.ts +14 -0
  150. package/dist/packages/runtime/dist/connection-transport.js +89 -0
  151. package/dist/packages/runtime/dist/connection-transport.js.map +1 -0
  152. package/dist/packages/runtime/dist/delivery-records.d.ts +180 -0
  153. package/dist/packages/runtime/dist/delivery-records.js +205 -0
  154. package/dist/packages/runtime/dist/delivery-records.js.map +1 -0
  155. package/dist/packages/runtime/dist/delivery-status-router.d.ts +27 -0
  156. package/dist/packages/runtime/dist/delivery-status-router.js +150 -0
  157. package/dist/packages/runtime/dist/delivery-status-router.js.map +1 -0
  158. package/dist/packages/runtime/dist/delivery-status.d.ts +43 -0
  159. package/dist/packages/runtime/dist/delivery-status.js +193 -0
  160. package/dist/packages/runtime/dist/delivery-status.js.map +1 -0
  161. package/dist/packages/runtime/dist/delivery-store.d.ts +125 -0
  162. package/dist/packages/runtime/dist/delivery-store.js +1047 -0
  163. package/dist/packages/runtime/dist/delivery-store.js.map +1 -0
  164. package/dist/packages/runtime/dist/gateway.d.ts +4 -3
  165. package/dist/packages/runtime/dist/gateway.js.map +1 -1
  166. package/dist/packages/runtime/dist/held-request-review.d.ts +49 -0
  167. package/dist/packages/runtime/dist/held-request-review.js +122 -0
  168. package/dist/packages/runtime/dist/held-request-review.js.map +1 -0
  169. package/dist/packages/runtime/dist/held-request-store.d.ts +112 -0
  170. package/dist/packages/runtime/dist/held-request-store.js +290 -0
  171. package/dist/packages/runtime/dist/held-request-store.js.map +1 -0
  172. package/dist/packages/runtime/dist/idempotency-store.d.ts +53 -0
  173. package/dist/packages/runtime/dist/idempotency-store.js +331 -0
  174. package/dist/packages/runtime/dist/idempotency-store.js.map +1 -0
  175. package/dist/packages/runtime/dist/inbox.d.ts +1 -1
  176. package/dist/packages/runtime/dist/index.d.ts +27 -1
  177. package/dist/packages/runtime/dist/index.js +26 -0
  178. package/dist/packages/runtime/dist/index.js.map +1 -1
  179. package/dist/packages/runtime/dist/invite-store.d.ts +76 -0
  180. package/dist/packages/runtime/dist/invite-store.js +337 -0
  181. package/dist/packages/runtime/dist/invite-store.js.map +1 -0
  182. package/dist/packages/runtime/dist/key-store.d.ts +77 -0
  183. package/dist/packages/runtime/dist/key-store.js +226 -0
  184. package/dist/packages/runtime/dist/key-store.js.map +1 -0
  185. package/dist/packages/runtime/dist/local-identity.d.ts +33 -0
  186. package/dist/packages/runtime/dist/local-identity.js +279 -0
  187. package/dist/packages/runtime/dist/local-identity.js.map +1 -0
  188. package/dist/packages/runtime/dist/mcp-rpc.d.ts +19 -0
  189. package/dist/packages/runtime/dist/mcp-rpc.js +175 -0
  190. package/dist/packages/runtime/dist/mcp-rpc.js.map +1 -0
  191. package/dist/packages/runtime/dist/mcp-server.d.ts +46 -19
  192. package/dist/packages/runtime/dist/mcp-server.js +427 -184
  193. package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
  194. package/dist/packages/runtime/dist/mcp-tool-catalog.d.ts +1 -1
  195. package/dist/packages/runtime/dist/mcp-tool-catalog.js +172 -13
  196. package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
  197. package/dist/packages/runtime/dist/mcp.d.ts +2 -2
  198. package/dist/packages/runtime/dist/message-status.d.ts +32 -0
  199. package/dist/packages/runtime/dist/message-status.js +29 -0
  200. package/dist/packages/runtime/dist/message-status.js.map +1 -0
  201. package/dist/packages/runtime/dist/outbox.d.ts +91 -0
  202. package/dist/packages/runtime/dist/outbox.js +462 -0
  203. package/dist/packages/runtime/dist/outbox.js.map +1 -0
  204. package/dist/packages/runtime/dist/policy.d.ts +1 -1
  205. package/dist/packages/runtime/dist/protocol-peer-store.d.ts +40 -0
  206. package/dist/packages/runtime/dist/protocol-peer-store.js +176 -0
  207. package/dist/packages/runtime/dist/protocol-peer-store.js.map +1 -0
  208. package/dist/packages/runtime/dist/protocol-release.d.ts +26 -0
  209. package/dist/packages/runtime/dist/protocol-release.js +76 -0
  210. package/dist/packages/runtime/dist/protocol-release.js.map +1 -0
  211. package/dist/packages/runtime/dist/quota.d.ts +1 -1
  212. package/dist/packages/runtime/dist/relay-selection.d.ts +20 -0
  213. package/dist/packages/runtime/dist/relay-selection.js +34 -0
  214. package/dist/packages/runtime/dist/relay-selection.js.map +1 -0
  215. package/dist/packages/runtime/dist/requester-pending-store.d.ts +59 -0
  216. package/dist/packages/runtime/dist/requester-pending-store.js +266 -0
  217. package/dist/packages/runtime/dist/requester-pending-store.js.map +1 -0
  218. package/dist/packages/runtime/dist/secret-store.d.ts +19 -0
  219. package/dist/packages/runtime/dist/secret-store.js +51 -0
  220. package/dist/packages/runtime/dist/secret-store.js.map +1 -0
  221. package/dist/packages/runtime/dist/session-audit.d.ts +29 -7
  222. package/dist/packages/runtime/dist/session-audit.js +149 -29
  223. package/dist/packages/runtime/dist/session-audit.js.map +1 -1
  224. package/dist/packages/runtime/dist/session.d.ts +101 -9
  225. package/dist/packages/runtime/dist/session.js +696 -96
  226. package/dist/packages/runtime/dist/session.js.map +1 -1
  227. package/dist/packages/runtime/dist/task-journal.d.ts +18 -3
  228. package/dist/packages/runtime/dist/task-journal.js +271 -18
  229. package/dist/packages/runtime/dist/task-journal.js.map +1 -1
  230. package/dist/packages/runtime/dist/verifier.d.ts +3 -2
  231. package/dist/packages/runtime/dist/verifier.js +1 -0
  232. package/dist/packages/runtime/dist/verifier.js.map +1 -1
  233. package/dist/packages/runtime/dist/worker-trust-store.d.ts +111 -0
  234. package/dist/packages/runtime/dist/worker-trust-store.js +592 -0
  235. package/dist/packages/runtime/dist/worker-trust-store.js.map +1 -0
  236. package/dist/packages/sandbox/dist/container.d.ts +1 -1
  237. package/dist/packages/sandbox/dist/index.d.ts +1 -1
  238. package/dist/spec/README.ja.md +21 -1
  239. package/dist/spec/README.md +20 -1
  240. package/dist/spec/agent-card.schema.json +11 -1
  241. package/dist/spec/delivery-status.schema.json +106 -0
  242. package/dist/spec/examples/protocol-versions/sample-agent-card.json +35 -0
  243. package/dist/spec/examples/sample-delivery-status.json +21 -0
  244. package/dist/spec/examples/sample-task-manifest.0.1.0.json +173 -0
  245. package/dist/spec/examples/sample-task-manifest.0.2.0.json +173 -0
  246. package/dist/spec/task-manifest.0.1.0.schema.json +422 -0
  247. package/dist/spec/task-manifest.0.2.0.schema.json +422 -0
  248. package/dist/spec/task-manifest.schema.json +9 -418
  249. package/docs/sdk.ja.md +133 -0
  250. package/docs/sdk.md +138 -0
  251. package/package.json +15 -3
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  import { createInterface } from 'node:readline';
3
- import { signApproval, signPayload, verifyApproval, digest } from '../../core/dist/index.js';
3
+ import { signApproval, signPayload, verifyApproval, digest, assertConnectionsOptions } from '../../core/dist/index.js';
4
4
  export class ProposalRejectedError extends Error {
5
5
  reason;
6
6
  approved = false;
@@ -40,6 +40,7 @@ function budgetLimit(policy, field) {
40
40
  export function evaluateContractAcceptance(policy, details, from) {
41
41
  if (!policy)
42
42
  return { approved: true };
43
+ assertConnectionsOptions(policy);
43
44
  const manifest = proposedManifest(details);
44
45
  const limited = budgetFields.some((field) => policy[field] !== undefined);
45
46
  if (limited && !manifest)
@@ -75,8 +76,6 @@ export function evaluateContractAcceptance(policy, details, from) {
75
76
  policy.maxWallClockSeconds,
76
77
  };
77
78
  }
78
- if (policy.allowAnyRequester)
79
- return { approved: true };
80
79
  const allow = (policy.allowedRequesterDids ?? []).map((did) => did.trim()).filter(Boolean);
81
80
  if (allow.length === 0)
82
81
  return { approved: true };
@@ -98,6 +97,7 @@ export function evaluateContractAcceptance(policy, details, from) {
98
97
  export class InteractiveCliApprovalProvider {
99
98
  owner;
100
99
  options;
100
+ kind = 'human';
101
101
  constructor(owner, options = {}) {
102
102
  this.owner = owner;
103
103
  this.options = options;
@@ -146,6 +146,7 @@ export class PolicyAutoApprovalProvider {
146
146
  owner;
147
147
  policy;
148
148
  options;
149
+ kind = 'policy';
149
150
  constructor(owner, policy = {
150
151
  requiredGates: [],
151
152
  autoApprove: ['contract_acceptance', 'final_verification'],
@@ -153,6 +154,8 @@ export class PolicyAutoApprovalProvider {
153
154
  this.owner = owner;
154
155
  this.policy = policy;
155
156
  this.options = options;
157
+ if (options.acceptance)
158
+ assertConnectionsOptions(options.acceptance);
156
159
  }
157
160
  async approve(r) {
158
161
  if (r.gate === 'contract_acceptance') {
@@ -266,4 +269,77 @@ export class WebhookApprovalProvider {
266
269
  return signApproval(r.taskId, r.gate, r.target, this.owner, 'APPROVED');
267
270
  }
268
271
  }
272
+ /** Host form decisions are serialized per MCP connection and never use terminal IO. */
273
+ export class McpFormApprovalProvider {
274
+ owner;
275
+ options;
276
+ queue = Promise.resolve();
277
+ constructor(owner, options) {
278
+ this.owner = owner;
279
+ this.options = options;
280
+ }
281
+ assertAvailable() {
282
+ if (!this.options.available())
283
+ throw new Error('APPROVAL_CHANNEL_UNAVAILABLE: The host does not support MCP form elicitation. Use a host that supports elicitation, or --approval-webhook.');
284
+ }
285
+ async approve(request) {
286
+ this.assertAvailable();
287
+ const review = JSON.stringify({
288
+ taskId: request.taskId, gate: request.gate, target: request.target,
289
+ targetDigest: digest(request.target), details: request.details ?? null,
290
+ }, null, 2);
291
+ if (Buffer.byteLength(review) > 64 * 1024)
292
+ throw new Error('APPROVAL_REVIEW_TOO_LARGE');
293
+ const remaining = request.deadline
294
+ ? Date.parse(request.deadline) - (this.options.now ?? Date.now)() : Infinity;
295
+ const timeoutMs = Math.min(this.options.timeoutMs ?? 60000, remaining);
296
+ if (!(timeoutMs > 0))
297
+ throw new Error('APPROVAL_TIMEOUT');
298
+ const controller = new AbortController();
299
+ const abort = () => controller.abort(new Error('APPROVAL_ABORTED'));
300
+ request.signal?.addEventListener('abort', abort, { once: true });
301
+ if (request.signal?.aborted)
302
+ abort();
303
+ const timer = setTimeout(() => controller.abort(new Error('APPROVAL_TIMEOUT')), timeoutMs);
304
+ let release;
305
+ const previous = this.queue;
306
+ this.queue = new Promise((resolve) => { release = resolve; });
307
+ let onAbort;
308
+ try {
309
+ const result = await Promise.race([
310
+ previous.then(() => {
311
+ if (controller.signal.aborted)
312
+ throw controller.signal.reason;
313
+ return this.options.request({
314
+ mode: 'form', message: 'Review this Sealbridge action:\n' + review,
315
+ requestedSchema: {
316
+ type: 'object', properties: {
317
+ approved: { type: 'boolean', title: 'Approve this specific action', default: false },
318
+ }, required: ['approved'],
319
+ },
320
+ }, controller.signal);
321
+ }),
322
+ new Promise((_resolve, reject) => {
323
+ onAbort = () => reject(controller.signal.reason);
324
+ controller.signal.addEventListener('abort', onAbort, { once: true });
325
+ if (controller.signal.aborted)
326
+ onAbort();
327
+ }),
328
+ ]);
329
+ if (controller.signal.aborted)
330
+ throw controller.signal.reason;
331
+ const response = result;
332
+ if (!response || response.action !== 'accept' || response.content?.approved !== true)
333
+ throw new Error('APPROVAL_REJECTED');
334
+ return signApproval(request.taskId, request.gate, request.target, this.owner, 'APPROVED');
335
+ }
336
+ finally {
337
+ clearTimeout(timer);
338
+ request.signal?.removeEventListener('abort', abort);
339
+ controller.signal.removeEventListener('abort', onAbort);
340
+ // A cancelled queued entry must not let later entries overtake the active form.
341
+ void previous.then(release);
342
+ }
343
+ }
344
+ }
269
345
  //# sourceMappingURL=approval-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval-providers.js","sourceRoot":"","sources":["../src/approval-providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval-providers.js","sourceRoot":"","sources":["../src/approval-providers.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAmBxG,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAGzB;IAFZ,QAAQ,GAAG,KAAK,CAAC;IACjB,IAAI,GAAG,mBAAmB,CAAC;IACpC,YAAqB,MAAc;QACjC,KAAK,CAAC,qBAAqB,GAAG,MAAM,CAAC,CAAC;QADnB,WAAM,GAAN,MAAM,CAAQ;QAEjC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAMD,MAAM,YAAY,GAAG;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,qBAAqB;CACb,CAAC;AACX,SAAS,gBAAgB,CAAC,OAAgB;IACxC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,QAAQ,GAAI,OAAkC,CAAC,QAAQ,CAAC;IAC9D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3F,OAAO,QAA4B,CAAC;AACtC,CAAC;AACD,SAAS,YAAY,CAAC,OAAgB,EAAE,IAAa;IACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9D,MAAM,KAAK,GAAI,OAA8B,CAAC,IAAI,CAAC;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AACD,SAAS,WAAW,CAClB,MAA8B,EAC9B,KAAoC;IAEpC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AACD,sFAAsF;AACtF,MAAM,UAAU,0BAA0B,CACxC,MAA0C,EAC1C,OAAgB,EAChB,IAAa;IAEb,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACvC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC;IAC1E,IAAI,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACpF,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAChE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,MAAM,QAAQ,GAAI,MAAkC,CAAC,KAAK,CAAC,CAAC;YAC5D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,oCAAoC,EAAE,CAAC;YACnF,IAAI,QAAQ,GAAG,KAAK;gBAClB,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,KAAK,GAAG,GAAG,GAAG,QAAQ,GAAG,wBAAwB,GAAG,KAAK;iBAClE,CAAC;QACN,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,IAAI,gBAAgB,IAAI,QAAQ,EAAE,CAAC;QACzF,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC;QACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;QACzF,IAAI,OAAO,GAAG,MAAM,CAAC,mBAAmB;YACtC,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,MAAM,EACJ,iBAAiB;oBACjB,OAAO;oBACP,wBAAwB;oBACxB,MAAM,CAAC,mBAAmB;aAC7B,CAAC;IACN,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ;QACnF,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,gCAAgC,GAAG,MAAM;SAC5E,CAAC;IACJ,MAAM,aAAa,GACjB,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1E,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAClG,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,YAAY,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC,GAAG,iBAAiB;KACxE,CAAC;AACJ,CAAC;AAaD,MAAM,OAAO,8BAA8B;IAG9B;IACA;IAHF,IAAI,GAAG,OAAgB,CAAC;IACjC,YACW,KAAc,EACd,UAAyG,EAAE;QAD3G,UAAK,GAAL,KAAK,CAAS;QACd,YAAO,GAAP,OAAO,CAAoG;IACnH,CAAC;IACJ,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,KAAK,CACV,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CACtD;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;SACjC,EACD,IAAI,EACJ,CAAC,CACF,CAAC,GAAG,mBAAmB,CACzB,CAAC;QACF,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3D,MAAM,KAAK,GAAG,GAAG,EAAE;oBACjB,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAC;gBACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC1E,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACvB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;oBACpB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,EAAE,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACrB,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;oBAAE,KAAK,EAAE,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,OAAO,YAAY,CACjB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,KAAK,EACV,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAC1D,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF;AACD,MAAM,OAAO,0BAA0B;IAG1B;IACA;IAIA;IAPF,IAAI,GAAG,QAAiB,CAAC;IAClC,YACW,KAAc,EACd,SAAsB;QAC7B,aAAa,EAAE,EAAE;QACjB,WAAW,EAAE,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;KAC3D,EACQ,UAIL,EAAE;QATG,UAAK,GAAL,KAAK,CAAS;QACd,WAAM,GAAN,MAAM,CAGd;QACQ,YAAO,GAAP,OAAO,CAIV;QACJ,IAAI,OAAO,CAAC,UAAU;YAAE,wBAAwB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAAC,CAAC;IAC3E,KAAK,CAAC,OAAO,CAAC,CAAkB;QAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,CAAC,QAAQ;gBAAE,MAAM,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/E,IACE,CAAC,QAAQ;YACT,CAAC,SAAS;gBACR,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnE,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACF;AAcD,gEAAgE;AAChE,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ;QACzF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACpD,CAAC;AACD,SAAS,cAAc,CAAC,OAAwB;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,MAAM,MAAM,GAAI,OAAgC,CAAC,MAAM,CAAC;QACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AACD,MAAM,OAAO,uBAAuB;IAEvB;IACA;IAFX,YACW,KAAc,EACd,OAAuC;QADvC,UAAK,GAAL,KAAK,CAAS;QACd,YAAO,GAAP,OAAO,CAAgC;QAEhD,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB;YAAE,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,CAAkB;QAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,gBAAgB;YAAE,OAAO,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,WAAW,CACtB;YACE,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,IAAI;SAC3B,EACD,IAAI,CAAC,KAAK,CACX,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;YAC7B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;YACpD,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM;YACN,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAC;QAC3D,IACE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAE7F,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,yEAAyE;IACjE,KAAK,CAAC,oBAAoB,CAAC,CAAkB;QACnD,MAAM,IAAI,GAAG;YACX,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;YACzB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;SAC5B,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC;YAC7B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;YACpD,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM;YACN,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,QAAQ,GACZ,CAAC,CAAC,MAAM;YACR,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACrB,MAAiC,CAAC,QAAQ,KAAK,IAAI,CAAC;QACvD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACpD,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;CACF;AAED,uFAAuF;AACvF,MAAM,OAAO,uBAAuB;IAGvB;IACA;IAHH,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACjD,YACW,KAAc,EACd,OAKR;QANQ,UAAK,GAAL,KAAK,CAAS;QACd,YAAO,GAAP,OAAO,CAKf;IACA,CAAC;IACJ,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAAE,MAAM,IAAI,KAAK,CAC5C,4IAA4I,CAC7I,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM;YAClE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;SACvE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACZ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACxF,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ;YAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,KAAK,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3F,IAAI,OAAoB,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;oBACjB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;wBAC1B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAkC,GAAG,MAAM;wBAClE,eAAe,EAAE;4BACf,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE;gCAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,8BAA8B,EAAE,OAAO,EAAE,KAAK,EAAE;6BACrF,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC;yBAC1B;qBACF,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC,CAAC;gBACF,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;oBACtC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjD,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrE,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,OAAO,EAAE,CAAC;gBAC3C,CAAC,CAAC;aACH,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAuE,CAAC;YACzF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI;gBAClF,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,OAAO,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5F,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACpD,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxD,gFAAgF;YAChF,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ import type { ConnectionRouterOptions } from './connection-router.js';
2
+ import type { HeldRequestStoreOptions } from './held-request-store.js';
3
+ export interface InboundConnectionSummary {
4
+ id: string;
5
+ requestId: string;
6
+ requestDigest: string;
7
+ localOwnerDid: string;
8
+ peerOwnerDid: string;
9
+ peerAgentDid: string;
10
+ shortLocalOwnerDid: string;
11
+ shortPeerOwnerDid: string;
12
+ shortPeerAgentDid: string;
13
+ peerDisplayName?: string;
14
+ inviteAlias?: string;
15
+ createdAt: string;
16
+ receivedAt: number;
17
+ expiresAt: number;
18
+ relayUrl: string;
19
+ }
20
+ export interface ConnectionAdmissionReviewOptions extends Omit<ConnectionRouterOptions, 'review' | 'humanReview'> {
21
+ heldOptions?: HeldRequestStoreOptions;
22
+ /** Optional local label lookup by public invite digest. No invitation is resolved. */
23
+ inviteAlias?: (inviteDigest: string) => string | undefined;
24
+ }
25
+ /** Owner-facing admission queue. The host calls decisions only for explicit owner actions. */
26
+ export declare class ConnectionAdmissionReview {
27
+ private readonly options;
28
+ private readonly review;
29
+ private readonly now;
30
+ constructor(options: ConnectionAdmissionReviewOptions);
31
+ private entries;
32
+ /** Read-only public metadata projection; messages, task content and tokens are omitted. */
33
+ list(): InboundConnectionSummary[];
34
+ private entry;
35
+ /** Explicit owner approval grants limited connection consent; it never opens a task. */
36
+ approve(id: string): Promise<import("./connection-service.js").ConnectionServiceResult>;
37
+ /** Reject uses the existing peer cooldown and discards that peer's held content. */
38
+ reject(id: string): void;
39
+ }
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { digest, openEnvelope } from '../../core/dist/index.js';
3
+ import { ConnectionRouter } from './connection-router.js';
4
+ import { HeldRequestReview, heldContentDigest } from './held-request-review.js';
5
+ import { openConnectionFrame } from './connection-transport.js';
6
+ function label(value) {
7
+ return [...value.replace(/acp-invite:[A-Za-z0-9_-]+/g, '[invitation]')
8
+ .replace(/[\p{Cc}\p{Cf}]/gu, '')].slice(0, 120).join('');
9
+ }
10
+ const shortDid = (did) => did.slice(0, 16) + '…' + did.slice(-8);
11
+ /** Owner-facing admission queue. The host calls decisions only for explicit owner actions. */
12
+ export class ConnectionAdmissionReview {
13
+ options;
14
+ review;
15
+ now;
16
+ constructor(options) {
17
+ this.options = options;
18
+ if (options.store.ownerDid !== options.owner.did)
19
+ throw new Error('INVALID_CONNECTION_OWNER');
20
+ this.now = options.now ?? Date.now;
21
+ this.review = new HeldRequestReview(options.owner, { ...options.heldOptions, now: this.now });
22
+ }
23
+ entries() {
24
+ const controls = this.options.store.controlSnapshot();
25
+ return this.review.store.records().filter(record => record.kind === 'connection' && record.expiresAt > this.now())
26
+ .flatMap(record => {
27
+ const control = controls.find(c => c.direction === 'incoming' && c.active && !c.accepted &&
28
+ c.offer.requestId === record.requestId && c.offer.relayUrl === this.options.relayUrl &&
29
+ Date.parse(c.offer.expiresAt) > this.now());
30
+ if (!control || this.options.store.connectionState(control.offer.fromOwnerDid) !== 'pending')
31
+ return [];
32
+ const frame = openConnectionFrame(record.envelope, this.options.owner);
33
+ if (frame.event.payload.type !== 'ConnectionRequest' || digest(frame.event) !== control.offer.requestDigest ||
34
+ frame.event.payload.fromOwnerDid !== record.senderOwnerDid ||
35
+ heldContentDigest('connection', openEnvelope(record.envelope, this.options.owner)) !== record.contentDigest)
36
+ throw new Error('INVALID_CONNECTION_REQUEST');
37
+ return [{ record, request: frame.event, offer: control.offer }];
38
+ });
39
+ }
40
+ /** Read-only public metadata projection; messages, task content and tokens are omitted. */
41
+ list() {
42
+ return this.entries().map(({ record, request, offer }) => {
43
+ const p = request.payload, peerAgentDid = p.agentCard.payload.agentDid;
44
+ const alias = p.inviteDigest ? this.options.inviteAlias?.(p.inviteDigest) : undefined;
45
+ return { id: record.id, requestId: p.requestId, requestDigest: offer.requestDigest,
46
+ localOwnerDid: this.options.owner.did, peerOwnerDid: p.fromOwnerDid, peerAgentDid,
47
+ shortLocalOwnerDid: shortDid(this.options.owner.did), shortPeerOwnerDid: shortDid(p.fromOwnerDid),
48
+ shortPeerAgentDid: shortDid(peerAgentDid), peerDisplayName: label(p.agentCard.payload.name),
49
+ ...(alias === undefined ? {} : { inviteAlias: label(alias) }),
50
+ createdAt: p.createdAt, receivedAt: record.receivedAt, expiresAt: record.expiresAt, relayUrl: offer.relayUrl };
51
+ }).sort((a, b) => a.receivedAt - b.receivedAt || a.id.localeCompare(b.id));
52
+ }
53
+ entry(id) {
54
+ const entry = this.entries().find(e => e.record.id === id || e.offer.requestId === id);
55
+ if (!entry)
56
+ throw new Error('CONNECTION_NOT_PENDING');
57
+ return entry;
58
+ }
59
+ /** Explicit owner approval grants limited connection consent; it never opens a task. */
60
+ async approve(id) {
61
+ const { record } = this.entry(id);
62
+ this.options.assertPeer?.(record.senderOwnerDid);
63
+ // This provider exists only during this owner operation, never on the receiving router.
64
+ const review = new HeldRequestReview(this.options.owner, { ...this.options.heldOptions, now: this.now,
65
+ provider: { async inspect(envelope, context) {
66
+ const frame = openConnectionFrame(envelope, context.owner);
67
+ if (context.kind !== 'connection' || frame.event.payload.type !== 'ConnectionRequest' ||
68
+ context.envelopeDigest !== digest(envelope) ||
69
+ context.contentDigest !== heldContentDigest('connection', openEnvelope(envelope, context.owner)))
70
+ throw new Error('INVALID_CONNECTION_REQUEST');
71
+ return { ownerDid: context.owner.did, kind: context.kind, envelopeDigest: context.envelopeDigest,
72
+ contentDigest: context.contentDigest, status: 'complete',
73
+ reportDigest: digest({ type: 'ConnectionAdmissionMetadata', v: 1, requestDigest: digest(frame.event) }) };
74
+ } } });
75
+ const router = new ConnectionRouter({ ...this.options, review,
76
+ humanReview: { kind: 'human', review: async () => true } });
77
+ return router.approve(record.envelope);
78
+ }
79
+ /** Reject uses the existing peer cooldown and discards that peer's held content. */
80
+ reject(id) {
81
+ const { offer } = this.entry(id);
82
+ this.options.store.rejectConnection(offer.fromOwnerDid);
83
+ this.review.discardPeer(offer.fromOwnerDid);
84
+ }
85
+ }
86
+ //# sourceMappingURL=connection-admission-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-admission-review.js","sourceRoot":"","sources":["../src/connection-admission-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ConnectionAccepted, Signed } from '../../core/dist/index.js';
2
+ import type { WorkerTrustStore } from './worker-trust-store.js';
3
+ import type { ConnectionAcceptanceCommit, ConnectionOffer, ConnectionOutboxEntry, ConnectionPersistencePort } from './connection-service.js';
4
+ export interface StoredControlRecord {
5
+ offer: ConnectionOffer;
6
+ direction: 'incoming' | 'outgoing';
7
+ active: boolean;
8
+ consentDigest?: string;
9
+ consent?: ConnectionAcceptanceCommit['consent'];
10
+ accepted?: Signed<ConnectionAccepted>;
11
+ outbox: ConnectionOutboxEntry[];
12
+ acknowledgement?: ConnectionOutboxEntry;
13
+ }
14
+ export declare function validStoredControls(records: StoredControlRecord[], ownerDid: string): boolean;
15
+ /** PR2 lifecycle and PR3 exchange commit under the same owner-signed file lock. */
16
+ export declare class StoredConnectionExchange implements ConnectionPersistencePort {
17
+ readonly store: WorkerTrustStore;
18
+ constructor(store: WorkerTrustStore);
19
+ private peer;
20
+ private record;
21
+ private pending;
22
+ private commit;
23
+ private lookup;
24
+ outgoing(id: string): Promise<ConnectionOffer | undefined>;
25
+ incoming(id: string): Promise<ConnectionOffer | undefined>;
26
+ recordOutgoing(...[o, consent, outbox, now]: Parameters<ConnectionPersistencePort['recordOutgoing']>): Promise<void>;
27
+ recordIncoming(o: ConnectionOffer, now: number): Promise<"pending" | "accepted">;
28
+ private acceptInto;
29
+ accept(c: ConnectionAcceptanceCommit): Promise<void>;
30
+ redeem(c: Parameters<ConnectionPersistencePort['redeem']>[0]): Promise<"inactive" | "first" | "same" | "other">;
31
+ applyAccepted(c: Parameters<ConnectionPersistencePort['applyAccepted']>[0]): Promise<void>;
32
+ acknowledge(ack: Parameters<ConnectionPersistencePort['acknowledge']>[0], id: string): Promise<void>;
33
+ listOutbox(now: number): Promise<ConnectionOutboxEntry[]>;
34
+ markSent(id: string): Promise<void>;
35
+ }
@@ -0,0 +1,181 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { digest, verifySigned, verifyEnvelope, verifyConnectionAccepted, verifyConnectionAck } from '../../core/dist/index.js';
3
+ export function validStoredControls(records, ownerDid) {
4
+ return Array.isArray(records) && records.length <= 1000 &&
5
+ new Set(records.map(r => r.offer.requestId)).size === records.length && records.every(r => {
6
+ const o = r.offer;
7
+ return ['incoming', 'outgoing'].includes(r.direction) && typeof r.active === 'boolean' &&
8
+ typeof o?.requestId === 'string' && /^sha256:[a-f0-9]{64}$/.test(o.requestDigest) &&
9
+ (r.direction === 'incoming' ? o.toOwnerDid : o.fromOwnerDid) === ownerDid &&
10
+ (o.peerDisplayName === undefined || typeof o.peerDisplayName === 'string' && o.peerDisplayName.length > 0) &&
11
+ Number.isFinite(Date.parse(o.createdAt)) && Date.parse(o.expiresAt) > Date.parse(o.createdAt) &&
12
+ Date.parse(o.expiresAt) - Date.parse(o.createdAt) <= 14 * 86400000 &&
13
+ (!r.accepted || verifyConnectionAccepted(r.accepted)) &&
14
+ (!r.consentDigest || /^sha256:[a-f0-9]{64}$/.test(r.consentDigest)) &&
15
+ (!r.consent || digest(r.consent) === r.consentDigest && ('payload' in r.consent ?
16
+ verifySigned(r.consent, ownerDid) && r.consent.payload.requestDigest === o.requestDigest :
17
+ r.consent.inviteDigest === o.inviteDigest)) &&
18
+ Array.isArray(r.outbox) && r.outbox.length <= 2 && r.outbox.every(b => b.requestId === o.requestId && b.envelope.payload.taskId === 'conn_' + o.requestId &&
19
+ b.envelope.payload.senderDid === ownerDid && b.envelope.payload.recipientDid === (r.direction === 'incoming' ? o.fromOwnerDid : o.toOwnerDid) &&
20
+ verifySigned(b.envelope, ownerDid) &&
21
+ verifyEnvelope(b.envelope, b.envelope.payload.recipientDid) &&
22
+ Date.parse(b.deliveryDeadline) <= Date.parse(o.expiresAt));
23
+ });
24
+ }
25
+ /** Display metadata is outside the offer's identity and consent comparison. */
26
+ function offerDigest({ peerDisplayName: _name, ...offer }) { return digest(offer); }
27
+ /** PR2 lifecycle and PR3 exchange commit under the same owner-signed file lock. */
28
+ export class StoredConnectionExchange {
29
+ store;
30
+ constructor(store) {
31
+ this.store = store;
32
+ }
33
+ peer(o) { return o.fromOwnerDid === this.store.ownerDid ? o.toOwnerDid : o.fromOwnerDid; }
34
+ record(s, o, direction, now) {
35
+ const peer = this.peer(o);
36
+ if (s.denials.includes(peer))
37
+ throw new Error('CONNECTION_NOT_PENDING');
38
+ if (Date.parse(o.expiresAt) <= now)
39
+ throw new Error('CONNECTION_REQUEST_EXPIRED');
40
+ const controls = s.controls ??= [];
41
+ let r = controls.find(r => r.offer.requestId === o.requestId);
42
+ if (r && (!r.active || r.direction !== direction || offerDigest(r.offer) !== offerDigest(o)))
43
+ throw new Error('CONNECTION_NOT_PENDING');
44
+ if (!r) {
45
+ if (direction === 'incoming' && s.refusals.some(r => r.peerOwnerDid === peer && r.refuseUntil > now))
46
+ throw new Error('CONNECTION_REQUEST_COOLDOWN');
47
+ r = { offer: structuredClone(o), direction, active: true, outbox: [] };
48
+ controls.push(r);
49
+ }
50
+ if (o.peerDisplayName !== undefined)
51
+ r.offer.peerDisplayName ??= o.peerDisplayName;
52
+ return r;
53
+ }
54
+ pending(s, r, now) {
55
+ const o = r.offer, peer = this.peer(o);
56
+ let c = s.connections.find(c => c.peerOwnerDid === peer);
57
+ if (!c) {
58
+ c = { peerOwnerDid: peer, relayUrl: o.relayUrl, state: 'pending',
59
+ ...(o.peerAgentDid ? { peerAgentDid: o.peerAgentDid } : {}) };
60
+ s.connections.push(c);
61
+ }
62
+ if (o.peerDisplayName !== undefined)
63
+ c.peerDisplayName ??= o.peerDisplayName;
64
+ if (r.direction === 'incoming')
65
+ c.incoming ??= { requestId: o.requestId, requestDigest: o.requestDigest,
66
+ receivedAt: now, expiresAt: Date.parse(o.expiresAt) };
67
+ else
68
+ c.outgoing ??= { requestId: o.requestId, requestDigest: o.requestDigest, createdAt: Date.parse(o.createdAt),
69
+ expiresAt: Date.parse(o.expiresAt), ownerConsentDigest: r.consentDigest };
70
+ }
71
+ commit(s, r, accepted, now, source) {
72
+ this.pending(s, r, now);
73
+ const c = s.connections.find(c => c.peerOwnerDid === this.peer(r.offer));
74
+ Object.assign(c, { state: 'connected', connectionId: accepted.payload.connectionId, connectedAt: now,
75
+ source, localConsentDigest: r.consentDigest,
76
+ ...(r.direction === 'outgoing' ? { remoteAcceptanceDigest: digest(accepted) } : {}) });
77
+ r.accepted = structuredClone(accepted);
78
+ }
79
+ async lookup(id, direction) {
80
+ return this.store.controlSnapshot().find(r => r.offer.requestId === id && r.direction === direction && r.active)?.offer;
81
+ }
82
+ outgoing(id) { return this.lookup(id, 'outgoing'); }
83
+ incoming(id) { return this.lookup(id, 'incoming'); }
84
+ async recordOutgoing(...[o, consent, outbox, now]) {
85
+ this.store.updateControls(s => {
86
+ if (!verifySigned(consent, this.store.ownerDid) || consent.payload.requestDigest !== o.requestDigest)
87
+ throw new Error('CONNECTION_NOT_PENDING');
88
+ const r = this.record(s, o, 'outgoing', now);
89
+ r.consent = structuredClone(consent);
90
+ r.consentDigest = digest(consent);
91
+ this.pending(s, r, now);
92
+ r.outbox = [structuredClone(outbox)];
93
+ });
94
+ }
95
+ async recordIncoming(o, now) {
96
+ return this.store.updateControls(s => {
97
+ const r = this.record(s, o, 'incoming', now);
98
+ this.pending(s, r, now);
99
+ return r.accepted ? 'accepted' : 'pending';
100
+ });
101
+ }
102
+ acceptInto(s, c, source) {
103
+ const retained = s.controls?.find(r => r.offer.requestId === c.offer.requestId && r.direction === 'incoming');
104
+ if (!retained?.active || offerDigest(retained.offer) !== offerDigest(c.offer))
105
+ throw new Error('CONNECTION_NOT_PENDING');
106
+ const r = this.record(s, c.offer, 'incoming', c.now);
107
+ const p = c.accepted.payload;
108
+ if (!verifyConnectionAccepted(c.accepted) || p.fromOwnerDid !== this.store.ownerDid || p.toOwnerDid !== c.offer.fromOwnerDid ||
109
+ p.requestId !== c.offer.requestId || p.requestDigest !== c.offer.requestDigest || p.inviteDigest !== c.offer.inviteDigest)
110
+ throw new Error('CONNECTION_NOT_PENDING');
111
+ if ('payload' in c.consent ? !verifySigned(c.consent, this.store.ownerDid) || c.consent.payload.requestDigest !== c.offer.requestDigest :
112
+ source !== 'invite' || c.consent.inviteDigest !== c.offer.inviteDigest)
113
+ throw new Error('CONNECTION_NOT_PENDING');
114
+ if (r.accepted)
115
+ return;
116
+ r.consent = structuredClone(c.consent);
117
+ r.consentDigest = digest(c.consent);
118
+ r.outbox = [structuredClone(c.outbox)];
119
+ this.commit(s, r, c.accepted, c.now, source);
120
+ }
121
+ async accept(c) { this.store.updateControls(s => this.acceptInto(s, c, 'request')); }
122
+ async redeem(c) {
123
+ return this.store.updateControls(s => {
124
+ const b = s.inviteBindings.find(b => b.inviteDigest === c.inviteDigest);
125
+ if (b) {
126
+ if (b.requesterOwnerDid !== c.requesterOwnerDid)
127
+ return 'other';
128
+ const connected = s.connections.some(p => p.peerOwnerDid === b.requesterOwnerDid && p.state === 'connected' && p.connectionId === b.connectionId);
129
+ if (!connected)
130
+ return 'inactive';
131
+ this.acceptInto(s, c, 'invite');
132
+ return 'same';
133
+ }
134
+ this.acceptInto(s, c, 'invite');
135
+ s.inviteBindings.push({ inviteDigest: c.inviteDigest, requesterOwnerDid: c.requesterOwnerDid,
136
+ tokenExpiresAt: Date.parse(c.tokenExpiresAt), boundAt: c.now, connectionId: c.accepted.payload.connectionId });
137
+ return 'first';
138
+ });
139
+ }
140
+ async applyAccepted(c) {
141
+ this.store.updateControls(s => {
142
+ const existing = s.controls?.find(r => r.offer.requestId === c.offer.requestId);
143
+ if (!existing?.active || !existing.consentDigest)
144
+ throw new Error('CONNECTION_NOT_PENDING');
145
+ const r = this.record(s, c.offer, 'outgoing', c.now), p = c.accepted.payload;
146
+ if (!verifyConnectionAccepted(c.accepted) || p.fromOwnerDid !== c.offer.toOwnerDid || p.toOwnerDid !== this.store.ownerDid ||
147
+ p.requestId !== c.offer.requestId || p.requestDigest !== c.offer.requestDigest || p.inviteDigest !== c.offer.inviteDigest ||
148
+ !verifyConnectionAck(c.acknowledgement) || c.acknowledgement.payload.fromOwnerDid !== this.store.ownerDid ||
149
+ c.acknowledgement.payload.toOwnerDid !== c.offer.toOwnerDid || c.acknowledgement.payload.acceptedDigest !== digest(c.accepted))
150
+ throw new Error('CONNECTION_NOT_PENDING');
151
+ if (r.accepted) {
152
+ if (digest(r.accepted) !== digest(c.accepted))
153
+ throw new Error('CONNECTION_NOT_PENDING');
154
+ r.outbox = r.acknowledgement ? [r.acknowledgement] : [];
155
+ return;
156
+ }
157
+ this.commit(s, r, c.accepted, c.now, 'request');
158
+ r.acknowledgement = structuredClone(c.outbox);
159
+ r.outbox = [r.acknowledgement];
160
+ });
161
+ }
162
+ async acknowledge(ack, id) {
163
+ this.store.updateControls(s => {
164
+ const r = s.controls?.find(r => r.offer.requestId === id && r.active), a = r?.accepted;
165
+ if (a && digest(a) === ack.payload.acceptedDigest && a.payload.fromOwnerDid === ack.payload.toOwnerDid &&
166
+ a.payload.toOwnerDid === ack.payload.fromOwnerDid)
167
+ r.outbox = [];
168
+ });
169
+ }
170
+ async listOutbox(now) {
171
+ return this.store.controlSnapshot().filter(r => r.active)
172
+ .flatMap(r => r.outbox).filter(b => Date.parse(b.deliveryDeadline) > now);
173
+ }
174
+ async markSent(id) {
175
+ this.store.updateControls(s => {
176
+ for (const r of s.controls ?? [])
177
+ r.outbox = r.outbox.filter(b => b.id !== id || b.envelope.payload.eventType !== 'CONNECTION_ACK');
178
+ });
179
+ }
180
+ }
181
+ //# sourceMappingURL=connection-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-persistence.js","sourceRoot":"","sources":["../src/connection-persistence.ts"],"names":[],"mappings":"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"}