@cello-protocol/daemon 0.0.227 → 0.0.228

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 (895) hide show
  1. package/dist/agent-admin-handlers.d.ts +56 -0
  2. package/dist/agent-admin-handlers.d.ts.map +1 -0
  3. package/dist/agent-admin-handlers.js +73 -0
  4. package/dist/agent-admin-handlers.js.map +1 -0
  5. package/dist/agent-handlers.d.ts +72 -0
  6. package/dist/agent-handlers.d.ts.map +1 -0
  7. package/dist/agent-handlers.js +604 -0
  8. package/dist/agent-handlers.js.map +1 -0
  9. package/dist/agent-id-migration.d.ts +70 -0
  10. package/dist/agent-id-migration.d.ts.map +1 -0
  11. package/dist/agent-id-migration.js +468 -0
  12. package/dist/agent-id-migration.js.map +1 -0
  13. package/dist/agent-loader.d.ts +37 -0
  14. package/dist/agent-loader.d.ts.map +1 -0
  15. package/dist/agent-loader.js +37 -0
  16. package/dist/agent-loader.js.map +1 -0
  17. package/dist/agent-selection-root.d.ts +29 -0
  18. package/dist/agent-selection-root.d.ts.map +1 -0
  19. package/dist/agent-selection-root.js +126 -0
  20. package/dist/agent-selection-root.js.map +1 -0
  21. package/dist/agent-selection.d.ts +73 -0
  22. package/dist/agent-selection.d.ts.map +1 -0
  23. package/dist/agent-selection.js +80 -0
  24. package/dist/agent-selection.js.map +1 -0
  25. package/dist/agent-settings-keys.d.ts +52 -0
  26. package/dist/agent-settings-keys.d.ts.map +1 -0
  27. package/dist/agent-settings-keys.js +114 -0
  28. package/dist/agent-settings-keys.js.map +1 -0
  29. package/dist/agent-state.d.ts +67 -0
  30. package/dist/agent-state.d.ts.map +1 -0
  31. package/dist/agent-state.js +66 -0
  32. package/dist/agent-state.js.map +1 -0
  33. package/dist/assignment-verify.d.ts +90 -0
  34. package/dist/assignment-verify.d.ts.map +1 -0
  35. package/dist/assignment-verify.js +301 -0
  36. package/dist/assignment-verify.js.map +1 -0
  37. package/dist/attendance-wiring.d.ts +23 -0
  38. package/dist/attendance-wiring.d.ts.map +1 -0
  39. package/dist/attendance-wiring.js +248 -0
  40. package/dist/attendance-wiring.js.map +1 -0
  41. package/dist/attestation-body.d.ts +47 -0
  42. package/dist/attestation-body.d.ts.map +1 -0
  43. package/dist/attestation-body.js +71 -0
  44. package/dist/attestation-body.js.map +1 -0
  45. package/dist/authorship-verification.d.ts +91 -0
  46. package/dist/authorship-verification.d.ts.map +1 -0
  47. package/dist/authorship-verification.js +532 -0
  48. package/dist/authorship-verification.js.map +1 -0
  49. package/dist/away-detection.d.ts +139 -0
  50. package/dist/away-detection.d.ts.map +1 -0
  51. package/dist/away-detection.js +186 -0
  52. package/dist/away-detection.js.map +1 -0
  53. package/dist/away-inbox-oneshot.d.ts +40 -0
  54. package/dist/away-inbox-oneshot.d.ts.map +1 -0
  55. package/dist/away-inbox-oneshot.js +311 -0
  56. package/dist/away-inbox-oneshot.js.map +1 -0
  57. package/dist/backup-restore-handlers.d.ts +10 -0
  58. package/dist/backup-restore-handlers.d.ts.map +1 -0
  59. package/dist/backup-restore-handlers.js +82 -0
  60. package/dist/backup-restore-handlers.js.map +1 -0
  61. package/dist/backup-restore.d.ts +102 -0
  62. package/dist/backup-restore.d.ts.map +1 -0
  63. package/dist/backup-restore.js +341 -0
  64. package/dist/backup-restore.js.map +1 -0
  65. package/dist/bin/cello-daemon.d.ts +13 -0
  66. package/dist/bin/cello-daemon.d.ts.map +1 -0
  67. package/dist/bin/cello-daemon.js.map +1 -0
  68. package/dist/boot-agents.d.ts +64 -0
  69. package/dist/boot-agents.d.ts.map +1 -0
  70. package/dist/boot-agents.js +241 -0
  71. package/dist/boot-agents.js.map +1 -0
  72. package/dist/boot-connection-state.d.ts +38 -0
  73. package/dist/boot-connection-state.d.ts.map +1 -0
  74. package/dist/boot-connection-state.js +95 -0
  75. package/dist/boot-connection-state.js.map +1 -0
  76. package/dist/boot-core.d.ts +36 -0
  77. package/dist/boot-core.d.ts.map +1 -0
  78. package/dist/boot-core.js +293 -0
  79. package/dist/boot-core.js.map +1 -0
  80. package/dist/boot-parked-content.d.ts +34 -0
  81. package/dist/boot-parked-content.d.ts.map +1 -0
  82. package/dist/boot-parked-content.js +528 -0
  83. package/dist/boot-parked-content.js.map +1 -0
  84. package/dist/boot-sweeps.d.ts +22 -0
  85. package/dist/boot-sweeps.d.ts.map +1 -0
  86. package/dist/boot-sweeps.js +51 -0
  87. package/dist/boot-sweeps.js.map +1 -0
  88. package/dist/bundled-consortium-manifest.d.ts +47 -0
  89. package/dist/bundled-consortium-manifest.d.ts.map +1 -0
  90. package/dist/bundled-consortium-manifest.js +116 -0
  91. package/dist/bundled-consortium-manifest.js.map +1 -0
  92. package/dist/cbor-blob-migration.d.ts +8 -0
  93. package/dist/cbor-blob-migration.d.ts.map +1 -0
  94. package/dist/cbor-blob-migration.js +116 -0
  95. package/dist/cbor-blob-migration.js.map +1 -0
  96. package/dist/challenge-verifier.d.ts +12 -0
  97. package/dist/challenge-verifier.d.ts.map +1 -0
  98. package/dist/challenge-verifier.js +11 -0
  99. package/dist/challenge-verifier.js.map +1 -0
  100. package/dist/channel-log-store.d.ts +80 -0
  101. package/dist/channel-log-store.d.ts.map +1 -0
  102. package/dist/channel-log-store.js +290 -0
  103. package/dist/channel-log-store.js.map +1 -0
  104. package/dist/close-commitment.d.ts +67 -0
  105. package/dist/close-commitment.d.ts.map +1 -0
  106. package/dist/close-commitment.js +78 -0
  107. package/dist/close-commitment.js.map +1 -0
  108. package/dist/close-session-handler.d.ts +94 -0
  109. package/dist/close-session-handler.d.ts.map +1 -0
  110. package/dist/close-session-handler.js +1418 -0
  111. package/dist/close-session-handler.js.map +1 -0
  112. package/dist/co-attendance.d.ts +29 -0
  113. package/dist/co-attendance.d.ts.map +1 -0
  114. package/dist/co-attendance.js +32 -0
  115. package/dist/co-attendance.js.map +1 -0
  116. package/dist/column-birth.d.ts +40 -0
  117. package/dist/column-birth.d.ts.map +1 -0
  118. package/dist/column-birth.js +61 -0
  119. package/dist/column-birth.js.map +1 -0
  120. package/dist/connect-or-start.d.ts +25 -0
  121. package/dist/connect-or-start.d.ts.map +1 -0
  122. package/dist/connect-or-start.js +175 -0
  123. package/dist/connect-or-start.js.map +1 -0
  124. package/dist/connection-agents.d.ts +16 -0
  125. package/dist/connection-agents.d.ts.map +1 -0
  126. package/dist/connection-agents.js +68 -0
  127. package/dist/connection-agents.js.map +1 -0
  128. package/dist/consent-migration.d.ts +49 -0
  129. package/dist/consent-migration.d.ts.map +1 -0
  130. package/dist/consent-migration.js +128 -0
  131. package/dist/consent-migration.js.map +1 -0
  132. package/dist/consortium-bootstrap.d.ts +138 -0
  133. package/dist/consortium-bootstrap.d.ts.map +1 -0
  134. package/dist/consortium-bootstrap.js +339 -0
  135. package/dist/consortium-bootstrap.js.map +1 -0
  136. package/dist/consortium-fingerprint.d.ts +115 -0
  137. package/dist/consortium-fingerprint.d.ts.map +1 -0
  138. package/dist/consortium-fingerprint.js +175 -0
  139. package/dist/consortium-fingerprint.js.map +1 -0
  140. package/dist/contact-handlers.d.ts +59 -0
  141. package/dist/contact-handlers.d.ts.map +1 -0
  142. package/dist/contact-handlers.js +343 -0
  143. package/dist/contact-handlers.js.map +1 -0
  144. package/dist/contact-pubkey-case.d.ts +65 -0
  145. package/dist/contact-pubkey-case.d.ts.map +1 -0
  146. package/dist/contact-pubkey-case.js +136 -0
  147. package/dist/contact-pubkey-case.js.map +1 -0
  148. package/dist/contacts-tier-migration.d.ts +90 -0
  149. package/dist/contacts-tier-migration.d.ts.map +1 -0
  150. package/dist/contacts-tier-migration.js +150 -0
  151. package/dist/contacts-tier-migration.js.map +1 -0
  152. package/dist/content-encryption-status.d.ts +111 -0
  153. package/dist/content-encryption-status.d.ts.map +1 -0
  154. package/dist/content-encryption-status.js +158 -0
  155. package/dist/content-encryption-status.js.map +1 -0
  156. package/dist/content-park-client.d.ts +90 -0
  157. package/dist/content-park-client.d.ts.map +1 -0
  158. package/dist/content-park-client.js +362 -0
  159. package/dist/content-park-client.js.map +1 -0
  160. package/dist/content-park.d.ts +52 -0
  161. package/dist/content-park.d.ts.map +1 -0
  162. package/dist/content-park.js +1309 -0
  163. package/dist/content-park.js.map +1 -0
  164. package/dist/cross-node-negotiation.d.ts +44 -0
  165. package/dist/cross-node-negotiation.d.ts.map +1 -0
  166. package/dist/cross-node-negotiation.js +34 -0
  167. package/dist/cross-node-negotiation.js.map +1 -0
  168. package/dist/daemon-handle.d.ts +57 -0
  169. package/dist/daemon-handle.d.ts.map +1 -0
  170. package/dist/daemon-handle.js +2 -0
  171. package/dist/daemon-handle.js.map +1 -0
  172. package/dist/daemon-status-report.d.ts +50 -0
  173. package/dist/daemon-status-report.d.ts.map +1 -0
  174. package/dist/daemon-status-report.js +81 -0
  175. package/dist/daemon-status-report.js.map +1 -0
  176. package/dist/daemon.d.ts +45 -0
  177. package/dist/daemon.d.ts.map +1 -0
  178. package/dist/daemon.js +1177 -0
  179. package/dist/daemon.js.map +1 -0
  180. package/dist/db-identity-store.d.ts +159 -0
  181. package/dist/db-identity-store.d.ts.map +1 -0
  182. package/dist/db-identity-store.js +502 -0
  183. package/dist/db-identity-store.js.map +1 -0
  184. package/dist/delivery-open-registry.d.ts +92 -0
  185. package/dist/delivery-open-registry.d.ts.map +1 -0
  186. package/dist/delivery-open-registry.js +121 -0
  187. package/dist/delivery-open-registry.js.map +1 -0
  188. package/dist/delivery-session-suspects.d.ts +56 -0
  189. package/dist/delivery-session-suspects.d.ts.map +1 -0
  190. package/dist/delivery-session-suspects.js +94 -0
  191. package/dist/delivery-session-suspects.js.map +1 -0
  192. package/dist/directory-auth-posture.d.ts +87 -0
  193. package/dist/directory-auth-posture.d.ts.map +1 -0
  194. package/dist/directory-auth-posture.js +134 -0
  195. package/dist/directory-auth-posture.js.map +1 -0
  196. package/dist/directory-bootstrap.d.ts +310 -0
  197. package/dist/directory-bootstrap.d.ts.map +1 -0
  198. package/dist/directory-bootstrap.js +557 -0
  199. package/dist/directory-bootstrap.js.map +1 -0
  200. package/dist/directory-connect.d.ts +27 -0
  201. package/dist/directory-connect.d.ts.map +1 -0
  202. package/dist/directory-connect.js +106 -0
  203. package/dist/directory-connect.js.map +1 -0
  204. package/dist/disconnect-cleanup.d.ts +51 -0
  205. package/dist/disconnect-cleanup.d.ts.map +1 -0
  206. package/dist/disconnect-cleanup.js +72 -0
  207. package/dist/disconnect-cleanup.js.map +1 -0
  208. package/dist/document-amendment-store.d.ts +120 -0
  209. package/dist/document-amendment-store.d.ts.map +1 -0
  210. package/dist/document-amendment-store.js +266 -0
  211. package/dist/document-amendment-store.js.map +1 -0
  212. package/dist/document-delivery-transport.d.ts +168 -0
  213. package/dist/document-delivery-transport.d.ts.map +1 -0
  214. package/dist/document-delivery-transport.js +206 -0
  215. package/dist/document-delivery-transport.js.map +1 -0
  216. package/dist/document-engine.d.ts +134 -0
  217. package/dist/document-engine.d.ts.map +1 -0
  218. package/dist/document-engine.js +282 -0
  219. package/dist/document-engine.js.map +1 -0
  220. package/dist/document-flag.d.ts +58 -0
  221. package/dist/document-flag.d.ts.map +1 -0
  222. package/dist/document-flag.js +70 -0
  223. package/dist/document-flag.js.map +1 -0
  224. package/dist/document-frame-router.d.ts +245 -0
  225. package/dist/document-frame-router.d.ts.map +1 -0
  226. package/dist/document-frame-router.js +397 -0
  227. package/dist/document-frame-router.js.map +1 -0
  228. package/dist/document-gate-wiring.d.ts +61 -0
  229. package/dist/document-gate-wiring.d.ts.map +1 -0
  230. package/dist/document-gate-wiring.js +125 -0
  231. package/dist/document-gate-wiring.js.map +1 -0
  232. package/dist/document-gate.d.ts +149 -0
  233. package/dist/document-gate.d.ts.map +1 -0
  234. package/dist/document-gate.js +509 -0
  235. package/dist/document-gate.js.map +1 -0
  236. package/dist/document-handlers.d.ts +47 -0
  237. package/dist/document-handlers.d.ts.map +1 -0
  238. package/dist/document-handlers.js +2203 -0
  239. package/dist/document-handlers.js.map +1 -0
  240. package/dist/document-handshake.d.ts +176 -0
  241. package/dist/document-handshake.d.ts.map +1 -0
  242. package/dist/document-handshake.js +452 -0
  243. package/dist/document-handshake.js.map +1 -0
  244. package/dist/document-inbound.d.ts +162 -0
  245. package/dist/document-inbound.d.ts.map +1 -0
  246. package/dist/document-inbound.js +530 -0
  247. package/dist/document-inbound.js.map +1 -0
  248. package/dist/document-json.d.ts +120 -0
  249. package/dist/document-json.d.ts.map +1 -0
  250. package/dist/document-json.js +191 -0
  251. package/dist/document-json.js.map +1 -0
  252. package/dist/document-layer.d.ts +215 -0
  253. package/dist/document-layer.d.ts.map +1 -0
  254. package/dist/document-layer.js +1025 -0
  255. package/dist/document-layer.js.map +1 -0
  256. package/dist/document-lifecycle.d.ts +52 -0
  257. package/dist/document-lifecycle.d.ts.map +1 -0
  258. package/dist/document-lifecycle.js +134 -0
  259. package/dist/document-lifecycle.js.map +1 -0
  260. package/dist/document-live-docs.d.ts +58 -0
  261. package/dist/document-live-docs.d.ts.map +1 -0
  262. package/dist/document-live-docs.js +126 -0
  263. package/dist/document-live-docs.js.map +1 -0
  264. package/dist/document-notify.d.ts +228 -0
  265. package/dist/document-notify.d.ts.map +1 -0
  266. package/dist/document-notify.js +580 -0
  267. package/dist/document-notify.js.map +1 -0
  268. package/dist/document-profile.d.ts +61 -0
  269. package/dist/document-profile.d.ts.map +1 -0
  270. package/dist/document-profile.js +112 -0
  271. package/dist/document-profile.js.map +1 -0
  272. package/dist/document-publish.d.ts +87 -0
  273. package/dist/document-publish.d.ts.map +1 -0
  274. package/dist/document-publish.js +173 -0
  275. package/dist/document-publish.js.map +1 -0
  276. package/dist/document-reachability.d.ts +42 -0
  277. package/dist/document-reachability.d.ts.map +1 -0
  278. package/dist/document-reachability.js +80 -0
  279. package/dist/document-reachability.js.map +1 -0
  280. package/dist/document-reconcile-engine.d.ts +66 -0
  281. package/dist/document-reconcile-engine.d.ts.map +1 -0
  282. package/dist/document-reconcile-engine.js +225 -0
  283. package/dist/document-reconcile-engine.js.map +1 -0
  284. package/dist/document-reconcile-scheduler.d.ts +163 -0
  285. package/dist/document-reconcile-scheduler.d.ts.map +1 -0
  286. package/dist/document-reconcile-scheduler.js +303 -0
  287. package/dist/document-reconcile-scheduler.js.map +1 -0
  288. package/dist/document-rejection.d.ts +251 -0
  289. package/dist/document-rejection.d.ts.map +1 -0
  290. package/dist/document-rejection.js +435 -0
  291. package/dist/document-rejection.js.map +1 -0
  292. package/dist/document-screen.d.ts +114 -0
  293. package/dist/document-screen.d.ts.map +1 -0
  294. package/dist/document-screen.js +223 -0
  295. package/dist/document-screen.js.map +1 -0
  296. package/dist/document-store.d.ts +372 -0
  297. package/dist/document-store.d.ts.map +1 -0
  298. package/dist/document-store.js +931 -0
  299. package/dist/document-store.js.map +1 -0
  300. package/dist/document-surface.d.ts +32 -0
  301. package/dist/document-surface.d.ts.map +1 -0
  302. package/dist/document-surface.js +151 -0
  303. package/dist/document-surface.js.map +1 -0
  304. package/dist/document-types.d.ts +94 -0
  305. package/dist/document-types.d.ts.map +1 -0
  306. package/dist/document-types.js +90 -0
  307. package/dist/document-types.js.map +1 -0
  308. package/dist/document-watch.d.ts +69 -0
  309. package/dist/document-watch.d.ts.map +1 -0
  310. package/dist/document-watch.js +108 -0
  311. package/dist/document-watch.js.map +1 -0
  312. package/dist/document-wiring.d.ts +53 -0
  313. package/dist/document-wiring.d.ts.map +1 -0
  314. package/dist/document-wiring.js +323 -0
  315. package/dist/document-wiring.js.map +1 -0
  316. package/dist/document-write-guard.d.ts +66 -0
  317. package/dist/document-write-guard.d.ts.map +1 -0
  318. package/dist/document-write-guard.js +98 -0
  319. package/dist/document-write-guard.js.map +1 -0
  320. package/dist/document-write-path.d.ts +94 -0
  321. package/dist/document-write-path.d.ts.map +1 -0
  322. package/dist/document-write-path.js +530 -0
  323. package/dist/document-write-path.js.map +1 -0
  324. package/dist/error-message.d.ts +7 -0
  325. package/dist/error-message.d.ts.map +1 -0
  326. package/dist/error-message.js +19 -0
  327. package/dist/error-message.js.map +1 -0
  328. package/dist/file-manifest-provider.d.ts +37 -0
  329. package/dist/file-manifest-provider.d.ts.map +1 -0
  330. package/dist/file-manifest-provider.js +105 -0
  331. package/dist/file-manifest-provider.js.map +1 -0
  332. package/dist/frame-values.d.ts +3 -0
  333. package/dist/frame-values.d.ts.map +1 -0
  334. package/dist/frame-values.js +84 -0
  335. package/dist/frame-values.js.map +1 -0
  336. package/dist/frontier-mismatch.d.ts +73 -0
  337. package/dist/frontier-mismatch.d.ts.map +1 -0
  338. package/dist/frontier-mismatch.js +89 -0
  339. package/dist/frontier-mismatch.js.map +1 -0
  340. package/dist/gateway-config-handlers.d.ts +26 -0
  341. package/dist/gateway-config-handlers.d.ts.map +1 -0
  342. package/dist/gateway-config-handlers.js +429 -0
  343. package/dist/gateway-config-handlers.js.map +1 -0
  344. package/dist/held-content.d.ts +145 -0
  345. package/dist/held-content.d.ts.map +1 -0
  346. package/dist/held-content.js +389 -0
  347. package/dist/held-content.js.map +1 -0
  348. package/dist/http-manifest-poll.d.ts +67 -0
  349. package/dist/http-manifest-poll.d.ts.map +1 -0
  350. package/dist/http-manifest-poll.js +150 -0
  351. package/dist/http-manifest-poll.js.map +1 -0
  352. package/dist/identity-migration.d.ts +40 -0
  353. package/dist/identity-migration.d.ts.map +1 -0
  354. package/dist/identity-migration.js +461 -0
  355. package/dist/identity-migration.js.map +1 -0
  356. package/dist/inbound-refusals.d.ts +283 -0
  357. package/dist/inbound-refusals.d.ts.map +1 -0
  358. package/dist/inbound-refusals.js +919 -0
  359. package/dist/inbound-refusals.js.map +1 -0
  360. package/dist/inbound-seal-request.d.ts +32 -0
  361. package/dist/inbound-seal-request.d.ts.map +1 -0
  362. package/dist/inbound-seal-request.js +228 -0
  363. package/dist/inbound-seal-request.js.map +1 -0
  364. package/dist/inbound-sessions.d.ts +291 -0
  365. package/dist/inbound-sessions.d.ts.map +1 -0
  366. package/dist/inbound-sessions.js +1609 -0
  367. package/dist/inbound-sessions.js.map +1 -0
  368. package/dist/inclusion-proof-handlers.d.ts +43 -0
  369. package/dist/inclusion-proof-handlers.d.ts.map +1 -0
  370. package/dist/inclusion-proof-handlers.js +565 -0
  371. package/dist/inclusion-proof-handlers.js.map +1 -0
  372. package/dist/inclusion-proof.d.ts +151 -0
  373. package/dist/inclusion-proof.d.ts.map +1 -0
  374. package/dist/inclusion-proof.js +228 -0
  375. package/dist/inclusion-proof.js.map +1 -0
  376. package/dist/index.d.ts +32 -0
  377. package/dist/index.d.ts.map +1 -0
  378. package/dist/index.js.map +1 -0
  379. package/dist/initiate-session-handler.d.ts +55 -0
  380. package/dist/initiate-session-handler.d.ts.map +1 -0
  381. package/dist/initiate-session-handler.js +310 -0
  382. package/dist/initiate-session-handler.js.map +1 -0
  383. package/dist/ipc-client.d.ts +31 -0
  384. package/dist/ipc-client.d.ts.map +1 -0
  385. package/dist/ipc-client.js +113 -0
  386. package/dist/ipc-client.js.map +1 -0
  387. package/dist/ipc-server.d.ts +63 -0
  388. package/dist/ipc-server.d.ts.map +1 -0
  389. package/dist/ipc-server.js +429 -0
  390. package/dist/ipc-server.js.map +1 -0
  391. package/dist/ipc-surface.d.ts +44 -0
  392. package/dist/ipc-surface.d.ts.map +1 -0
  393. package/dist/ipc-surface.js +107 -0
  394. package/dist/ipc-surface.js.map +1 -0
  395. package/dist/line-lcs.d.ts +51 -0
  396. package/dist/line-lcs.d.ts.map +1 -0
  397. package/dist/line-lcs.js +71 -0
  398. package/dist/line-lcs.js.map +1 -0
  399. package/dist/lock-file.d.ts +39 -0
  400. package/dist/lock-file.d.ts.map +1 -0
  401. package/dist/lock-file.js +120 -0
  402. package/dist/lock-file.js.map +1 -0
  403. package/dist/log-collapse.d.ts +66 -0
  404. package/dist/log-collapse.d.ts.map +1 -0
  405. package/dist/log-collapse.js +244 -0
  406. package/dist/log-collapse.js.map +1 -0
  407. package/dist/log-rotate.d.ts +67 -0
  408. package/dist/log-rotate.d.ts.map +1 -0
  409. package/dist/log-rotate.js +134 -0
  410. package/dist/log-rotate.js.map +1 -0
  411. package/dist/manifest-deps.d.ts +25 -0
  412. package/dist/manifest-deps.d.ts.map +1 -0
  413. package/dist/manifest-deps.js +151 -0
  414. package/dist/manifest-deps.js.map +1 -0
  415. package/dist/manifest-poll-scheduler.d.ts +31 -0
  416. package/dist/manifest-poll-scheduler.d.ts.map +1 -0
  417. package/dist/manifest-poll-scheduler.js +59 -0
  418. package/dist/manifest-poll-scheduler.js.map +1 -0
  419. package/dist/manifest-validity.d.ts +153 -0
  420. package/dist/manifest-validity.d.ts.map +1 -0
  421. package/dist/manifest-validity.js +268 -0
  422. package/dist/manifest-validity.js.map +1 -0
  423. package/dist/manifest-version-store-db.d.ts +24 -0
  424. package/dist/manifest-version-store-db.d.ts.map +1 -0
  425. package/dist/manifest-version-store-db.js +58 -0
  426. package/dist/manifest-version-store-db.js.map +1 -0
  427. package/dist/manifest-version-store.d.ts +16 -0
  428. package/dist/manifest-version-store.d.ts.map +1 -0
  429. package/dist/manifest-version-store.js +15 -0
  430. package/dist/manifest-version-store.js.map +1 -0
  431. package/dist/network-directory-node.d.ts +136 -0
  432. package/dist/network-directory-node.d.ts.map +1 -0
  433. package/dist/network-directory-node.js +810 -0
  434. package/dist/network-directory-node.js.map +1 -0
  435. package/dist/nonce-dedup.d.ts +68 -0
  436. package/dist/nonce-dedup.d.ts.map +1 -0
  437. package/dist/nonce-dedup.js +205 -0
  438. package/dist/nonce-dedup.js.map +1 -0
  439. package/dist/notification-dispatcher.d.ts +92 -0
  440. package/dist/notification-dispatcher.d.ts.map +1 -0
  441. package/dist/notification-dispatcher.js +210 -0
  442. package/dist/notification-dispatcher.js.map +1 -0
  443. package/dist/notification-handlers.d.ts +53 -0
  444. package/dist/notification-handlers.d.ts.map +1 -0
  445. package/dist/notification-handlers.js +461 -0
  446. package/dist/notification-handlers.js.map +1 -0
  447. package/dist/onboarding-guidance.d.ts +79 -0
  448. package/dist/onboarding-guidance.d.ts.map +1 -0
  449. package/dist/onboarding-guidance.js +95 -0
  450. package/dist/onboarding-guidance.js.map +1 -0
  451. package/dist/operator-guidance.d.ts +25 -0
  452. package/dist/operator-guidance.d.ts.map +1 -0
  453. package/dist/operator-guidance.js +50 -0
  454. package/dist/operator-guidance.js.map +1 -0
  455. package/dist/orphan-triage.d.ts +130 -0
  456. package/dist/orphan-triage.d.ts.map +1 -0
  457. package/dist/orphan-triage.js +207 -0
  458. package/dist/orphan-triage.js.map +1 -0
  459. package/dist/outbound-sessions.d.ts +126 -0
  460. package/dist/outbound-sessions.d.ts.map +1 -0
  461. package/dist/outbound-sessions.js +1052 -0
  462. package/dist/outbound-sessions.js.map +1 -0
  463. package/dist/park-envelope.d.ts +329 -0
  464. package/dist/park-envelope.d.ts.map +1 -0
  465. package/dist/park-envelope.js +509 -0
  466. package/dist/park-envelope.js.map +1 -0
  467. package/dist/park-recovery.d.ts +273 -0
  468. package/dist/park-recovery.d.ts.map +1 -0
  469. package/dist/park-recovery.js +717 -0
  470. package/dist/park-recovery.js.map +1 -0
  471. package/dist/park-refusals.d.ts +147 -0
  472. package/dist/park-refusals.d.ts.map +1 -0
  473. package/dist/park-refusals.js +331 -0
  474. package/dist/park-refusals.js.map +1 -0
  475. package/dist/quarantine-framing.d.ts +92 -0
  476. package/dist/quarantine-framing.d.ts.map +1 -0
  477. package/dist/quarantine-framing.js +111 -0
  478. package/dist/quarantine-framing.js.map +1 -0
  479. package/dist/reconnect-drain.d.ts +22 -0
  480. package/dist/reconnect-drain.d.ts.map +1 -0
  481. package/dist/reconnect-drain.js +65 -0
  482. package/dist/reconnect-drain.js.map +1 -0
  483. package/dist/recovered-position.d.ts +14 -0
  484. package/dist/recovered-position.d.ts.map +1 -0
  485. package/dist/recovered-position.js +59 -0
  486. package/dist/recovered-position.js.map +1 -0
  487. package/dist/refusal-notices.d.ts +196 -0
  488. package/dist/refusal-notices.d.ts.map +1 -0
  489. package/dist/refusal-notices.js +516 -0
  490. package/dist/refusal-notices.js.map +1 -0
  491. package/dist/refusal-reasons.d.ts +245 -0
  492. package/dist/refusal-reasons.d.ts.map +1 -0
  493. package/dist/refusal-reasons.js +363 -0
  494. package/dist/refusal-reasons.js.map +1 -0
  495. package/dist/register-handler.d.ts +36 -0
  496. package/dist/register-handler.d.ts.map +1 -0
  497. package/dist/register-handler.js +285 -0
  498. package/dist/register-handler.js.map +1 -0
  499. package/dist/registration-context.d.ts +72 -0
  500. package/dist/registration-context.d.ts.map +1 -0
  501. package/dist/registration-context.js +126 -0
  502. package/dist/registration-context.js.map +1 -0
  503. package/dist/registration-manager.d.ts +94 -0
  504. package/dist/registration-manager.d.ts.map +1 -0
  505. package/dist/registration-manager.js +585 -0
  506. package/dist/registration-manager.js.map +1 -0
  507. package/dist/registration-persistence.d.ts +183 -0
  508. package/dist/registration-persistence.d.ts.map +1 -0
  509. package/dist/registration-persistence.js +263 -0
  510. package/dist/registration-persistence.js.map +1 -0
  511. package/dist/registry-poll.d.ts +52 -0
  512. package/dist/registry-poll.d.ts.map +1 -0
  513. package/dist/registry-poll.js +140 -0
  514. package/dist/registry-poll.js.map +1 -0
  515. package/dist/registry-version-store-db.d.ts +22 -0
  516. package/dist/registry-version-store-db.d.ts.map +1 -0
  517. package/dist/registry-version-store-db.js +50 -0
  518. package/dist/registry-version-store-db.js.map +1 -0
  519. package/dist/relay-endpoints.d.ts +18 -0
  520. package/dist/relay-endpoints.d.ts.map +1 -0
  521. package/dist/relay-endpoints.js +9 -0
  522. package/dist/relay-endpoints.js.map +1 -0
  523. package/dist/relay-only.d.ts +140 -0
  524. package/dist/relay-only.d.ts.map +1 -0
  525. package/dist/relay-only.js +193 -0
  526. package/dist/relay-only.js.map +1 -0
  527. package/dist/relay-receipt-store.d.ts +155 -0
  528. package/dist/relay-receipt-store.d.ts.map +1 -0
  529. package/dist/relay-receipt-store.js +284 -0
  530. package/dist/relay-receipt-store.js.map +1 -0
  531. package/dist/relay-reconnect.d.ts +32 -0
  532. package/dist/relay-reconnect.d.ts.map +1 -0
  533. package/dist/relay-reconnect.js +29 -0
  534. package/dist/relay-reconnect.js.map +1 -0
  535. package/dist/reply-lag.d.ts +11 -0
  536. package/dist/reply-lag.d.ts.map +1 -0
  537. package/dist/reply-lag.js +46 -0
  538. package/dist/reply-lag.js.map +1 -0
  539. package/dist/resolve-named-agent.d.ts +49 -0
  540. package/dist/resolve-named-agent.d.ts.map +1 -0
  541. package/dist/resolve-named-agent.js +77 -0
  542. package/dist/resolve-named-agent.js.map +1 -0
  543. package/dist/restart-seal-resolver.d.ts +110 -0
  544. package/dist/restart-seal-resolver.d.ts.map +1 -0
  545. package/dist/restart-seal-resolver.js +353 -0
  546. package/dist/restart-seal-resolver.js.map +1 -0
  547. package/dist/resume-last-seen.d.ts +15 -0
  548. package/dist/resume-last-seen.d.ts.map +1 -0
  549. package/dist/resume-last-seen.js +44 -0
  550. package/dist/resume-last-seen.js.map +1 -0
  551. package/dist/retry-queue.d.ts +203 -0
  552. package/dist/retry-queue.d.ts.map +1 -0
  553. package/dist/retry-queue.js +701 -0
  554. package/dist/retry-queue.js.map +1 -0
  555. package/dist/roster-freshness.d.ts +160 -0
  556. package/dist/roster-freshness.d.ts.map +1 -0
  557. package/dist/roster-freshness.js +250 -0
  558. package/dist/roster-freshness.js.map +1 -0
  559. package/dist/screening-status.d.ts +15 -0
  560. package/dist/screening-status.d.ts.map +1 -0
  561. package/dist/screening-status.js +65 -0
  562. package/dist/screening-status.js.map +1 -0
  563. package/dist/seal-carried-close.d.ts +37 -0
  564. package/dist/seal-carried-close.d.ts.map +1 -0
  565. package/dist/seal-carried-close.js +179 -0
  566. package/dist/seal-carried-close.js.map +1 -0
  567. package/dist/seal-certificate-pull.d.ts +79 -0
  568. package/dist/seal-certificate-pull.d.ts.map +1 -0
  569. package/dist/seal-certificate-pull.js +186 -0
  570. package/dist/seal-certificate-pull.js.map +1 -0
  571. package/dist/seal-certified-root-check.d.ts +37 -0
  572. package/dist/seal-certified-root-check.d.ts.map +1 -0
  573. package/dist/seal-certified-root-check.js +127 -0
  574. package/dist/seal-certified-root-check.js.map +1 -0
  575. package/dist/seal-coordinator.d.ts +118 -0
  576. package/dist/seal-coordinator.d.ts.map +1 -0
  577. package/dist/seal-coordinator.js +927 -0
  578. package/dist/seal-coordinator.js.map +1 -0
  579. package/dist/seal-escalation.d.ts +80 -0
  580. package/dist/seal-escalation.d.ts.map +1 -0
  581. package/dist/seal-escalation.js +283 -0
  582. package/dist/seal-escalation.js.map +1 -0
  583. package/dist/seal-evidence-root-check.d.ts +70 -0
  584. package/dist/seal-evidence-root-check.d.ts.map +1 -0
  585. package/dist/seal-evidence-root-check.js +199 -0
  586. package/dist/seal-evidence-root-check.js.map +1 -0
  587. package/dist/seal-failure-store.d.ts +139 -0
  588. package/dist/seal-failure-store.d.ts.map +1 -0
  589. package/dist/seal-failure-store.js +207 -0
  590. package/dist/seal-failure-store.js.map +1 -0
  591. package/dist/seal-flows.d.ts +107 -0
  592. package/dist/seal-flows.d.ts.map +1 -0
  593. package/dist/seal-flows.js +638 -0
  594. package/dist/seal-flows.js.map +1 -0
  595. package/dist/seal-frontier-verify.d.ts +103 -0
  596. package/dist/seal-frontier-verify.d.ts.map +1 -0
  597. package/dist/seal-frontier-verify.js +143 -0
  598. package/dist/seal-frontier-verify.js.map +1 -0
  599. package/dist/seal-leaf.d.ts +58 -0
  600. package/dist/seal-leaf.d.ts.map +1 -0
  601. package/dist/seal-leaf.js +112 -0
  602. package/dist/seal-leaf.js.map +1 -0
  603. package/dist/seal-legibility-tbs.d.ts +25 -0
  604. package/dist/seal-legibility-tbs.d.ts.map +1 -0
  605. package/dist/seal-legibility-tbs.js +77 -0
  606. package/dist/seal-legibility-tbs.js.map +1 -0
  607. package/dist/seal-local-terminus.d.ts +41 -0
  608. package/dist/seal-local-terminus.d.ts.map +1 -0
  609. package/dist/seal-local-terminus.js +170 -0
  610. package/dist/seal-local-terminus.js.map +1 -0
  611. package/dist/seal-receipt-upgrade.d.ts +30 -0
  612. package/dist/seal-receipt-upgrade.d.ts.map +1 -0
  613. package/dist/seal-receipt-upgrade.js +49 -0
  614. package/dist/seal-receipt-upgrade.js.map +1 -0
  615. package/dist/seal-relay-silence.d.ts +51 -0
  616. package/dist/seal-relay-silence.d.ts.map +1 -0
  617. package/dist/seal-relay-silence.js +76 -0
  618. package/dist/seal-relay-silence.js.map +1 -0
  619. package/dist/seal-settle.d.ts +38 -0
  620. package/dist/seal-settle.d.ts.map +1 -0
  621. package/dist/seal-settle.js +33 -0
  622. package/dist/seal-settle.js.map +1 -0
  623. package/dist/seal-upgrade.d.ts +107 -0
  624. package/dist/seal-upgrade.d.ts.map +1 -0
  625. package/dist/seal-upgrade.js +200 -0
  626. package/dist/seal-upgrade.js.map +1 -0
  627. package/dist/sealed-conversation.d.ts +36 -0
  628. package/dist/sealed-conversation.d.ts.map +1 -0
  629. package/dist/sealed-conversation.js +171 -0
  630. package/dist/sealed-conversation.js.map +1 -0
  631. package/dist/sealed-leaf-set.d.ts +92 -0
  632. package/dist/sealed-leaf-set.d.ts.map +1 -0
  633. package/dist/sealed-leaf-set.js +122 -0
  634. package/dist/sealed-leaf-set.js.map +1 -0
  635. package/dist/send-claims.d.ts +56 -0
  636. package/dist/send-claims.d.ts.map +1 -0
  637. package/dist/send-claims.js +50 -0
  638. package/dist/send-claims.js.map +1 -0
  639. package/dist/session-assignment-parser.d.ts +104 -0
  640. package/dist/session-assignment-parser.d.ts.map +1 -0
  641. package/dist/session-assignment-parser.js +345 -0
  642. package/dist/session-assignment-parser.js.map +1 -0
  643. package/dist/session-category.d.ts +19 -0
  644. package/dist/session-category.d.ts.map +1 -0
  645. package/dist/session-category.js +14 -0
  646. package/dist/session-category.js.map +1 -0
  647. package/dist/session-ceremony.d.ts +297 -0
  648. package/dist/session-ceremony.d.ts.map +1 -0
  649. package/dist/session-ceremony.js +964 -0
  650. package/dist/session-ceremony.js.map +1 -0
  651. package/dist/session-closed.d.ts +79 -0
  652. package/dist/session-closed.d.ts.map +1 -0
  653. package/dist/session-closed.js +189 -0
  654. package/dist/session-closed.js.map +1 -0
  655. package/dist/session-connection-gater.d.ts +148 -0
  656. package/dist/session-connection-gater.d.ts.map +1 -0
  657. package/dist/session-connection-gater.js +332 -0
  658. package/dist/session-connection-gater.js.map +1 -0
  659. package/dist/session-content-context.d.ts +162 -0
  660. package/dist/session-content-context.d.ts.map +1 -0
  661. package/dist/session-content-context.js +2 -0
  662. package/dist/session-content-context.js.map +1 -0
  663. package/dist/session-content-handlers.d.ts +82 -0
  664. package/dist/session-content-handlers.d.ts.map +1 -0
  665. package/dist/session-content-handlers.js +1382 -0
  666. package/dist/session-content-handlers.js.map +1 -0
  667. package/dist/session-content-ingest.d.ts +206 -0
  668. package/dist/session-content-ingest.d.ts.map +1 -0
  669. package/dist/session-content-ingest.js +2167 -0
  670. package/dist/session-content-ingest.js.map +1 -0
  671. package/dist/session-content-send.d.ts +191 -0
  672. package/dist/session-content-send.d.ts.map +1 -0
  673. package/dist/session-content-send.js +1360 -0
  674. package/dist/session-content-send.js.map +1 -0
  675. package/dist/session-delivery-acks.d.ts +169 -0
  676. package/dist/session-delivery-acks.d.ts.map +1 -0
  677. package/dist/session-delivery-acks.js +569 -0
  678. package/dist/session-delivery-acks.js.map +1 -0
  679. package/dist/session-ephemerals.d.ts +279 -0
  680. package/dist/session-ephemerals.d.ts.map +1 -0
  681. package/dist/session-ephemerals.js +591 -0
  682. package/dist/session-ephemerals.js.map +1 -0
  683. package/dist/session-leaf-records.d.ts +159 -0
  684. package/dist/session-leaf-records.d.ts.map +1 -0
  685. package/dist/session-leaf-records.js +408 -0
  686. package/dist/session-leaf-records.js.map +1 -0
  687. package/dist/session-lifecycle.d.ts +303 -0
  688. package/dist/session-lifecycle.d.ts.map +1 -0
  689. package/dist/session-lifecycle.js +1679 -0
  690. package/dist/session-lifecycle.js.map +1 -0
  691. package/dist/session-liveness.d.ts +135 -0
  692. package/dist/session-liveness.d.ts.map +1 -0
  693. package/dist/session-liveness.js +347 -0
  694. package/dist/session-liveness.js.map +1 -0
  695. package/dist/session-name.d.ts +35 -0
  696. package/dist/session-name.d.ts.map +1 -0
  697. package/dist/session-name.js +60 -0
  698. package/dist/session-name.js.map +1 -0
  699. package/dist/session-node-factory.d.ts +18 -0
  700. package/dist/session-node-factory.d.ts.map +1 -0
  701. package/dist/session-node-factory.js +182 -0
  702. package/dist/session-node-factory.js.map +1 -0
  703. package/dist/session-node-manager.d.ts +877 -0
  704. package/dist/session-node-manager.d.ts.map +1 -0
  705. package/dist/session-node-manager.js +2998 -0
  706. package/dist/session-node-manager.js.map +1 -0
  707. package/dist/session-node-types.d.ts +1057 -0
  708. package/dist/session-node-types.d.ts.map +1 -0
  709. package/dist/session-node-types.js +657 -0
  710. package/dist/session-node-types.js.map +1 -0
  711. package/dist/session-notify.d.ts +46 -0
  712. package/dist/session-notify.d.ts.map +1 -0
  713. package/dist/session-notify.js +116 -0
  714. package/dist/session-notify.js.map +1 -0
  715. package/dist/session-own-chain-store.d.ts +65 -0
  716. package/dist/session-own-chain-store.d.ts.map +1 -0
  717. package/dist/session-own-chain-store.js +75 -0
  718. package/dist/session-own-chain-store.js.map +1 -0
  719. package/dist/session-queries.d.ts +476 -0
  720. package/dist/session-queries.d.ts.map +1 -0
  721. package/dist/session-queries.js +1007 -0
  722. package/dist/session-queries.js.map +1 -0
  723. package/dist/session-read-handlers.d.ts +87 -0
  724. package/dist/session-read-handlers.d.ts.map +1 -0
  725. package/dist/session-read-handlers.js +689 -0
  726. package/dist/session-read-handlers.js.map +1 -0
  727. package/dist/session-records.d.ts +341 -0
  728. package/dist/session-records.d.ts.map +1 -0
  729. package/dist/session-records.js +858 -0
  730. package/dist/session-records.js.map +1 -0
  731. package/dist/session-relay-client.d.ts +659 -0
  732. package/dist/session-relay-client.d.ts.map +1 -0
  733. package/dist/session-relay-client.js +2876 -0
  734. package/dist/session-relay-client.js.map +1 -0
  735. package/dist/session-relay.d.ts +397 -0
  736. package/dist/session-relay.d.ts.map +1 -0
  737. package/dist/session-relay.js +1636 -0
  738. package/dist/session-relay.js.map +1 -0
  739. package/dist/session-salt-agreement.d.ts +331 -0
  740. package/dist/session-salt-agreement.d.ts.map +1 -0
  741. package/dist/session-salt-agreement.js +472 -0
  742. package/dist/session-salt-agreement.js.map +1 -0
  743. package/dist/session-salts.d.ts +432 -0
  744. package/dist/session-salts.d.ts.map +1 -0
  745. package/dist/session-salts.js +1540 -0
  746. package/dist/session-salts.js.map +1 -0
  747. package/dist/session-schema.d.ts +30 -0
  748. package/dist/session-schema.d.ts.map +1 -0
  749. package/dist/session-schema.js +877 -0
  750. package/dist/session-schema.js.map +1 -0
  751. package/dist/session-seal-leaf-store.d.ts +70 -0
  752. package/dist/session-seal-leaf-store.d.ts.map +1 -0
  753. package/dist/session-seal-leaf-store.js +105 -0
  754. package/dist/session-seal-leaf-store.js.map +1 -0
  755. package/dist/session-seal.d.ts +334 -0
  756. package/dist/session-seal.d.ts.map +1 -0
  757. package/dist/session-seal.js +1017 -0
  758. package/dist/session-seal.js.map +1 -0
  759. package/dist/session-terminal-refusal.d.ts +65 -0
  760. package/dist/session-terminal-refusal.d.ts.map +1 -0
  761. package/dist/session-terminal-refusal.js +87 -0
  762. package/dist/session-terminal-refusal.js.map +1 -0
  763. package/dist/session-tree.d.ts +110 -0
  764. package/dist/session-tree.d.ts.map +1 -0
  765. package/dist/session-tree.js +144 -0
  766. package/dist/session-tree.js.map +1 -0
  767. package/dist/session-views.d.ts +47 -0
  768. package/dist/session-views.d.ts.map +1 -0
  769. package/dist/session-views.js +278 -0
  770. package/dist/session-views.js.map +1 -0
  771. package/dist/signal-handlers.d.ts +63 -0
  772. package/dist/signal-handlers.d.ts.map +1 -0
  773. package/dist/signal-handlers.js +980 -0
  774. package/dist/signal-handlers.js.map +1 -0
  775. package/dist/signal-requirement-policy.d.ts +51 -0
  776. package/dist/signal-requirement-policy.d.ts.map +1 -0
  777. package/dist/signal-requirement-policy.js +89 -0
  778. package/dist/signal-requirement-policy.js.map +1 -0
  779. package/dist/signal-revocability.d.ts +49 -0
  780. package/dist/signal-revocability.d.ts.map +1 -0
  781. package/dist/signal-revocability.js +93 -0
  782. package/dist/signal-revocability.js.map +1 -0
  783. package/dist/signal-submission.d.ts +181 -0
  784. package/dist/signal-submission.d.ts.map +1 -0
  785. package/dist/signal-submission.js +368 -0
  786. package/dist/signal-submission.js.map +1 -0
  787. package/dist/signaling-connect.d.ts +118 -0
  788. package/dist/signaling-connect.d.ts.map +1 -0
  789. package/dist/signaling-connect.js +538 -0
  790. package/dist/signaling-connect.js.map +1 -0
  791. package/dist/signaling-wiring.d.ts +105 -0
  792. package/dist/signaling-wiring.d.ts.map +1 -0
  793. package/dist/signaling-wiring.js +393 -0
  794. package/dist/signaling-wiring.js.map +1 -0
  795. package/dist/singleton-lock.d.ts +85 -0
  796. package/dist/singleton-lock.d.ts.map +1 -0
  797. package/dist/singleton-lock.js +219 -0
  798. package/dist/singleton-lock.js.map +1 -0
  799. package/dist/sqlcipher-db.d.ts +139 -0
  800. package/dist/sqlcipher-db.d.ts.map +1 -0
  801. package/dist/sqlcipher-db.js +357 -0
  802. package/dist/sqlcipher-db.js.map +1 -0
  803. package/dist/standing-receivers.d.ts +319 -0
  804. package/dist/standing-receivers.d.ts.map +1 -0
  805. package/dist/standing-receivers.js +1295 -0
  806. package/dist/standing-receivers.js.map +1 -0
  807. package/dist/start-agent.d.ts +64 -0
  808. package/dist/start-agent.d.ts.map +1 -0
  809. package/dist/start-agent.js +136 -0
  810. package/dist/start-agent.js.map +1 -0
  811. package/dist/status-handler.d.ts +54 -0
  812. package/dist/status-handler.d.ts.map +1 -0
  813. package/dist/status-handler.js +61 -0
  814. package/dist/status-handler.js.map +1 -0
  815. package/dist/submission-retry.d.ts +208 -0
  816. package/dist/submission-retry.d.ts.map +1 -0
  817. package/dist/submission-retry.js +506 -0
  818. package/dist/submission-retry.js.map +1 -0
  819. package/dist/telegram-bot-client.d.ts +34 -0
  820. package/dist/telegram-bot-client.d.ts.map +1 -0
  821. package/dist/telegram-bot-client.js +36 -0
  822. package/dist/telegram-bot-client.js.map +1 -0
  823. package/dist/telegram-doorbell.d.ts +38 -0
  824. package/dist/telegram-doorbell.d.ts.map +1 -0
  825. package/dist/telegram-doorbell.js +140 -0
  826. package/dist/telegram-doorbell.js.map +1 -0
  827. package/dist/test-handlers.d.ts +62 -0
  828. package/dist/test-handlers.d.ts.map +1 -0
  829. package/dist/test-handlers.js +240 -0
  830. package/dist/test-handlers.js.map +1 -0
  831. package/dist/testing.d.ts +10 -0
  832. package/dist/testing.d.ts.map +1 -0
  833. package/dist/testing.js +10 -0
  834. package/dist/testing.js.map +1 -0
  835. package/dist/transport-composition.d.ts +31 -0
  836. package/dist/transport-composition.d.ts.map +1 -0
  837. package/dist/transport-composition.js +55 -0
  838. package/dist/transport-composition.js.map +1 -0
  839. package/dist/transport-selector.d.ts +202 -0
  840. package/dist/transport-selector.d.ts.map +1 -0
  841. package/dist/transport-selector.js +196 -0
  842. package/dist/transport-selector.js.map +1 -0
  843. package/dist/trust-signal-pickup-listener.d.ts +43 -0
  844. package/dist/trust-signal-pickup-listener.d.ts.map +1 -0
  845. package/dist/trust-signal-pickup-listener.js +48 -0
  846. package/dist/trust-signal-pickup-listener.js.map +1 -0
  847. package/dist/trust-signal-store.d.ts +406 -0
  848. package/dist/trust-signal-store.d.ts.map +1 -0
  849. package/dist/trust-signal-store.js +939 -0
  850. package/dist/trust-signal-store.js.map +1 -0
  851. package/dist/trust-signal-sweep-tick.d.ts +60 -0
  852. package/dist/trust-signal-sweep-tick.d.ts.map +1 -0
  853. package/dist/trust-signal-sweep-tick.js +101 -0
  854. package/dist/trust-signal-sweep-tick.js.map +1 -0
  855. package/dist/trust-signal-sweep.d.ts +94 -0
  856. package/dist/trust-signal-sweep.d.ts.map +1 -0
  857. package/dist/trust-signal-sweep.js +147 -0
  858. package/dist/trust-signal-sweep.js.map +1 -0
  859. package/dist/type-registry.d.ts +42 -0
  860. package/dist/type-registry.d.ts.map +1 -0
  861. package/dist/type-registry.js +37 -0
  862. package/dist/type-registry.js.map +1 -0
  863. package/dist/types.d.ts +746 -0
  864. package/dist/types.d.ts.map +1 -0
  865. package/dist/types.js +20 -0
  866. package/dist/types.js.map +1 -0
  867. package/dist/unresolved-nodes-report.d.ts +14 -0
  868. package/dist/unresolved-nodes-report.d.ts.map +1 -0
  869. package/dist/unresolved-nodes-report.js +96 -0
  870. package/dist/unresolved-nodes-report.js.map +1 -0
  871. package/dist/vocabulary.d.ts +150 -0
  872. package/dist/vocabulary.d.ts.map +1 -0
  873. package/dist/vocabulary.js +386 -0
  874. package/dist/vocabulary.js.map +1 -0
  875. package/dist/who-label.d.ts +28 -0
  876. package/dist/who-label.d.ts.map +1 -0
  877. package/dist/who-label.js +31 -0
  878. package/dist/who-label.js.map +1 -0
  879. package/dist/who-resolver.d.ts +15 -0
  880. package/dist/who-resolver.d.ts.map +1 -0
  881. package/dist/who-resolver.js +47 -0
  882. package/dist/who-resolver.js.map +1 -0
  883. package/dist/wire-content-hash.d.ts +93 -0
  884. package/dist/wire-content-hash.d.ts.map +1 -0
  885. package/dist/wire-content-hash.js +116 -0
  886. package/dist/wire-content-hash.js.map +1 -0
  887. package/dist/withheld-content.d.ts +13 -0
  888. package/dist/withheld-content.d.ts.map +1 -0
  889. package/dist/withheld-content.js +46 -0
  890. package/dist/withheld-content.js.map +1 -0
  891. package/dist/witness-alerts.d.ts +40 -0
  892. package/dist/witness-alerts.d.ts.map +1 -0
  893. package/dist/witness-alerts.js +102 -0
  894. package/dist/witness-alerts.js.map +1 -0
  895. package/package.json +5 -5
@@ -0,0 +1,106 @@
1
+ /**
2
+ * How this daemon reaches a directory, and what it tells a relay about itself when it gets there.
3
+ *
4
+ * The relay-witness connect parameters — who is asking, over which circuit, with which online token
5
+ * — and the default signaling connect that carries them. Also the single shared signaling manager,
6
+ * which exists ONLY on the in-process test path: in production every agent dials its own, because
7
+ * the directory routes by the pubkey that authenticated the stream.
8
+ */
9
+ import { SignalingManager } from "@cello-protocol/transport";
10
+ export function createDirectoryConnect(deps) {
11
+ const { logger, keyProviders, signalingConnect, directoryEndpointResolver } = deps;
12
+ // M7 DOD-SPINE-6 / MSG-001-3b: assemble the relay-witness connect params for a
13
+ // session node from the FROST-signed assignment (relay endpoint + 16-byte session id)
14
+ // and the acting agent's K_local. Returns undefined when the agent key or relay
15
+ // endpoint is missing — the session then runs on the direct content path without a
16
+ // relay witness (degraded, never blocked).
17
+ const buildRelayConnectParams = async (agentName, assignment) => {
18
+ const kp = keyProviders.get(agentName);
19
+ const endpoint = assignment.relay_endpoint;
20
+ if (!kp || !endpoint || !endpoint.peer_id || !endpoint.multiaddrs || endpoint.multiaddrs.length === 0) {
21
+ return undefined;
22
+ }
23
+ // FED-OPTIONB-SETUP-001 (Option B): when the directory included the per-node relay-assignment
24
+ // signature, carry the assignment so the client presents it to its chosen relay (replacing the
25
+ // directory→relay dial). Built only for relay-mode assignments that carry relay_directory_signature;
26
+ // absent ⇒ the client skips client_record_assignment (direct/legacy/pre-M8B).
27
+ const relayDirSig = assignment.relay_directory_signature;
28
+ // FED-OPTIONB-SETUP-001 (fallback-finder #1/#5): a relay-mode assignment MUST carry a
29
+ // relay_directory_signature — the directory always signs one. If it is absent or malformed (the
30
+ // parser dropped it to undefined) for a relay-mode session, the session silently degrades to "no
31
+ // relay witness" and looks indistinguishable from a legitimate direct-mode session. Warn LOUD so the
32
+ // missing/corrupt witness has a named cause (this is the only diagnosable signal on a PURE RECEIVER,
33
+ // which never submits and so never surfaces relay_unavailable). Unwitnessed is an allowed sovereign-
34
+ // redundancy state, but it must not be invisible.
35
+ if (assignment.transport_mode === "relay" && !relayDirSig) {
36
+ logger.warn("session.relay.assignment.signature.missing", {
37
+ agentName,
38
+ sessionId: Buffer.from(assignment.session_id).toString("hex").slice(0, 16),
39
+ reason: "relay_mode_assignment_without_directory_signature",
40
+ });
41
+ }
42
+ /**
43
+ * 069-ORDERPROOF: the carry now exists for EITHER of two independent reasons — something to
44
+ * present to the relay, or the name of the relay whose ordering attestations this session will
45
+ * accept. Requiring both would mean a session that knows its relay but has no per-node
46
+ * signature verifies nothing at all, which hands the relay a way to opt out of being checked.
47
+ */
48
+ const relayAnchorHex = assignment.relay_id && /^[0-9a-f]{64}$/i.test(assignment.relay_id) ? assignment.relay_id : undefined;
49
+ const carry = relayDirSig || relayAnchorHex
50
+ ? {
51
+ participantA: assignment.participant_a.pubkey,
52
+ participantB: assignment.participant_b.pubkey,
53
+ sessionTimestamp: assignment.session_timestamp, sessionSignature: assignment.directory_signature,
54
+ initiatorSessionPeerId: assignment.initiator_session_peer_id,
55
+ counterpartySessionPeerId: assignment.counterparty_session_peer_id,
56
+ ...(relayDirSig ? { assignmentSignature: relayDirSig } : {}),
57
+ ...(relayAnchorHex ? { relayPubkeyHex: relayAnchorHex } : {}),
58
+ }
59
+ : undefined;
60
+ return {
61
+ relayPeerId: endpoint.peer_id,
62
+ relayAddrs: endpoint.multiaddrs,
63
+ keyProvider: kp,
64
+ senderPubkey: await kp.getPublicKey(),
65
+ sessionIdBytes: assignment.session_id,
66
+ assignment: carry,
67
+ };
68
+ };
69
+ // M7-SIGNAL-001: Instantiate SignalingManager — owns directory signaling stream lifecycle.
70
+ const defaultConnect = async () => {
71
+ throw new Error("directory_signaling_not_configured");
72
+ };
73
+ // CELLO-M7-CONN-001 (DOD-CONN-1): the keystone is DELETED. There is no shared directory
74
+ // connection borrowing the "primary" agent's identity. In PRODUCTION every agent operates its
75
+ // OWN directory signaling connection authenticated as itself (getAgentSignaling / signalingFor);
76
+ // removing any agent tears down only that agent's own connection, so the daemon never holds a
77
+ // connection authenticated as a removed agent (the Demo1 stranding bug). A single SHARED manager
78
+ // exists ONLY for the IN-PROCESS TEST path (NOT back-compat — there is no old client, and Rule F deletes back-compat on sight) (a single injected signalingConnect,
79
+ // no per-agent isolation) — in production it is undefined.
80
+ //
81
+ // The SHARED (in-process test / pre-resolver) signaling path has no directory-facing node of its
82
+ // own: nodes are per-agent, published by each agent's manager (getAgentSignaling → `nodeRef`).
83
+ // There is nothing to return here, and saying so explicitly is the point.
84
+ //
85
+ // Consequence, and it is load-bearing: session-ceremony's hydrateShareAndStubs leaves
86
+ // `directoryNodeStubs` UNDEFINED when getNode() is null, so FrostThresholdSigner runs with an
87
+ // EMPTY set of counterparties and its pre-check (reachable < threshold-1) REFUSES. That is the
88
+ // sovereign-node invariant holding — a daemon with no directory nodes must never sign alone. Do
89
+ // NOT "fix" an empty stub set by substituting in-process stubs; that converts a refusal into a
90
+ // forged seal. Pinned by frost.test.ts, "SOVEREIGN-NODE INVARIANT".
91
+ const noSharedDirectoryNode = () => null;
92
+ // H1: a long-running daemon must ride out directory outages — notably the 25-30 min multi-region
93
+ // directory deploy. Use an effectively-unbounded reconnect budget with a capped backoff so each
94
+ // connection keeps retrying and reconnects within ~maxBackoffMs of the directory returning.
95
+ const sharedSignaling = directoryEndpointResolver
96
+ ? undefined
97
+ : new SignalingManager({
98
+ connect: signalingConnect ?? defaultConnect,
99
+ logger,
100
+ maxReconnectAttempts: Number.MAX_SAFE_INTEGER,
101
+ maxBackoffMs: 30_000,
102
+ });
103
+ // `defaultConnect` is not returned: its only consumer is the shared manager built here.
104
+ return { buildRelayConnectParams, noSharedDirectoryNode, sharedSignaling };
105
+ }
106
+ //# sourceMappingURL=directory-connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directory-connect.js","sourceRoot":"","sources":["../src/directory-connect.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,gBAAgB,EAAsC,MAAM,2BAA2B,CAAC;AAgBjG,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC;IAEnF,+EAA+E;IAC/E,sFAAsF;IACtF,gFAAgF;IAChF,mFAAmF;IACnF,2CAA2C;IAC3C,MAAM,uBAAuB,GAAG,KAAK,EACnC,SAAiB,EACjB,UAAkE,EACzB,EAAE;QAC3C,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtG,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,8FAA8F;QAC9F,+FAA+F;QAC/F,qGAAqG;QACrG,8EAA8E;QAC9E,MAAM,WAAW,GAAG,UAAU,CAAC,yBAAyB,CAAC;QACzD,sFAAsF;QACtF,gGAAgG;QAChG,iGAAiG;QACjG,qGAAqG;QACrG,qGAAqG;QACrG,qGAAqG;QACrG,kDAAkD;QAClD,IAAI,UAAU,CAAC,cAAc,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,SAAS;gBACT,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1E,MAAM,EAAE,mDAAmD;aAC5D,CAAC,CAAC;QACL,CAAC;QACD;;;;;WAKG;QACH,MAAM,cAAc,GAClB,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACvG,MAAM,KAAK,GAAqC,WAAW,IAAI,cAAc;YAC3E,CAAC,CAAC;gBACE,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM;gBAC7C,YAAY,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM;gBAC7C,gBAAgB,EAAE,UAAU,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,CAAC,mBAAmB;gBAChG,sBAAsB,EAAE,UAAU,CAAC,yBAAyB;gBAC5D,yBAAyB,EAAE,UAAU,CAAC,4BAA4B;gBAClE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D;YACH,CAAC,CAAC,SAAS,CAAC;QACd,OAAO;YACL,WAAW,EAAE,QAAQ,CAAC,OAAO;YAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE;YACrC,cAAc,EAAE,UAAU,CAAC,UAAU;YACrC,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC,CAAC;IAEF,2FAA2F;IAC3F,MAAM,cAAc,GAAG,KAAK,IAA4B,EAAE;QACxD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,wFAAwF;IACxF,8FAA8F;IAC9F,iGAAiG;IACjG,8FAA8F;IAC9F,iGAAiG;IACjG,oKAAoK;IACpK,2DAA2D;IAC3D,EAAE;IACF,iGAAiG;IACjG,+FAA+F;IAC/F,0EAA0E;IAC1E,EAAE;IACF,sFAAsF;IACtF,8FAA8F;IAC9F,+FAA+F;IAC/F,gGAAgG;IAChG,+FAA+F;IAC/F,oEAAoE;IACpE,MAAM,qBAAqB,GAAG,GAAqB,EAAE,CAAC,IAAI,CAAC;IAE3D,iGAAiG;IACjG,gGAAgG;IAChG,4FAA4F;IAC5F,MAAM,eAAe,GAAiC,yBAAyB;QAC7E,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,gBAAgB,CAAC;YACnB,OAAO,EAAE,gBAAgB,IAAI,cAAc;YAC3C,MAAM;YACN,oBAAoB,EAAE,MAAM,CAAC,gBAAgB;YAC7C,YAAY,EAAE,MAAM;SACrB,CAAC,CAAC;IAEP,wFAAwF;IACxF,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,eAAe,EAAE,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * What the daemon forgets, and what it says, when an IPC connection closes.
3
+ *
4
+ * Why the close is reported at all — `DOD-M15-IPCVISIBLE-1` — is written below, at the code that
5
+ * builds the report. It is not repeated here: a paragraph kept in two places is one someone corrects
6
+ * in one of them.
7
+ *
8
+ * The three per-connection maps are released by the module that owns them; this is the reporting
9
+ * half, and it returns its context rather than logging its own line, because the IPC server merges
10
+ * it into the single `daemon.ipc.disconnected` entry. A second line under the same name left
11
+ * neither carrying the whole picture and doubled every count.
12
+ */
13
+ import type { IpcServer } from "./ipc-server.js";
14
+ import type { NotificationDispatcher } from "./notification-dispatcher.js";
15
+ import type { InboundSessionWaiter } from "./inbound-sessions.js";
16
+ export interface DisconnectCleanupDeps {
17
+ ipcServer: IpcServer;
18
+ /** Read this connection's selection before it is forgotten — the log needs what it was attending. */
19
+ getConnState: (connectionId: string) => {
20
+ currentAgent: string | null;
21
+ clientType?: string;
22
+ } | undefined;
23
+ /** How many connections still attend an agent, after this one goes. */
24
+ countAttendanceFor: (agentName: string) => number;
25
+ /**
26
+ * DOD-M15-AWAYSCOPE-1 — tell this agent's counterparties that the last attendee just left.
27
+ *
28
+ * Injected as a function rather than the whole manager: this module's job is releasing
29
+ * connection-scoped state, and handing it a session manager would invite it to grow one.
30
+ */
31
+ announceAttendance: (agentName: string, attendance: "attended" | "unattended" | "offline") => void;
32
+ /** Releases the three per-connection maps. Lives with the maps, not here. */
33
+ forgetConnection: (connectionId: string) => void;
34
+ /** Callers blocked in `cello_await_session` for an agent, so a dying connection releases them. */
35
+ inboundSessionWaiters: Map<string, InboundSessionWaiter[]>;
36
+ /**
37
+ * ⚠️ A GETTER, AND THE REASON IS NOT THE OBVIOUS ONE. The dispatcher is a `const` 82 lines ABOVE
38
+ * this wiring, so passing it by value would work today. The getter is there so that moving the
39
+ * construction below cannot break the disconnect path silently — the same shape as `getStop` in
40
+ * `ipc-surface.ts`.
41
+ *
42
+ * An earlier version of this comment said the dispatcher was constructed BELOW. It was not, and a
43
+ * false worked example of late binding is worse than none: the rule this order paid for is that a
44
+ * value assigned below a call site must be read through a getter, and the silent shape is a `let`
45
+ * (a `const` crashes loudly on TDZ). Teaching "getter because it is below" from a value that is
46
+ * above hands the next reader the wrong discriminator.
47
+ */
48
+ getNotificationDispatcher: () => NotificationDispatcher;
49
+ }
50
+ export declare function wireDisconnectCleanup(deps: DisconnectCleanupDeps): void;
51
+ //# sourceMappingURL=disconnect-cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect-cleanup.d.ts","sourceRoot":"","sources":["../src/disconnect-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,qGAAqG;IACrG,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACzG,uEAAuE;IACvE,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD;;;;;OAKG;IACH,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,KAAK,IAAI,CAAC;IACnG,6EAA6E;IAC7E,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kGAAkG;IAClG,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC3D;;;;;;;;;;;OAWG;IACH,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;CACzD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAwEvE"}
@@ -0,0 +1,72 @@
1
+ export function wireDisconnectCleanup(deps) {
2
+ const { ipcServer, getConnState, countAttendanceFor, forgetConnection, announceAttendance, inboundSessionWaiters, getNotificationDispatcher, } = deps;
3
+ // MCP-001: Clean up per-connection state when a connection disconnects
4
+ // MCP-002: Also unregister from notification dispatcher
5
+ ipcServer.onDisconnect((connectionId) => {
6
+ /**
7
+ * DOD-M15-IPCVISIBLE-1: SAY THAT IT CLOSED, and say what it was attending.
8
+ *
9
+ * `daemon.ipc.connected` fired on every open and nothing on close, so a live client and a dead
10
+ * one that was never cleaned up looked identical in the log. The attended agent is the field
11
+ * that matters: attendance dropping was silent, and an agent losing its last attendee changes
12
+ * whether away-messages fire and who receives doorbells — so a session that stopped waking is
13
+ * diagnosable from the log rather than by guesswork.
14
+ */
15
+ const closing = getConnState(connectionId);
16
+ const stillAttending = closing?.currentAgent
17
+ ? countAttendanceFor(closing.currentAgent) - 1
18
+ : null;
19
+ // RETURNED, not logged here — `ipcServer` merges this into its single
20
+ // `daemon.ipc.disconnected` line. A second line under the same name left neither carrying the
21
+ // whole picture and doubled every count (review F8).
22
+ const disconnectContext = {
23
+ clientType: closing?.clientType ?? "unknown",
24
+ attendedAgent: closing?.currentAgent ?? null,
25
+ ...(stillAttending !== null ? { remainingAttendance: stillAttending } : {}),
26
+ ...(stillAttending === 0
27
+ ? {
28
+ impact: "that agent has no attending session left — inbound sessions are now answered with " +
29
+ "its away message rather than a live reply, and its doorbells reach nobody",
30
+ }
31
+ : {}),
32
+ };
33
+ // The three per-connection maps are released by the module that owns them; the reasons each
34
+ // must die with its connection live there, beside the containers.
35
+ forgetConnection(connectionId);
36
+ /**
37
+ * DOD-M15-AWAYSCOPE-1 — the counterparty is told, the moment the LAST attendee leaves.
38
+ *
39
+ * ⚠️ AFTER `forgetConnection`, and that ordering is the whole correctness of this line. The count
40
+ * above is computed as "minus one" precisely because this connection is still in the map; here
41
+ * it is gone, so `countAttendanceFor` reads the truth and a co-attended agent — legitimate and
42
+ * permanent — does not get reported as unattended because one of several clients closed.
43
+ *
44
+ * This is what the away reply used to do by sending a message into the conversation, which took
45
+ * a hash-chain leaf and cost a completed exchange its receipt. Saying it out of band costs
46
+ * nothing and is readable by the counterparty whenever they ask.
47
+ */
48
+ if (closing?.currentAgent && countAttendanceFor(closing.currentAgent) === 0) {
49
+ announceAttendance(closing.currentAgent, "unattended");
50
+ }
51
+ getNotificationDispatcher().unregisterConnection(connectionId);
52
+ // Seam 2 (review H2): evict any cello_await_session waiters owned by this connection.
53
+ // Otherwise enqueueInboundSession would hand the next inbound session to a closed
54
+ // connection's waiter and the event would be lost. deliver(null) clears the waiter's
55
+ // timer and resolves its (now-orphaned) promise as a timeout.
56
+ for (const [agentName, waiters] of inboundSessionWaiters) {
57
+ const survivors = [];
58
+ for (const w of waiters) {
59
+ if (w.connectionId === connectionId)
60
+ w.deliver(null);
61
+ else
62
+ survivors.push(w);
63
+ }
64
+ if (survivors.length > 0)
65
+ inboundSessionWaiters.set(agentName, survivors);
66
+ else
67
+ inboundSessionWaiters.delete(agentName);
68
+ }
69
+ return disconnectContext;
70
+ });
71
+ }
72
+ //# sourceMappingURL=disconnect-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect-cleanup.js","sourceRoot":"","sources":["../src/disconnect-cleanup.ts"],"names":[],"mappings":"AAgDA,MAAM,UAAU,qBAAqB,CAAC,IAA2B;IAC/D,MAAM,EACJ,SAAS,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EACjF,qBAAqB,EACrB,yBAAyB,GAC1B,GAAG,IAAI,CAAC;IAET,uEAAuE;IACvE,wDAAwD;IACxD,SAAS,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE,EAAE;QACtC;;;;;;;;WAQG;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,OAAO,EAAE,YAAY;YAC1C,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC;QACT,sEAAsE;QACtE,8FAA8F;QAC9F,qDAAqD;QACrD,MAAM,iBAAiB,GAA4B;YACjD,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,SAAS;YAC5C,aAAa,EAAE,OAAO,EAAE,YAAY,IAAI,IAAI;YAC5C,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,cAAc,KAAK,CAAC;gBACtB,CAAC,CAAC;oBACE,MAAM,EACJ,oFAAoF;wBACpF,2EAA2E;iBAC9E;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,4FAA4F;QAC5F,kEAAkE;QAClE,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC/B;;;;;;;;;;;WAWG;QACH,IAAI,OAAO,EAAE,YAAY,IAAI,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5E,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,yBAAyB,EAAE,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC/D,sFAAsF;QACtF,kFAAkF;QAClF,qFAAqF;QACrF,8DAA8D;QAC9D,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,qBAAqB,EAAE,CAAC;YACzD,MAAM,SAAS,GAAmB,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY;oBAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;oBAChD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;gBACrE,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * SYNC-P1 (daemon half) — the fork-tolerant entry store.
3
+ *
4
+ * One row per ENTRY (keyed by entry hash — never by an epoch slot), holding the entry AS
5
+ * RECEIVED — the wire bytes, never a re-encode. The bytes are the truth: `chain` decodes them on
6
+ * read, so what the fold consumes is exactly what was signed, and a codec asymmetry can never
7
+ * silently rewrite an agreed record (the class of defect TRACE-1 found in the proposal codec).
8
+ *
9
+ * The store owns persistence and ANCESTRY CLOSURE:
10
+ * - **Held until whole (R14)** — an entry lands in `document_entries` only when every parent has
11
+ * landed. Otherwise it waits in `document_entries_pending`: recorded, never applied, never in a
12
+ * watermark, promoted the moment its ancestry completes — cascade included. The invariant this
13
+ * buys: everything in `document_entries` has its FULL ancestry there too.
14
+ * - **Fork tolerance** — two entries claiming the same epoch or the same author seq are BOTH
15
+ * stored. Ruling on conflicts is the causal fold's job (`deriveDocumentState`), not the
16
+ * store's; the old chain-gap and epoch-conflict refusals are gone WITH the epoch spine.
17
+ * - **Idempotent redelivery** — the same bytes again is `recorded: false`, not an error and not
18
+ * a second row.
19
+ * - **Watermarks** — per author, the highest CONTIGUOUS seq with its head hash(es). Two heads at
20
+ * one seq is an equivocation made visible for the exchange to resolve, never silently picked.
21
+ *
22
+ * What the store does NOT judge: signatures, policy, subject semantics. The fold rules on those
23
+ * at every consumption, and the inbound path rules BEFORE appending. A row in these tables is a
24
+ * claim to be folded, not an admitted fact.
25
+ */
26
+ import { type DocumentAmendmentEnvelope } from "@cello-protocol/protocol-types";
27
+ import type { DaemonDatabase } from "./sqlcipher-db.js";
28
+ import type { Logger } from "./types.js";
29
+ /**
30
+ * The PRE-PIVOT table, epoch-keyed. Still created because `DocumentStore` execs this too and the
31
+ * pre-pivot readers live until P4 deletes them (SYNC-D2); the entry store neither reads nor
32
+ * writes it. Rows predating the pivot stay untouched — old-shape bytes are not decodable by the
33
+ * v2 codec and are not migrated (no compatibility owed; essentially no documents exist).
34
+ */
35
+ /**
36
+ * Shared with `DocumentStore` (the :352 shared-definition precedent): its membership walk and
37
+ * epoch read consume `document_entries`, so the tables must exist whichever module constructs
38
+ * first. Keep both consumers on THIS string.
39
+ */
40
+ /**
41
+ * D7 — the epoch spine is deleted. A database born before that carries a NOT NULL `epoch_id`
42
+ * with no default, which would refuse every insert from this build. Dropped in place (SQLite
43
+ * ≥3.35 / SQLCipher 4.5); a fresh database never has it.
44
+ */
45
+ type ColumnDropper = {
46
+ exec(sql: string): void;
47
+ prepare(sql: string): {
48
+ all(...a: unknown[]): unknown[];
49
+ };
50
+ };
51
+ /**
52
+ * Drop columns a previous milestone left behind, birth-gated: only what the table actually still
53
+ * has is touched, so this is safe on a database created yesterday and on one created before the
54
+ * column existed. Dead schema is not free — it is the design a future author reads and rebuilds.
55
+ */
56
+ export declare function dropLegacyColumns(db: ColumnDropper, table: string, columns: readonly string[]): void;
57
+ export declare function dropLegacyEpochColumn(db: ColumnDropper, table: string): void;
58
+ export declare const DOCUMENT_ENTRIES_CREATE_SQL = "\n CREATE TABLE IF NOT EXISTS document_entries (\n owner_agent_id TEXT NOT NULL,\n document_id TEXT NOT NULL,\n entry_hash TEXT NOT NULL,\n author_agent_id TEXT NOT NULL,\n author_seq INTEGER NOT NULL,\n received_bytes BLOB NOT NULL,\n recorded_at INTEGER NOT NULL,\n PRIMARY KEY (owner_agent_id, document_id, entry_hash)\n );\n CREATE INDEX IF NOT EXISTS idx_document_entries_author\n ON document_entries (owner_agent_id, document_id, author_agent_id, author_seq);\n CREATE TABLE IF NOT EXISTS document_entries_pending (\n owner_agent_id TEXT NOT NULL,\n document_id TEXT NOT NULL,\n entry_hash TEXT NOT NULL,\n author_agent_id TEXT NOT NULL,\n received_bytes BLOB NOT NULL,\n recorded_at INTEGER NOT NULL,\n PRIMARY KEY (owner_agent_id, document_id, entry_hash)\n );\n";
59
+ export interface AmendmentAppendResult {
60
+ /** False on an idempotent redelivery — the entry (or its pending row) already existed. */
61
+ recorded: boolean;
62
+ /** True when the entry is waiting on missing parents (R14) — recorded but not yet applied. */
63
+ held: boolean;
64
+ /** Hex of the entry's TBS hash. */
65
+ entryHash: string;
66
+ /** Previously-held entries this arrival completed, now applied — envelopes included, so the
67
+ * caller can run the same post-apply surfacing it runs for a direct arrival (review F2: the
68
+ * held path silently dropped removal notices and lifecycle completion). */
69
+ promoted: PromotedEntry[];
70
+ }
71
+ export interface PromotedEntry {
72
+ entryHash: string;
73
+ envelope: DocumentAmendmentEnvelope;
74
+ }
75
+ export interface PendingEntry {
76
+ entryHash: string;
77
+ /** The parents not yet held — the exchange asks for exactly these. */
78
+ missingParents: string[];
79
+ recordedAtMs: number;
80
+ }
81
+ /**
82
+ * Ceiling on HELD entries per (document, author). An honest author's pending set is a short gap
83
+ * awaiting one delivery; a hostile known author fabricating parents could otherwise grow the
84
+ * pending table without bound (review F4).
85
+ */
86
+ export declare const MAX_PENDING_PER_AUTHOR = 64;
87
+ export interface AuthorWatermark {
88
+ /** Highest CONTIGUOUS seq held from this author. */
89
+ seq: number;
90
+ /** Entry hash(es) at that seq — more than one is an equivocation, visible by design. */
91
+ headHashes: string[];
92
+ }
93
+ export declare class DocumentAmendmentStore {
94
+ #private;
95
+ constructor(db: DaemonDatabase, logger: Logger);
96
+ /**
97
+ * Append one entry from its wire bytes. Decodes first — malformed bytes refuse with the
98
+ * decoder's named reason and nothing is stored. An entry with missing parents is HELD; an
99
+ * arrival that completes held ancestry promotes the whole cascade.
100
+ */
101
+ append(ownerAgentId: string, documentId: string, receivedBytes: Uint8Array, nowMs: number): AmendmentAppendResult;
102
+ /** Every applied entry, decoded from the stored received bytes. The set is ancestry-closed. */
103
+ chain(ownerAgentId: string, documentId: string): DocumentAmendmentEnvelope[];
104
+ /** Held entries and exactly which parents they still wait on (R37's receiver-side record). */
105
+ pending(ownerAgentId: string, documentId: string): PendingEntry[];
106
+ /**
107
+ * This author's applied entries with seq strictly beyond `afterSeq`, as WIRE BYTES in seq
108
+ * order — what a reconcile reply carries to a peer whose watermark for this author is behind
109
+ * ours (R10 step 2/3). Forked seqs both ship: the peer's fold rules on them like ours did.
110
+ */
111
+ entriesByAuthorAfter(ownerAgentId: string, documentId: string, authorAgentId: string, afterSeq: number): Uint8Array[];
112
+ /**
113
+ * Per-author position: the highest CONTIGUOUS seq held and the head hash(es) at it. A held
114
+ * (pending) entry is not counted — a gap ends the walk (R13: report contiguous, never highest
115
+ * received).
116
+ */
117
+ watermarks(ownerAgentId: string, documentId: string): Map<string, AuthorWatermark>;
118
+ }
119
+ export {};
120
+ //# sourceMappingURL=document-amendment-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-amendment-store.d.ts","sourceRoot":"","sources":["../src/document-amendment-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;;GAKG;AACH;;;;GAIG;AACH;;;;GAIG;AACH,KAAK,aAAa,GAAG;IAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5G;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAOpG;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5E;AAED,eAAO,MAAM,2BAA2B,63BAsBvC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,0FAA0F;IAC1F,QAAQ,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,IAAI,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB;;gFAE4E;IAC5E,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,wFAAwF;IACxF,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,sBAAsB;;gBAIrB,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM;IAW9C;;;;OAIG;IACH,MAAM,CACJ,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,UAAU,EACzB,KAAK,EAAE,MAAM,GACZ,qBAAqB;IA0DxB,+FAA+F;IAC/F,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,yBAAyB,EAAE;IAW5E,8FAA8F;IAC9F,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,EAAE;IAwBjE;;;;OAIG;IACH,oBAAoB,CAClB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,UAAU,EAAE;IAaf;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;CAqInF"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * SYNC-P1 (daemon half) — the fork-tolerant entry store.
3
+ *
4
+ * One row per ENTRY (keyed by entry hash — never by an epoch slot), holding the entry AS
5
+ * RECEIVED — the wire bytes, never a re-encode. The bytes are the truth: `chain` decodes them on
6
+ * read, so what the fold consumes is exactly what was signed, and a codec asymmetry can never
7
+ * silently rewrite an agreed record (the class of defect TRACE-1 found in the proposal codec).
8
+ *
9
+ * The store owns persistence and ANCESTRY CLOSURE:
10
+ * - **Held until whole (R14)** — an entry lands in `document_entries` only when every parent has
11
+ * landed. Otherwise it waits in `document_entries_pending`: recorded, never applied, never in a
12
+ * watermark, promoted the moment its ancestry completes — cascade included. The invariant this
13
+ * buys: everything in `document_entries` has its FULL ancestry there too.
14
+ * - **Fork tolerance** — two entries claiming the same epoch or the same author seq are BOTH
15
+ * stored. Ruling on conflicts is the causal fold's job (`deriveDocumentState`), not the
16
+ * store's; the old chain-gap and epoch-conflict refusals are gone WITH the epoch spine.
17
+ * - **Idempotent redelivery** — the same bytes again is `recorded: false`, not an error and not
18
+ * a second row.
19
+ * - **Watermarks** — per author, the highest CONTIGUOUS seq with its head hash(es). Two heads at
20
+ * one seq is an equivocation made visible for the exchange to resolve, never silently picked.
21
+ *
22
+ * What the store does NOT judge: signatures, policy, subject semantics. The fold rules on those
23
+ * at every consumption, and the inbound path rules BEFORE appending. A row in these tables is a
24
+ * claim to be folded, not an admitted fact.
25
+ */
26
+ import { decodeDocumentAmendment, documentAmendmentHash, } from "@cello-protocol/protocol-types";
27
+ /**
28
+ * Drop columns a previous milestone left behind, birth-gated: only what the table actually still
29
+ * has is touched, so this is safe on a database created yesterday and on one created before the
30
+ * column existed. Dead schema is not free — it is the design a future author reads and rebuilds.
31
+ */
32
+ export function dropLegacyColumns(db, table, columns) {
33
+ const held = new Set(db.prepare(`PRAGMA table_info(${table})`).all().map((c) => c.name));
34
+ for (const column of columns) {
35
+ if (held.has(column))
36
+ db.exec(`ALTER TABLE ${table} DROP COLUMN ${column}`);
37
+ }
38
+ }
39
+ export function dropLegacyEpochColumn(db, table) {
40
+ dropLegacyColumns(db, table, ["epoch_id"]);
41
+ }
42
+ export const DOCUMENT_ENTRIES_CREATE_SQL = `
43
+ CREATE TABLE IF NOT EXISTS document_entries (
44
+ owner_agent_id TEXT NOT NULL,
45
+ document_id TEXT NOT NULL,
46
+ entry_hash TEXT NOT NULL,
47
+ author_agent_id TEXT NOT NULL,
48
+ author_seq INTEGER NOT NULL,
49
+ received_bytes BLOB NOT NULL,
50
+ recorded_at INTEGER NOT NULL,
51
+ PRIMARY KEY (owner_agent_id, document_id, entry_hash)
52
+ );
53
+ CREATE INDEX IF NOT EXISTS idx_document_entries_author
54
+ ON document_entries (owner_agent_id, document_id, author_agent_id, author_seq);
55
+ CREATE TABLE IF NOT EXISTS document_entries_pending (
56
+ owner_agent_id TEXT NOT NULL,
57
+ document_id TEXT NOT NULL,
58
+ entry_hash TEXT NOT NULL,
59
+ author_agent_id TEXT NOT NULL,
60
+ received_bytes BLOB NOT NULL,
61
+ recorded_at INTEGER NOT NULL,
62
+ PRIMARY KEY (owner_agent_id, document_id, entry_hash)
63
+ );
64
+ `;
65
+ /**
66
+ * Ceiling on HELD entries per (document, author). An honest author's pending set is a short gap
67
+ * awaiting one delivery; a hostile known author fabricating parents could otherwise grow the
68
+ * pending table without bound (review F4).
69
+ */
70
+ export const MAX_PENDING_PER_AUTHOR = 64;
71
+ export class DocumentAmendmentStore {
72
+ #db;
73
+ #logger;
74
+ constructor(db, logger) {
75
+ this.#db = db;
76
+ this.#logger = logger;
77
+ // D7/D9 residue sweep (review F5/F6): the epoch-keyed legacy table and the withdrawals
78
+ // table have no reader or writer left — never born on a fresh database, dropped in place
79
+ // on one that predates the pivot.
80
+ this.#db.exec(`DROP TABLE IF EXISTS document_amendments`);
81
+ this.#db.exec(DOCUMENT_ENTRIES_CREATE_SQL);
82
+ dropLegacyEpochColumn(this.#db, "document_entries");
83
+ }
84
+ /**
85
+ * Append one entry from its wire bytes. Decodes first — malformed bytes refuse with the
86
+ * decoder's named reason and nothing is stored. An entry with missing parents is HELD; an
87
+ * arrival that completes held ancestry promotes the whole cascade.
88
+ */
89
+ append(ownerAgentId, documentId, receivedBytes, nowMs) {
90
+ const env = decodeDocumentAmendment(receivedBytes);
91
+ if (env.body.document_id !== documentId) {
92
+ throw new Error(`document_amendment_wrong_document: the bytes name ${env.body.document_id}, appending ` +
93
+ `under ${documentId}`);
94
+ }
95
+ const hash = Buffer.from(documentAmendmentHash(env.body)).toString("hex");
96
+ if (this.#hasEntry(ownerAgentId, documentId, hash)) {
97
+ return { recorded: false, held: false, entryHash: hash, promoted: [] };
98
+ }
99
+ if (this.#hasPending(ownerAgentId, documentId, hash)) {
100
+ return { recorded: false, held: true, entryHash: hash, promoted: [] };
101
+ }
102
+ const missing = env.body.parents.filter((p) => !this.#hasEntry(ownerAgentId, documentId, p));
103
+ if (missing.length > 0) {
104
+ const author = env.body.author_agent_id;
105
+ const backlog = this.#db
106
+ .prepare(`SELECT COUNT(*) AS n FROM document_entries_pending
107
+ WHERE owner_agent_id = ? AND document_id = ? AND author_agent_id = ?`)
108
+ .get(ownerAgentId, documentId, author);
109
+ if (backlog.n >= MAX_PENDING_PER_AUTHOR) {
110
+ throw new Error(`document_pending_cap: ${author} already has ${backlog.n} entries held awaiting ` +
111
+ `parents — the ceiling is ${MAX_PENDING_PER_AUTHOR}, and an honest gap is never ` +
112
+ `this deep; deliver the missing ancestry first`);
113
+ }
114
+ this.#db
115
+ .prepare(`INSERT INTO document_entries_pending
116
+ (owner_agent_id, document_id, entry_hash, author_agent_id, received_bytes, recorded_at)
117
+ VALUES (?, ?, ?, ?, ?, ?)`)
118
+ .run(ownerAgentId, documentId, hash, author, Buffer.from(receivedBytes), nowMs);
119
+ this.#logger.info("document.entry.held", {
120
+ documentId,
121
+ entryHash: hash,
122
+ author: env.body.author_agent_id,
123
+ authorSeq: env.body.author_seq,
124
+ kind: env.body.kind,
125
+ missingParents: missing,
126
+ });
127
+ return { recorded: true, held: true, entryHash: hash, promoted: [] };
128
+ }
129
+ this.#insertEntry(ownerAgentId, documentId, hash, env, receivedBytes, nowMs);
130
+ const promoted = this.#promoteReady(ownerAgentId, documentId, nowMs);
131
+ return { recorded: true, held: false, entryHash: hash, promoted };
132
+ }
133
+ /** Every applied entry, decoded from the stored received bytes. The set is ancestry-closed. */
134
+ chain(ownerAgentId, documentId) {
135
+ const rows = this.#db
136
+ .prepare(`SELECT received_bytes FROM document_entries
137
+ WHERE owner_agent_id = ? AND document_id = ?
138
+ ORDER BY author_seq ASC, entry_hash ASC`)
139
+ .all(ownerAgentId, documentId);
140
+ return rows.map((r) => decodeDocumentAmendment(new Uint8Array(r.received_bytes)));
141
+ }
142
+ /** Held entries and exactly which parents they still wait on (R37's receiver-side record). */
143
+ pending(ownerAgentId, documentId) {
144
+ const rows = this.#db
145
+ .prepare(`SELECT entry_hash, received_bytes, recorded_at FROM document_entries_pending
146
+ WHERE owner_agent_id = ? AND document_id = ?
147
+ ORDER BY recorded_at ASC, entry_hash ASC`)
148
+ .all(ownerAgentId, documentId);
149
+ return rows.map((r) => {
150
+ const env = decodeDocumentAmendment(new Uint8Array(r.received_bytes));
151
+ return {
152
+ entryHash: r.entry_hash,
153
+ missingParents: env.body.parents.filter((p) => !this.#hasEntry(ownerAgentId, documentId, p)),
154
+ recordedAtMs: r.recorded_at,
155
+ };
156
+ });
157
+ }
158
+ /**
159
+ * This author's applied entries with seq strictly beyond `afterSeq`, as WIRE BYTES in seq
160
+ * order — what a reconcile reply carries to a peer whose watermark for this author is behind
161
+ * ours (R10 step 2/3). Forked seqs both ship: the peer's fold rules on them like ours did.
162
+ */
163
+ entriesByAuthorAfter(ownerAgentId, documentId, authorAgentId, afterSeq) {
164
+ const rows = this.#db
165
+ .prepare(`SELECT received_bytes FROM document_entries
166
+ WHERE owner_agent_id = ? AND document_id = ? AND author_agent_id = ? AND author_seq > ?
167
+ ORDER BY author_seq ASC, entry_hash ASC`)
168
+ .all(ownerAgentId, documentId, authorAgentId, afterSeq);
169
+ return rows.map((r) => new Uint8Array(r.received_bytes));
170
+ }
171
+ /**
172
+ * Per-author position: the highest CONTIGUOUS seq held and the head hash(es) at it. A held
173
+ * (pending) entry is not counted — a gap ends the walk (R13: report contiguous, never highest
174
+ * received).
175
+ */
176
+ watermarks(ownerAgentId, documentId) {
177
+ const rows = this.#db
178
+ .prepare(`SELECT author_agent_id, author_seq, entry_hash FROM document_entries
179
+ WHERE owner_agent_id = ? AND document_id = ?
180
+ ORDER BY author_agent_id ASC, author_seq ASC, entry_hash ASC`)
181
+ .all(ownerAgentId, documentId);
182
+ const byAuthor = new Map();
183
+ for (const r of rows) {
184
+ let seqs = byAuthor.get(r.author_agent_id);
185
+ if (!seqs) {
186
+ seqs = new Map();
187
+ byAuthor.set(r.author_agent_id, seqs);
188
+ }
189
+ const at = seqs.get(r.author_seq);
190
+ if (at)
191
+ at.push(r.entry_hash);
192
+ else
193
+ seqs.set(r.author_seq, [r.entry_hash]);
194
+ }
195
+ const out = new Map();
196
+ for (const [author, seqs] of byAuthor) {
197
+ let seq = 0;
198
+ while (seqs.has(seq + 1))
199
+ seq++;
200
+ if (seq === 0)
201
+ continue;
202
+ out.set(author, { seq, headHashes: seqs.get(seq) });
203
+ }
204
+ return out;
205
+ }
206
+ #hasEntry(ownerAgentId, documentId, hash) {
207
+ return (this.#db
208
+ .prepare(`SELECT 1 FROM document_entries
209
+ WHERE owner_agent_id = ? AND document_id = ? AND entry_hash = ?`)
210
+ .get(ownerAgentId, documentId, hash) !== undefined);
211
+ }
212
+ #hasPending(ownerAgentId, documentId, hash) {
213
+ return (this.#db
214
+ .prepare(`SELECT 1 FROM document_entries_pending
215
+ WHERE owner_agent_id = ? AND document_id = ? AND entry_hash = ?`)
216
+ .get(ownerAgentId, documentId, hash) !== undefined);
217
+ }
218
+ #insertEntry(ownerAgentId, documentId, hash, env, bytes, nowMs) {
219
+ this.#db
220
+ .prepare(`INSERT INTO document_entries
221
+ (owner_agent_id, document_id, entry_hash, author_agent_id, author_seq,
222
+ received_bytes, recorded_at)
223
+ VALUES (?, ?, ?, ?, ?, ?, ?)`)
224
+ .run(ownerAgentId, documentId, hash, env.body.author_agent_id, env.body.author_seq,
225
+ // Copied — the caller may reuse or zero its buffer after we return.
226
+ Buffer.from(bytes), nowMs);
227
+ this.#logger.info("document.entry.recorded", {
228
+ documentId,
229
+ entryHash: hash,
230
+ author: env.body.author_agent_id,
231
+ authorSeq: env.body.author_seq,
232
+ kind: env.body.kind,
233
+ });
234
+ }
235
+ /** Move every pending entry whose ancestry is now complete — repeated until a pass moves none. */
236
+ #promoteReady(ownerAgentId, documentId, nowMs) {
237
+ const promoted = [];
238
+ for (;;) {
239
+ const rows = this.#db
240
+ .prepare(`SELECT entry_hash, received_bytes FROM document_entries_pending
241
+ WHERE owner_agent_id = ? AND document_id = ?`)
242
+ .all(ownerAgentId, documentId);
243
+ let movedThisPass = false;
244
+ for (const row of rows) {
245
+ const env = decodeDocumentAmendment(new Uint8Array(row.received_bytes));
246
+ const ready = env.body.parents.every((p) => this.#hasEntry(ownerAgentId, documentId, p));
247
+ if (!ready)
248
+ continue;
249
+ this.#insertEntry(ownerAgentId, documentId, row.entry_hash, env, new Uint8Array(row.received_bytes), nowMs);
250
+ this.#db
251
+ .prepare(`DELETE FROM document_entries_pending
252
+ WHERE owner_agent_id = ? AND document_id = ? AND entry_hash = ?`)
253
+ .run(ownerAgentId, documentId, row.entry_hash);
254
+ this.#logger.info("document.entry.promoted", {
255
+ documentId,
256
+ entryHash: row.entry_hash,
257
+ });
258
+ promoted.push({ entryHash: row.entry_hash, envelope: env });
259
+ movedThisPass = true;
260
+ }
261
+ if (!movedThisPass)
262
+ return promoted;
263
+ }
264
+ }
265
+ }
266
+ //# sourceMappingURL=document-amendment-store.js.map