@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,293 @@
1
+ /**
2
+ * Per-user authoritative policy view per DELIVERY.md §7.2.
3
+ *
4
+ * `applyPolicyMessage` takes a verified {@link UserPolicyMessage} and
5
+ * either applies every operation atomically (advancing
6
+ * `policy_version`) or rejects the whole message without mutating
7
+ * state. Atomicity is the §7.2 guarantee: a single unrecognized kind
8
+ * rejects the whole message; unrelated operations in the same
9
+ * message MUST NOT be applied.
10
+ *
11
+ * Apply does NOT verify the signature on the message — callers MUST
12
+ * run {@link verifyUserPolicyMessage} before invoking
13
+ * {@link PolicyState.apply}.
14
+ *
15
+ * @module
16
+ */
17
+ import { PolicyKindAcceptedSender, PolicyKindBlock, PolicyKindFirstContact, validateUserPolicyMessage, } from "./user_policy.js";
18
+ /** §7.3 default rule kinds for v1.0.0. */
19
+ export function defaultPolicyKinds() {
20
+ return [PolicyKindBlock, PolicyKindAcceptedSender, PolicyKindFirstContact];
21
+ }
22
+ /** Typed error wrapping a structured policy rejection. */
23
+ export class PolicyApplyError extends Error {
24
+ code;
25
+ details;
26
+ name = "PolicyApplyError";
27
+ constructor(code, details = {}) {
28
+ super(messageFor(code, details));
29
+ this.code = code;
30
+ this.details = details;
31
+ }
32
+ }
33
+ function messageFor(code, d) {
34
+ switch (code) {
35
+ case "policy_kind_unsupported":
36
+ return `delivery: policy operation[${d.opIndex ?? 0}] kind ${JSON.stringify(d.kind ?? "")} is not supported`;
37
+ case "policy_op_invalid":
38
+ return d.detail !== undefined && d.detail !== ""
39
+ ? `delivery: policy operation[${d.opIndex ?? 0}] is invalid: ${d.detail}`
40
+ : `delivery: policy operation[${d.opIndex ?? 0}] is invalid`;
41
+ case "policy_version_stale":
42
+ return `delivery: submitted policy_version ${d.submittedVersion ?? 0} is not greater than current ${d.currentVersion ?? 0}`;
43
+ }
44
+ }
45
+ /**
46
+ * Per-user policy state. Concurrency-safe within a single JS event
47
+ * loop (no async mutation between read-modify-write).
48
+ *
49
+ * Does NOT enforce DELIVERY.md §7.5 encrypted-at-rest storage —
50
+ * that is the persistence layer's responsibility.
51
+ */
52
+ export class PolicyState {
53
+ userIdValue;
54
+ supportedKinds;
55
+ policyVersionValue = 0;
56
+ lastTimestampValue = "";
57
+ listEntriesMap = new Map();
58
+ singletonsMap = new Map();
59
+ /**
60
+ * @param userId - the account this state belongs to
61
+ * @param kinds - rule kinds to register; defaults to {@link defaultPolicyKinds}
62
+ */
63
+ constructor(userId, kinds) {
64
+ if (userId === "") {
65
+ throw new Error("delivery: policy state requires user_id");
66
+ }
67
+ const ks = kinds === undefined || kinds.length === 0 ? defaultPolicyKinds() : kinds;
68
+ this.userIdValue = userId;
69
+ this.supportedKinds = new Set();
70
+ for (const k of ks) {
71
+ if (k === "") {
72
+ throw new Error("delivery: policy state cannot register empty kind");
73
+ }
74
+ this.supportedKinds.add(k);
75
+ }
76
+ }
77
+ /** Account this state belongs to. */
78
+ userId() {
79
+ return this.userIdValue;
80
+ }
81
+ /** Current policy_version per §7.2. Zero before any message has been applied. */
82
+ currentVersion() {
83
+ return this.policyVersionValue;
84
+ }
85
+ /** Timestamp of the most recently applied message; `""` before any apply. */
86
+ lastTimestamp() {
87
+ return this.lastTimestampValue;
88
+ }
89
+ /** Whether `kind` is registered for this state. */
90
+ supportsKind(kind) {
91
+ return this.supportedKinds.has(kind);
92
+ }
93
+ /** Registered kinds, lexically sorted. */
94
+ registeredKinds() {
95
+ return Array.from(this.supportedKinds.values()).sort();
96
+ }
97
+ /**
98
+ * Apply `m` atomically per §7.2. On success advances
99
+ * `policy_version` and applies every operation. On any per-message
100
+ * failure throws a {@link PolicyApplyError} with structured
101
+ * details and leaves state unchanged.
102
+ *
103
+ * Caller MUST have run {@link verifyUserPolicyMessage} first.
104
+ */
105
+ apply(m) {
106
+ try {
107
+ validateUserPolicyMessage(m);
108
+ }
109
+ catch (err) {
110
+ // Translate per-op validate failures into a typed
111
+ // policy_op_invalid; structural failures propagate as-is.
112
+ const probe = classifyOpInvalid(err instanceof Error ? err.message : String(err), m);
113
+ if (probe !== null) {
114
+ throw new PolicyApplyError("policy_op_invalid", {
115
+ kind: probe.kind,
116
+ opIndex: probe.opIndex,
117
+ detail: probe.detail,
118
+ });
119
+ }
120
+ throw err instanceof Error
121
+ ? new Error(`delivery: policy validate: ${err.message}`)
122
+ : new Error(`delivery: policy validate: ${String(err)}`);
123
+ }
124
+ if (m.user_id !== this.userIdValue) {
125
+ throw new Error(`delivery: policy message user_id ${JSON.stringify(m.user_id)} does not match state user_id ${JSON.stringify(this.userIdValue)}`);
126
+ }
127
+ // §7.2 ordering: monotonic policy_version with later-timestamp
128
+ // tie-break for equal versions. A submission whose (version,
129
+ // timestamp) is not strictly after the current state is stale.
130
+ const submittedTime = Date.parse(m.timestamp);
131
+ const lastTime = this.lastTimestampValue === ""
132
+ ? -Infinity
133
+ : Date.parse(this.lastTimestampValue);
134
+ if (m.policy_version < this.policyVersionValue ||
135
+ (m.policy_version === this.policyVersionValue && submittedTime <= lastTime)) {
136
+ throw new PolicyApplyError("policy_version_stale", {
137
+ submittedVersion: m.policy_version,
138
+ currentVersion: this.policyVersionValue,
139
+ });
140
+ }
141
+ // Pre-flight every op for unsupported-kind before mutating —
142
+ // §7.2 atomicity.
143
+ for (let i = 0; i < m.operations.length; i++) {
144
+ const op = m.operations[i];
145
+ if (!this.supportedKinds.has(op.kind)) {
146
+ throw new PolicyApplyError("policy_kind_unsupported", {
147
+ kind: op.kind,
148
+ opIndex: i,
149
+ });
150
+ }
151
+ }
152
+ // Apply.
153
+ for (const op of m.operations) {
154
+ this.applyOp(op);
155
+ }
156
+ this.policyVersionValue = m.policy_version;
157
+ this.lastTimestampValue = m.timestamp;
158
+ }
159
+ applyOp(op) {
160
+ if (op.kind === PolicyKindFirstContact) {
161
+ // Singleton: modify is upsert; add/remove rejected upstream.
162
+ this.singletonsMap.set(op.kind, deepClone(op.entry));
163
+ return;
164
+ }
165
+ // List-shaped kinds.
166
+ let bucket = this.listEntriesMap.get(op.kind);
167
+ if (bucket === undefined) {
168
+ bucket = new Map();
169
+ this.listEntriesMap.set(op.kind, bucket);
170
+ }
171
+ if (op.op === "add" || op.op === "modify") {
172
+ const id = entryIdFor(op);
173
+ if (id === "") {
174
+ // Skip silently rather than inserting under "" so callers
175
+ // see the no-op rather than a corrupted bucket.
176
+ return;
177
+ }
178
+ bucket.set(id, deepClone(op.entry));
179
+ return;
180
+ }
181
+ if (op.op === "remove") {
182
+ if (op.entry_id !== undefined && op.entry_id !== "") {
183
+ bucket.delete(op.entry_id);
184
+ }
185
+ return;
186
+ }
187
+ }
188
+ /** Deep copy of the entries currently held for `kind`, keyed by entry id. */
189
+ listEntries(kind) {
190
+ const src = this.listEntriesMap.get(kind);
191
+ const out = {};
192
+ if (src === undefined) {
193
+ return out;
194
+ }
195
+ for (const [id, v] of src) {
196
+ out[id] = deepClone(v);
197
+ }
198
+ return out;
199
+ }
200
+ /**
201
+ * Copy of the current singleton entry for `kind`, or `undefined`
202
+ * if none has been set.
203
+ */
204
+ singleton(kind) {
205
+ if (!this.singletonsMap.has(kind)) {
206
+ return undefined;
207
+ }
208
+ return deepClone(this.singletonsMap.get(kind));
209
+ }
210
+ /** Deep copy of all state for propagation / persistence. */
211
+ snapshot() {
212
+ const list = {};
213
+ for (const [kind, bucket] of this.listEntriesMap) {
214
+ const inner = {};
215
+ for (const [id, v] of bucket) {
216
+ inner[id] = deepClone(v);
217
+ }
218
+ list[kind] = inner;
219
+ }
220
+ const singletons = {};
221
+ for (const [kind, v] of this.singletonsMap) {
222
+ singletons[kind] = deepClone(v);
223
+ }
224
+ return {
225
+ user_id: this.userIdValue,
226
+ policy_version: this.policyVersionValue,
227
+ last_timestamp: this.lastTimestampValue,
228
+ list_entries: list,
229
+ singletons,
230
+ };
231
+ }
232
+ }
233
+ /**
234
+ * Extract the entry id from a list-shaped op. For remove/modify the
235
+ * op's own `entry_id` is authoritative; for add the spec puts the
236
+ * id inside the entry payload (`id` field, ULID RECOMMENDED per
237
+ * §7.3).
238
+ */
239
+ function entryIdFor(op) {
240
+ if (op.entry_id !== undefined && op.entry_id !== "") {
241
+ return op.entry_id;
242
+ }
243
+ if (typeof op.entry === "object" &&
244
+ op.entry !== null &&
245
+ "id" in op.entry) {
246
+ const id = op.entry.id;
247
+ if (typeof id === "string") {
248
+ return id;
249
+ }
250
+ }
251
+ return "";
252
+ }
253
+ /**
254
+ * Heuristically map a `validateUserPolicyMessage` error to the
255
+ * triple (op_index, kind, detail) when it originates from a §7.3
256
+ * op-kind violation. Returns null for structural errors that are
257
+ * not specific op-kind violations.
258
+ *
259
+ * The mapping leans on the validator's stable error-string format
260
+ * (`delivery: user policy operations[N] ...`) — same approach as
261
+ * the semp-go reference.
262
+ */
263
+ function classifyOpInvalid(msg, m) {
264
+ const prefix = "delivery: user policy operations[";
265
+ if (!msg.startsWith(prefix)) {
266
+ return null;
267
+ }
268
+ const rest = msg.slice(prefix.length);
269
+ const end = rest.indexOf("]");
270
+ if (end < 1) {
271
+ return null;
272
+ }
273
+ const idxStr = rest.slice(0, end);
274
+ if (!/^\d+$/.test(idxStr)) {
275
+ return null;
276
+ }
277
+ const idx = Number(idxStr);
278
+ if (idx < 0 || idx >= m.operations.length) {
279
+ return null;
280
+ }
281
+ let detail = rest.slice(end + 1);
282
+ if (detail.startsWith(" ")) {
283
+ detail = detail.slice(1);
284
+ }
285
+ return { opIndex: idx, kind: m.operations[idx].kind, detail };
286
+ }
287
+ function deepClone(v) {
288
+ if (v === undefined || v === null) {
289
+ return v;
290
+ }
291
+ return JSON.parse(JSON.stringify(v));
292
+ }
293
+ //# sourceMappingURL=policy_state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy_state.js","sourceRoot":"","sources":["../../src/delivery/policy_state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Per-recipient queue state record per DELIVERY.md §2.5.
3
+ *
4
+ * The sending server maintains one record per (envelope_id,
5
+ * recipient) pair; the record is authoritative for what the
6
+ * sending client displays to the user.
7
+ *
8
+ * @module
9
+ */
10
+ import type { ReasonCode } from "../reasoncodes.js";
11
+ /** Lifecycle position per §2.5. */
12
+ export type QueueRecordState = "queued" | "delivered" | "rejected" | "expired" | "canceled";
13
+ /** Report whether a state is terminal (no further transitions). */
14
+ export declare function isTerminalState(s: QueueRecordState): boolean;
15
+ /** Per-recipient queue state record. */
16
+ export interface QueueState {
17
+ envelope_id: string;
18
+ recipient: string;
19
+ state: QueueRecordState;
20
+ attempts: number;
21
+ /** ISO 8601 UTC, or null if never attempted. */
22
+ last_attempt_at: string | null;
23
+ /** "delivered" | "rejected" | "silent" | null. */
24
+ last_outcome: string | null;
25
+ last_reason_code: ReasonCode | null;
26
+ /** ISO 8601 UTC, or null on terminal records. */
27
+ next_attempt_at: string | null;
28
+ /** Effective deadline per §2.4. ISO 8601 UTC. */
29
+ deadline: string;
30
+ /**
31
+ * Internal-only: wall-clock at which `state` transitioned to a
32
+ * terminal value. Used by the §2.5 retention prune. Excluded from
33
+ * canonical wire bytes; serialize with a custom replacer if
34
+ * exporting.
35
+ */
36
+ terminal_at?: string;
37
+ }
38
+ /**
39
+ * Transition `q` to `state`, recording the transition wall-clock
40
+ * on `terminal_at` and clearing `next_attempt_at`. No-op when:
41
+ *
42
+ * - `state` is non-terminal
43
+ * - `q` is already terminal (the §2.7.2 "MUST NOT override a prior
44
+ * terminal state" rule is the caller's responsibility)
45
+ */
46
+ export declare function setTerminal(q: QueueState, state: QueueRecordState, now: Date): void;
47
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/delivery/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,CAAC;AAEf,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAE5D;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kDAAkD;IAClD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,iDAAiD;IACjD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE,UAAU,EACb,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,IAAI,GACR,IAAI,CAUN"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Per-recipient queue state record per DELIVERY.md §2.5.
3
+ *
4
+ * The sending server maintains one record per (envelope_id,
5
+ * recipient) pair; the record is authoritative for what the
6
+ * sending client displays to the user.
7
+ *
8
+ * @module
9
+ */
10
+ /** Report whether a state is terminal (no further transitions). */
11
+ export function isTerminalState(s) {
12
+ return s !== "queued";
13
+ }
14
+ /**
15
+ * Transition `q` to `state`, recording the transition wall-clock
16
+ * on `terminal_at` and clearing `next_attempt_at`. No-op when:
17
+ *
18
+ * - `state` is non-terminal
19
+ * - `q` is already terminal (the §2.7.2 "MUST NOT override a prior
20
+ * terminal state" rule is the caller's responsibility)
21
+ */
22
+ export function setTerminal(q, state, now) {
23
+ if (!isTerminalState(state)) {
24
+ return;
25
+ }
26
+ if (isTerminalState(q.state)) {
27
+ return;
28
+ }
29
+ q.state = state;
30
+ q.next_attempt_at = null;
31
+ q.terminal_at = now.toISOString().replace(/\.\d{3}Z$/, "Z");
32
+ }
33
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/delivery/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,CAAmB;IACjD,OAAO,CAAC,KAAK,QAAQ,CAAC;AACxB,CAAC;AA0BD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,CAAa,EACb,KAAuB,EACvB,GAAS;IAET,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Signed delivery receipts per DELIVERY.md §1.1.1.
3
+ *
4
+ * Every `delivered` acknowledgment a recipient server returns to a
5
+ * sending server MUST carry a signed receipt. The receipt binds
6
+ * `(envelope_hash, recipient_domain, accepted_at)` under the recipient
7
+ * domain's Ed25519 signing key with the `SEMP-DELIVERY-RECEIPT:`
8
+ * domain-separation prefix. It is a portable, non-repudiable artifact
9
+ * the sending user can later export to a `.semp-receipt` file.
10
+ *
11
+ * This module provides:
12
+ *
13
+ * - {@link computeEnvelopeHash}: SHA-256 over canonical envelope bytes
14
+ * (the same canonical form `seal.signature` is computed over —
15
+ * `signature` and `session_mac` blanked, `hop_count` and `padding`
16
+ * omitted).
17
+ * - {@link signDeliveryReceipt}: build + sign a receipt from
18
+ * pre-sign inputs.
19
+ * - {@link verifyDeliveryReceipt}: Ed25519-verify a receipt against
20
+ * a recipient domain public key.
21
+ * - {@link verifyEnvelopeBinding}: cross-check the receipt's
22
+ * `envelope_hash.value` against a fresh canonical envelope hash.
23
+ * - {@link validateReceipt}: structural checks per §1.1.1.2.
24
+ *
25
+ * The companion {@link "./receipt_store"} module holds receipts the
26
+ * sending server has issued to its sending users until at least one
27
+ * client device acknowledges the delivery event carrying it.
28
+ *
29
+ * @module
30
+ */
31
+ /** Domain-separation prefix for the receipt signature, per ENVELOPE.md §4.3. */
32
+ export declare const DeliveryReceiptPrefix = "SEMP-DELIVERY-RECEIPT:";
33
+ /** `type` discriminator for the receipt JSON. */
34
+ export declare const DeliveryReceiptType = "SEMP_DELIVERY_RECEIPT";
35
+ /** Receipt schema version per §1.1.1.1. */
36
+ export declare const DeliveryReceiptVersion = "1.0.0";
37
+ /** Only digest algorithm defined for v1.0.0 receipts per §1.1.1.3. */
38
+ export declare const EnvelopeHashAlgorithmSHA256 = "sha-256";
39
+ /** Receipt signature algorithm. */
40
+ export declare const ReceiptSignatureAlgorithmEd25519 = "ed25519";
41
+ /**
42
+ * Receiver-side tolerance window per §1.1.1.5: "Verifiers MUST NOT
43
+ * reject a receipt solely because `accepted_at` is within 120 seconds
44
+ * of their own current time in either direction."
45
+ */
46
+ export declare const ReceiptClockSkewToleranceSeconds = 120;
47
+ /** Hash binding inside a {@link DeliveryReceipt} per §1.1.1.3. */
48
+ export interface EnvelopeHash {
49
+ algorithm: string;
50
+ /** Base64-encoded digest. */
51
+ value: string;
52
+ }
53
+ /** Signature block per §1.1.1.4. */
54
+ export interface ReceiptSignature {
55
+ algorithm: string;
56
+ /** Lowercase-hex SHA-256 fingerprint of the recipient domain pub. */
57
+ key_id: string;
58
+ /** Base64-encoded Ed25519 signature. Empty when blanked. */
59
+ value: string;
60
+ }
61
+ /**
62
+ * SEMP_DELIVERY_RECEIPT record per §1.1.1. The wire form is a JSON
63
+ * object with these exact field names; canonical bytes are produced
64
+ * by {@link "../canonical".marshal}.
65
+ */
66
+ export interface DeliveryReceipt {
67
+ type: typeof DeliveryReceiptType;
68
+ version: string;
69
+ envelope_hash: EnvelopeHash;
70
+ recipient_domain: string;
71
+ /** ISO 8601 UTC timestamp, second precision. */
72
+ accepted_at: string;
73
+ signature: ReceiptSignature;
74
+ }
75
+ /** Inputs to {@link signDeliveryReceipt}. */
76
+ export interface SignDeliveryReceiptInput {
77
+ /** Base64 SHA-256 of canonical envelope bytes per §1.1.1.3. */
78
+ envelopeHashB64: string;
79
+ /** Recipient server's domain. */
80
+ recipientDomain: string;
81
+ /** ISO 8601 UTC timestamp of the recipient's accept decision. */
82
+ acceptedAt: string;
83
+ /** Lowercase-hex SHA-256 fingerprint of the signing public key. */
84
+ domainKeyId: string;
85
+ /** 32-byte Ed25519 secret seed for the recipient domain signing key. */
86
+ domainSigningSeed: Uint8Array;
87
+ }
88
+ /** Result of a successful {@link signDeliveryReceipt} call. */
89
+ export interface SignDeliveryReceiptResult {
90
+ /** Receipt with `signature.value` populated. */
91
+ receipt: DeliveryReceipt;
92
+ /** Bare base64 signature value (also present in `receipt.signature.value`). */
93
+ signatureB64: string;
94
+ }
95
+ /**
96
+ * SHA-256 of canonical envelope bytes, base64-encoded, per
97
+ * §1.1.1.3. The caller is responsible for producing the canonical
98
+ * bytes — typically via `envelope.canonicalEnvelopeFor(env)` which
99
+ * applies §4.3 elision (signature, session_mac, hop_count, padding).
100
+ */
101
+ export declare function computeEnvelopeHash(canonicalEnvelopeBytes: Uint8Array): string;
102
+ /**
103
+ * Build and Ed25519-sign a SEMP_DELIVERY_RECEIPT under the recipient
104
+ * domain's signing key, following §1.1.1.4.
105
+ */
106
+ export declare function signDeliveryReceipt(input: SignDeliveryReceiptInput): SignDeliveryReceiptResult;
107
+ /** Inputs to {@link verifyDeliveryReceipt}. */
108
+ export interface VerifyDeliveryReceiptInput {
109
+ /** Receipt as received. */
110
+ receipt: DeliveryReceipt;
111
+ /** 32-byte Ed25519 public key for the recipient domain. */
112
+ domainPub: Uint8Array;
113
+ }
114
+ /**
115
+ * Ed25519-verify a delivery receipt's signature against the
116
+ * recipient domain public key. Returns true on success. Throws on
117
+ * structural validation failure (use {@link validateReceipt} ahead
118
+ * of time to surface those as boolean false instead).
119
+ *
120
+ * Does NOT cross-check `accepted_at` against the verifier's clock —
121
+ * that is a §1.1.1.5 caller-side decision and MUST be applied with
122
+ * the {@link ReceiptClockSkewToleranceSeconds} tolerance.
123
+ */
124
+ export declare function verifyDeliveryReceipt(input: VerifyDeliveryReceiptInput): boolean;
125
+ /**
126
+ * Cross-check that the receipt's `envelope_hash.value` matches the
127
+ * fresh hash of the supplied canonical envelope bytes per §1.1.1.7
128
+ * step 4. Returns true when the binding holds.
129
+ */
130
+ export declare function verifyEnvelopeBinding(receipt: DeliveryReceipt, canonicalEnvelopeBytes: Uint8Array): boolean;
131
+ /**
132
+ * Structural validation per §1.1.1.2. Throws on the first missing or
133
+ * malformed field. Callers that want a boolean outcome can wrap in
134
+ * try/catch.
135
+ */
136
+ export declare function validateReceipt(r: DeliveryReceipt): void;
137
+ //# sourceMappingURL=receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/delivery/receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,sEAAsE;AACtE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD,mCAAmC;AACnC,eAAO,MAAM,gCAAgC,YAAY,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,YAAY,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,iBAAiB,EAAE,UAAU,CAAC;CAC/B;AAED,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACxC,gDAAgD;IAChD,OAAO,EAAE,eAAe,CAAC;IACzB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,sBAAsB,EAAE,UAAU,GAAG,MAAM,CAG9E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,yBAAyB,CAyC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,2BAA2B;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,2DAA2D;IAC3D,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAYT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EACxB,sBAAsB,EAAE,UAAU,GACjC,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CA8BxD"}