@sempdev/semp 0.4.3

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 (559) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/brief/address.d.ts +77 -0
  4. package/dist/brief/address.d.ts.map +1 -0
  5. package/dist/brief/address.js +217 -0
  6. package/dist/brief/address.js.map +1 -0
  7. package/dist/brief/brief.d.ts +75 -0
  8. package/dist/brief/brief.d.ts.map +1 -0
  9. package/dist/brief/brief.js +56 -0
  10. package/dist/brief/brief.js.map +1 -0
  11. package/dist/brief/index.d.ts +11 -0
  12. package/dist/brief/index.d.ts.map +1 -0
  13. package/dist/brief/index.js +11 -0
  14. package/dist/brief/index.js.map +1 -0
  15. package/dist/canonical/index.d.ts +8 -0
  16. package/dist/canonical/index.d.ts.map +1 -0
  17. package/dist/canonical/index.js +8 -0
  18. package/dist/canonical/index.js.map +1 -0
  19. package/dist/canonical/marshal.d.ts +35 -0
  20. package/dist/canonical/marshal.d.ts.map +1 -0
  21. package/dist/canonical/marshal.js +107 -0
  22. package/dist/canonical/marshal.js.map +1 -0
  23. package/dist/clockskew/index.d.ts +52 -0
  24. package/dist/clockskew/index.d.ts.map +1 -0
  25. package/dist/clockskew/index.js +62 -0
  26. package/dist/clockskew/index.js.map +1 -0
  27. package/dist/closure/closure.d.ts +106 -0
  28. package/dist/closure/closure.d.ts.map +1 -0
  29. package/dist/closure/closure.js +152 -0
  30. package/dist/closure/closure.js.map +1 -0
  31. package/dist/closure/driver.d.ts +103 -0
  32. package/dist/closure/driver.d.ts.map +1 -0
  33. package/dist/closure/driver.js +126 -0
  34. package/dist/closure/driver.js.map +1 -0
  35. package/dist/closure/index.d.ts +13 -0
  36. package/dist/closure/index.d.ts.map +1 -0
  37. package/dist/closure/index.js +13 -0
  38. package/dist/closure/index.js.map +1 -0
  39. package/dist/closure/store.d.ts +80 -0
  40. package/dist/closure/store.d.ts.map +1 -0
  41. package/dist/closure/store.js +89 -0
  42. package/dist/closure/store.js.map +1 -0
  43. package/dist/crypto/aead.d.ts +29 -0
  44. package/dist/crypto/aead.d.ts.map +1 -0
  45. package/dist/crypto/aead.js +48 -0
  46. package/dist/crypto/aead.js.map +1 -0
  47. package/dist/crypto/argon2.d.ts +20 -0
  48. package/dist/crypto/argon2.d.ts.map +1 -0
  49. package/dist/crypto/argon2.js +28 -0
  50. package/dist/crypto/argon2.js.map +1 -0
  51. package/dist/crypto/index.d.ts +14 -0
  52. package/dist/crypto/index.d.ts.map +1 -0
  53. package/dist/crypto/index.js +14 -0
  54. package/dist/crypto/index.js.map +1 -0
  55. package/dist/crypto/kdf.d.ts +96 -0
  56. package/dist/crypto/kdf.d.ts.map +1 -0
  57. package/dist/crypto/kdf.js +122 -0
  58. package/dist/crypto/kdf.js.map +1 -0
  59. package/dist/crypto/kem.d.ts +85 -0
  60. package/dist/crypto/kem.d.ts.map +1 -0
  61. package/dist/crypto/kem.js +130 -0
  62. package/dist/crypto/kem.js.map +1 -0
  63. package/dist/crypto/mac.d.ts +19 -0
  64. package/dist/crypto/mac.d.ts.map +1 -0
  65. package/dist/crypto/mac.js +32 -0
  66. package/dist/crypto/mac.js.map +1 -0
  67. package/dist/delivery/ack.d.ts +125 -0
  68. package/dist/delivery/ack.d.ts.map +1 -0
  69. package/dist/delivery/ack.js +141 -0
  70. package/dist/delivery/ack.js.map +1 -0
  71. package/dist/delivery/blocklist.d.ts +87 -0
  72. package/dist/delivery/blocklist.d.ts.map +1 -0
  73. package/dist/delivery/blocklist.js +107 -0
  74. package/dist/delivery/blocklist.js.map +1 -0
  75. package/dist/delivery/cancel.d.ts +60 -0
  76. package/dist/delivery/cancel.d.ts.map +1 -0
  77. package/dist/delivery/cancel.js +43 -0
  78. package/dist/delivery/cancel.js.map +1 -0
  79. package/dist/delivery/disposition.d.ts +106 -0
  80. package/dist/delivery/disposition.d.ts.map +1 -0
  81. package/dist/delivery/disposition.js +105 -0
  82. package/dist/delivery/disposition.js.map +1 -0
  83. package/dist/delivery/fetch.d.ts +59 -0
  84. package/dist/delivery/fetch.d.ts.map +1 -0
  85. package/dist/delivery/fetch.js +47 -0
  86. package/dist/delivery/fetch.js.map +1 -0
  87. package/dist/delivery/forwarder.d.ts +106 -0
  88. package/dist/delivery/forwarder.d.ts.map +1 -0
  89. package/dist/delivery/forwarder.js +251 -0
  90. package/dist/delivery/forwarder.js.map +1 -0
  91. package/dist/delivery/inbox.d.ts +42 -0
  92. package/dist/delivery/inbox.d.ts.map +1 -0
  93. package/dist/delivery/inbox.js +68 -0
  94. package/dist/delivery/inbox.js.map +1 -0
  95. package/dist/delivery/index.d.ts +31 -0
  96. package/dist/delivery/index.d.ts.map +1 -0
  97. package/dist/delivery/index.js +31 -0
  98. package/dist/delivery/index.js.map +1 -0
  99. package/dist/delivery/internalroute.d.ts +50 -0
  100. package/dist/delivery/internalroute.d.ts.map +1 -0
  101. package/dist/delivery/internalroute.js +23 -0
  102. package/dist/delivery/internalroute.js.map +1 -0
  103. package/dist/delivery/pipeline.d.ts +153 -0
  104. package/dist/delivery/pipeline.d.ts.map +1 -0
  105. package/dist/delivery/pipeline.js +356 -0
  106. package/dist/delivery/pipeline.js.map +1 -0
  107. package/dist/delivery/policy_state.d.ts +105 -0
  108. package/dist/delivery/policy_state.d.ts.map +1 -0
  109. package/dist/delivery/policy_state.js +293 -0
  110. package/dist/delivery/policy_state.js.map +1 -0
  111. package/dist/delivery/queue.d.ts +47 -0
  112. package/dist/delivery/queue.d.ts.map +1 -0
  113. package/dist/delivery/queue.js +33 -0
  114. package/dist/delivery/queue.js.map +1 -0
  115. package/dist/delivery/receipt.d.ts +137 -0
  116. package/dist/delivery/receipt.d.ts.map +1 -0
  117. package/dist/delivery/receipt.js +181 -0
  118. package/dist/delivery/receipt.js.map +1 -0
  119. package/dist/delivery/receipt_store.d.ts +81 -0
  120. package/dist/delivery/receipt_store.d.ts.map +1 -0
  121. package/dist/delivery/receipt_store.js +74 -0
  122. package/dist/delivery/receipt_store.js.map +1 -0
  123. package/dist/delivery/retry.d.ts +78 -0
  124. package/dist/delivery/retry.d.ts.map +1 -0
  125. package/dist/delivery/retry.js +132 -0
  126. package/dist/delivery/retry.js.map +1 -0
  127. package/dist/delivery/scheduler.d.ts +156 -0
  128. package/dist/delivery/scheduler.d.ts.map +1 -0
  129. package/dist/delivery/scheduler.js +349 -0
  130. package/dist/delivery/scheduler.js.map +1 -0
  131. package/dist/delivery/stage_partition.d.ts +87 -0
  132. package/dist/delivery/stage_partition.d.ts.map +1 -0
  133. package/dist/delivery/stage_partition.js +122 -0
  134. package/dist/delivery/stage_partition.js.map +1 -0
  135. package/dist/delivery/staged_runner.d.ts +100 -0
  136. package/dist/delivery/staged_runner.d.ts.map +1 -0
  137. package/dist/delivery/staged_runner.js +277 -0
  138. package/dist/delivery/staged_runner.js.map +1 -0
  139. package/dist/delivery/submission.d.ts +72 -0
  140. package/dist/delivery/submission.d.ts.map +1 -0
  141. package/dist/delivery/submission.js +58 -0
  142. package/dist/delivery/submission.js.map +1 -0
  143. package/dist/delivery/sync.d.ts +68 -0
  144. package/dist/delivery/sync.d.ts.map +1 -0
  145. package/dist/delivery/sync.js +99 -0
  146. package/dist/delivery/sync.js.map +1 -0
  147. package/dist/delivery/user_policy.d.ts +74 -0
  148. package/dist/delivery/user_policy.d.ts.map +1 -0
  149. package/dist/delivery/user_policy.js +140 -0
  150. package/dist/delivery/user_policy.js.map +1 -0
  151. package/dist/discovery/cache.d.ts +37 -0
  152. package/dist/discovery/cache.d.ts.map +1 -0
  153. package/dist/discovery/cache.js +45 -0
  154. package/dist/discovery/cache.js.map +1 -0
  155. package/dist/discovery/configuration.d.ts +97 -0
  156. package/dist/discovery/configuration.d.ts.map +1 -0
  157. package/dist/discovery/configuration.js +146 -0
  158. package/dist/discovery/configuration.js.map +1 -0
  159. package/dist/discovery/dns.d.ts +56 -0
  160. package/dist/discovery/dns.d.ts.map +1 -0
  161. package/dist/discovery/dns.js +120 -0
  162. package/dist/discovery/dns.js.map +1 -0
  163. package/dist/discovery/domain_keys.d.ts +62 -0
  164. package/dist/discovery/domain_keys.d.ts.map +1 -0
  165. package/dist/discovery/domain_keys.js +89 -0
  166. package/dist/discovery/domain_keys.js.map +1 -0
  167. package/dist/discovery/index.d.ts +19 -0
  168. package/dist/discovery/index.d.ts.map +1 -0
  169. package/dist/discovery/index.js +19 -0
  170. package/dist/discovery/index.js.map +1 -0
  171. package/dist/discovery/lookup.d.ts +72 -0
  172. package/dist/discovery/lookup.d.ts.map +1 -0
  173. package/dist/discovery/lookup.js +121 -0
  174. package/dist/discovery/lookup.js.map +1 -0
  175. package/dist/discovery/onion.d.ts +34 -0
  176. package/dist/discovery/onion.d.ts.map +1 -0
  177. package/dist/discovery/onion.js +61 -0
  178. package/dist/discovery/onion.js.map +1 -0
  179. package/dist/discovery/partition.d.ts +96 -0
  180. package/dist/discovery/partition.d.ts.map +1 -0
  181. package/dist/discovery/partition.js +247 -0
  182. package/dist/discovery/partition.js.map +1 -0
  183. package/dist/discovery/resolver.d.ts +113 -0
  184. package/dist/discovery/resolver.d.ts.map +1 -0
  185. package/dist/discovery/resolver.js +176 -0
  186. package/dist/discovery/resolver.js.map +1 -0
  187. package/dist/discovery/txt.d.ts +39 -0
  188. package/dist/discovery/txt.d.ts.map +1 -0
  189. package/dist/discovery/txt.js +71 -0
  190. package/dist/discovery/txt.js.map +1 -0
  191. package/dist/enclosure/forwarding.d.ts +128 -0
  192. package/dist/enclosure/forwarding.d.ts.map +1 -0
  193. package/dist/enclosure/forwarding.js +119 -0
  194. package/dist/enclosure/forwarding.js.map +1 -0
  195. package/dist/enclosure/index.d.ts +11 -0
  196. package/dist/enclosure/index.d.ts.map +1 -0
  197. package/dist/enclosure/index.js +11 -0
  198. package/dist/enclosure/index.js.map +1 -0
  199. package/dist/envelope/buckets.d.ts +38 -0
  200. package/dist/envelope/buckets.d.ts.map +1 -0
  201. package/dist/envelope/buckets.js +73 -0
  202. package/dist/envelope/buckets.js.map +1 -0
  203. package/dist/envelope/canonical.d.ts +28 -0
  204. package/dist/envelope/canonical.d.ts.map +1 -0
  205. package/dist/envelope/canonical.js +54 -0
  206. package/dist/envelope/canonical.js.map +1 -0
  207. package/dist/envelope/compose.d.ts +171 -0
  208. package/dist/envelope/compose.d.ts.map +1 -0
  209. package/dist/envelope/compose.js +237 -0
  210. package/dist/envelope/compose.js.map +1 -0
  211. package/dist/envelope/encode.d.ts +41 -0
  212. package/dist/envelope/encode.d.ts.map +1 -0
  213. package/dist/envelope/encode.js +69 -0
  214. package/dist/envelope/encode.js.map +1 -0
  215. package/dist/envelope/index.d.ts +20 -0
  216. package/dist/envelope/index.d.ts.map +1 -0
  217. package/dist/envelope/index.js +20 -0
  218. package/dist/envelope/index.js.map +1 -0
  219. package/dist/envelope/open_any.d.ts +48 -0
  220. package/dist/envelope/open_any.d.ts.map +1 -0
  221. package/dist/envelope/open_any.js +81 -0
  222. package/dist/envelope/open_any.js.map +1 -0
  223. package/dist/envelope/open_verified.d.ts +59 -0
  224. package/dist/envelope/open_verified.d.ts.map +1 -0
  225. package/dist/envelope/open_verified.js +67 -0
  226. package/dist/envelope/open_verified.js.map +1 -0
  227. package/dist/envelope/padding.d.ts +55 -0
  228. package/dist/envelope/padding.d.ts.map +1 -0
  229. package/dist/envelope/padding.js +162 -0
  230. package/dist/envelope/padding.js.map +1 -0
  231. package/dist/envelope/rejection.d.ts +22 -0
  232. package/dist/envelope/rejection.d.ts.map +1 -0
  233. package/dist/envelope/rejection.js +30 -0
  234. package/dist/envelope/rejection.js.map +1 -0
  235. package/dist/envelope/sendtime.d.ts +49 -0
  236. package/dist/envelope/sendtime.d.ts.map +1 -0
  237. package/dist/envelope/sendtime.js +87 -0
  238. package/dist/envelope/sendtime.js.map +1 -0
  239. package/dist/envelope/verify.d.ts +29 -0
  240. package/dist/envelope/verify.d.ts.map +1 -0
  241. package/dist/envelope/verify.js +90 -0
  242. package/dist/envelope/verify.js.map +1 -0
  243. package/dist/extensions/index.d.ts +7 -0
  244. package/dist/extensions/index.d.ts.map +1 -0
  245. package/dist/extensions/index.js +7 -0
  246. package/dist/extensions/index.js.map +1 -0
  247. package/dist/extensions/limits.d.ts +101 -0
  248. package/dist/extensions/limits.d.ts.map +1 -0
  249. package/dist/extensions/limits.js +175 -0
  250. package/dist/extensions/limits.js.map +1 -0
  251. package/dist/handshake/abort.d.ts +49 -0
  252. package/dist/handshake/abort.d.ts.map +1 -0
  253. package/dist/handshake/abort.js +82 -0
  254. package/dist/handshake/abort.js.map +1 -0
  255. package/dist/handshake/capabilities.d.ts +46 -0
  256. package/dist/handshake/capabilities.d.ts.map +1 -0
  257. package/dist/handshake/capabilities.js +114 -0
  258. package/dist/handshake/capabilities.js.map +1 -0
  259. package/dist/handshake/client_state.d.ts +186 -0
  260. package/dist/handshake/client_state.d.ts.map +1 -0
  261. package/dist/handshake/client_state.js +520 -0
  262. package/dist/handshake/client_state.js.map +1 -0
  263. package/dist/handshake/confirm.d.ts +21 -0
  264. package/dist/handshake/confirm.d.ts.map +1 -0
  265. package/dist/handshake/confirm.js +27 -0
  266. package/dist/handshake/confirm.js.map +1 -0
  267. package/dist/handshake/driver.d.ts +126 -0
  268. package/dist/handshake/driver.d.ts.map +1 -0
  269. package/dist/handshake/driver.js +251 -0
  270. package/dist/handshake/driver.js.map +1 -0
  271. package/dist/handshake/federation.d.ts +365 -0
  272. package/dist/handshake/federation.d.ts.map +1 -0
  273. package/dist/handshake/federation.js +664 -0
  274. package/dist/handshake/federation.js.map +1 -0
  275. package/dist/handshake/first_contact.d.ts +57 -0
  276. package/dist/handshake/first_contact.d.ts.map +1 -0
  277. package/dist/handshake/first_contact.js +124 -0
  278. package/dist/handshake/first_contact.js.map +1 -0
  279. package/dist/handshake/identity.d.ts +101 -0
  280. package/dist/handshake/identity.d.ts.map +1 -0
  281. package/dist/handshake/identity.js +117 -0
  282. package/dist/handshake/identity.js.map +1 -0
  283. package/dist/handshake/index.d.ts +21 -0
  284. package/dist/handshake/index.d.ts.map +1 -0
  285. package/dist/handshake/index.js +21 -0
  286. package/dist/handshake/index.js.map +1 -0
  287. package/dist/handshake/messages.d.ts +176 -0
  288. package/dist/handshake/messages.d.ts.map +1 -0
  289. package/dist/handshake/messages.js +125 -0
  290. package/dist/handshake/messages.js.map +1 -0
  291. package/dist/handshake/pow.d.ts +53 -0
  292. package/dist/handshake/pow.d.ts.map +1 -0
  293. package/dist/handshake/pow.js +142 -0
  294. package/dist/handshake/pow.js.map +1 -0
  295. package/dist/handshake/resume_driver.d.ts +56 -0
  296. package/dist/handshake/resume_driver.d.ts.map +1 -0
  297. package/dist/handshake/resume_driver.js +75 -0
  298. package/dist/handshake/resume_driver.js.map +1 -0
  299. package/dist/handshake/server.d.ts +112 -0
  300. package/dist/handshake/server.d.ts.map +1 -0
  301. package/dist/handshake/server.js +247 -0
  302. package/dist/handshake/server.js.map +1 -0
  303. package/dist/handshake/server_state.d.ts +102 -0
  304. package/dist/handshake/server_state.d.ts.map +1 -0
  305. package/dist/handshake/server_state.js +278 -0
  306. package/dist/handshake/server_state.js.map +1 -0
  307. package/dist/index.d.ts +33 -0
  308. package/dist/index.d.ts.map +1 -0
  309. package/dist/index.js +33 -0
  310. package/dist/index.js.map +1 -0
  311. package/dist/keys/compromise.d.ts +118 -0
  312. package/dist/keys/compromise.d.ts.map +1 -0
  313. package/dist/keys/compromise.js +218 -0
  314. package/dist/keys/compromise.js.map +1 -0
  315. package/dist/keys/device_certificate.d.ts +166 -0
  316. package/dist/keys/device_certificate.d.ts.map +1 -0
  317. package/dist/keys/device_certificate.js +328 -0
  318. package/dist/keys/device_certificate.js.map +1 -0
  319. package/dist/keys/device_records.d.ts +175 -0
  320. package/dist/keys/device_records.d.ts.map +1 -0
  321. package/dist/keys/device_records.js +418 -0
  322. package/dist/keys/device_records.js.map +1 -0
  323. package/dist/keys/directory_cache.d.ts +64 -0
  324. package/dist/keys/directory_cache.d.ts.map +1 -0
  325. package/dist/keys/directory_cache.js +98 -0
  326. package/dist/keys/directory_cache.js.map +1 -0
  327. package/dist/keys/directory_state.d.ts +79 -0
  328. package/dist/keys/directory_state.d.ts.map +1 -0
  329. package/dist/keys/directory_state.js +155 -0
  330. package/dist/keys/directory_state.js.map +1 -0
  331. package/dist/keys/index.d.ts +18 -0
  332. package/dist/keys/index.d.ts.map +1 -0
  333. package/dist/keys/index.js +18 -0
  334. package/dist/keys/index.js.map +1 -0
  335. package/dist/keys/key_revocation.d.ts +61 -0
  336. package/dist/keys/key_revocation.d.ts.map +1 -0
  337. package/dist/keys/key_revocation.js +88 -0
  338. package/dist/keys/key_revocation.js.map +1 -0
  339. package/dist/keys/request.d.ts +124 -0
  340. package/dist/keys/request.d.ts.map +1 -0
  341. package/dist/keys/request.js +130 -0
  342. package/dist/keys/request.js.map +1 -0
  343. package/dist/keys/sign.d.ts +49 -0
  344. package/dist/keys/sign.d.ts.map +1 -0
  345. package/dist/keys/sign.js +80 -0
  346. package/dist/keys/sign.js.map +1 -0
  347. package/dist/keys/signed.d.ts +80 -0
  348. package/dist/keys/signed.d.ts.map +1 -0
  349. package/dist/keys/signed.js +138 -0
  350. package/dist/keys/signed.js.map +1 -0
  351. package/dist/keys/store.d.ts +138 -0
  352. package/dist/keys/store.d.ts.map +1 -0
  353. package/dist/keys/store.js +107 -0
  354. package/dist/keys/store.js.map +1 -0
  355. package/dist/largeattachment/crypto.d.ts +47 -0
  356. package/dist/largeattachment/crypto.d.ts.map +1 -0
  357. package/dist/largeattachment/crypto.js +235 -0
  358. package/dist/largeattachment/crypto.js.map +1 -0
  359. package/dist/largeattachment/enclosure.d.ts +48 -0
  360. package/dist/largeattachment/enclosure.d.ts.map +1 -0
  361. package/dist/largeattachment/enclosure.js +102 -0
  362. package/dist/largeattachment/enclosure.js.map +1 -0
  363. package/dist/largeattachment/index.d.ts +15 -0
  364. package/dist/largeattachment/index.d.ts.map +1 -0
  365. package/dist/largeattachment/index.js +15 -0
  366. package/dist/largeattachment/index.js.map +1 -0
  367. package/dist/largeattachment/store.d.ts +36 -0
  368. package/dist/largeattachment/store.d.ts.map +1 -0
  369. package/dist/largeattachment/store.js +37 -0
  370. package/dist/largeattachment/store.js.map +1 -0
  371. package/dist/largeattachment/types.d.ts +56 -0
  372. package/dist/largeattachment/types.d.ts.map +1 -0
  373. package/dist/largeattachment/types.js +31 -0
  374. package/dist/largeattachment/types.js.map +1 -0
  375. package/dist/largeattachment/upload.d.ts +62 -0
  376. package/dist/largeattachment/upload.d.ts.map +1 -0
  377. package/dist/largeattachment/upload.js +166 -0
  378. package/dist/largeattachment/upload.js.map +1 -0
  379. package/dist/migration/index.d.ts +17 -0
  380. package/dist/migration/index.d.ts.map +1 -0
  381. package/dist/migration/index.js +17 -0
  382. package/dist/migration/index.js.map +1 -0
  383. package/dist/migration/lockout.d.ts +48 -0
  384. package/dist/migration/lockout.d.ts.map +1 -0
  385. package/dist/migration/lockout.js +57 -0
  386. package/dist/migration/lockout.js.map +1 -0
  387. package/dist/migration/migration.d.ts +48 -0
  388. package/dist/migration/migration.d.ts.map +1 -0
  389. package/dist/migration/migration.js +58 -0
  390. package/dist/migration/migration.js.map +1 -0
  391. package/dist/migration/notice.d.ts +33 -0
  392. package/dist/migration/notice.d.ts.map +1 -0
  393. package/dist/migration/notice.js +85 -0
  394. package/dist/migration/notice.js.map +1 -0
  395. package/dist/migration/orchestrate.d.ts +109 -0
  396. package/dist/migration/orchestrate.d.ts.map +1 -0
  397. package/dist/migration/orchestrate.js +212 -0
  398. package/dist/migration/orchestrate.js.map +1 -0
  399. package/dist/migration/publication_store.d.ts +34 -0
  400. package/dist/migration/publication_store.d.ts.map +1 -0
  401. package/dist/migration/publication_store.js +44 -0
  402. package/dist/migration/publication_store.js.map +1 -0
  403. package/dist/migration/sign.d.ts +65 -0
  404. package/dist/migration/sign.d.ts.map +1 -0
  405. package/dist/migration/sign.js +331 -0
  406. package/dist/migration/sign.js.map +1 -0
  407. package/dist/migration/types.d.ts +92 -0
  408. package/dist/migration/types.d.ts.map +1 -0
  409. package/dist/migration/types.js +26 -0
  410. package/dist/migration/types.js.map +1 -0
  411. package/dist/reasoncodes.d.ts +42 -0
  412. package/dist/reasoncodes.d.ts.map +1 -0
  413. package/dist/reasoncodes.js +80 -0
  414. package/dist/reasoncodes.js.map +1 -0
  415. package/dist/recovery/bundle.d.ts +34 -0
  416. package/dist/recovery/bundle.d.ts.map +1 -0
  417. package/dist/recovery/bundle.js +144 -0
  418. package/dist/recovery/bundle.js.map +1 -0
  419. package/dist/recovery/bundle_crypto.d.ts +60 -0
  420. package/dist/recovery/bundle_crypto.d.ts.map +1 -0
  421. package/dist/recovery/bundle_crypto.js +179 -0
  422. package/dist/recovery/bundle_crypto.js.map +1 -0
  423. package/dist/recovery/bundle_store.d.ts +57 -0
  424. package/dist/recovery/bundle_store.d.ts.map +1 -0
  425. package/dist/recovery/bundle_store.js +104 -0
  426. package/dist/recovery/bundle_store.js.map +1 -0
  427. package/dist/recovery/index.d.ts +19 -0
  428. package/dist/recovery/index.d.ts.map +1 -0
  429. package/dist/recovery/index.js +19 -0
  430. package/dist/recovery/index.js.map +1 -0
  431. package/dist/recovery/manifest_crosscheck.d.ts +59 -0
  432. package/dist/recovery/manifest_crosscheck.d.ts.map +1 -0
  433. package/dist/recovery/manifest_crosscheck.js +59 -0
  434. package/dist/recovery/manifest_crosscheck.js.map +1 -0
  435. package/dist/recovery/shamir.d.ts +51 -0
  436. package/dist/recovery/shamir.d.ts.map +1 -0
  437. package/dist/recovery/shamir.js +181 -0
  438. package/dist/recovery/shamir.js.map +1 -0
  439. package/dist/recovery/sign.d.ts +61 -0
  440. package/dist/recovery/sign.d.ts.map +1 -0
  441. package/dist/recovery/sign.js +359 -0
  442. package/dist/recovery/sign.js.map +1 -0
  443. package/dist/recovery/types.d.ts +180 -0
  444. package/dist/recovery/types.d.ts.map +1 -0
  445. package/dist/recovery/types.js +31 -0
  446. package/dist/recovery/types.js.map +1 -0
  447. package/dist/reputation/abuse_report.d.ts +62 -0
  448. package/dist/reputation/abuse_report.d.ts.map +1 -0
  449. package/dist/reputation/abuse_report.js +111 -0
  450. package/dist/reputation/abuse_report.js.map +1 -0
  451. package/dist/reputation/bucketize.d.ts +31 -0
  452. package/dist/reputation/bucketize.d.ts.map +1 -0
  453. package/dist/reputation/bucketize.js +77 -0
  454. package/dist/reputation/bucketize.js.map +1 -0
  455. package/dist/reputation/gossip.d.ts +24 -0
  456. package/dist/reputation/gossip.d.ts.map +1 -0
  457. package/dist/reputation/gossip.js +64 -0
  458. package/dist/reputation/gossip.js.map +1 -0
  459. package/dist/reputation/gossip_fetch.d.ts +64 -0
  460. package/dist/reputation/gossip_fetch.d.ts.map +1 -0
  461. package/dist/reputation/gossip_fetch.js +114 -0
  462. package/dist/reputation/gossip_fetch.js.map +1 -0
  463. package/dist/reputation/index.d.ts +20 -0
  464. package/dist/reputation/index.d.ts.map +1 -0
  465. package/dist/reputation/index.js +20 -0
  466. package/dist/reputation/index.js.map +1 -0
  467. package/dist/reputation/observation_store.d.ts +67 -0
  468. package/dist/reputation/observation_store.d.ts.map +1 -0
  469. package/dist/reputation/observation_store.js +171 -0
  470. package/dist/reputation/observation_store.js.map +1 -0
  471. package/dist/reputation/pow.d.ts +91 -0
  472. package/dist/reputation/pow.d.ts.map +1 -0
  473. package/dist/reputation/pow.js +209 -0
  474. package/dist/reputation/pow.js.map +1 -0
  475. package/dist/reputation/sign.d.ts +40 -0
  476. package/dist/reputation/sign.d.ts.map +1 -0
  477. package/dist/reputation/sign.js +202 -0
  478. package/dist/reputation/sign.js.map +1 -0
  479. package/dist/reputation/types.d.ts +133 -0
  480. package/dist/reputation/types.d.ts.map +1 -0
  481. package/dist/reputation/types.js +33 -0
  482. package/dist/reputation/types.js.map +1 -0
  483. package/dist/reputation/whois.d.ts +25 -0
  484. package/dist/reputation/whois.d.ts.map +1 -0
  485. package/dist/reputation/whois.js +20 -0
  486. package/dist/reputation/whois.js.map +1 -0
  487. package/dist/seal/index.d.ts +8 -0
  488. package/dist/seal/index.d.ts.map +1 -0
  489. package/dist/seal/index.js +8 -0
  490. package/dist/seal/index.js.map +1 -0
  491. package/dist/seal/wrap.d.ts +74 -0
  492. package/dist/seal/wrap.d.ts.map +1 -0
  493. package/dist/seal/wrap.js +213 -0
  494. package/dist/seal/wrap.js.map +1 -0
  495. package/dist/session/dispatcher.d.ts +65 -0
  496. package/dist/session/dispatcher.d.ts.map +1 -0
  497. package/dist/session/dispatcher.js +96 -0
  498. package/dist/session/dispatcher.js.map +1 -0
  499. package/dist/session/index.d.ts +15 -0
  500. package/dist/session/index.d.ts.map +1 -0
  501. package/dist/session/index.js +15 -0
  502. package/dist/session/index.js.map +1 -0
  503. package/dist/session/rekey.d.ts +108 -0
  504. package/dist/session/rekey.d.ts.map +1 -0
  505. package/dist/session/rekey.js +207 -0
  506. package/dist/session/rekey.js.map +1 -0
  507. package/dist/session/rekey_seal.d.ts +66 -0
  508. package/dist/session/rekey_seal.d.ts.map +1 -0
  509. package/dist/session/rekey_seal.js +153 -0
  510. package/dist/session/rekey_seal.js.map +1 -0
  511. package/dist/session/resume.d.ts +125 -0
  512. package/dist/session/resume.d.ts.map +1 -0
  513. package/dist/session/resume.js +263 -0
  514. package/dist/session/resume.js.map +1 -0
  515. package/dist/session/session.d.ts +136 -0
  516. package/dist/session/session.d.ts.map +1 -0
  517. package/dist/session/session.js +188 -0
  518. package/dist/session/session.js.map +1 -0
  519. package/dist/transparency/index.d.ts +13 -0
  520. package/dist/transparency/index.d.ts.map +1 -0
  521. package/dist/transparency/index.js +13 -0
  522. package/dist/transparency/index.js.map +1 -0
  523. package/dist/transparency/log.d.ts +61 -0
  524. package/dist/transparency/log.d.ts.map +1 -0
  525. package/dist/transparency/log.js +133 -0
  526. package/dist/transparency/log.js.map +1 -0
  527. package/dist/transparency/merkle.d.ts +59 -0
  528. package/dist/transparency/merkle.d.ts.map +1 -0
  529. package/dist/transparency/merkle.js +314 -0
  530. package/dist/transparency/merkle.js.map +1 -0
  531. package/dist/transparency/sign.d.ts +48 -0
  532. package/dist/transparency/sign.d.ts.map +1 -0
  533. package/dist/transparency/sign.js +140 -0
  534. package/dist/transparency/sign.js.map +1 -0
  535. package/dist/transparency/types.d.ts +97 -0
  536. package/dist/transparency/types.d.ts.map +1 -0
  537. package/dist/transparency/types.js +25 -0
  538. package/dist/transparency/types.js.map +1 -0
  539. package/dist/transport/h2.d.ts +163 -0
  540. package/dist/transport/h2.d.ts.map +1 -0
  541. package/dist/transport/h2.js +397 -0
  542. package/dist/transport/h2.js.map +1 -0
  543. package/dist/transport/index.d.ts +15 -0
  544. package/dist/transport/index.d.ts.map +1 -0
  545. package/dist/transport/index.js +15 -0
  546. package/dist/transport/index.js.map +1 -0
  547. package/dist/transport/memory.d.ts +21 -0
  548. package/dist/transport/memory.d.ts.map +1 -0
  549. package/dist/transport/memory.js +112 -0
  550. package/dist/transport/memory.js.map +1 -0
  551. package/dist/transport/transport.d.ts +54 -0
  552. package/dist/transport/transport.d.ts.map +1 -0
  553. package/dist/transport/transport.js +20 -0
  554. package/dist/transport/transport.js.map +1 -0
  555. package/dist/transport/ws.d.ts +40 -0
  556. package/dist/transport/ws.d.ts.map +1 -0
  557. package/dist/transport/ws.js +204 -0
  558. package/dist/transport/ws.js.map +1 -0
  559. package/package.json +147 -0
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Delivery disposition data per DELIVERY.md §3.2 + CLIENT.md §4.5.7.
3
+ *
4
+ * The `delivery-disposition` sync kind is the control signal a
5
+ * staged device emits to tell the home server whether a held
6
+ * envelope should advance to the next stage or be suppressed.
7
+ *
8
+ * @module
9
+ */
10
+ /** The literal `kind` string identifying a delivery-disposition sync marker. */
11
+ export const DispositionKind = "delivery-disposition";
12
+ /** Recommended reason tags per CLIENT.md §4.5.7. Operators MAY define more. */
13
+ export const DispositionReasonSpam = "spam";
14
+ export const DispositionReasonAccepted = "accepted";
15
+ export const DispositionReasonPolicy = "policy";
16
+ export const DispositionReasonOther = "other";
17
+ /**
18
+ * Validate `d` is structurally well-formed per CLIENT.md §4.5.7.
19
+ * Does NOT verify authentication; the home server verifies §3.2.5
20
+ * (session belongs to `device_id`) at receipt.
21
+ */
22
+ export function validateDisposition(d) {
23
+ if (d === undefined || d === null) {
24
+ throw new Error("delivery: nil disposition");
25
+ }
26
+ if (d.kind !== DispositionKind) {
27
+ throw new Error(`delivery: disposition kind ${JSON.stringify(d.kind)}, want ${JSON.stringify(DispositionKind)}`);
28
+ }
29
+ if (d.source_envelope_id === "") {
30
+ throw new Error("delivery: disposition missing source_envelope_id");
31
+ }
32
+ if (d.device_id === "") {
33
+ throw new Error("delivery: disposition missing device_id");
34
+ }
35
+ if (d.disposition === undefined || d.disposition === "") {
36
+ throw new Error("delivery: disposition missing decision");
37
+ }
38
+ if (d.disposition !== "advance" && d.disposition !== "suppress") {
39
+ throw new Error(`delivery: disposition decision ${JSON.stringify(d.disposition)} is not a valid value`);
40
+ }
41
+ }
42
+ /**
43
+ * Apply the §3.2.3 conservative aggregation rule across the
44
+ * dispositions collected at one stage:
45
+ *
46
+ * - If any disposition is `suppress`, return `"suppress"`.
47
+ * - Otherwise return `"advance"` (covers "any advance" and "no
48
+ * dispositions at all" via §3.2.4 fail-open on timeout).
49
+ *
50
+ * Does NOT itself enforce the §3.2.5 authentication rules; the
51
+ * caller filters out late or off-stage dispositions before
52
+ * aggregating.
53
+ */
54
+ export function aggregateDispositions(ds) {
55
+ for (const d of ds) {
56
+ if (d.disposition === "suppress") {
57
+ return "suppress";
58
+ }
59
+ }
60
+ return "advance";
61
+ }
62
+ /**
63
+ * Recommended stage timeout per DELIVERY.md §3.2.2. Operators MAY
64
+ * configure longer windows.
65
+ */
66
+ export const DefaultStageTimeoutMs = 30_000;
67
+ /**
68
+ * Whether the wait at the current stage MUST terminate per §3.2.2.
69
+ * Either every device at the stage has emitted a disposition, or
70
+ * the deadline has passed.
71
+ *
72
+ * Does NOT return the outcome; the caller follows up with
73
+ * {@link aggregateDispositions} to compute that.
74
+ *
75
+ * @param stage - the current stage record
76
+ * @param now - current wall-clock
77
+ * @param deadline - ISO 8601 UTC string; empty means "no deadline"
78
+ */
79
+ export function isStageComplete(stage, now, deadline) {
80
+ if (stage === undefined || stage === null) {
81
+ return true;
82
+ }
83
+ if (stage.pending_device_ids.length === 0) {
84
+ return true;
85
+ }
86
+ if (deadline !== "") {
87
+ const ms = Date.parse(deadline);
88
+ if (!Number.isNaN(ms) && now.getTime() >= ms) {
89
+ return true;
90
+ }
91
+ }
92
+ // All pending devices have emitted? Build a set of devices
93
+ // already represented in `dispositions` and check.
94
+ const seen = new Set();
95
+ for (const d of stage.dispositions) {
96
+ seen.add(d.device_id);
97
+ }
98
+ for (const id of stage.pending_device_ids) {
99
+ if (!seen.has(id)) {
100
+ return false;
101
+ }
102
+ }
103
+ return true;
104
+ }
105
+ //# sourceMappingURL=disposition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.js","sourceRoot":"","sources":["../../src/delivery/disposition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * SEMP_FETCH wire shapes — the demo-only client → home-server inbox
3
+ * pull protocol per CLIENT.md §3.
4
+ *
5
+ * HANDSHAKE.md §4.6 explicitly leaves the client wakeup mechanism
6
+ * outside the scope of the spec: "How a server notifies a client
7
+ * that incoming messages are waiting is outside the scope of this
8
+ * specification. Implementations MAY use persistent WebSocket
9
+ * connections, long polling, or platform notification services such
10
+ * as APNs or FCM."
11
+ *
12
+ * `SEMP_FETCH` is the simplest possible such mechanism: the client,
13
+ * after completing the handshake, sends a single `SEMP_FETCH`
14
+ * request and the server responds with the contents of the client's
15
+ * inbox. It is fit for demo and test purposes only; a real
16
+ * deployment would use a long-lived notification stream or platform
17
+ * push.
18
+ *
19
+ * @module
20
+ */
21
+ /** Wire-level type discriminator. */
22
+ export declare const FetchType = "SEMP_FETCH";
23
+ /** Schema version. */
24
+ export declare const FetchVersion = "1.0.0";
25
+ /** Discriminator for which fetch message variant this is. */
26
+ export type FetchStep = "request" | "response";
27
+ /** Sent by the client to pull every waiting envelope from the inbox. */
28
+ export interface FetchRequest {
29
+ type: typeof FetchType;
30
+ step: "request";
31
+ version: string;
32
+ }
33
+ /** Construct a {@link FetchRequest} with the protocol version pre-populated. */
34
+ export declare function newFetchRequest(): FetchRequest;
35
+ /**
36
+ * Server's response carrying the envelopes being delivered. Each
37
+ * element of `envelopes` is the base64-encoded canonical JSON of a
38
+ * single SEMP envelope (the same bytes the sender produced; the
39
+ * recipient runs `decodeEnvelope` and `openBriefAny` /
40
+ * `openEnclosureAny` on each).
41
+ *
42
+ * `drained` reports whether the server returned every envelope it
43
+ * had queued for the recipient. The demo server always sets this to
44
+ * `true` because the inbox is unbounded; production implementations
45
+ * might paginate and set `drained === false`.
46
+ */
47
+ export interface FetchResponse {
48
+ type: typeof FetchType;
49
+ step: "response";
50
+ version: string;
51
+ /** Base64-encoded envelope payloads. */
52
+ envelopes: string[];
53
+ drained: boolean;
54
+ /** ISO 8601 UTC. */
55
+ timestamp: string;
56
+ }
57
+ /** Construct a fully-populated {@link FetchResponse}. */
58
+ export declare function newFetchResponse(envelopesB64: string[], nowFn?: () => Date): FetchResponse;
59
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/delivery/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qCAAqC;AACrC,eAAO,MAAM,SAAS,eAAe,CAAC;AAEtC,sBAAsB;AACtB,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,SAAS,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,wBAAgB,eAAe,IAAI,YAAY,CAM9C;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,SAAS,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,GAAE,MAAM,IAAuB,GACnC,aAAa,CASf"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SEMP_FETCH wire shapes — the demo-only client → home-server inbox
3
+ * pull protocol per CLIENT.md §3.
4
+ *
5
+ * HANDSHAKE.md §4.6 explicitly leaves the client wakeup mechanism
6
+ * outside the scope of the spec: "How a server notifies a client
7
+ * that incoming messages are waiting is outside the scope of this
8
+ * specification. Implementations MAY use persistent WebSocket
9
+ * connections, long polling, or platform notification services such
10
+ * as APNs or FCM."
11
+ *
12
+ * `SEMP_FETCH` is the simplest possible such mechanism: the client,
13
+ * after completing the handshake, sends a single `SEMP_FETCH`
14
+ * request and the server responds with the contents of the client's
15
+ * inbox. It is fit for demo and test purposes only; a real
16
+ * deployment would use a long-lived notification stream or platform
17
+ * push.
18
+ *
19
+ * @module
20
+ */
21
+ /** Wire-level type discriminator. */
22
+ export const FetchType = "SEMP_FETCH";
23
+ /** Schema version. */
24
+ export const FetchVersion = "1.0.0";
25
+ /** Construct a {@link FetchRequest} with the protocol version pre-populated. */
26
+ export function newFetchRequest() {
27
+ return {
28
+ type: FetchType,
29
+ step: "request",
30
+ version: FetchVersion,
31
+ };
32
+ }
33
+ /** Construct a fully-populated {@link FetchResponse}. */
34
+ export function newFetchResponse(envelopesB64, nowFn = () => new Date()) {
35
+ return {
36
+ type: FetchType,
37
+ step: "response",
38
+ version: FetchVersion,
39
+ envelopes: envelopesB64,
40
+ drained: true,
41
+ timestamp: isoSecond(nowFn()),
42
+ };
43
+ }
44
+ function isoSecond(d) {
45
+ return d.toISOString().replace(/\.\d{3}Z$/, "Z");
46
+ }
47
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/delivery/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,qCAAqC;AACrC,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC;AAEtC,sBAAsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC;AAYpC,gFAAgF;AAChF,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;KACtB,CAAC;AACJ,CAAC;AAyBD,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAC9B,YAAsB,EACtB,QAAoB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAEpC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,CAAO;IACxB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Federation forwarder per DELIVERY.md §5 and HANDSHAKE.md §5.
3
+ *
4
+ * Establishes and caches federation sessions to remote peers and
5
+ * forwards envelopes across them. Each `(localDomain, peerDomain)`
6
+ * pair gets at most one live session at a time; the forwarder
7
+ * re-runs the federation handshake if the cached session has
8
+ * expired or been torn down.
9
+ *
10
+ * On forward, the forwarder:
11
+ *
12
+ * 1. Updates `postmark.session_id` to reference the federation
13
+ * session id (so the peer's receive pipeline matches).
14
+ * 2. Re-signs the envelope with the local domain key and
15
+ * recomputes `seal.session_mac` under the federation
16
+ * session's `K_env_mac`.
17
+ * 3. Sends the encoded envelope over the federation transport.
18
+ * 4. Returns the peer's parsed {@link SubmissionResponse}.
19
+ *
20
+ * The original sender's domain proof of provenance does NOT need
21
+ * to be preserved separately — in the SEMP architecture the
22
+ * sender's home server and the federation initiator are the SAME
23
+ * server, so re-signing with the local domain key is functionally
24
+ * identical to "the sender's domain signed this envelope".
25
+ *
26
+ * @module
27
+ */
28
+ import { type Envelope } from "../envelope/index.js";
29
+ import { type Capabilities, type FederationPolicy } from "../handshake/index.js";
30
+ import type { Transport } from "../transport/index.js";
31
+ import type { SubmissionResponse } from "./submission.js";
32
+ /** Per-peer routing information. */
33
+ export interface PeerConfig {
34
+ /** Peer's domain (e.g. `"b.example"`). */
35
+ domain: string;
36
+ /**
37
+ * Federation endpoint URL (e.g. `"ws://127.0.0.1:18082/v1/federate"`).
38
+ * The forwarder passes this verbatim to {@link Dialer}.
39
+ */
40
+ endpoint: string;
41
+ /**
42
+ * Peer's long-term Ed25519 signing public key. Used by the
43
+ * federation Initiator to verify the peer's response / accepted
44
+ * messages.
45
+ */
46
+ domainSigningPub: Uint8Array;
47
+ }
48
+ /** Domain → {@link PeerConfig} map. */
49
+ export declare class PeerRegistry {
50
+ private readonly peers;
51
+ put(cfg: PeerConfig): void;
52
+ lookup(domain: string): PeerConfig | null;
53
+ }
54
+ /** Opens a transport to a peer's federation endpoint. */
55
+ export type Dialer = (endpoint: string) => Promise<Transport>;
56
+ /** Inputs to {@link Forwarder}. */
57
+ export interface ForwarderConfig {
58
+ /** Local server's domain. */
59
+ localDomain: string;
60
+ /** Stable id of the local server instance. */
61
+ localServerID: string;
62
+ /** Local 32-byte Ed25519 secret seed. */
63
+ localDomainSeed: Uint8Array;
64
+ /** Static peer registry. */
65
+ peers: PeerRegistry;
66
+ /** Transport dialer. */
67
+ dial: Dialer;
68
+ /**
69
+ * Capabilities advertised on outbound federation handshakes.
70
+ * Defaults to `{ encryption_algorithms: ["x25519-chacha20-poly1305"], extensions: [] }`.
71
+ */
72
+ capabilities?: Capabilities;
73
+ /** Policy hook. Defaults to `acceptAllPolicies`. */
74
+ policyAcceptor?: (policy: FederationPolicy) => string | null;
75
+ }
76
+ /**
77
+ * Federation forwarder.
78
+ *
79
+ * `forward()` is concurrency-safe: per-peer wire access is
80
+ * serialized by a software lock so concurrent calls don't
81
+ * interleave on the same stream. Use {@link Forwarder.close} on
82
+ * shutdown to tear down every cached session.
83
+ */
84
+ export declare class Forwarder {
85
+ private readonly cfg;
86
+ private readonly sessions;
87
+ private readonly connecting;
88
+ constructor(cfg: ForwarderConfig);
89
+ /**
90
+ * Re-bind `seal.session_mac` under the federation session's
91
+ * `K_env_mac` and ship `env` across the cached session for
92
+ * `peerDomain`. Returns the peer's parsed submission response.
93
+ *
94
+ * Opens a federation session lazily on first call per peer.
95
+ */
96
+ forward(peerDomain: string, env: Envelope): Promise<SubmissionResponse>;
97
+ /** Tear down every cached session. Call on shutdown. */
98
+ close(): Promise<void>;
99
+ /** Diagnostic: peer domains with a live cached session. */
100
+ cachedPeers(): string[];
101
+ private getSession;
102
+ private openSession;
103
+ private forwardOnSession;
104
+ private dropSession;
105
+ }
106
+ //# sourceMappingURL=forwarder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../../src/delivery/forwarder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EACL,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK1D,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,gBAAgB,EAAE,UAAU,CAAC;CAC9B;AAED,uCAAuC;AACvC,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAO1B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CAG1C;AAED,yDAAyD;AACzD,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;AAE9D,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,eAAe,EAAE,UAAU,CAAC;IAC5B,4BAA4B;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,oDAAoD;IACpD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,MAAM,GAAG,IAAI,CAAC;CAC9D;AASD;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;gBAE5D,GAAG,EAAE,eAAe;IAahC;;;;;;OAMG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,kBAAkB,CAAC;IAgB9B,wDAAwD;IAClD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,2DAA2D;IAC3D,WAAW,IAAI,MAAM,EAAE;YAMT,UAAU;YAkBV,WAAW;YAyDX,gBAAgB;IAqD9B,OAAO,CAAC,WAAW;CAUpB"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Federation forwarder per DELIVERY.md §5 and HANDSHAKE.md §5.
3
+ *
4
+ * Establishes and caches federation sessions to remote peers and
5
+ * forwards envelopes across them. Each `(localDomain, peerDomain)`
6
+ * pair gets at most one live session at a time; the forwarder
7
+ * re-runs the federation handshake if the cached session has
8
+ * expired or been torn down.
9
+ *
10
+ * On forward, the forwarder:
11
+ *
12
+ * 1. Updates `postmark.session_id` to reference the federation
13
+ * session id (so the peer's receive pipeline matches).
14
+ * 2. Re-signs the envelope with the local domain key and
15
+ * recomputes `seal.session_mac` under the federation
16
+ * session's `K_env_mac`.
17
+ * 3. Sends the encoded envelope over the federation transport.
18
+ * 4. Returns the peer's parsed {@link SubmissionResponse}.
19
+ *
20
+ * The original sender's domain proof of provenance does NOT need
21
+ * to be preserved separately — in the SEMP architecture the
22
+ * sender's home server and the federation initiator are the SAME
23
+ * server, so re-signing with the local domain key is functionally
24
+ * identical to "the sender's domain signed this envelope".
25
+ *
26
+ * @module
27
+ */
28
+ import { marshal as canonicalMarshal } from "../canonical/index.js";
29
+ import { computeMAC } from "../crypto/index.js";
30
+ import { canonicalEnvelopeFor, encodeEnvelope, } from "../envelope/index.js";
31
+ import { sign as ed25519Sign } from "../keys/index.js";
32
+ import { FederationInitiator, } from "../handshake/index.js";
33
+ /** Domain-separation prefix for the seal signature, per §4.3. */
34
+ const EnvelopePrefix = "SEMP-ENVELOPE:";
35
+ /** Domain → {@link PeerConfig} map. */
36
+ export class PeerRegistry {
37
+ peers = new Map();
38
+ put(cfg) {
39
+ if (cfg.domain === "") {
40
+ throw new Error("delivery: PeerConfig missing domain");
41
+ }
42
+ this.peers.set(cfg.domain, { ...cfg });
43
+ }
44
+ lookup(domain) {
45
+ return this.peers.get(domain) ?? null;
46
+ }
47
+ }
48
+ /**
49
+ * Federation forwarder.
50
+ *
51
+ * `forward()` is concurrency-safe: per-peer wire access is
52
+ * serialized by a software lock so concurrent calls don't
53
+ * interleave on the same stream. Use {@link Forwarder.close} on
54
+ * shutdown to tear down every cached session.
55
+ */
56
+ export class Forwarder {
57
+ cfg;
58
+ sessions = new Map();
59
+ connecting = new Map();
60
+ constructor(cfg) {
61
+ if (cfg.localDomain === "") {
62
+ throw new Error("delivery: forwarder empty localDomain");
63
+ }
64
+ if (cfg.localServerID === "") {
65
+ throw new Error("delivery: forwarder empty localServerID");
66
+ }
67
+ if (cfg.localDomainSeed.length === 0) {
68
+ throw new Error("delivery: forwarder empty localDomainSeed");
69
+ }
70
+ this.cfg = cfg;
71
+ }
72
+ /**
73
+ * Re-bind `seal.session_mac` under the federation session's
74
+ * `K_env_mac` and ship `env` across the cached session for
75
+ * `peerDomain`. Returns the peer's parsed submission response.
76
+ *
77
+ * Opens a federation session lazily on first call per peer.
78
+ */
79
+ async forward(peerDomain, env) {
80
+ const cfg = this.cfg.peers.lookup(peerDomain);
81
+ if (cfg === null) {
82
+ throw new Error(`delivery: forwarder: unknown peer ${peerDomain}`);
83
+ }
84
+ const fs = await this.getSession(cfg);
85
+ try {
86
+ return await this.forwardOnSession(fs, env);
87
+ }
88
+ catch (err) {
89
+ // Drop the session on transport-layer failure; next call
90
+ // re-handshakes.
91
+ this.dropSession(peerDomain);
92
+ throw err;
93
+ }
94
+ }
95
+ /** Tear down every cached session. Call on shutdown. */
96
+ async close() {
97
+ const sessions = Array.from(this.sessions.values());
98
+ this.sessions.clear();
99
+ for (const fs of sessions) {
100
+ try {
101
+ await fs.transport.close();
102
+ }
103
+ catch {
104
+ // best-effort
105
+ }
106
+ }
107
+ }
108
+ /** Diagnostic: peer domains with a live cached session. */
109
+ cachedPeers() {
110
+ return Array.from(this.sessions.keys()).sort();
111
+ }
112
+ // ---------------------------------------------------------------------------
113
+ async getSession(cfg) {
114
+ const cached = this.sessions.get(cfg.domain);
115
+ if (cached !== undefined) {
116
+ return cached;
117
+ }
118
+ // Coalesce concurrent connects so we don't open two sessions to
119
+ // the same peer in parallel.
120
+ const inflight = this.connecting.get(cfg.domain);
121
+ if (inflight !== undefined) {
122
+ return inflight;
123
+ }
124
+ const p = this.openSession(cfg).finally(() => {
125
+ this.connecting.delete(cfg.domain);
126
+ });
127
+ this.connecting.set(cfg.domain, p);
128
+ return p;
129
+ }
130
+ async openSession(cfg) {
131
+ const transport = await this.cfg.dial(cfg.endpoint);
132
+ const initiator = new FederationInitiator({
133
+ suite: "x25519-chacha20-poly1305",
134
+ capabilities: this.cfg.capabilities ?? {
135
+ encryption_algorithms: ["x25519-chacha20-poly1305"],
136
+ extensions: [],
137
+ },
138
+ localDomain: this.cfg.localDomain,
139
+ localServerID: this.cfg.localServerID,
140
+ localDomainSeed: this.cfg.localDomainSeed,
141
+ peerDomainPubLookup: (d) => {
142
+ if (d !== cfg.domain) {
143
+ throw new Error(`forwarder: peer domain pub lookup for unknown domain ${d}`);
144
+ }
145
+ return cfg.domainSigningPub;
146
+ },
147
+ peerDomain: cfg.domain,
148
+ domainProof: { method: "test-trust", data: this.cfg.localDomain },
149
+ ...(this.cfg.policyAcceptor !== undefined
150
+ ? { policyAcceptor: this.cfg.policyAcceptor }
151
+ : {}),
152
+ });
153
+ try {
154
+ const initBytes = initiator.init();
155
+ await transport.send(initBytes);
156
+ const respBytes = await transport.receive();
157
+ if (respBytes === null) {
158
+ throw new Error("forwarder: connection closed waiting for response");
159
+ }
160
+ const confirmBytes = initiator.onResponse(respBytes);
161
+ await transport.send(confirmBytes);
162
+ const acceptedBytes = await transport.receive();
163
+ if (acceptedBytes === null) {
164
+ throw new Error("forwarder: connection closed waiting for accepted");
165
+ }
166
+ initiator.onAccepted(acceptedBytes);
167
+ const session = initiator.session();
168
+ const fs = {
169
+ transport,
170
+ session,
171
+ wireMu: { locked: false },
172
+ };
173
+ this.sessions.set(cfg.domain, fs);
174
+ return fs;
175
+ }
176
+ catch (err) {
177
+ try {
178
+ await transport.close();
179
+ }
180
+ catch {
181
+ // already closed
182
+ }
183
+ throw err;
184
+ }
185
+ }
186
+ async forwardOnSession(fs, env) {
187
+ // Serialize wire access — JS run-to-completion makes this a soft
188
+ // latch sufficient for the single-thread model.
189
+ while (fs.wireMu.locked) {
190
+ await new Promise((r) => setTimeout(r, 0));
191
+ }
192
+ fs.wireMu.locked = true;
193
+ try {
194
+ // Update postmark.session_id so the peer's pipeline matches.
195
+ env.postmark.session_id = fs.session.sessionId;
196
+ // Re-sign with our local domain key + re-MAC under federation
197
+ // K_env_mac. Both proofs cover the SAME canonical bytes (with
198
+ // signature + mac blanked).
199
+ env.seal.signature = "";
200
+ env.seal.session_mac = "";
201
+ const canonical = canonicalEnvelopeFor(env);
202
+ const signingInput = concat(new TextEncoder().encode(EnvelopePrefix), canonical);
203
+ env.seal.signature = base64Encode(ed25519Sign(this.cfg.localDomainSeed, signingInput));
204
+ env.seal.session_mac = base64Encode(computeMAC(fs.session.keys.envMAC, canonical));
205
+ const wire = encodeEnvelope(env);
206
+ await fs.transport.send(wire);
207
+ const respBytes = await fs.transport.receive();
208
+ if (respBytes === null) {
209
+ throw new Error("forwarder: connection closed waiting for federation response");
210
+ }
211
+ const parsed = JSON.parse(new TextDecoder().decode(respBytes));
212
+ if (typeof parsed !== "object" ||
213
+ parsed === null ||
214
+ Array.isArray(parsed)) {
215
+ throw new Error("forwarder: federation response is not a JSON object");
216
+ }
217
+ return parsed;
218
+ }
219
+ finally {
220
+ fs.wireMu.locked = false;
221
+ }
222
+ }
223
+ dropSession(peerDomain) {
224
+ const fs = this.sessions.get(peerDomain);
225
+ if (fs === undefined) {
226
+ return;
227
+ }
228
+ this.sessions.delete(peerDomain);
229
+ fs.transport.close().catch(() => {
230
+ // best-effort
231
+ });
232
+ }
233
+ }
234
+ void canonicalMarshal;
235
+ function concat(a, b) {
236
+ const out = new Uint8Array(a.length + b.length);
237
+ out.set(a, 0);
238
+ out.set(b, a.length);
239
+ return out;
240
+ }
241
+ function base64Encode(b) {
242
+ if (typeof Buffer !== "undefined") {
243
+ return Buffer.from(b).toString("base64");
244
+ }
245
+ let bin = "";
246
+ for (let i = 0; i < b.length; i++) {
247
+ bin += String.fromCharCode(b[i] ?? 0);
248
+ }
249
+ return btoa(bin);
250
+ }
251
+ //# sourceMappingURL=forwarder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwarder.js","sourceRoot":"","sources":["../../src/delivery/forwarder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAEL,oBAAoB,EACpB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAIL,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAK/B,iEAAiE;AACjE,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAmBxC,uCAAuC;AACvC,MAAM,OAAO,YAAY;IACN,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEvD,GAAG,CAAC,GAAe;QACjB,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;CACF;AAiCD;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IACH,GAAG,CAAkB;IACrB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,UAAU,GAAG,IAAI,GAAG,EAAkC,CAAC;IAExE,YAAY,GAAoB;QAC9B,IAAI,GAAG,CAAC,WAAW,KAAK,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,GAAa;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yDAAyD;YACzD,iBAAiB;YACjB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC7B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,8EAA8E;IAEtE,KAAK,CAAC,UAAU,CAAC,GAAe;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,gEAAgE;QAChE,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,GAAe;QACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC;YACxC,KAAK,EAAE,0BAA0B;YACjC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI;gBACrC,qBAAqB,EAAE,CAAC,0BAA0B,CAAC;gBACnD,UAAU,EAAE,EAAE;aACf;YACD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW;YACjC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa;YACrC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe;YACzC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CACb,wDAAwD,CAAC,EAAE,CAC5D,CAAC;gBACJ,CAAC;gBACD,OAAO,GAAG,CAAC,gBAAgB,CAAC;YAC9B,CAAC;YACD,UAAU,EAAE,GAAG,CAAC,MAAM;YACtB,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;YACjE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;gBAC7C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACrD,MAAM,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;YAChD,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,EAAE,GAAkB;gBACxB,SAAS;gBACT,OAAO;gBACP,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;aAC1B,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,EAAiB,EACjB,GAAa;QAEb,iEAAiE;QACjE,gDAAgD;QAChD,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,6DAA6D;YAC7D,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;YAE/C,8DAA8D;YAC9D,8DAA8D;YAC9D,4BAA4B;YAC5B,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,MAAM,CACzB,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EACxC,SAAS,CACV,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,YAAY,CAC/B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CACpD,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,CACjC,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAC9C,CAAC;YAEF,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC/C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/D,IACE,OAAO,MAAM,KAAK,QAAQ;gBAC1B,MAAM,KAAK,IAAI;gBACf,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACrB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,MAA4B,CAAC;QACtC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,UAAkB;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YAC9B,cAAc;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,KAAK,gBAAgB,CAAC;AAEtB,SAAS,MAAM,CAAC,CAAa,EAAE,CAAa;IAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,CAAa;IACjC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Reference per-user envelope inbox — minimal in-memory FIFO.
3
+ *
4
+ * Intended for in-process tests, embedded servers, and the
5
+ * reference {@link "./fetch".FetchResponse} producer. NOT a
6
+ * production storage layer:
7
+ *
8
+ * - No persistence: process restart loses all queued envelopes.
9
+ * - No fairness controls, no per-address access control, no
10
+ * retention rules.
11
+ * - Concurrency boundary is single-process; multi-writer use is
12
+ * safe under the JavaScript run-to-completion model but not
13
+ * across worker threads.
14
+ *
15
+ * Production deployments MUST back this with a durable store,
16
+ * retention rules, fairness controls, and per-address access
17
+ * control — none of which are present here.
18
+ *
19
+ * @module
20
+ */
21
+ /** Default maximum per-address queue depth. */
22
+ export declare const DefaultMaxQueueDepth = 10000;
23
+ /** Reference in-memory inbox keyed by canonical user@domain string. */
24
+ export declare class Inbox {
25
+ private readonly queues;
26
+ private readonly maxDepth;
27
+ constructor(maxDepth?: number);
28
+ /**
29
+ * Append `payload` to the queue for `address`. If the queue is at
30
+ * its maximum depth, the oldest entry is dropped to make room.
31
+ */
32
+ store(address: string, payload: Uint8Array): void;
33
+ /**
34
+ * Return every queued envelope for `address` and clear the queue.
35
+ * Returns an empty array when the address has no waiting
36
+ * envelopes.
37
+ */
38
+ drain(address: string): Uint8Array[];
39
+ /** Number of waiting envelopes for `address`. */
40
+ pending(address: string): number;
41
+ }
42
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/delivery/inbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C,uEAAuE;AACvE,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,GAAE,MAA6B;IAQnD;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAejD;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAMpC,iDAAiD;IACjD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGjC"}