agent-comms 9.0.10 → 9.0.12

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 (1148) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +10 -6
  4. package/dist/account-cli.d.ts.map +1 -1
  5. package/dist/account-cli.js +4 -1
  6. package/dist/account-cli.js.map +1 -1
  7. package/dist/bridges/user/web/dist/mesh-worker.js +4 -4
  8. package/dist/bridges/user/web/dist/sw.js +1 -1
  9. package/dist/cli-main.d.ts.map +1 -1
  10. package/dist/cli-main.js +9 -12
  11. package/dist/cli-main.js.map +1 -1
  12. package/dist/core/account-bundle.d.ts +1 -1
  13. package/dist/core/account-bundle.d.ts.map +1 -1
  14. package/dist/core/account-bundle.js +26 -19
  15. package/dist/core/account-bundle.js.map +1 -1
  16. package/dist/core/account-join.d.ts.map +1 -1
  17. package/dist/core/account-join.js +5 -2
  18. package/dist/core/account-join.js.map +1 -1
  19. package/dist/core/account-ledger-crypto.d.ts.map +1 -1
  20. package/dist/core/account-ledger-crypto.js +4 -1
  21. package/dist/core/account-ledger-crypto.js.map +1 -1
  22. package/dist/core/account-ledger-store.d.ts +3 -1
  23. package/dist/core/account-ledger-store.d.ts.map +1 -1
  24. package/dist/core/account-ledger-store.js +6 -3
  25. package/dist/core/account-ledger-store.js.map +1 -1
  26. package/dist/core/account-ledger.d.ts +51 -4
  27. package/dist/core/account-ledger.d.ts.map +1 -1
  28. package/dist/core/account-ledger.js +102 -15
  29. package/dist/core/account-ledger.js.map +1 -1
  30. package/dist/core/bridge-mesh.d.ts.map +1 -1
  31. package/dist/core/bridge-mesh.js +3 -0
  32. package/dist/core/bridge-mesh.js.map +1 -1
  33. package/dist/core/bridge.d.ts.map +1 -1
  34. package/dist/core/bridge.js +16 -4
  35. package/dist/core/bridge.js.map +1 -1
  36. package/dist/core/capability-ask.d.ts.map +1 -1
  37. package/dist/core/capability-ask.js +10 -2
  38. package/dist/core/capability-ask.js.map +1 -1
  39. package/dist/core/connection-code-tool.d.ts +1 -1
  40. package/dist/core/connection-code-tool.js +2 -2
  41. package/dist/core/connection-code-tool.js.map +1 -1
  42. package/dist/core/connection-code.d.ts +5 -5
  43. package/dist/core/connection-code.d.ts.map +1 -1
  44. package/dist/core/connection-code.js +22 -6
  45. package/dist/core/connection-code.js.map +1 -1
  46. package/dist/core/device-membership.d.ts +8 -3
  47. package/dist/core/device-membership.d.ts.map +1 -1
  48. package/dist/core/device-membership.js +4 -4
  49. package/dist/core/device-membership.js.map +1 -1
  50. package/dist/core/dm-grant-actions.d.ts.map +1 -1
  51. package/dist/core/dm-grant-actions.js +7 -1
  52. package/dist/core/dm-grant-actions.js.map +1 -1
  53. package/dist/core/error-reporting.d.ts.map +1 -1
  54. package/dist/core/error-reporting.js +5 -0
  55. package/dist/core/error-reporting.js.map +1 -1
  56. package/dist/core/gateway-trust.d.ts +1 -1
  57. package/dist/core/gateway-trust.d.ts.map +1 -1
  58. package/dist/core/gateway-trust.js +4 -4
  59. package/dist/core/gateway-trust.js.map +1 -1
  60. package/dist/core/group-proofs.d.ts.map +1 -1
  61. package/dist/core/group-proofs.js +2 -2
  62. package/dist/core/group-proofs.js.map +1 -1
  63. package/dist/core/identity-store.d.ts +13 -9
  64. package/dist/core/identity-store.d.ts.map +1 -1
  65. package/dist/core/identity-store.js +122 -147
  66. package/dist/core/identity-store.js.map +1 -1
  67. package/dist/core/index.d.ts +1 -0
  68. package/dist/core/index.d.ts.map +1 -1
  69. package/dist/core/index.js +1 -0
  70. package/dist/core/index.js.map +1 -1
  71. package/dist/core/iso-timestamp.d.ts +10 -0
  72. package/dist/core/iso-timestamp.d.ts.map +1 -0
  73. package/dist/core/iso-timestamp.js +19 -0
  74. package/dist/core/iso-timestamp.js.map +1 -0
  75. package/dist/core/issuer-identity-file.d.ts +15 -0
  76. package/dist/core/issuer-identity-file.d.ts.map +1 -1
  77. package/dist/core/issuer-identity-file.js +69 -20
  78. package/dist/core/issuer-identity-file.js.map +1 -1
  79. package/dist/core/machine-identity.d.ts +1 -1
  80. package/dist/core/machine-identity.d.ts.map +1 -1
  81. package/dist/core/machine-identity.js +14 -11
  82. package/dist/core/machine-identity.js.map +1 -1
  83. package/dist/core/mesh-store.d.ts +2 -2
  84. package/dist/core/mesh-store.d.ts.map +1 -1
  85. package/dist/core/mesh-store.js.map +1 -1
  86. package/dist/core/peer-lifecycle.d.ts.map +1 -1
  87. package/dist/core/peer-lifecycle.js +8 -2
  88. package/dist/core/peer-lifecycle.js.map +1 -1
  89. package/dist/core/pid-lock-file.d.ts +27 -4
  90. package/dist/core/pid-lock-file.d.ts.map +1 -1
  91. package/dist/core/pid-lock-file.js +120 -11
  92. package/dist/core/pid-lock-file.js.map +1 -1
  93. package/dist/core/process-start.d.ts +10 -0
  94. package/dist/core/process-start.d.ts.map +1 -0
  95. package/dist/core/process-start.js +43 -0
  96. package/dist/core/process-start.js.map +1 -0
  97. package/dist/core/room-lifecycle.d.ts +3 -2
  98. package/dist/core/room-lifecycle.d.ts.map +1 -1
  99. package/dist/core/room-lifecycle.js +9 -8
  100. package/dist/core/room-lifecycle.js.map +1 -1
  101. package/dist/core/room-protocol.d.ts.map +1 -1
  102. package/dist/core/room-protocol.js +25 -3
  103. package/dist/core/room-protocol.js.map +1 -1
  104. package/dist/core/stale-agent-checker.d.ts.map +1 -1
  105. package/dist/core/stale-agent-checker.js +3 -1
  106. package/dist/core/stale-agent-checker.js.map +1 -1
  107. package/dist/core/store.d.ts +3 -0
  108. package/dist/core/store.d.ts.map +1 -1
  109. package/dist/core/store.js +42 -20
  110. package/dist/core/store.js.map +1 -1
  111. package/dist/core/tool.d.ts +5 -1
  112. package/dist/core/tool.d.ts.map +1 -1
  113. package/dist/core/tool.js +7 -1
  114. package/dist/core/tool.js.map +1 -1
  115. package/dist/core/types.d.ts +1 -1
  116. package/dist/core/types.d.ts.map +1 -1
  117. package/dist/core/types.js +8 -3
  118. package/dist/core/types.js.map +1 -1
  119. package/dist/core/user-identity.d.ts +5 -5
  120. package/dist/core/user-identity.d.ts.map +1 -1
  121. package/dist/core/user-identity.js +59 -45
  122. package/dist/core/user-identity.js.map +1 -1
  123. package/package.json +9 -4
  124. package/src/account-cli.ts +4 -1
  125. package/src/bridges/user/web/dist/mesh-worker.js +4 -4
  126. package/src/bridges/user/web/dist/sw.js +1 -1
  127. package/src/cli-main.ts +10 -12
  128. package/src/core/account-bundle.ts +36 -25
  129. package/src/core/account-join.ts +5 -2
  130. package/src/core/account-ledger-crypto.ts +4 -1
  131. package/src/core/account-ledger-store.ts +11 -3
  132. package/src/core/account-ledger.ts +142 -20
  133. package/src/core/bridge-mesh.ts +4 -0
  134. package/src/core/bridge.ts +24 -4
  135. package/src/core/capability-ask.ts +16 -1
  136. package/src/core/connection-code-tool.ts +2 -2
  137. package/src/core/connection-code.ts +34 -8
  138. package/src/core/device-membership.ts +12 -8
  139. package/src/core/dm-grant-actions.ts +7 -1
  140. package/src/core/error-reporting.ts +5 -0
  141. package/src/core/gateway-trust.ts +4 -4
  142. package/src/core/group-proofs.ts +5 -2
  143. package/src/core/identity-store.ts +182 -191
  144. package/src/core/index.ts +1 -0
  145. package/src/core/iso-timestamp.ts +21 -0
  146. package/src/core/issuer-identity-file.ts +87 -23
  147. package/src/core/machine-identity.ts +15 -12
  148. package/src/core/mesh-store.ts +2 -1
  149. package/src/core/peer-lifecycle.ts +9 -4
  150. package/src/core/pid-lock-file.ts +139 -11
  151. package/src/core/process-start.ts +45 -0
  152. package/src/core/room-lifecycle.ts +12 -9
  153. package/src/core/room-protocol.ts +23 -3
  154. package/src/core/stale-agent-checker.ts +3 -1
  155. package/src/core/store.ts +48 -23
  156. package/src/core/tool.ts +14 -1
  157. package/src/core/types.ts +9 -3
  158. package/src/core/user-identity.ts +65 -51
  159. package/dist/bridges/user/web/frontend/boot-logic.d.ts +0 -18
  160. package/dist/bridges/user/web/frontend/boot-logic.d.ts.map +0 -1
  161. package/dist/bridges/user/web/frontend/boot-logic.js +0 -20
  162. package/dist/bridges/user/web/frontend/boot-logic.js.map +0 -1
  163. package/dist/bridges/user/web/frontend/components/App.d.ts +0 -26
  164. package/dist/bridges/user/web/frontend/components/App.d.ts.map +0 -1
  165. package/dist/bridges/user/web/frontend/components/App.js +0 -25
  166. package/dist/bridges/user/web/frontend/components/App.js.map +0 -1
  167. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts +0 -19
  168. package/dist/bridges/user/web/frontend/components/ChatArea.d.ts.map +0 -1
  169. package/dist/bridges/user/web/frontend/components/ChatArea.js +0 -32
  170. package/dist/bridges/user/web/frontend/components/ChatArea.js.map +0 -1
  171. package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts +0 -11
  172. package/dist/bridges/user/web/frontend/components/CreateRoomForm.d.ts.map +0 -1
  173. package/dist/bridges/user/web/frontend/components/CreateRoomForm.js +0 -39
  174. package/dist/bridges/user/web/frontend/components/CreateRoomForm.js.map +0 -1
  175. package/dist/bridges/user/web/frontend/components/JoinForm.d.ts +0 -11
  176. package/dist/bridges/user/web/frontend/components/JoinForm.d.ts.map +0 -1
  177. package/dist/bridges/user/web/frontend/components/JoinForm.js +0 -12
  178. package/dist/bridges/user/web/frontend/components/JoinForm.js.map +0 -1
  179. package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts +0 -16
  180. package/dist/bridges/user/web/frontend/components/MeshGraphView.d.ts.map +0 -1
  181. package/dist/bridges/user/web/frontend/components/MeshGraphView.js +0 -56
  182. package/dist/bridges/user/web/frontend/components/MeshGraphView.js.map +0 -1
  183. package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts +0 -13
  184. package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts.map +0 -1
  185. package/dist/bridges/user/web/frontend/components/MeshPanel.js +0 -36
  186. package/dist/bridges/user/web/frontend/components/MeshPanel.js.map +0 -1
  187. package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts +0 -20
  188. package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts.map +0 -1
  189. package/dist/bridges/user/web/frontend/components/MeshTraceView.js +0 -27
  190. package/dist/bridges/user/web/frontend/components/MeshTraceView.js.map +0 -1
  191. package/dist/bridges/user/web/frontend/components/Message.d.ts +0 -8
  192. package/dist/bridges/user/web/frontend/components/Message.d.ts.map +0 -1
  193. package/dist/bridges/user/web/frontend/components/Message.js +0 -19
  194. package/dist/bridges/user/web/frontend/components/Message.js.map +0 -1
  195. package/dist/bridges/user/web/frontend/components/MessageList.d.ts +0 -8
  196. package/dist/bridges/user/web/frontend/components/MessageList.d.ts.map +0 -1
  197. package/dist/bridges/user/web/frontend/components/MessageList.js +0 -18
  198. package/dist/bridges/user/web/frontend/components/MessageList.js.map +0 -1
  199. package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts +0 -16
  200. package/dist/bridges/user/web/frontend/components/ProjectTree.d.ts.map +0 -1
  201. package/dist/bridges/user/web/frontend/components/ProjectTree.js +0 -78
  202. package/dist/bridges/user/web/frontend/components/ProjectTree.js.map +0 -1
  203. package/dist/bridges/user/web/frontend/components/Sidebar.d.ts +0 -19
  204. package/dist/bridges/user/web/frontend/components/Sidebar.d.ts.map +0 -1
  205. package/dist/bridges/user/web/frontend/components/Sidebar.js +0 -39
  206. package/dist/bridges/user/web/frontend/components/Sidebar.js.map +0 -1
  207. package/dist/bridges/user/web/frontend/dispatch-action.d.ts +0 -10
  208. package/dist/bridges/user/web/frontend/dispatch-action.d.ts.map +0 -1
  209. package/dist/bridges/user/web/frontend/dispatch-action.js +0 -62
  210. package/dist/bridges/user/web/frontend/dispatch-action.js.map +0 -1
  211. package/dist/bridges/user/web/frontend/event-pump.d.ts +0 -24
  212. package/dist/bridges/user/web/frontend/event-pump.d.ts.map +0 -1
  213. package/dist/bridges/user/web/frontend/event-pump.js +0 -91
  214. package/dist/bridges/user/web/frontend/event-pump.js.map +0 -1
  215. package/dist/bridges/user/web/frontend/input.d.ts +0 -37
  216. package/dist/bridges/user/web/frontend/input.d.ts.map +0 -1
  217. package/dist/bridges/user/web/frontend/input.js +0 -173
  218. package/dist/bridges/user/web/frontend/input.js.map +0 -1
  219. package/dist/bridges/user/web/frontend/main.d.ts +0 -7
  220. package/dist/bridges/user/web/frontend/main.d.ts.map +0 -1
  221. package/dist/bridges/user/web/frontend/main.js +0 -203
  222. package/dist/bridges/user/web/frontend/main.js.map +0 -1
  223. package/dist/bridges/user/web/frontend/mesh-client.d.ts +0 -86
  224. package/dist/bridges/user/web/frontend/mesh-client.d.ts.map +0 -1
  225. package/dist/bridges/user/web/frontend/mesh-client.js +0 -274
  226. package/dist/bridges/user/web/frontend/mesh-client.js.map +0 -1
  227. package/dist/bridges/user/web/frontend/mesh-invalidation.d.ts +0 -11
  228. package/dist/bridges/user/web/frontend/mesh-invalidation.d.ts.map +0 -1
  229. package/dist/bridges/user/web/frontend/mesh-invalidation.js +0 -26
  230. package/dist/bridges/user/web/frontend/mesh-invalidation.js.map +0 -1
  231. package/dist/bridges/user/web/frontend/mesh-worker.d.ts +0 -129
  232. package/dist/bridges/user/web/frontend/mesh-worker.d.ts.map +0 -1
  233. package/dist/bridges/user/web/frontend/mesh-worker.js +0 -344
  234. package/dist/bridges/user/web/frontend/mesh-worker.js.map +0 -1
  235. package/dist/bridges/user/web/frontend/messages.d.ts +0 -18
  236. package/dist/bridges/user/web/frontend/messages.d.ts.map +0 -1
  237. package/dist/bridges/user/web/frontend/messages.js +0 -91
  238. package/dist/bridges/user/web/frontend/messages.js.map +0 -1
  239. package/dist/bridges/user/web/frontend/project-tree.d.ts +0 -9
  240. package/dist/bridges/user/web/frontend/project-tree.d.ts.map +0 -1
  241. package/dist/bridges/user/web/frontend/project-tree.js +0 -174
  242. package/dist/bridges/user/web/frontend/project-tree.js.map +0 -1
  243. package/dist/bridges/user/web/frontend/served-by-bridge.d.ts +0 -10
  244. package/dist/bridges/user/web/frontend/served-by-bridge.d.ts.map +0 -1
  245. package/dist/bridges/user/web/frontend/served-by-bridge.js +0 -10
  246. package/dist/bridges/user/web/frontend/served-by-bridge.js.map +0 -1
  247. package/dist/bridges/user/web/frontend/state.d.ts +0 -39
  248. package/dist/bridges/user/web/frontend/state.d.ts.map +0 -1
  249. package/dist/bridges/user/web/frontend/state.js +0 -82
  250. package/dist/bridges/user/web/frontend/state.js.map +0 -1
  251. package/dist/bridges/user/web/frontend/sw.d.ts +0 -13
  252. package/dist/bridges/user/web/frontend/sw.d.ts.map +0 -1
  253. package/dist/bridges/user/web/frontend/sw.js +0 -91
  254. package/dist/bridges/user/web/frontend/sw.js.map +0 -1
  255. package/dist/bridges/user/web/frontend/tab-contract.d.ts +0 -802
  256. package/dist/bridges/user/web/frontend/tab-contract.d.ts.map +0 -1
  257. package/dist/bridges/user/web/frontend/tab-contract.js +0 -13
  258. package/dist/bridges/user/web/frontend/tab-contract.js.map +0 -1
  259. package/dist/bridges/user/web/frontend/theme.d.ts +0 -154
  260. package/dist/bridges/user/web/frontend/theme.d.ts.map +0 -1
  261. package/dist/bridges/user/web/frontend/theme.js +0 -36
  262. package/dist/bridges/user/web/frontend/theme.js.map +0 -1
  263. package/dist/bridges/user/web/frontend/types.d.ts +0 -189
  264. package/dist/bridges/user/web/frontend/types.d.ts.map +0 -1
  265. package/dist/bridges/user/web/frontend/types.js +0 -7
  266. package/dist/bridges/user/web/frontend/types.js.map +0 -1
  267. package/dist/bridges/user/web/frontend/url-sync.d.ts +0 -48
  268. package/dist/bridges/user/web/frontend/url-sync.d.ts.map +0 -1
  269. package/dist/bridges/user/web/frontend/url-sync.js +0 -76
  270. package/dist/bridges/user/web/frontend/url-sync.js.map +0 -1
  271. package/dist/bridges/user/web/frontend/use-client-state.d.ts +0 -6
  272. package/dist/bridges/user/web/frontend/use-client-state.d.ts.map +0 -1
  273. package/dist/bridges/user/web/frontend/use-client-state.js +0 -8
  274. package/dist/bridges/user/web/frontend/use-client-state.js.map +0 -1
  275. package/dist/bridges/user/web/test/bridge-port-range.integration.test.d.ts +0 -2
  276. package/dist/bridges/user/web/test/bridge-port-range.integration.test.d.ts.map +0 -1
  277. package/dist/bridges/user/web/test/bridge-port-range.integration.test.js +0 -281
  278. package/dist/bridges/user/web/test/bridge-port-range.integration.test.js.map +0 -1
  279. package/dist/bridges/user/web/test/bridge-web-server.helper.d.ts +0 -13
  280. package/dist/bridges/user/web/test/bridge-web-server.helper.d.ts.map +0 -1
  281. package/dist/bridges/user/web/test/bridge-web-server.helper.js +0 -46
  282. package/dist/bridges/user/web/test/bridge-web-server.helper.js.map +0 -1
  283. package/dist/bridges/user/web/test/bridge-web-server.integration.test.d.ts +0 -2
  284. package/dist/bridges/user/web/test/bridge-web-server.integration.test.d.ts.map +0 -1
  285. package/dist/bridges/user/web/test/bridge-web-server.integration.test.js +0 -49
  286. package/dist/bridges/user/web/test/bridge-web-server.integration.test.js.map +0 -1
  287. package/dist/bridges/user/web/test/contract.unit.test.d.ts +0 -2
  288. package/dist/bridges/user/web/test/contract.unit.test.d.ts.map +0 -1
  289. package/dist/bridges/user/web/test/contract.unit.test.js +0 -56
  290. package/dist/bridges/user/web/test/contract.unit.test.js.map +0 -1
  291. package/dist/bridges/user/web/test/event-publisher.unit.test.d.ts +0 -2
  292. package/dist/bridges/user/web/test/event-publisher.unit.test.d.ts.map +0 -1
  293. package/dist/bridges/user/web/test/event-publisher.unit.test.js +0 -245
  294. package/dist/bridges/user/web/test/event-publisher.unit.test.js.map +0 -1
  295. package/dist/bridges/user/web/test/lan-web-server.integration.test.d.ts +0 -7
  296. package/dist/bridges/user/web/test/lan-web-server.integration.test.d.ts.map +0 -1
  297. package/dist/bridges/user/web/test/lan-web-server.integration.test.js +0 -275
  298. package/dist/bridges/user/web/test/lan-web-server.integration.test.js.map +0 -1
  299. package/dist/bridges/user/web/test/orpc-router.integration.test.d.ts +0 -7
  300. package/dist/bridges/user/web/test/orpc-router.integration.test.d.ts.map +0 -1
  301. package/dist/bridges/user/web/test/orpc-router.integration.test.js +0 -264
  302. package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +0 -1
  303. package/dist/bridges/user/web/test/web-access.unit.test.d.ts +0 -5
  304. package/dist/bridges/user/web/test/web-access.unit.test.d.ts.map +0 -1
  305. package/dist/bridges/user/web/test/web-access.unit.test.js +0 -40
  306. package/dist/bridges/user/web/test/web-access.unit.test.js.map +0 -1
  307. package/dist/bridges/user/web/test/web-assets.unit.test.d.ts +0 -5
  308. package/dist/bridges/user/web/test/web-assets.unit.test.d.ts.map +0 -1
  309. package/dist/bridges/user/web/test/web-assets.unit.test.js +0 -90
  310. package/dist/bridges/user/web/test/web-assets.unit.test.js.map +0 -1
  311. package/dist/bridges/user/web/test/web-beacon.unit.test.d.ts +0 -5
  312. package/dist/bridges/user/web/test/web-beacon.unit.test.d.ts.map +0 -1
  313. package/dist/bridges/user/web/test/web-beacon.unit.test.js +0 -40
  314. package/dist/bridges/user/web/test/web-beacon.unit.test.js.map +0 -1
  315. package/dist/bridges/user/web/test/web-console-route.integration.test.d.ts +0 -5
  316. package/dist/bridges/user/web/test/web-console-route.integration.test.d.ts.map +0 -1
  317. package/dist/bridges/user/web/test/web-console-route.integration.test.js +0 -112
  318. package/dist/bridges/user/web/test/web-console-route.integration.test.js.map +0 -1
  319. package/dist/bridges/user/web/test/web-console-static.unit.test.d.ts +0 -5
  320. package/dist/bridges/user/web/test/web-console-static.unit.test.d.ts.map +0 -1
  321. package/dist/bridges/user/web/test/web-console-static.unit.test.js +0 -135
  322. package/dist/bridges/user/web/test/web-console-static.unit.test.js.map +0 -1
  323. package/dist/bridges/user/web/test/web-server-unbuilt-frontend.integration.test.d.ts +0 -2
  324. package/dist/bridges/user/web/test/web-server-unbuilt-frontend.integration.test.d.ts.map +0 -1
  325. package/dist/bridges/user/web/test/web-server-unbuilt-frontend.integration.test.js +0 -77
  326. package/dist/bridges/user/web/test/web-server-unbuilt-frontend.integration.test.js.map +0 -1
  327. package/dist/bridges/user/web/test/web-server.integration.test.d.ts +0 -7
  328. package/dist/bridges/user/web/test/web-server.integration.test.d.ts.map +0 -1
  329. package/dist/bridges/user/web/test/web-server.integration.test.js +0 -266
  330. package/dist/bridges/user/web/test/web-server.integration.test.js.map +0 -1
  331. package/dist/bridges/user/web/vite.config.d.ts +0 -10
  332. package/dist/bridges/user/web/vite.config.d.ts.map +0 -1
  333. package/dist/bridges/user/web/vite.config.js +0 -68
  334. package/dist/bridges/user/web/vite.config.js.map +0 -1
  335. package/dist/core/test/build-action.unit.test.d.ts +0 -2
  336. package/dist/core/test/build-action.unit.test.d.ts.map +0 -1
  337. package/dist/core/test/build-action.unit.test.js +0 -26
  338. package/dist/core/test/build-action.unit.test.js.map +0 -1
  339. package/dist/core/test/identity.unit.test.d.ts +0 -5
  340. package/dist/core/test/identity.unit.test.d.ts.map +0 -1
  341. package/dist/core/test/identity.unit.test.js +0 -168
  342. package/dist/core/test/identity.unit.test.js.map +0 -1
  343. package/dist/core/test/package-version.unit.test.d.ts +0 -5
  344. package/dist/core/test/package-version.unit.test.d.ts.map +0 -1
  345. package/dist/core/test/package-version.unit.test.js +0 -30
  346. package/dist/core/test/package-version.unit.test.js.map +0 -1
  347. package/dist/core/test/version-check.unit.test.d.ts +0 -5
  348. package/dist/core/test/version-check.unit.test.d.ts.map +0 -1
  349. package/dist/core/test/version-check.unit.test.js +0 -191
  350. package/dist/core/test/version-check.unit.test.js.map +0 -1
  351. package/dist/test/account-join.integration.test.d.ts +0 -5
  352. package/dist/test/account-join.integration.test.d.ts.map +0 -1
  353. package/dist/test/account-join.integration.test.js +0 -279
  354. package/dist/test/account-join.integration.test.js.map +0 -1
  355. package/dist/test/account-ledger-helpers.d.ts +0 -35
  356. package/dist/test/account-ledger-helpers.d.ts.map +0 -1
  357. package/dist/test/account-ledger-helpers.js +0 -81
  358. package/dist/test/account-ledger-helpers.js.map +0 -1
  359. package/dist/test/account-ledger-hub-replication.integration.test.d.ts +0 -5
  360. package/dist/test/account-ledger-hub-replication.integration.test.d.ts.map +0 -1
  361. package/dist/test/account-ledger-hub-replication.integration.test.js +0 -100
  362. package/dist/test/account-ledger-hub-replication.integration.test.js.map +0 -1
  363. package/dist/test/account-ledger-lock-worker.d.ts +0 -9
  364. package/dist/test/account-ledger-lock-worker.d.ts.map +0 -1
  365. package/dist/test/account-ledger-lock-worker.js +0 -34
  366. package/dist/test/account-ledger-lock-worker.js.map +0 -1
  367. package/dist/test/account-ledger-lock.integration.test.d.ts +0 -5
  368. package/dist/test/account-ledger-lock.integration.test.d.ts.map +0 -1
  369. package/dist/test/account-ledger-lock.integration.test.js +0 -71
  370. package/dist/test/account-ledger-lock.integration.test.js.map +0 -1
  371. package/dist/test/account-ledger-replication.integration.test.d.ts +0 -5
  372. package/dist/test/account-ledger-replication.integration.test.d.ts.map +0 -1
  373. package/dist/test/account-ledger-replication.integration.test.js +0 -83
  374. package/dist/test/account-ledger-replication.integration.test.js.map +0 -1
  375. package/dist/test/account-ledger.unit.test.d.ts +0 -5
  376. package/dist/test/account-ledger.unit.test.d.ts.map +0 -1
  377. package/dist/test/account-ledger.unit.test.js +0 -317
  378. package/dist/test/account-ledger.unit.test.js.map +0 -1
  379. package/dist/test/account-transfer.unit.test.d.ts +0 -5
  380. package/dist/test/account-transfer.unit.test.d.ts.map +0 -1
  381. package/dist/test/account-transfer.unit.test.js +0 -232
  382. package/dist/test/account-transfer.unit.test.js.map +0 -1
  383. package/dist/test/agent-comms-version-gossip.integration.test.d.ts +0 -5
  384. package/dist/test/agent-comms-version-gossip.integration.test.d.ts.map +0 -1
  385. package/dist/test/agent-comms-version-gossip.integration.test.js +0 -112
  386. package/dist/test/agent-comms-version-gossip.integration.test.js.map +0 -1
  387. package/dist/test/agent-details-hub.integration.test.d.ts +0 -2
  388. package/dist/test/agent-details-hub.integration.test.d.ts.map +0 -1
  389. package/dist/test/agent-details-hub.integration.test.js +0 -64
  390. package/dist/test/agent-details-hub.integration.test.js.map +0 -1
  391. package/dist/test/agent-details-refresh.unit.test.d.ts +0 -5
  392. package/dist/test/agent-details-refresh.unit.test.d.ts.map +0 -1
  393. package/dist/test/agent-details-refresh.unit.test.js +0 -108
  394. package/dist/test/agent-details-refresh.unit.test.js.map +0 -1
  395. package/dist/test/agent-details.unit.test.d.ts +0 -5
  396. package/dist/test/agent-details.unit.test.d.ts.map +0 -1
  397. package/dist/test/agent-details.unit.test.js +0 -86
  398. package/dist/test/agent-details.unit.test.js.map +0 -1
  399. package/dist/test/agent-registry.unit.test.d.ts +0 -2
  400. package/dist/test/agent-registry.unit.test.d.ts.map +0 -1
  401. package/dist/test/agent-registry.unit.test.js +0 -507
  402. package/dist/test/agent-registry.unit.test.js.map +0 -1
  403. package/dist/test/agent-self-gossip.integration.test.d.ts +0 -5
  404. package/dist/test/agent-self-gossip.integration.test.d.ts.map +0 -1
  405. package/dist/test/agent-self-gossip.integration.test.js +0 -102
  406. package/dist/test/agent-self-gossip.integration.test.js.map +0 -1
  407. package/dist/test/approval.integration.test.d.ts +0 -9
  408. package/dist/test/approval.integration.test.d.ts.map +0 -1
  409. package/dist/test/approval.integration.test.js +0 -516
  410. package/dist/test/approval.integration.test.js.map +0 -1
  411. package/dist/test/become-coordinator-actual-port.integration.test.d.ts +0 -5
  412. package/dist/test/become-coordinator-actual-port.integration.test.d.ts.map +0 -1
  413. package/dist/test/become-coordinator-actual-port.integration.test.js +0 -74
  414. package/dist/test/become-coordinator-actual-port.integration.test.js.map +0 -1
  415. package/dist/test/bridge-mesh-data-directory.integration.test.d.ts +0 -2
  416. package/dist/test/bridge-mesh-data-directory.integration.test.d.ts.map +0 -1
  417. package/dist/test/bridge-mesh-data-directory.integration.test.js +0 -234
  418. package/dist/test/bridge-mesh-data-directory.integration.test.js.map +0 -1
  419. package/dist/test/bridge-mesh-version-drift.integration.test.d.ts +0 -7
  420. package/dist/test/bridge-mesh-version-drift.integration.test.d.ts.map +0 -1
  421. package/dist/test/bridge-mesh-version-drift.integration.test.js +0 -98
  422. package/dist/test/bridge-mesh-version-drift.integration.test.js.map +0 -1
  423. package/dist/test/bridge-mesh.integration.test.d.ts +0 -5
  424. package/dist/test/bridge-mesh.integration.test.d.ts.map +0 -1
  425. package/dist/test/bridge-mesh.integration.test.js +0 -206
  426. package/dist/test/bridge-mesh.integration.test.js.map +0 -1
  427. package/dist/test/bridge-stdout.runner.d.ts +0 -5
  428. package/dist/test/bridge-stdout.runner.d.ts.map +0 -1
  429. package/dist/test/bridge-stdout.runner.js +0 -54
  430. package/dist/test/bridge-stdout.runner.js.map +0 -1
  431. package/dist/test/broadcast-window.integration.test.d.ts +0 -7
  432. package/dist/test/broadcast-window.integration.test.d.ts.map +0 -1
  433. package/dist/test/broadcast-window.integration.test.js +0 -74
  434. package/dist/test/broadcast-window.integration.test.js.map +0 -1
  435. package/dist/test/capability-admission-tool-actions.integration.test.d.ts +0 -5
  436. package/dist/test/capability-admission-tool-actions.integration.test.d.ts.map +0 -1
  437. package/dist/test/capability-admission-tool-actions.integration.test.js +0 -198
  438. package/dist/test/capability-admission-tool-actions.integration.test.js.map +0 -1
  439. package/dist/test/capability-ask.unit.test.d.ts +0 -2
  440. package/dist/test/capability-ask.unit.test.d.ts.map +0 -1
  441. package/dist/test/capability-ask.unit.test.js +0 -300
  442. package/dist/test/capability-ask.unit.test.js.map +0 -1
  443. package/dist/test/capability-bubble-up.unit.test.d.ts +0 -2
  444. package/dist/test/capability-bubble-up.unit.test.d.ts.map +0 -1
  445. package/dist/test/capability-bubble-up.unit.test.js +0 -350
  446. package/dist/test/capability-bubble-up.unit.test.js.map +0 -1
  447. package/dist/test/cc-peer-alias-reply-routing.integration.test.d.ts +0 -5
  448. package/dist/test/cc-peer-alias-reply-routing.integration.test.d.ts.map +0 -1
  449. package/dist/test/cc-peer-alias-reply-routing.integration.test.js +0 -149
  450. package/dist/test/cc-peer-alias-reply-routing.integration.test.js.map +0 -1
  451. package/dist/test/cc-peer-approval-commands.unit.test.d.ts +0 -2
  452. package/dist/test/cc-peer-approval-commands.unit.test.d.ts.map +0 -1
  453. package/dist/test/cc-peer-approval-commands.unit.test.js +0 -110
  454. package/dist/test/cc-peer-approval-commands.unit.test.js.map +0 -1
  455. package/dist/test/cc-peer-bridge.unit.test.d.ts +0 -2
  456. package/dist/test/cc-peer-bridge.unit.test.d.ts.map +0 -1
  457. package/dist/test/cc-peer-bridge.unit.test.js +0 -361
  458. package/dist/test/cc-peer-bridge.unit.test.js.map +0 -1
  459. package/dist/test/cc-peer-default-front.unit.test.d.ts +0 -2
  460. package/dist/test/cc-peer-default-front.unit.test.d.ts.map +0 -1
  461. package/dist/test/cc-peer-default-front.unit.test.js +0 -83
  462. package/dist/test/cc-peer-default-front.unit.test.js.map +0 -1
  463. package/dist/test/cc-peer-front-controller.unit.test.d.ts +0 -2
  464. package/dist/test/cc-peer-front-controller.unit.test.d.ts.map +0 -1
  465. package/dist/test/cc-peer-front-controller.unit.test.js +0 -398
  466. package/dist/test/cc-peer-front-controller.unit.test.js.map +0 -1
  467. package/dist/test/cc-peer-front-relay.unit.test.d.ts +0 -2
  468. package/dist/test/cc-peer-front-relay.unit.test.d.ts.map +0 -1
  469. package/dist/test/cc-peer-front-relay.unit.test.js +0 -725
  470. package/dist/test/cc-peer-front-relay.unit.test.js.map +0 -1
  471. package/dist/test/cc-peer-front-runtime-mesh.unit.test.d.ts +0 -2
  472. package/dist/test/cc-peer-front-runtime-mesh.unit.test.d.ts.map +0 -1
  473. package/dist/test/cc-peer-front-runtime-mesh.unit.test.js +0 -57
  474. package/dist/test/cc-peer-front-runtime-mesh.unit.test.js.map +0 -1
  475. package/dist/test/cc-peer-front-runtime.unit.test.d.ts +0 -2
  476. package/dist/test/cc-peer-front-runtime.unit.test.d.ts.map +0 -1
  477. package/dist/test/cc-peer-front-runtime.unit.test.js +0 -72
  478. package/dist/test/cc-peer-front-runtime.unit.test.js.map +0 -1
  479. package/dist/test/cc-peer-front.unit.test.d.ts +0 -2
  480. package/dist/test/cc-peer-front.unit.test.d.ts.map +0 -1
  481. package/dist/test/cc-peer-front.unit.test.js +0 -109
  482. package/dist/test/cc-peer-front.unit.test.js.map +0 -1
  483. package/dist/test/cc-peer-fronted-approval.integration.test.d.ts +0 -5
  484. package/dist/test/cc-peer-fronted-approval.integration.test.d.ts.map +0 -1
  485. package/dist/test/cc-peer-fronted-approval.integration.test.js +0 -138
  486. package/dist/test/cc-peer-fronted-approval.integration.test.js.map +0 -1
  487. package/dist/test/cc-peer-reply-aliases.unit.test.d.ts +0 -2
  488. package/dist/test/cc-peer-reply-aliases.unit.test.d.ts.map +0 -1
  489. package/dist/test/cc-peer-reply-aliases.unit.test.js +0 -142
  490. package/dist/test/cc-peer-reply-aliases.unit.test.js.map +0 -1
  491. package/dist/test/cc-peer-shared-peer.unit.test.d.ts +0 -2
  492. package/dist/test/cc-peer-shared-peer.unit.test.d.ts.map +0 -1
  493. package/dist/test/cc-peer-shared-peer.unit.test.js +0 -48
  494. package/dist/test/cc-peer-shared-peer.unit.test.js.map +0 -1
  495. package/dist/test/chat-controller-mesh-errors.integration.test.d.ts +0 -2
  496. package/dist/test/chat-controller-mesh-errors.integration.test.d.ts.map +0 -1
  497. package/dist/test/chat-controller-mesh-errors.integration.test.js +0 -50
  498. package/dist/test/chat-controller-mesh-errors.integration.test.js.map +0 -1
  499. package/dist/test/ci-required-checks.unit.test.d.ts +0 -2
  500. package/dist/test/ci-required-checks.unit.test.d.ts.map +0 -1
  501. package/dist/test/ci-required-checks.unit.test.js +0 -137
  502. package/dist/test/ci-required-checks.unit.test.js.map +0 -1
  503. package/dist/test/claude-command.unit.test.d.ts +0 -2
  504. package/dist/test/claude-command.unit.test.d.ts.map +0 -1
  505. package/dist/test/claude-command.unit.test.js +0 -11
  506. package/dist/test/claude-command.unit.test.js.map +0 -1
  507. package/dist/test/conformance/corpus-files.d.ts +0 -11
  508. package/dist/test/conformance/corpus-files.d.ts.map +0 -1
  509. package/dist/test/conformance/corpus-files.js +0 -71
  510. package/dist/test/conformance/corpus-files.js.map +0 -1
  511. package/dist/test/conformance/corpus-types.d.ts +0 -62
  512. package/dist/test/conformance/corpus-types.d.ts.map +0 -1
  513. package/dist/test/conformance/corpus-types.js +0 -8
  514. package/dist/test/conformance/corpus-types.js.map +0 -1
  515. package/dist/test/conformance/corpus.d.ts +0 -34
  516. package/dist/test/conformance/corpus.d.ts.map +0 -1
  517. package/dist/test/conformance/corpus.js +0 -134
  518. package/dist/test/conformance/corpus.js.map +0 -1
  519. package/dist/test/conformance/read-json.d.ts +0 -4
  520. package/dist/test/conformance/read-json.d.ts.map +0 -1
  521. package/dist/test/conformance/read-json.js +0 -11
  522. package/dist/test/conformance/read-json.js.map +0 -1
  523. package/dist/test/conformance/test-titles.d.ts +0 -4
  524. package/dist/test/conformance/test-titles.d.ts.map +0 -1
  525. package/dist/test/conformance/test-titles.js +0 -86
  526. package/dist/test/conformance/test-titles.js.map +0 -1
  527. package/dist/test/conformance/text.d.ts +0 -10
  528. package/dist/test/conformance/text.d.ts.map +0 -1
  529. package/dist/test/conformance/text.js +0 -64
  530. package/dist/test/conformance/text.js.map +0 -1
  531. package/dist/test/conformance/validate.d.ts +0 -24
  532. package/dist/test/conformance/validate.d.ts.map +0 -1
  533. package/dist/test/conformance/validate.js +0 -153
  534. package/dist/test/conformance/validate.js.map +0 -1
  535. package/dist/test/conformance-functions.helper.d.ts +0 -19
  536. package/dist/test/conformance-functions.helper.d.ts.map +0 -1
  537. package/dist/test/conformance-functions.helper.js +0 -586
  538. package/dist/test/conformance-functions.helper.js.map +0 -1
  539. package/dist/test/conformance-kept-tests.unit.test.d.ts +0 -2
  540. package/dist/test/conformance-kept-tests.unit.test.d.ts.map +0 -1
  541. package/dist/test/conformance-kept-tests.unit.test.js +0 -220
  542. package/dist/test/conformance-kept-tests.unit.test.js.map +0 -1
  543. package/dist/test/conformance.unit.test.d.ts +0 -2
  544. package/dist/test/conformance.unit.test.d.ts.map +0 -1
  545. package/dist/test/conformance.unit.test.js +0 -371
  546. package/dist/test/conformance.unit.test.js.map +0 -1
  547. package/dist/test/connection-approval.unit.test.d.ts +0 -2
  548. package/dist/test/connection-approval.unit.test.d.ts.map +0 -1
  549. package/dist/test/connection-approval.unit.test.js +0 -194
  550. package/dist/test/connection-approval.unit.test.js.map +0 -1
  551. package/dist/test/connection-code-ledger-persistence.unit.test.d.ts +0 -5
  552. package/dist/test/connection-code-ledger-persistence.unit.test.d.ts.map +0 -1
  553. package/dist/test/connection-code-ledger-persistence.unit.test.js +0 -84
  554. package/dist/test/connection-code-ledger-persistence.unit.test.js.map +0 -1
  555. package/dist/test/connection-code-tool.e2e.test.d.ts +0 -2
  556. package/dist/test/connection-code-tool.e2e.test.d.ts.map +0 -1
  557. package/dist/test/connection-code-tool.e2e.test.js +0 -300
  558. package/dist/test/connection-code-tool.e2e.test.js.map +0 -1
  559. package/dist/test/connection-code.unit.test.d.ts +0 -5
  560. package/dist/test/connection-code.unit.test.d.ts.map +0 -1
  561. package/dist/test/connection-code.unit.test.js +0 -234
  562. package/dist/test/connection-code.unit.test.js.map +0 -1
  563. package/dist/test/coordinator-claim-sessions.integration.test.d.ts +0 -5
  564. package/dist/test/coordinator-claim-sessions.integration.test.d.ts.map +0 -1
  565. package/dist/test/coordinator-claim-sessions.integration.test.js +0 -276
  566. package/dist/test/coordinator-claim-sessions.integration.test.js.map +0 -1
  567. package/dist/test/coordinator-election.integration.test.d.ts +0 -5
  568. package/dist/test/coordinator-election.integration.test.d.ts.map +0 -1
  569. package/dist/test/coordinator-election.integration.test.js +0 -182
  570. package/dist/test/coordinator-election.integration.test.js.map +0 -1
  571. package/dist/test/coordinator-failover-hub.integration.test.d.ts +0 -5
  572. package/dist/test/coordinator-failover-hub.integration.test.d.ts.map +0 -1
  573. package/dist/test/coordinator-failover-hub.integration.test.js +0 -84
  574. package/dist/test/coordinator-failover-hub.integration.test.js.map +0 -1
  575. package/dist/test/coordinator-failover.integration.test.d.ts +0 -5
  576. package/dist/test/coordinator-failover.integration.test.d.ts.map +0 -1
  577. package/dist/test/coordinator-failover.integration.test.js +0 -150
  578. package/dist/test/coordinator-failover.integration.test.js.map +0 -1
  579. package/dist/test/coordinator-failover.unit.test.d.ts +0 -5
  580. package/dist/test/coordinator-failover.unit.test.d.ts.map +0 -1
  581. package/dist/test/coordinator-failover.unit.test.js +0 -377
  582. package/dist/test/coordinator-failover.unit.test.js.map +0 -1
  583. package/dist/test/coordinator-role.unit.test.d.ts +0 -5
  584. package/dist/test/coordinator-role.unit.test.d.ts.map +0 -1
  585. package/dist/test/coordinator-role.unit.test.js +0 -410
  586. package/dist/test/coordinator-role.unit.test.js.map +0 -1
  587. package/dist/test/coordinator-socket-error.integration.test.d.ts +0 -8
  588. package/dist/test/coordinator-socket-error.integration.test.d.ts.map +0 -1
  589. package/dist/test/coordinator-socket-error.integration.test.js +0 -47
  590. package/dist/test/coordinator-socket-error.integration.test.js.map +0 -1
  591. package/dist/test/create-room-mints-owner-grant.integration.test.d.ts +0 -5
  592. package/dist/test/create-room-mints-owner-grant.integration.test.d.ts.map +0 -1
  593. package/dist/test/create-room-mints-owner-grant.integration.test.js +0 -54
  594. package/dist/test/create-room-mints-owner-grant.integration.test.js.map +0 -1
  595. package/dist/test/create-room-name-sanitisation.integration.test.d.ts +0 -5
  596. package/dist/test/create-room-name-sanitisation.integration.test.d.ts.map +0 -1
  597. package/dist/test/create-room-name-sanitisation.integration.test.js +0 -51
  598. package/dist/test/create-room-name-sanitisation.integration.test.js.map +0 -1
  599. package/dist/test/data-directory.unit.test.d.ts +0 -2
  600. package/dist/test/data-directory.unit.test.d.ts.map +0 -1
  601. package/dist/test/data-directory.unit.test.js +0 -27
  602. package/dist/test/data-directory.unit.test.js.map +0 -1
  603. package/dist/test/data-frame-routing.unit.test.d.ts +0 -5
  604. package/dist/test/data-frame-routing.unit.test.d.ts.map +0 -1
  605. package/dist/test/data-frame-routing.unit.test.js +0 -79
  606. package/dist/test/data-frame-routing.unit.test.js.map +0 -1
  607. package/dist/test/data-sync-frame-handling.integration.test.d.ts +0 -5
  608. package/dist/test/data-sync-frame-handling.integration.test.d.ts.map +0 -1
  609. package/dist/test/data-sync-frame-handling.integration.test.js +0 -118
  610. package/dist/test/data-sync-frame-handling.integration.test.js.map +0 -1
  611. package/dist/test/delivery-engine-delivery.unit.test.d.ts +0 -2
  612. package/dist/test/delivery-engine-delivery.unit.test.d.ts.map +0 -1
  613. package/dist/test/delivery-engine-delivery.unit.test.js +0 -729
  614. package/dist/test/delivery-engine-delivery.unit.test.js.map +0 -1
  615. package/dist/test/delivery-engine-directed-notify.unit.test.d.ts +0 -2
  616. package/dist/test/delivery-engine-directed-notify.unit.test.d.ts.map +0 -1
  617. package/dist/test/delivery-engine-directed-notify.unit.test.js +0 -319
  618. package/dist/test/delivery-engine-directed-notify.unit.test.js.map +0 -1
  619. package/dist/test/delivery-engine-own-agent.unit.test.d.ts +0 -2
  620. package/dist/test/delivery-engine-own-agent.unit.test.d.ts.map +0 -1
  621. package/dist/test/delivery-engine-own-agent.unit.test.js +0 -144
  622. package/dist/test/delivery-engine-own-agent.unit.test.js.map +0 -1
  623. package/dist/test/delivery-engine.unit.test.d.ts +0 -2
  624. package/dist/test/delivery-engine.unit.test.d.ts.map +0 -1
  625. package/dist/test/delivery-engine.unit.test.js +0 -711
  626. package/dist/test/delivery-engine.unit.test.js.map +0 -1
  627. package/dist/test/delivery-receipt.helper.d.ts +0 -16
  628. package/dist/test/delivery-receipt.helper.d.ts.map +0 -1
  629. package/dist/test/delivery-receipt.helper.js +0 -480
  630. package/dist/test/delivery-receipt.helper.js.map +0 -1
  631. package/dist/test/delivery-receipt.runner.d.ts +0 -8
  632. package/dist/test/delivery-receipt.runner.d.ts.map +0 -1
  633. package/dist/test/delivery-receipt.runner.js +0 -46
  634. package/dist/test/delivery-receipt.runner.js.map +0 -1
  635. package/dist/test/device-membership-verification.unit.test.d.ts +0 -2
  636. package/dist/test/device-membership-verification.unit.test.d.ts.map +0 -1
  637. package/dist/test/device-membership-verification.unit.test.js +0 -214
  638. package/dist/test/device-membership-verification.unit.test.js.map +0 -1
  639. package/dist/test/device-membership.unit.test.d.ts +0 -2
  640. package/dist/test/device-membership.unit.test.d.ts.map +0 -1
  641. package/dist/test/device-membership.unit.test.js +0 -250
  642. package/dist/test/device-membership.unit.test.js.map +0 -1
  643. package/dist/test/directory-admission.unit.test.d.ts +0 -2
  644. package/dist/test/directory-admission.unit.test.d.ts.map +0 -1
  645. package/dist/test/directory-admission.unit.test.js +0 -300
  646. package/dist/test/directory-admission.unit.test.js.map +0 -1
  647. package/dist/test/discovery-mdns.unit.test.d.ts +0 -2
  648. package/dist/test/discovery-mdns.unit.test.d.ts.map +0 -1
  649. package/dist/test/discovery-mdns.unit.test.js +0 -123
  650. package/dist/test/discovery-mdns.unit.test.js.map +0 -1
  651. package/dist/test/dm-admission.integration.test.d.ts +0 -7
  652. package/dist/test/dm-admission.integration.test.d.ts.map +0 -1
  653. package/dist/test/dm-admission.integration.test.js +0 -90
  654. package/dist/test/dm-admission.integration.test.js.map +0 -1
  655. package/dist/test/dm-delivery-status.integration.test.d.ts +0 -5
  656. package/dist/test/dm-delivery-status.integration.test.d.ts.map +0 -1
  657. package/dist/test/dm-delivery-status.integration.test.js +0 -72
  658. package/dist/test/dm-delivery-status.integration.test.js.map +0 -1
  659. package/dist/test/dm-first-contact.integration.test.d.ts +0 -5
  660. package/dist/test/dm-first-contact.integration.test.d.ts.map +0 -1
  661. package/dist/test/dm-first-contact.integration.test.js +0 -100
  662. package/dist/test/dm-first-contact.integration.test.js.map +0 -1
  663. package/dist/test/dm-grant-actions.unit.test.d.ts +0 -2
  664. package/dist/test/dm-grant-actions.unit.test.d.ts.map +0 -1
  665. package/dist/test/dm-grant-actions.unit.test.js +0 -78
  666. package/dist/test/dm-grant-actions.unit.test.js.map +0 -1
  667. package/dist/test/dm-grant-tool.integration.test.d.ts +0 -5
  668. package/dist/test/dm-grant-tool.integration.test.d.ts.map +0 -1
  669. package/dist/test/dm-grant-tool.integration.test.js +0 -253
  670. package/dist/test/dm-grant-tool.integration.test.js.map +0 -1
  671. package/dist/test/dm-send-capability-admission.integration.test.d.ts +0 -5
  672. package/dist/test/dm-send-capability-admission.integration.test.d.ts.map +0 -1
  673. package/dist/test/dm-send-capability-admission.integration.test.js +0 -165
  674. package/dist/test/dm-send-capability-admission.integration.test.js.map +0 -1
  675. package/dist/test/dm-send-delegation.unit.test.d.ts +0 -2
  676. package/dist/test/dm-send-delegation.unit.test.d.ts.map +0 -1
  677. package/dist/test/dm-send-delegation.unit.test.js +0 -180
  678. package/dist/test/dm-send-delegation.unit.test.js.map +0 -1
  679. package/dist/test/dm-send-principal-delegation.integration.test.d.ts +0 -2
  680. package/dist/test/dm-send-principal-delegation.integration.test.d.ts.map +0 -1
  681. package/dist/test/dm-send-principal-delegation.integration.test.js +0 -90
  682. package/dist/test/dm-send-principal-delegation.integration.test.js.map +0 -1
  683. package/dist/test/dm-token-verification.unit.test.d.ts +0 -5
  684. package/dist/test/dm-token-verification.unit.test.d.ts.map +0 -1
  685. package/dist/test/dm-token-verification.unit.test.js +0 -164
  686. package/dist/test/dm-token-verification.unit.test.js.map +0 -1
  687. package/dist/test/election-sessions.unit.test.d.ts +0 -5
  688. package/dist/test/election-sessions.unit.test.d.ts.map +0 -1
  689. package/dist/test/election-sessions.unit.test.js +0 -104
  690. package/dist/test/election-sessions.unit.test.js.map +0 -1
  691. package/dist/test/error-reporting.unit.test.d.ts +0 -2
  692. package/dist/test/error-reporting.unit.test.d.ts.map +0 -1
  693. package/dist/test/error-reporting.unit.test.js +0 -20
  694. package/dist/test/error-reporting.unit.test.js.map +0 -1
  695. package/dist/test/filestore.unit.test.d.ts +0 -5
  696. package/dist/test/filestore.unit.test.d.ts.map +0 -1
  697. package/dist/test/filestore.unit.test.js +0 -175
  698. package/dist/test/filestore.unit.test.js.map +0 -1
  699. package/dist/test/first-contact.unit.test.d.ts +0 -2
  700. package/dist/test/first-contact.unit.test.d.ts.map +0 -1
  701. package/dist/test/first-contact.unit.test.js +0 -209
  702. package/dist/test/first-contact.unit.test.js.map +0 -1
  703. package/dist/test/front-real-bridge-identity-overlap.integration.test.d.ts +0 -7
  704. package/dist/test/front-real-bridge-identity-overlap.integration.test.d.ts.map +0 -1
  705. package/dist/test/front-real-bridge-identity-overlap.integration.test.js +0 -95
  706. package/dist/test/front-real-bridge-identity-overlap.integration.test.js.map +0 -1
  707. package/dist/test/gateway-trust-recheck.unit.test.d.ts +0 -2
  708. package/dist/test/gateway-trust-recheck.unit.test.d.ts.map +0 -1
  709. package/dist/test/gateway-trust-recheck.unit.test.js +0 -75
  710. package/dist/test/gateway-trust-recheck.unit.test.js.map +0 -1
  711. package/dist/test/gateway-trust-tool.integration.test.d.ts +0 -2
  712. package/dist/test/gateway-trust-tool.integration.test.d.ts.map +0 -1
  713. package/dist/test/gateway-trust-tool.integration.test.js +0 -352
  714. package/dist/test/gateway-trust-tool.integration.test.js.map +0 -1
  715. package/dist/test/gateway-trust.integration.test.d.ts +0 -5
  716. package/dist/test/gateway-trust.integration.test.d.ts.map +0 -1
  717. package/dist/test/gateway-trust.integration.test.js +0 -200
  718. package/dist/test/gateway-trust.integration.test.js.map +0 -1
  719. package/dist/test/gateway-trust.unit.test.d.ts +0 -2
  720. package/dist/test/gateway-trust.unit.test.d.ts.map +0 -1
  721. package/dist/test/gateway-trust.unit.test.js +0 -387
  722. package/dist/test/gateway-trust.unit.test.js.map +0 -1
  723. package/dist/test/gossip-directory-aggregation.integration.test.d.ts +0 -5
  724. package/dist/test/gossip-directory-aggregation.integration.test.d.ts.map +0 -1
  725. package/dist/test/gossip-directory-aggregation.integration.test.js +0 -98
  726. package/dist/test/gossip-directory-aggregation.integration.test.js.map +0 -1
  727. package/dist/test/gossip-directory.unit.test.d.ts +0 -2
  728. package/dist/test/gossip-directory.unit.test.d.ts.map +0 -1
  729. package/dist/test/gossip-directory.unit.test.js +0 -192
  730. package/dist/test/gossip-directory.unit.test.js.map +0 -1
  731. package/dist/test/gossip-listener-addresses.integration.test.d.ts +0 -5
  732. package/dist/test/gossip-listener-addresses.integration.test.d.ts.map +0 -1
  733. package/dist/test/gossip-listener-addresses.integration.test.js +0 -90
  734. package/dist/test/gossip-listener-addresses.integration.test.js.map +0 -1
  735. package/dist/test/handshake.integration.test.d.ts +0 -5
  736. package/dist/test/handshake.integration.test.d.ts.map +0 -1
  737. package/dist/test/handshake.integration.test.js +0 -211
  738. package/dist/test/handshake.integration.test.js.map +0 -1
  739. package/dist/test/hidden-line.unit.test.d.ts +0 -5
  740. package/dist/test/hidden-line.unit.test.d.ts.map +0 -1
  741. package/dist/test/hidden-line.unit.test.js +0 -40
  742. package/dist/test/hidden-line.unit.test.js.map +0 -1
  743. package/dist/test/hosted-rooms-gossip.integration.test.d.ts +0 -5
  744. package/dist/test/hosted-rooms-gossip.integration.test.d.ts.map +0 -1
  745. package/dist/test/hosted-rooms-gossip.integration.test.js +0 -103
  746. package/dist/test/hosted-rooms-gossip.integration.test.js.map +0 -1
  747. package/dist/test/hub-exposure.integration.test.d.ts +0 -5
  748. package/dist/test/hub-exposure.integration.test.d.ts.map +0 -1
  749. package/dist/test/hub-exposure.integration.test.js +0 -165
  750. package/dist/test/hub-exposure.integration.test.js.map +0 -1
  751. package/dist/test/hub-helpers.d.ts +0 -45
  752. package/dist/test/hub-helpers.d.ts.map +0 -1
  753. package/dist/test/hub-helpers.js +0 -245
  754. package/dist/test/hub-helpers.js.map +0 -1
  755. package/dist/test/hub-link.unit.test.d.ts +0 -2
  756. package/dist/test/hub-link.unit.test.d.ts.map +0 -1
  757. package/dist/test/hub-link.unit.test.js +0 -256
  758. package/dist/test/hub-link.unit.test.js.map +0 -1
  759. package/dist/test/hub-mode-session.integration.test.d.ts +0 -2
  760. package/dist/test/hub-mode-session.integration.test.d.ts.map +0 -1
  761. package/dist/test/hub-mode-session.integration.test.js +0 -173
  762. package/dist/test/hub-mode-session.integration.test.js.map +0 -1
  763. package/dist/test/hub-peer-per-store.integration.test.d.ts +0 -9
  764. package/dist/test/hub-peer-per-store.integration.test.d.ts.map +0 -1
  765. package/dist/test/hub-peer-per-store.integration.test.js +0 -218
  766. package/dist/test/hub-peer-per-store.integration.test.js.map +0 -1
  767. package/dist/test/hub-room-domain-verb-trust-bypass.integration.test.d.ts +0 -7
  768. package/dist/test/hub-room-domain-verb-trust-bypass.integration.test.d.ts.map +0 -1
  769. package/dist/test/hub-room-domain-verb-trust-bypass.integration.test.js +0 -93
  770. package/dist/test/hub-room-domain-verb-trust-bypass.integration.test.js.map +0 -1
  771. package/dist/test/hub-session-close.integration.test.d.ts +0 -5
  772. package/dist/test/hub-session-close.integration.test.d.ts.map +0 -1
  773. package/dist/test/hub-session-close.integration.test.js +0 -38
  774. package/dist/test/hub-session-close.integration.test.js.map +0 -1
  775. package/dist/test/hub-session-dispatch.unit.test.d.ts +0 -5
  776. package/dist/test/hub-session-dispatch.unit.test.d.ts.map +0 -1
  777. package/dist/test/hub-session-dispatch.unit.test.js +0 -192
  778. package/dist/test/hub-session-dispatch.unit.test.js.map +0 -1
  779. package/dist/test/identity-cert.unit.test.d.ts +0 -7
  780. package/dist/test/identity-cert.unit.test.d.ts.map +0 -1
  781. package/dist/test/identity-cert.unit.test.js +0 -19
  782. package/dist/test/identity-cert.unit.test.js.map +0 -1
  783. package/dist/test/identity-device-id.unit.test.d.ts +0 -5
  784. package/dist/test/identity-device-id.unit.test.d.ts.map +0 -1
  785. package/dist/test/identity-device-id.unit.test.js +0 -34
  786. package/dist/test/identity-device-id.unit.test.js.map +0 -1
  787. package/dist/test/identity-restart.integration.test.d.ts +0 -7
  788. package/dist/test/identity-restart.integration.test.d.ts.map +0 -1
  789. package/dist/test/identity-restart.integration.test.js +0 -173
  790. package/dist/test/identity-restart.integration.test.js.map +0 -1
  791. package/dist/test/identity-store-race-worker.d.ts +0 -7
  792. package/dist/test/identity-store-race-worker.d.ts.map +0 -1
  793. package/dist/test/identity-store-race-worker.js +0 -33
  794. package/dist/test/identity-store-race-worker.js.map +0 -1
  795. package/dist/test/identity-store-race.integration.test.d.ts +0 -5
  796. package/dist/test/identity-store-race.integration.test.d.ts.map +0 -1
  797. package/dist/test/identity-store-race.integration.test.js +0 -47
  798. package/dist/test/identity-store-race.integration.test.js.map +0 -1
  799. package/dist/test/identity-store-wait.unit.test.d.ts +0 -2
  800. package/dist/test/identity-store-wait.unit.test.d.ts.map +0 -1
  801. package/dist/test/identity-store-wait.unit.test.js +0 -75
  802. package/dist/test/identity-store-wait.unit.test.js.map +0 -1
  803. package/dist/test/identity-store.integration.test.d.ts +0 -5
  804. package/dist/test/identity-store.integration.test.d.ts.map +0 -1
  805. package/dist/test/identity-store.integration.test.js +0 -376
  806. package/dist/test/identity-store.integration.test.js.map +0 -1
  807. package/dist/test/issuer-grouping.unit.test.d.ts +0 -2
  808. package/dist/test/issuer-grouping.unit.test.d.ts.map +0 -1
  809. package/dist/test/issuer-grouping.unit.test.js +0 -137
  810. package/dist/test/issuer-grouping.unit.test.js.map +0 -1
  811. package/dist/test/lan-web-uis.unit.test.d.ts +0 -5
  812. package/dist/test/lan-web-uis.unit.test.d.ts.map +0 -1
  813. package/dist/test/lan-web-uis.unit.test.js +0 -72
  814. package/dist/test/lan-web-uis.unit.test.js.map +0 -1
  815. package/dist/test/listener-policy.integration.test.d.ts +0 -9
  816. package/dist/test/listener-policy.integration.test.d.ts.map +0 -1
  817. package/dist/test/listener-policy.integration.test.js +0 -310
  818. package/dist/test/listener-policy.integration.test.js.map +0 -1
  819. package/dist/test/loopback-address.unit.test.d.ts +0 -5
  820. package/dist/test/loopback-address.unit.test.d.ts.map +0 -1
  821. package/dist/test/loopback-address.unit.test.js +0 -28
  822. package/dist/test/loopback-address.unit.test.js.map +0 -1
  823. package/dist/test/machine-identity.unit.test.d.ts +0 -5
  824. package/dist/test/machine-identity.unit.test.d.ts.map +0 -1
  825. package/dist/test/machine-identity.unit.test.js +0 -80
  826. package/dist/test/machine-identity.unit.test.js.map +0 -1
  827. package/dist/test/machine-membership-trust.integration.test.d.ts +0 -5
  828. package/dist/test/machine-membership-trust.integration.test.d.ts.map +0 -1
  829. package/dist/test/machine-membership-trust.integration.test.js +0 -151
  830. package/dist/test/machine-membership-trust.integration.test.js.map +0 -1
  831. package/dist/test/manual-clock.d.ts +0 -7
  832. package/dist/test/manual-clock.d.ts.map +0 -1
  833. package/dist/test/manual-clock.js +0 -10
  834. package/dist/test/manual-clock.js.map +0 -1
  835. package/dist/test/mcp-stdout-channel.integration.test.d.ts +0 -5
  836. package/dist/test/mcp-stdout-channel.integration.test.d.ts.map +0 -1
  837. package/dist/test/mcp-stdout-channel.integration.test.js +0 -123
  838. package/dist/test/mcp-stdout-channel.integration.test.js.map +0 -1
  839. package/dist/test/mcp-tool-action-enum.unit.test.d.ts +0 -2
  840. package/dist/test/mcp-tool-action-enum.unit.test.d.ts.map +0 -1
  841. package/dist/test/mcp-tool-action-enum.unit.test.js +0 -12
  842. package/dist/test/mcp-tool-action-enum.unit.test.js.map +0 -1
  843. package/dist/test/membership-proof.unit.test.d.ts +0 -2
  844. package/dist/test/membership-proof.unit.test.d.ts.map +0 -1
  845. package/dist/test/membership-proof.unit.test.js +0 -238
  846. package/dist/test/membership-proof.unit.test.js.map +0 -1
  847. package/dist/test/mesh-e2e.integration.test.d.ts +0 -8
  848. package/dist/test/mesh-e2e.integration.test.d.ts.map +0 -1
  849. package/dist/test/mesh-e2e.integration.test.js +0 -177
  850. package/dist/test/mesh-e2e.integration.test.js.map +0 -1
  851. package/dist/test/mesh-graph-trace-tool.e2e.test.d.ts +0 -2
  852. package/dist/test/mesh-graph-trace-tool.e2e.test.d.ts.map +0 -1
  853. package/dist/test/mesh-graph-trace-tool.e2e.test.js +0 -99
  854. package/dist/test/mesh-graph-trace-tool.e2e.test.js.map +0 -1
  855. package/dist/test/mesh-graph-trace.integration.test.d.ts +0 -5
  856. package/dist/test/mesh-graph-trace.integration.test.d.ts.map +0 -1
  857. package/dist/test/mesh-graph-trace.integration.test.js +0 -153
  858. package/dist/test/mesh-graph-trace.integration.test.js.map +0 -1
  859. package/dist/test/mesh-graph.unit.test.d.ts +0 -5
  860. package/dist/test/mesh-graph.unit.test.d.ts.map +0 -1
  861. package/dist/test/mesh-graph.unit.test.js +0 -121
  862. package/dist/test/mesh-graph.unit.test.js.map +0 -1
  863. package/dist/test/mesh-smoke.runner.d.ts +0 -9
  864. package/dist/test/mesh-smoke.runner.d.ts.map +0 -1
  865. package/dist/test/mesh-smoke.runner.js +0 -262
  866. package/dist/test/mesh-smoke.runner.js.map +0 -1
  867. package/dist/test/mesh-store-delivery-listeners.integration.test.d.ts +0 -2
  868. package/dist/test/mesh-store-delivery-listeners.integration.test.d.ts.map +0 -1
  869. package/dist/test/mesh-store-delivery-listeners.integration.test.js +0 -160
  870. package/dist/test/mesh-store-delivery-listeners.integration.test.js.map +0 -1
  871. package/dist/test/mesh-store-durable-send.integration.test.d.ts +0 -2
  872. package/dist/test/mesh-store-durable-send.integration.test.d.ts.map +0 -1
  873. package/dist/test/mesh-store-durable-send.integration.test.js +0 -55
  874. package/dist/test/mesh-store-durable-send.integration.test.js.map +0 -1
  875. package/dist/test/mesh-store-orchestration.unit.test.d.ts +0 -2
  876. package/dist/test/mesh-store-orchestration.unit.test.d.ts.map +0 -1
  877. package/dist/test/mesh-store-orchestration.unit.test.js +0 -662
  878. package/dist/test/mesh-store-orchestration.unit.test.js.map +0 -1
  879. package/dist/test/mesh-store-shared.unit.test.d.ts +0 -2
  880. package/dist/test/mesh-store-shared.unit.test.d.ts.map +0 -1
  881. package/dist/test/mesh-store-shared.unit.test.js +0 -107
  882. package/dist/test/mesh-store-shared.unit.test.js.map +0 -1
  883. package/dist/test/name-claim.unit.test.d.ts +0 -5
  884. package/dist/test/name-claim.unit.test.d.ts.map +0 -1
  885. package/dist/test/name-claim.unit.test.js +0 -135
  886. package/dist/test/name-claim.unit.test.js.map +0 -1
  887. package/dist/test/naming.integration.test.d.ts +0 -5
  888. package/dist/test/naming.integration.test.d.ts.map +0 -1
  889. package/dist/test/naming.integration.test.js +0 -231
  890. package/dist/test/naming.integration.test.js.map +0 -1
  891. package/dist/test/peer-lifecycle.unit.test.d.ts +0 -2
  892. package/dist/test/peer-lifecycle.unit.test.d.ts.map +0 -1
  893. package/dist/test/peer-lifecycle.unit.test.js +0 -252
  894. package/dist/test/peer-lifecycle.unit.test.js.map +0 -1
  895. package/dist/test/peer-link-error.integration.test.d.ts +0 -2
  896. package/dist/test/peer-link-error.integration.test.d.ts.map +0 -1
  897. package/dist/test/peer-link-error.integration.test.js +0 -33
  898. package/dist/test/peer-link-error.integration.test.js.map +0 -1
  899. package/dist/test/peer-versions.unit.test.d.ts +0 -5
  900. package/dist/test/peer-versions.unit.test.d.ts.map +0 -1
  901. package/dist/test/peer-versions.unit.test.js +0 -68
  902. package/dist/test/peer-versions.unit.test.js.map +0 -1
  903. package/dist/test/petnames.unit.test.d.ts +0 -5
  904. package/dist/test/petnames.unit.test.d.ts.map +0 -1
  905. package/dist/test/petnames.unit.test.js +0 -94
  906. package/dist/test/petnames.unit.test.js.map +0 -1
  907. package/dist/test/pgp-keyserver.unit.test.d.ts +0 -5
  908. package/dist/test/pgp-keyserver.unit.test.d.ts.map +0 -1
  909. package/dist/test/pgp-keyserver.unit.test.js +0 -24
  910. package/dist/test/pgp-keyserver.unit.test.js.map +0 -1
  911. package/dist/test/pi-manifest-packed.integration.test.d.ts +0 -2
  912. package/dist/test/pi-manifest-packed.integration.test.d.ts.map +0 -1
  913. package/dist/test/pi-manifest-packed.integration.test.js +0 -68
  914. package/dist/test/pi-manifest-packed.integration.test.js.map +0 -1
  915. package/dist/test/plugin-hooks.unit.test.d.ts +0 -2
  916. package/dist/test/plugin-hooks.unit.test.d.ts.map +0 -1
  917. package/dist/test/plugin-hooks.unit.test.js +0 -99
  918. package/dist/test/plugin-hooks.unit.test.js.map +0 -1
  919. package/dist/test/presence-readvertise.integration.test.d.ts +0 -5
  920. package/dist/test/presence-readvertise.integration.test.d.ts.map +0 -1
  921. package/dist/test/presence-readvertise.integration.test.js +0 -139
  922. package/dist/test/presence-readvertise.integration.test.js.map +0 -1
  923. package/dist/test/principal-membership-trust.integration.test.d.ts +0 -5
  924. package/dist/test/principal-membership-trust.integration.test.d.ts.map +0 -1
  925. package/dist/test/principal-membership-trust.integration.test.js +0 -169
  926. package/dist/test/principal-membership-trust.integration.test.js.map +0 -1
  927. package/dist/test/query-version.integration.test.d.ts +0 -5
  928. package/dist/test/query-version.integration.test.d.ts.map +0 -1
  929. package/dist/test/query-version.integration.test.js +0 -68
  930. package/dist/test/query-version.integration.test.js.map +0 -1
  931. package/dist/test/random-id.unit.test.d.ts +0 -2
  932. package/dist/test/random-id.unit.test.d.ts.map +0 -1
  933. package/dist/test/random-id.unit.test.js +0 -16
  934. package/dist/test/random-id.unit.test.js.map +0 -1
  935. package/dist/test/relay-role.integration.test.d.ts +0 -5
  936. package/dist/test/relay-role.integration.test.d.ts.map +0 -1
  937. package/dist/test/relay-role.integration.test.js +0 -134
  938. package/dist/test/relay-role.integration.test.js.map +0 -1
  939. package/dist/test/room-admission-tool-actions.integration.test.d.ts +0 -5
  940. package/dist/test/room-admission-tool-actions.integration.test.d.ts.map +0 -1
  941. package/dist/test/room-admission-tool-actions.integration.test.js +0 -166
  942. package/dist/test/room-admission-tool-actions.integration.test.js.map +0 -1
  943. package/dist/test/room-destroy-revocation.integration.test.d.ts +0 -5
  944. package/dist/test/room-destroy-revocation.integration.test.d.ts.map +0 -1
  945. package/dist/test/room-destroy-revocation.integration.test.js +0 -62
  946. package/dist/test/room-destroy-revocation.integration.test.js.map +0 -1
  947. package/dist/test/room-invite-directed.integration.test.d.ts +0 -5
  948. package/dist/test/room-invite-directed.integration.test.d.ts.map +0 -1
  949. package/dist/test/room-invite-directed.integration.test.js +0 -94
  950. package/dist/test/room-invite-directed.integration.test.js.map +0 -1
  951. package/dist/test/room-join-admission.integration.test.d.ts +0 -7
  952. package/dist/test/room-join-admission.integration.test.d.ts.map +0 -1
  953. package/dist/test/room-join-admission.integration.test.js +0 -228
  954. package/dist/test/room-join-admission.integration.test.js.map +0 -1
  955. package/dist/test/room-join-approval-timeout.integration.test.d.ts +0 -5
  956. package/dist/test/room-join-approval-timeout.integration.test.d.ts.map +0 -1
  957. package/dist/test/room-join-approval-timeout.integration.test.js +0 -77
  958. package/dist/test/room-join-approval-timeout.integration.test.js.map +0 -1
  959. package/dist/test/room-join-by-bare-name.integration.test.d.ts +0 -5
  960. package/dist/test/room-join-by-bare-name.integration.test.d.ts.map +0 -1
  961. package/dist/test/room-join-by-bare-name.integration.test.js +0 -128
  962. package/dist/test/room-join-by-bare-name.integration.test.js.map +0 -1
  963. package/dist/test/room-kick-revocation.integration.test.d.ts +0 -7
  964. package/dist/test/room-kick-revocation.integration.test.d.ts.map +0 -1
  965. package/dist/test/room-kick-revocation.integration.test.js +0 -78
  966. package/dist/test/room-kick-revocation.integration.test.js.map +0 -1
  967. package/dist/test/room-leave-revocation.integration.test.d.ts +0 -5
  968. package/dist/test/room-leave-revocation.integration.test.d.ts.map +0 -1
  969. package/dist/test/room-leave-revocation.integration.test.js +0 -95
  970. package/dist/test/room-leave-revocation.integration.test.js.map +0 -1
  971. package/dist/test/room-lifecycle-bare-name.unit.test.d.ts +0 -2
  972. package/dist/test/room-lifecycle-bare-name.unit.test.d.ts.map +0 -1
  973. package/dist/test/room-lifecycle-bare-name.unit.test.js +0 -181
  974. package/dist/test/room-lifecycle-bare-name.unit.test.js.map +0 -1
  975. package/dist/test/room-lifecycle-membership.unit.test.d.ts +0 -2
  976. package/dist/test/room-lifecycle-membership.unit.test.d.ts.map +0 -1
  977. package/dist/test/room-lifecycle-membership.unit.test.js +0 -551
  978. package/dist/test/room-lifecycle-membership.unit.test.js.map +0 -1
  979. package/dist/test/room-lifecycle-remote.unit.test.d.ts +0 -2
  980. package/dist/test/room-lifecycle-remote.unit.test.d.ts.map +0 -1
  981. package/dist/test/room-lifecycle-remote.unit.test.js +0 -388
  982. package/dist/test/room-lifecycle-remote.unit.test.js.map +0 -1
  983. package/dist/test/room-lifecycle.unit.test.d.ts +0 -2
  984. package/dist/test/room-lifecycle.unit.test.d.ts.map +0 -1
  985. package/dist/test/room-lifecycle.unit.test.js +0 -561
  986. package/dist/test/room-lifecycle.unit.test.js.map +0 -1
  987. package/dist/test/room-messaging-durable-send.unit.test.d.ts +0 -2
  988. package/dist/test/room-messaging-durable-send.unit.test.d.ts.map +0 -1
  989. package/dist/test/room-messaging-durable-send.unit.test.js +0 -122
  990. package/dist/test/room-messaging-durable-send.unit.test.js.map +0 -1
  991. package/dist/test/room-messaging.unit.test.d.ts +0 -2
  992. package/dist/test/room-messaging.unit.test.d.ts.map +0 -1
  993. package/dist/test/room-messaging.unit.test.js +0 -495
  994. package/dist/test/room-messaging.unit.test.js.map +0 -1
  995. package/dist/test/room-notice-log.unit.test.d.ts +0 -5
  996. package/dist/test/room-notice-log.unit.test.d.ts.map +0 -1
  997. package/dist/test/room-notice-log.unit.test.js +0 -100
  998. package/dist/test/room-notice-log.unit.test.js.map +0 -1
  999. package/dist/test/room-protocol-admission.unit.test.d.ts +0 -2
  1000. package/dist/test/room-protocol-admission.unit.test.d.ts.map +0 -1
  1001. package/dist/test/room-protocol-admission.unit.test.js +0 -432
  1002. package/dist/test/room-protocol-admission.unit.test.js.map +0 -1
  1003. package/dist/test/room-protocol-notify.unit.test.d.ts +0 -2
  1004. package/dist/test/room-protocol-notify.unit.test.d.ts.map +0 -1
  1005. package/dist/test/room-protocol-notify.unit.test.js +0 -184
  1006. package/dist/test/room-protocol-notify.unit.test.js.map +0 -1
  1007. package/dist/test/room-protocol-retry-queue.unit.test.d.ts +0 -2
  1008. package/dist/test/room-protocol-retry-queue.unit.test.d.ts.map +0 -1
  1009. package/dist/test/room-protocol-retry-queue.unit.test.js +0 -275
  1010. package/dist/test/room-protocol-retry-queue.unit.test.js.map +0 -1
  1011. package/dist/test/room-protocol.helper.d.ts +0 -60
  1012. package/dist/test/room-protocol.helper.d.ts.map +0 -1
  1013. package/dist/test/room-protocol.helper.js +0 -169
  1014. package/dist/test/room-protocol.helper.js.map +0 -1
  1015. package/dist/test/room-protocol.unit.test.d.ts +0 -2
  1016. package/dist/test/room-protocol.unit.test.d.ts.map +0 -1
  1017. package/dist/test/room-protocol.unit.test.js +0 -431
  1018. package/dist/test/room-protocol.unit.test.js.map +0 -1
  1019. package/dist/test/room-read-directed.integration.test.d.ts +0 -7
  1020. package/dist/test/room-read-directed.integration.test.d.ts.map +0 -1
  1021. package/dist/test/room-read-directed.integration.test.js +0 -136
  1022. package/dist/test/room-read-directed.integration.test.js.map +0 -1
  1023. package/dist/test/room-router.unit.test.d.ts +0 -2
  1024. package/dist/test/room-router.unit.test.d.ts.map +0 -1
  1025. package/dist/test/room-router.unit.test.js +0 -235
  1026. package/dist/test/room-router.unit.test.js.map +0 -1
  1027. package/dist/test/room-send-directed.integration.test.d.ts +0 -7
  1028. package/dist/test/room-send-directed.integration.test.d.ts.map +0 -1
  1029. package/dist/test/room-send-directed.integration.test.js +0 -129
  1030. package/dist/test/room-send-directed.integration.test.js.map +0 -1
  1031. package/dist/test/room-send-retry-queue.integration.test.d.ts +0 -5
  1032. package/dist/test/room-send-retry-queue.integration.test.d.ts.map +0 -1
  1033. package/dist/test/room-send-retry-queue.integration.test.js +0 -152
  1034. package/dist/test/room-send-retry-queue.integration.test.js.map +0 -1
  1035. package/dist/test/room-send-retry.integration.test.d.ts +0 -5
  1036. package/dist/test/room-send-retry.integration.test.d.ts.map +0 -1
  1037. package/dist/test/room-send-retry.integration.test.js +0 -154
  1038. package/dist/test/room-send-retry.integration.test.js.map +0 -1
  1039. package/dist/test/room-state-sync.integration.test.d.ts +0 -5
  1040. package/dist/test/room-state-sync.integration.test.d.ts.map +0 -1
  1041. package/dist/test/room-state-sync.integration.test.js +0 -105
  1042. package/dist/test/room-state-sync.integration.test.js.map +0 -1
  1043. package/dist/test/room-token-store.unit.test.d.ts +0 -5
  1044. package/dist/test/room-token-store.unit.test.d.ts.map +0 -1
  1045. package/dist/test/room-token-store.unit.test.js +0 -124
  1046. package/dist/test/room-token-store.unit.test.js.map +0 -1
  1047. package/dist/test/room-token-verification.unit.test.d.ts +0 -2
  1048. package/dist/test/room-token-verification.unit.test.d.ts.map +0 -1
  1049. package/dist/test/room-token-verification.unit.test.js +0 -238
  1050. package/dist/test/room-token-verification.unit.test.js.map +0 -1
  1051. package/dist/test/scratch-directory.helper.d.ts +0 -18
  1052. package/dist/test/scratch-directory.helper.d.ts.map +0 -1
  1053. package/dist/test/scratch-directory.helper.js +0 -35
  1054. package/dist/test/scratch-directory.helper.js.map +0 -1
  1055. package/dist/test/scratch-directory.setup.d.ts +0 -2
  1056. package/dist/test/scratch-directory.setup.d.ts.map +0 -1
  1057. package/dist/test/scratch-directory.setup.js +0 -7
  1058. package/dist/test/scratch-directory.setup.js.map +0 -1
  1059. package/dist/test/scratch-directory.unit.test.d.ts +0 -2
  1060. package/dist/test/scratch-directory.unit.test.d.ts.map +0 -1
  1061. package/dist/test/scratch-directory.unit.test.js +0 -78
  1062. package/dist/test/scratch-directory.unit.test.js.map +0 -1
  1063. package/dist/test/send-by-room-name.integration.test.d.ts +0 -5
  1064. package/dist/test/send-by-room-name.integration.test.d.ts.map +0 -1
  1065. package/dist/test/send-by-room-name.integration.test.js +0 -77
  1066. package/dist/test/send-by-room-name.integration.test.js.map +0 -1
  1067. package/dist/test/shutdown-signals.unit.test.d.ts +0 -5
  1068. package/dist/test/shutdown-signals.unit.test.d.ts.map +0 -1
  1069. package/dist/test/shutdown-signals.unit.test.js +0 -110
  1070. package/dist/test/shutdown-signals.unit.test.js.map +0 -1
  1071. package/dist/test/stale-agent-checker.unit.test.d.ts +0 -2
  1072. package/dist/test/stale-agent-checker.unit.test.d.ts.map +0 -1
  1073. package/dist/test/stale-agent-checker.unit.test.js +0 -267
  1074. package/dist/test/stale-agent-checker.unit.test.js.map +0 -1
  1075. package/dist/test/state-sync-convergence.integration.test.d.ts +0 -7
  1076. package/dist/test/state-sync-convergence.integration.test.d.ts.map +0 -1
  1077. package/dist/test/state-sync-convergence.integration.test.js +0 -263
  1078. package/dist/test/state-sync-convergence.integration.test.js.map +0 -1
  1079. package/dist/test/synthetic-advert.d.ts +0 -8
  1080. package/dist/test/synthetic-advert.d.ts.map +0 -1
  1081. package/dist/test/synthetic-advert.js +0 -16
  1082. package/dist/test/synthetic-advert.js.map +0 -1
  1083. package/dist/test/test-transport.d.ts +0 -43
  1084. package/dist/test/test-transport.d.ts.map +0 -1
  1085. package/dist/test/test-transport.js +0 -122
  1086. package/dist/test/test-transport.js.map +0 -1
  1087. package/dist/test/token-text.unit.test.d.ts +0 -2
  1088. package/dist/test/token-text.unit.test.d.ts.map +0 -1
  1089. package/dist/test/token-text.unit.test.js +0 -46
  1090. package/dist/test/token-text.unit.test.js.map +0 -1
  1091. package/dist/test/tool-version-reporting.integration.test.d.ts +0 -5
  1092. package/dist/test/tool-version-reporting.integration.test.d.ts.map +0 -1
  1093. package/dist/test/tool-version-reporting.integration.test.js +0 -105
  1094. package/dist/test/tool-version-reporting.integration.test.js.map +0 -1
  1095. package/dist/test/user-identity.unit.test.d.ts +0 -5
  1096. package/dist/test/user-identity.unit.test.d.ts.map +0 -1
  1097. package/dist/test/user-identity.unit.test.js +0 -224
  1098. package/dist/test/user-identity.unit.test.js.map +0 -1
  1099. package/dist/test/user-principal-mints-device-grant.unit.test.d.ts +0 -7
  1100. package/dist/test/user-principal-mints-device-grant.unit.test.d.ts.map +0 -1
  1101. package/dist/test/user-principal-mints-device-grant.unit.test.js +0 -62
  1102. package/dist/test/user-principal-mints-device-grant.unit.test.js.map +0 -1
  1103. package/dist/test/version-report-actions.unit.test.d.ts +0 -5
  1104. package/dist/test/version-report-actions.unit.test.d.ts.map +0 -1
  1105. package/dist/test/version-report-actions.unit.test.js +0 -35
  1106. package/dist/test/version-report-actions.unit.test.js.map +0 -1
  1107. package/dist/test/visibility.integration.test.d.ts +0 -12
  1108. package/dist/test/visibility.integration.test.d.ts.map +0 -1
  1109. package/dist/test/visibility.integration.test.js +0 -259
  1110. package/dist/test/visibility.integration.test.js.map +0 -1
  1111. package/dist/test/web-url-tool-action.integration.test.d.ts +0 -2
  1112. package/dist/test/web-url-tool-action.integration.test.d.ts.map +0 -1
  1113. package/dist/test/web-url-tool-action.integration.test.js +0 -69
  1114. package/dist/test/web-url-tool-action.integration.test.js.map +0 -1
  1115. package/dist/test/wire-mesh-core-version.unit.test.d.ts +0 -5
  1116. package/dist/test/wire-mesh-core-version.unit.test.d.ts.map +0 -1
  1117. package/dist/test/wire-mesh-core-version.unit.test.js +0 -14
  1118. package/dist/test/wire-mesh-core-version.unit.test.js.map +0 -1
  1119. package/dist/test/wire-mesh-identity.unit.test.d.ts +0 -5
  1120. package/dist/test/wire-mesh-identity.unit.test.d.ts.map +0 -1
  1121. package/dist/test/wire-mesh-identity.unit.test.js +0 -26
  1122. package/dist/test/wire-mesh-identity.unit.test.js.map +0 -1
  1123. package/dist/test/wire-mesh-transport-gateway-trust.integration.test.d.ts +0 -2
  1124. package/dist/test/wire-mesh-transport-gateway-trust.integration.test.d.ts.map +0 -1
  1125. package/dist/test/wire-mesh-transport-gateway-trust.integration.test.js +0 -56
  1126. package/dist/test/wire-mesh-transport-gateway-trust.integration.test.js.map +0 -1
  1127. package/dist/test/wire-mesh-transport-hub.integration.test.d.ts +0 -5
  1128. package/dist/test/wire-mesh-transport-hub.integration.test.d.ts.map +0 -1
  1129. package/dist/test/wire-mesh-transport-hub.integration.test.js +0 -140
  1130. package/dist/test/wire-mesh-transport-hub.integration.test.js.map +0 -1
  1131. package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.d.ts +0 -5
  1132. package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.d.ts.map +0 -1
  1133. package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.js +0 -316
  1134. package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.js.map +0 -1
  1135. package/dist/test/wire-mesh-transport.integration.test.d.ts +0 -5
  1136. package/dist/test/wire-mesh-transport.integration.test.d.ts.map +0 -1
  1137. package/dist/test/wire-mesh-transport.integration.test.js +0 -659
  1138. package/dist/test/wire-mesh-transport.integration.test.js.map +0 -1
  1139. package/dist/test/ws-dial.integration.test.d.ts +0 -2
  1140. package/dist/test/ws-dial.integration.test.d.ts.map +0 -1
  1141. package/dist/test/ws-dial.integration.test.js +0 -112
  1142. package/dist/test/ws-dial.integration.test.js.map +0 -1
  1143. package/dist/test/wss-remote-connect.integration.test.d.ts +0 -2
  1144. package/dist/test/wss-remote-connect.integration.test.d.ts.map +0 -1
  1145. package/dist/test/wss-remote-connect.integration.test.js +0 -122
  1146. package/dist/test/wss-remote-connect.integration.test.js.map +0 -1
  1147. package/src/bridges/user/web/test/bridge-web-server.helper.ts +0 -54
  1148. package/src/bridges/user/web/vite.config.ts +0 -71
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * Mesh state stays in memory and on the wire; the only thing on disk is this local credential (plus, now, the tokens minted against it), the same trust model as an SSH key. A lock file holding a PID keeps two live bridges in one slot from sharing an identity, which would put duplicate peer IDs on the mesh; the second bridge runs with an ephemeral identity (the behaviour before persistence) instead. Bridges without a graceful shutdown hook can skip releasing the lock: a stale lock is detected by probing the recorded PID, the same way the coordinator probes for stale agents.
5
5
  *
6
- * Persisting the key material rather than a bare agent ID is what makes restarts work: delivery routing fires when agentId === peerId, and peerId is deviceIdToHex(identity.deviceId), so an ID without its key can never match the running peer. Renewal near certificate expiry currently generates an entirely fresh key pair rather than re-certifying the existing one, which silently rotates the device-id (and so invalidates any persisted room tokens bound to it) -- a real, separately tracked gap (#68), not addressed here.
6
+ * Persisting the key material rather than a bare agent ID is what makes restarts work: delivery routing fires when agentId === peerId, and peerId is deviceIdToHex(identity.deviceId), so an ID without its key can never match the running peer. Renewal near certificate expiry re-certifies the existing key pair, so the device-id survives it. A slot file that exists but cannot be used is never replaced: loading it throws UnusableIdentityRecordError (issuer-identity-file.ts), because a new key would silently change the peer id and discard every token the file holds. Only a missing file starts a new identity.
7
+ *
8
+ * Several processes can write one slot file: the bridge holding the slot lock, a cc-peer front loading the same identity without that lock, and whichever of them is renewing the certificate. Every read-modify-write of the file therefore runs under a short-lived write lock of its own (the slot lock is held for the bridge's whole lifetime, so it cannot serialise them). A bridge that lost the slot lock runs under an identity that is not the file's, so the tokens it mints and holds are kept in its own memory for the life of the process and never read from or written to the file.
7
9
  */
8
10
 
9
11
  import * as fs from "node:fs";
@@ -13,20 +15,20 @@ import {
13
15
  type DataDirectoryLocation,
14
16
  } from "./data-directory.js";
15
17
  import type { CapabilityToken } from "wire-mesh-core/generated/protocol";
16
- import {
17
- generateIdentity,
18
- certifyKeyPair,
19
- getCertificateFingerprint,
20
- deriveDeviceId,
21
- CERTIFICATE_VALIDITY_MS,
22
- } from "./identity.js";
18
+ import { generateIdentity } from "./identity.js";
19
+ import { isIsoTimestamp } from "./iso-timestamp.js";
23
20
  import type { PeerIdentity } from "./identity.js";
24
21
  import { writeFileAtomic } from "./atomic-file.js";
25
22
  import {
26
- isPidAlive,
27
- readLockPid,
23
+ loadOrCreateIssuerIdentity,
24
+ readIssuerRecord,
25
+ type StoredIssuerKey,
26
+ } from "./issuer-identity-file.js";
27
+ import {
28
+ liveLockHolder,
28
29
  releaseLockFile,
29
30
  tryAcquireLock,
31
+ withWriteLockAsync,
30
32
  } from "./pid-lock-file.js";
31
33
 
32
34
  /** A bridge's identity slot: one persisted identity per harness and cwd. */
@@ -37,15 +39,8 @@ export interface IdentitySlot extends DataDirectoryLocation {
37
39
  dir?: string;
38
40
  }
39
41
 
40
- /** Renewal margin is one twelfth of the certificate's total validity period. */
41
- const RENEWAL_MARGIN_FRACTION = 12;
42
- /** Renew during the final twelfth of the certificate's validity. */
43
- const RENEWAL_MARGIN_MS = CERTIFICATE_VALIDITY_MS / RENEWAL_MARGIN_FRACTION;
44
-
45
42
  /** A persisted identity/token/trust/ledger file holds real key material or capability tokens, so it is written owner-only. */
46
43
  const OWNER_ONLY_RW_PERMISSIONS = 0o600;
47
- /** One Int32 element's worth of bytes -- sleepSync's own shared buffer needs no more than a single slot for Atomics.wait to block on. */
48
- const INT32_BYTE_LENGTH = 4;
49
44
 
50
45
  /** A CapabilityToken (COSE_Sign1: [protected header bytes, unprotected header map, payload bytes or null, signature bytes]) with every byte-string field base64-encoded for JSON storage. Only the two named unprotected-header fields (alg, kid) are round-tripped -- every token minted by wire-mesh-core today leaves the unprotected header empty (alg/kid live in the protected header instead), so the schema's own open catchall for arbitrary extra keys is left unhandled until a real caller actually needs one preserved. */
51
46
  export type SerializedCapabilityToken = [
@@ -55,10 +50,8 @@ export type SerializedCapabilityToken = [
55
50
  string,
56
51
  ];
57
52
 
58
- interface StoredIdentity {
59
- privateKey: string;
60
- certificate: string;
61
- expiresAt: string;
53
+ /** What a slot remembers beside its key material: the tokens it bears or has issued. */
54
+ interface SlotTokenRecords {
62
55
  roomTokens?: Record<string, SerializedCapabilityToken>;
63
56
  /** The token-id (base64) of each room:member grant this identity has itself issued to another device, keyed by "roomPath::memberDeviceHex" -- the bookkeeping a room owner needs to revoke a specific member's own grant later (kickFromRoom), distinct from roomTokens above (which holds tokens this identity BEARS, not ones it issued). */
64
57
  issuedGrants?: Record<string, string>;
@@ -66,6 +59,8 @@ interface StoredIdentity {
66
59
  groupTokens?: Record<string, SerializedCapabilityToken>;
67
60
  }
68
61
 
62
+ interface StoredIdentity extends StoredIssuerKey, SlotTokenRecords {}
63
+
69
64
  /** A COSE_Sign1 tuple always has exactly 4 elements: protected header, unprotected header, payload, signature. */
70
65
  const COSE_SIGN1_TUPLE_LENGTH = 4;
71
66
 
@@ -197,26 +192,26 @@ export function oplogDirFor(slot: Readonly<IdentitySlot>): string {
197
192
  return path.join(dir, base);
198
193
  }
199
194
 
200
- function persistIdentity(identityFile: string, identity: PeerIdentity): void {
201
- const stored: StoredIdentity = {
202
- privateKey: identity.privateKey,
203
- certificate: identity.certificate,
204
- expiresAt: new Date(Date.now() + CERTIFICATE_VALIDITY_MS).toISOString(),
205
- };
206
- writeFileAtomic(
207
- identityFile,
208
- `${JSON.stringify(stored, null, 2)}\n`,
209
- OWNER_ONLY_RW_PERMISSIONS,
210
- );
195
+ /** The token records of every slot this process runs under an identity that is not the slot file's (it lost the slot lock to another live process), keyed by the slot's file. They are bound to a throw-away device-id, so they live and die with the process: neither written into the winner's file nor read from it. */
196
+ const ephemeralTokenRecords = new Map<string, SlotTokenRecords>();
197
+
198
+ /** Loads the identity the slot file holds, creating it when the file does not exist, renewing it in place near certificate expiry. Throws UnusableIdentityRecordError, leaving the file untouched, when the file exists but cannot be used. */
199
+ function loadSlotIdentity(
200
+ paths: Readonly<ReturnType<typeof slotPaths>>,
201
+ ): PeerIdentity {
202
+ return loadOrCreateIssuerIdentity(paths.identityFile, isStoredIdentity);
211
203
  }
212
204
 
213
205
  /**
214
206
  * Load the persisted identity for the slot, creating it on first use, and take the slot lock. Returns an ephemeral identity when the slot is already held by another live process.
207
+ *
208
+ * Throws UnusableIdentityRecordError when the slot's file exists but cannot be used (damaged, unreadable, or holding a key that cannot be certified again). The file is left untouched, the slot lock is released and no identity is returned: a caller must not join the mesh under a key the user did not choose, so the bridge stops with the error's message, which says what to do.
215
209
  */
216
210
  export function loadOrCreateIdentity(
217
211
  slot: Readonly<IdentitySlot>,
218
212
  ): PeerIdentity {
219
- const { dir, identityFile, lockFile } = slotPaths(slot);
213
+ const paths = slotPaths(slot);
214
+ const { dir, identityFile, lockFile } = paths;
220
215
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
221
216
 
222
217
  const claim = tryAcquireLock(lockFile);
@@ -224,81 +219,38 @@ export function loadOrCreateIdentity(
224
219
  console.error(
225
220
  `agent-comms: identity slot ${slot.harness} (${slot.cwd}) is held by live pid ${String(claim.heldBy)}; running with an ephemeral identity`,
226
221
  );
222
+ ephemeralTokenRecords.set(identityFile, {});
227
223
  return generateIdentity();
228
224
  }
229
-
230
- return loadStoredIdentity(identityFile) ?? createIdentity(identityFile);
231
- }
232
-
233
- /**
234
- * Load and validate the stored key material. A well-formed record nearing certificate expiry is renewed by re-certifying its existing key pair (preserving device-id) rather than replaced -- see `certifyKeyPair`'s own doc comment for why generating a fresh key pair here would be wrong. Returns undefined only when there is no usable existing key pair to renew at all (missing, unparseable, or corrupt), which is the caller's signal to generate an entirely new identity instead.
235
- */
236
- function loadStoredIdentity(identityFile: string): PeerIdentity | undefined {
237
- let parsed: unknown;
238
- try {
239
- parsed = JSON.parse(fs.readFileSync(identityFile, "utf-8"));
240
- } catch {
241
- return undefined;
242
- }
243
- if (!isStoredIdentity(parsed)) return undefined;
244
-
245
- const expiresAt = Date.parse(parsed.expiresAt);
246
- const needsRenewal =
247
- Number.isNaN(expiresAt) || Date.now() > expiresAt - RENEWAL_MARGIN_MS;
225
+ ephemeralTokenRecords.delete(identityFile);
248
226
 
249
227
  try {
250
- if (needsRenewal) {
251
- const renewed = certifyKeyPair(parsed.privateKey);
252
- // A plain persistIdentity() call here would silently drop this slot's roomTokens/issuedGrants (it always writes a bare {privateKey, certificate, expiresAt} record) -- write through writeStoredIdentity instead so a renewal preserves everything else already on record, the same way saveRoomToken/saveIssuedRoomGrant already do for their own fields.
253
- writeStoredIdentity(identityFile, {
254
- ...parsed,
255
- privateKey: renewed.privateKey,
256
- certificate: renewed.certificate,
257
- expiresAt: new Date(Date.now() + CERTIFICATE_VALIDITY_MS).toISOString(),
258
- });
259
- return renewed;
260
- }
261
- return {
262
- privateKey: parsed.privateKey,
263
- certificate: parsed.certificate,
264
- fingerprint: getCertificateFingerprint(parsed.certificate),
265
- deviceId: deriveDeviceId(parsed.privateKey),
266
- };
228
+ return loadSlotIdentity(paths);
267
229
  } catch (err) {
268
- console.error(
269
- `agent-comms: stored identity at ${identityFile} is unreadable (${err instanceof Error ? err.message : String(err)}); generating a fresh identity`,
270
- );
271
- return undefined;
230
+ releaseLockFile(lockFile);
231
+ throw err;
272
232
  }
273
233
  }
274
234
 
275
- function createIdentity(identityFile: string): PeerIdentity {
276
- const identity = generateIdentity();
277
- persistIdentity(identityFile, identity);
278
- return identity;
279
- }
280
-
281
235
  /**
282
236
  * Probes a slot's current lock holder without taking it -- the cc-peer front (agent-comms#157) uses this read-only check to decide whether a local Claude Code session already fronts itself (a live agent-comms bridge already holds the slot) before attaching, and to notice a session's own bridge taking the slot over later so the front can yield. Returns the live PID currently holding the slot's lock, or undefined when the slot is unlocked or its recorded holder is no longer alive.
283
237
  */
284
238
  export function probeSlotOwner(
285
239
  slot: Readonly<IdentitySlot>,
286
240
  ): number | undefined {
287
- const { lockFile } = slotPaths(slot);
288
- const heldBy = readLockPid(lockFile);
289
- if (heldBy === undefined) return undefined;
290
- return isPidAlive(heldBy) ? heldBy : undefined;
241
+ return liveLockHolder(slotPaths(slot).lockFile);
291
242
  }
292
243
 
293
244
  /**
294
- * Loads (creating on first use) the persisted identity for a slot without taking its exclusivity lock. The cc-peer front (agent-comms#157) uses this to assume a not-yet-live session's own future identity, so the device-id -- and with it every agent id, room membership, and pending delivery already addressed to it -- carries over unchanged the moment that session's own bridge starts and claims the slot for real. Callers must have already confirmed via probeSlotOwner that no live bridge currently holds the slot; re-probing atomically against a concurrent acquisition isn't possible across the two separate files (identity vs lock) this store keeps, so it's the front's own periodic re-probe, not this function, that detects and reacts to a real bridge taking over afterwards.
245
+ * Loads (creating on first use) the persisted identity for a slot without taking its exclusivity lock. Throws UnusableIdentityRecordError exactly as loadOrCreateIdentity does, and the front reports it for that session without fronting it. The cc-peer front (agent-comms#157) uses this to assume a not-yet-live session's own future identity, so the device-id, and with it every agent id, room membership, and pending delivery already addressed to it, carries over unchanged the moment that session's own bridge starts and claims the slot for real. Callers must have already confirmed via probeSlotOwner that no live bridge currently holds the slot; re-probing atomically against a concurrent acquisition isn't possible across the two separate files (identity vs lock) this store keeps, so it's the front's own periodic re-probe, not this function, that detects and reacts to a real bridge taking over afterwards.
295
246
  */
296
247
  export function loadIdentityForFront(
297
248
  slot: Readonly<IdentitySlot>,
298
249
  ): PeerIdentity {
299
- const { dir, identityFile } = slotPaths(slot);
300
- fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
301
- return loadStoredIdentity(identityFile) ?? createIdentity(identityFile);
250
+ const paths = slotPaths(slot);
251
+ fs.mkdirSync(paths.dir, { recursive: true, mode: 0o700 });
252
+ ephemeralTokenRecords.delete(paths.identityFile);
253
+ return loadSlotIdentity(paths);
302
254
  }
303
255
 
304
256
  /**
@@ -308,7 +260,7 @@ export function releaseIdentityLock(slot: Readonly<IdentitySlot>): void {
308
260
  releaseLockFile(slotPaths(slot).lockFile);
309
261
  }
310
262
 
311
- /** Reads the slot's raw stored identity record, or undefined if the file is missing or unparseable. Used by the room-token functions below to read-modify-write only the roomTokens field, leaving the persisted key material exactly as it is. */
263
+ /** Reads the slot's raw stored identity record, or undefined if the file is missing or unparseable. Only for reads that treat "no usable record" as "no tokens", which grants nothing; every write goes through updateTokenRecords, which refuses an unusable file instead. */
312
264
  function readStoredIdentity(identityFile: string): StoredIdentity | undefined {
313
265
  let parsed: unknown;
314
266
  try {
@@ -330,38 +282,77 @@ function writeStoredIdentity(
330
282
  );
331
283
  }
332
284
 
333
- // Total time to wait for a concurrent lock holder to finish creating the slot's identity file before giving up. loadOrCreateIdentity always finishes creating the file before any other process can observe its lock as taken (tryAcquireLock is the very first thing it does), so a caller that lost that race and is left holding an ephemeral identity may still reach here before the winner's own createIdentity call (a keygen plus one atomic write) has completed -- 2s is generously above that real cost even on a loaded machine, while still bounded so a holder that crashed mid-creation doesn't wedge this call forever.
285
+ // Total time to wait for a concurrent lock holder to finish creating the slot's identity file before giving up. loadOrCreateIdentity always finishes creating the file before any other process can observe its lock as taken (tryAcquireLock is the very first thing it does), so a caller that lost that race and is left holding an ephemeral identity may still reach here before the winner's own creation (a keygen plus one atomic write) has completed, 2s is generously above that real cost even on a loaded machine, while still bounded so a holder that crashed mid-creation doesn't wedge this call forever.
334
286
  const CONCURRENT_CREATE_WAIT_MS = 2000;
335
287
  // Poll interval while waiting -- deliberately short, since the wait is expected to resolve in low single-digit milliseconds in the overwhelmingly common case.
336
288
  const CONCURRENT_CREATE_POLL_MS = 10;
337
289
 
338
- function sleepSync(ms: number): void {
339
- const view = new Int32Array(new SharedArrayBuffer(INT32_BYTE_LENGTH));
340
- Atomics.wait(view, 0, 0, ms);
341
- }
342
-
343
290
  /**
344
- * Reads the slot's stored identity, waiting briefly for it to appear if it doesn't exist yet but a different live process currently holds the slot's lock -- that process is, by construction, in the middle of creating it (see loadOrCreateIdentity/tryAcquireLock), so a caller racing as this slot's own ephemeral loser should wait for the real winner to finish rather than fail outright. Falls through to the ordinary "missing" result (undefined) once the lock is no longer held by a different live process, or the wait budget runs out -- both signal there is genuinely nothing to wait for.
291
+ * Waits briefly for the slot's identity file to appear if it doesn't exist yet but a different live process currently holds the slot's lock, that process is, by construction, in the middle of creating it (see loadOrCreateIdentity/tryAcquireLock), so a caller racing as this slot's own loser should wait for the real winner to finish rather than fail outright. Returns once the file exists, or once the lock is no longer held by a different live process, or the wait budget runs out, the last two signal there is genuinely nothing to wait for.
345
292
  */
346
- function readStoredIdentityWaitingForConcurrentCreate(
293
+ async function waitForConcurrentCreate(
347
294
  identityFile: string,
348
295
  lockFile: string,
349
- ): StoredIdentity | undefined {
296
+ ): Promise<void> {
350
297
  const deadline = Date.now() + CONCURRENT_CREATE_WAIT_MS;
351
298
  for (;;) {
352
- const stored = readStoredIdentity(identityFile);
353
- if (stored !== undefined) return stored;
299
+ if (fs.existsSync(identityFile)) return;
354
300
 
355
- const heldBy = readLockPid(lockFile);
301
+ const heldBy = liveLockHolder(lockFile);
356
302
  const heldByDifferentLiveProcess =
357
- heldBy !== undefined && heldBy !== process.pid && isPidAlive(heldBy);
358
- // The holder can finish creating the file and exit between the read above and this lock check, so the file is read once more before concluding it was never created.
359
- if (!heldByDifferentLiveProcess || Date.now() >= deadline) {
360
- return readStoredIdentity(identityFile);
361
- }
303
+ heldBy !== undefined && heldBy !== process.pid;
304
+ if (!heldByDifferentLiveProcess || Date.now() >= deadline) return;
305
+
306
+ await new Promise<void>((resolve) => {
307
+ setTimeout(resolve, CONCURRENT_CREATE_POLL_MS);
308
+ });
309
+ }
310
+ }
311
+
312
+ /** The token records a slot currently holds for this process: its own in-memory records when it runs under an identity that is not the slot file's, otherwise those in the file (none when the file is missing or unusable). */
313
+ function readTokenRecords(identityFile: string): SlotTokenRecords {
314
+ return (
315
+ ephemeralTokenRecords.get(identityFile) ??
316
+ readStoredIdentity(identityFile) ??
317
+ {}
318
+ );
319
+ }
362
320
 
363
- sleepSync(CONCURRENT_CREATE_POLL_MS);
321
+ /**
322
+ * Applies `change` to the slot's token records and persists the result, leaving the key material exactly as it is. The read and the write happen under the slot file's write lock, so two processes updating different tokens cannot drop each other's update. A slot running under a non-file identity keeps the change in this process's memory only.
323
+ *
324
+ * With `requireIdentity`, throws when the slot has no identity file yet (waiting briefly for a concurrent creator first); otherwise a missing file is a no-op. Either way a file that exists but cannot be used throws UnusableIdentityRecordError and is not written.
325
+ */
326
+ async function updateTokenRecords(
327
+ slot: Readonly<IdentitySlot>,
328
+ change: (records: Readonly<SlotTokenRecords>) => SlotTokenRecords | undefined,
329
+ requireIdentity: boolean,
330
+ ): Promise<void> {
331
+ const { identityFile, lockFile } = slotPaths(slot);
332
+ const ephemeral = ephemeralTokenRecords.get(identityFile);
333
+ if (ephemeral !== undefined) {
334
+ ephemeralTokenRecords.set(identityFile, {
335
+ ...ephemeral,
336
+ ...change(ephemeral),
337
+ });
338
+ return;
364
339
  }
340
+ if (requireIdentity) await waitForConcurrentCreate(identityFile, lockFile);
341
+ await withWriteLockAsync(identityFile, () => {
342
+ const stored = readIssuerRecord(identityFile, isStoredIdentity);
343
+ if (stored === undefined) {
344
+ if (requireIdentity) {
345
+ throw new Error(
346
+ `no identity persisted for this slot yet, call loadOrCreateIdentity first (${identityFile})`,
347
+ );
348
+ }
349
+ return;
350
+ }
351
+ const changed = change(stored);
352
+ if (changed !== undefined) {
353
+ writeStoredIdentity(identityFile, { ...stored, ...changed });
354
+ }
355
+ });
365
356
  }
366
357
 
367
358
  /**
@@ -371,8 +362,7 @@ export function loadRoomTokens(
371
362
  slot: Readonly<IdentitySlot>,
372
363
  ): Record<string, CapabilityToken> {
373
364
  const { identityFile } = slotPaths(slot);
374
- const stored = readStoredIdentity(identityFile);
375
- const serialized = stored?.roomTokens ?? {};
365
+ const serialized = readTokenRecords(identityFile).roomTokens ?? {};
376
366
  const tokens: Record<string, CapabilityToken> = {};
377
367
  for (const [roomPath, token] of Object.entries(serialized)) {
378
368
  tokens[roomPath] = deserializeToken(token);
@@ -381,44 +371,41 @@ export function loadRoomTokens(
381
371
  }
382
372
 
383
373
  /**
384
- * Persists a capability token for the given room path, surviving a restart the same way the identity it was minted against does. Overwrites any token already saved for that room; leaves every other room's token and the identity's own key material untouched.
374
+ * Persists a capability token for the given room path, surviving a restart the same way the identity it was minted against does. Overwrites any token already saved for that room; leaves every other room's token and the identity's own key material untouched. A slot running under an ephemeral identity keeps it in this process's memory only.
385
375
  */
386
- export function saveRoomToken(
376
+ export async function saveRoomToken(
387
377
  slot: Readonly<IdentitySlot>,
388
378
  roomPath: string,
389
379
  token: CapabilityToken,
390
- ): void {
391
- const { identityFile, lockFile } = slotPaths(slot);
392
- const stored = readStoredIdentityWaitingForConcurrentCreate(
393
- identityFile,
394
- lockFile,
380
+ ): Promise<void> {
381
+ await updateTokenRecords(
382
+ slot,
383
+ (records) => ({
384
+ roomTokens: { ...records.roomTokens, [roomPath]: serializeToken(token) },
385
+ }),
386
+ true,
395
387
  );
396
- if (stored === undefined) {
397
- throw new Error(
398
- `no identity persisted for this slot yet -- call loadOrCreateIdentity first (${identityFile})`,
399
- );
400
- }
401
- const roomTokens = {
402
- ...stored.roomTokens,
403
- [roomPath]: serializeToken(token),
404
- };
405
- writeStoredIdentity(identityFile, { ...stored, roomTokens });
406
388
  }
407
389
 
408
390
  /** Removes the persisted token for one room path, if any. A no-op if none was saved for that path. */
409
- export function deleteRoomToken(
391
+ export async function deleteRoomToken(
410
392
  slot: Readonly<IdentitySlot>,
411
393
  roomPath: string,
412
- ): void {
413
- const { identityFile } = slotPaths(slot);
414
- const stored = readStoredIdentity(identityFile);
415
- if (stored?.roomTokens === undefined) return;
416
- const roomTokens = Object.fromEntries(
417
- Object.entries(stored.roomTokens).filter(
418
- ([storedRoomPath]) => storedRoomPath !== roomPath,
419
- ),
394
+ ): Promise<void> {
395
+ await updateTokenRecords(
396
+ slot,
397
+ (records) =>
398
+ records.roomTokens === undefined
399
+ ? undefined
400
+ : {
401
+ roomTokens: Object.fromEntries(
402
+ Object.entries(records.roomTokens).filter(
403
+ ([storedRoomPath]) => storedRoomPath !== roomPath,
404
+ ),
405
+ ),
406
+ },
407
+ false,
420
408
  );
421
- writeStoredIdentity(identityFile, { ...stored, roomTokens });
422
409
  }
423
410
 
424
411
  /**
@@ -428,8 +415,7 @@ export function loadGroupTokens(
428
415
  slot: Readonly<IdentitySlot>,
429
416
  ): Record<string, CapabilityToken> {
430
417
  const { identityFile } = slotPaths(slot);
431
- const stored = readStoredIdentity(identityFile);
432
- const serialized = stored?.groupTokens ?? {};
418
+ const serialized = readTokenRecords(identityFile).groupTokens ?? {};
433
419
  const tokens: Record<string, CapabilityToken> = {};
434
420
  for (const [groupPath, token] of Object.entries(serialized)) {
435
421
  tokens[groupPath] = deserializeToken(token);
@@ -440,42 +426,42 @@ export function loadGroupTokens(
440
426
  /**
441
427
  * Persists this device's own group:member token for the given group path, surviving a restart the same way the identity it was minted against does. Overwrites any token already saved for that group path; leaves every other group's token and the identity's own key material untouched. The device-membership counterpart of saveRoomToken.
442
428
  */
443
- export function saveGroupToken(
429
+ export async function saveGroupToken(
444
430
  slot: Readonly<IdentitySlot>,
445
431
  groupPath: string,
446
432
  token: CapabilityToken,
447
- ): void {
448
- const { identityFile, lockFile } = slotPaths(slot);
449
- const stored = readStoredIdentityWaitingForConcurrentCreate(
450
- identityFile,
451
- lockFile,
433
+ ): Promise<void> {
434
+ await updateTokenRecords(
435
+ slot,
436
+ (records) => ({
437
+ groupTokens: {
438
+ ...records.groupTokens,
439
+ [groupPath]: serializeToken(token),
440
+ },
441
+ }),
442
+ true,
452
443
  );
453
- if (stored === undefined) {
454
- throw new Error(
455
- `no identity persisted for this slot yet -- call loadOrCreateIdentity first (${identityFile})`,
456
- );
457
- }
458
- const groupTokens = {
459
- ...stored.groupTokens,
460
- [groupPath]: serializeToken(token),
461
- };
462
- writeStoredIdentity(identityFile, { ...stored, groupTokens });
463
444
  }
464
445
 
465
446
  /** Removes the persisted token for one group path, if any. A no-op if none was saved for that path. The device-membership counterpart of deleteRoomToken. */
466
- export function deleteGroupToken(
447
+ export async function deleteGroupToken(
467
448
  slot: Readonly<IdentitySlot>,
468
449
  groupPath: string,
469
- ): void {
470
- const { identityFile } = slotPaths(slot);
471
- const stored = readStoredIdentity(identityFile);
472
- if (stored?.groupTokens === undefined) return;
473
- const groupTokens = Object.fromEntries(
474
- Object.entries(stored.groupTokens).filter(
475
- ([storedGroupPath]) => storedGroupPath !== groupPath,
476
- ),
450
+ ): Promise<void> {
451
+ await updateTokenRecords(
452
+ slot,
453
+ (records) =>
454
+ records.groupTokens === undefined
455
+ ? undefined
456
+ : {
457
+ groupTokens: Object.fromEntries(
458
+ Object.entries(records.groupTokens).filter(
459
+ ([storedGroupPath]) => storedGroupPath !== groupPath,
460
+ ),
461
+ ),
462
+ },
463
+ false,
477
464
  );
478
- writeStoredIdentity(identityFile, { ...stored, groupTokens });
479
465
  }
480
466
 
481
467
  function issuedGrantKey(roomPath: string, memberDeviceHex: string): string {
@@ -491,9 +477,10 @@ export function loadIssuedRoomGrant(
491
477
  memberDeviceHex: string,
492
478
  ): Uint8Array<ArrayBuffer> | undefined {
493
479
  const { identityFile } = slotPaths(slot);
494
- const stored = readStoredIdentity(identityFile);
495
480
  const encoded =
496
- stored?.issuedGrants?.[issuedGrantKey(roomPath, memberDeviceHex)];
481
+ readTokenRecords(identityFile).issuedGrants?.[
482
+ issuedGrantKey(roomPath, memberDeviceHex)
483
+ ];
497
484
  return encoded === undefined
498
485
  ? undefined
499
486
  : Uint8Array.from(Buffer.from(encoded, "base64"));
@@ -502,44 +489,44 @@ export function loadIssuedRoomGrant(
502
489
  /**
503
490
  * Records the token-id of a room:member grant this identity has just minted for memberDeviceHex in roomPath, surviving a restart the same way roomTokens does. Overwrites any earlier record for the same (roomPath, member) pair -- a fresh join/invite always supersedes the grant it replaces, so only the current token-id is ever worth revoking.
504
491
  */
505
- export function saveIssuedRoomGrant(
492
+ export async function saveIssuedRoomGrant(
506
493
  slot: Readonly<IdentitySlot>,
507
494
  roomPath: string,
508
495
  memberDeviceHex: string,
509
496
  tokenId: Uint8Array,
510
- ): void {
511
- const { identityFile, lockFile } = slotPaths(slot);
512
- const stored = readStoredIdentityWaitingForConcurrentCreate(
513
- identityFile,
514
- lockFile,
497
+ ): Promise<void> {
498
+ await updateTokenRecords(
499
+ slot,
500
+ (records) => ({
501
+ issuedGrants: {
502
+ ...records.issuedGrants,
503
+ [issuedGrantKey(roomPath, memberDeviceHex)]:
504
+ Buffer.from(tokenId).toString("base64"),
505
+ },
506
+ }),
507
+ true,
515
508
  );
516
- if (stored === undefined) {
517
- throw new Error(
518
- `no identity persisted for this slot yet -- call loadOrCreateIdentity first (${identityFile})`,
519
- );
520
- }
521
- const issuedGrants = {
522
- ...stored.issuedGrants,
523
- [issuedGrantKey(roomPath, memberDeviceHex)]:
524
- Buffer.from(tokenId).toString("base64"),
525
- };
526
- writeStoredIdentity(identityFile, { ...stored, issuedGrants });
527
509
  }
528
510
 
529
511
  /** Removes the recorded token-id for one (roomPath, member) grant, if any -- called once a kick has revoked it, so a later re-join mints and records a genuinely fresh one rather than leaving a stale entry alongside it. A no-op if none was recorded. */
530
- export function deleteIssuedRoomGrant(
512
+ export async function deleteIssuedRoomGrant(
531
513
  slot: Readonly<IdentitySlot>,
532
514
  roomPath: string,
533
515
  memberDeviceHex: string,
534
- ): void {
535
- const { identityFile } = slotPaths(slot);
536
- const stored = readStoredIdentity(identityFile);
537
- if (stored?.issuedGrants === undefined) return;
516
+ ): Promise<void> {
538
517
  const key = issuedGrantKey(roomPath, memberDeviceHex);
539
- const issuedGrants = Object.fromEntries(
540
- Object.entries(stored.issuedGrants).filter(([k]) => k !== key),
518
+ await updateTokenRecords(
519
+ slot,
520
+ (records) =>
521
+ records.issuedGrants === undefined
522
+ ? undefined
523
+ : {
524
+ issuedGrants: Object.fromEntries(
525
+ Object.entries(records.issuedGrants).filter(([k]) => k !== key),
526
+ ),
527
+ },
528
+ false,
541
529
  );
542
- writeStoredIdentity(identityFile, { ...stored, issuedGrants });
543
530
  }
544
531
 
545
532
  /** The trusted-gateway allowlist lives in one JSON file per identity directory, not per bridge slot: who may see and reach this user's agents from another machine is an operator decision about the machine, and every store on it, including each session the default cc-peer front handles, advertises itself under it. It sits beside the identity files rather than inside one, because the trusted set has no dependency on any slot's key material and GatewayTrust can be constructed before an identity is ever loaded. */
@@ -655,6 +642,8 @@ function isStoredConnectionCode(value: unknown): value is StoredConnectionCode {
655
642
  if (!("expiresAt" in value) || !("deviceId" in value)) return false;
656
643
  if (typeof value.expiresAt !== "string" || typeof value.deviceId !== "string")
657
644
  return false;
645
+ // A record whose expiry names no instant could never be pruned or honoured, so it is not loaded.
646
+ if (!isIsoTimestamp(value.expiresAt)) return false;
658
647
  if ("signature" in value && typeof value.signature !== "string") return false;
659
648
  return true;
660
649
  }
@@ -693,7 +682,9 @@ export function loadConnectionCodeLedger(
693
682
  }
694
683
  const redeemed: Record<string, string> = {};
695
684
  for (const [nonce, expiresAt] of Object.entries(redeemedRaw)) {
696
- if (typeof expiresAt === "string") redeemed[nonce] = expiresAt;
685
+ if (typeof expiresAt === "string" && isIsoTimestamp(expiresAt)) {
686
+ redeemed[nonce] = expiresAt;
687
+ }
697
688
  }
698
689
  return { issued, redeemed };
699
690
  }
package/src/core/index.ts CHANGED
@@ -33,6 +33,7 @@ export {
33
33
  releaseIdentityLock,
34
34
  } from "./identity-store.js";
35
35
  export type { IdentitySlot } from "./identity-store.js";
36
+ export { UnusableIdentityRecordError } from "./issuer-identity-file.js";
36
37
  export type { CommsContext, CommsResult } from "./tool.js";
37
38
  export {
38
39
  buildAction,
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Timestamps that arrive as text and decide whether something has expired. A text that does not parse must never read as "not yet expired", which is what comparing a failed parse (NaN) against the clock does, so every expiry in text form goes through this one parser and a caller treats `undefined` as invalid.
3
+ */
4
+
5
+ /** The shape every timestamp this package writes has (`Date.prototype.toISOString`), and the offset form of ISO 8601 and RFC 3339 beside it: a date, `T`, a time with an optional fraction, then `Z` or a numeric offset. Anything looser (a bare year, a month name, a locale string) is parsed differently by different engines, so it is refused rather than guessed at. */
6
+ const ISO_TIMESTAMP =
7
+ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/;
8
+
9
+ /**
10
+ * The instant `text` names, in milliseconds since the epoch, or undefined when `text` is not an ISO 8601 timestamp in the form above or names no real instant (a month 13, say).
11
+ */
12
+ export function parseIsoTimestampMs(text: string): number | undefined {
13
+ if (!ISO_TIMESTAMP.test(text)) return undefined;
14
+ const ms = Date.parse(text);
15
+ return Number.isNaN(ms) ? undefined : ms;
16
+ }
17
+
18
+ /** Whether `text` is a timestamp parseIsoTimestampMs accepts. */
19
+ export function isIsoTimestamp(text: string): boolean {
20
+ return parseIsoTimestampMs(text) !== undefined;
21
+ }