@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,213 @@
1
+ /**
2
+ * Seal-layer key wrap per ENVELOPE.md §4.4.1.
3
+ *
4
+ * The wrap protects a fresh symmetric key (K_brief or K_enclosure)
5
+ * for one recipient. The construction is HPKE-Base style:
6
+ *
7
+ * 1. KEM: encapsulate against the recipient's public key. For
8
+ * X25519 the encapsulation generates a fresh ephemeral and
9
+ * computes ECDH; for Kyber768+X25519 hybrid both halves run
10
+ * in parallel.
11
+ * 2. KDF: HKDF-SHA-512 over the shared secret with salt
12
+ * `kemCt || recipientPub` and info "SEMP-v1-wrap".
13
+ * 3. AEAD: zero nonce, recipient pub as AAD, plaintext = the
14
+ * symmetric key being wrapped. The zero nonce is safe because
15
+ * the wrap key is unique per call (fresh ephemeral feeds
16
+ * into the KDF).
17
+ *
18
+ * Output: `kemCt || aeadCt`, base64-encoded.
19
+ *
20
+ * @module
21
+ */
22
+ import { aeadOpen, aeadSeal, hybridDecapsulate, Kyber768CiphertextSize, Kyber768PublicKeySize, kyber768EncapsulateDeterministic, newHKDFSHA512, x25519Agree, x25519PublicKey, X25519Size, } from "../crypto/index.js";
23
+ /** HKDF info context for the wrap-key expansion. */
24
+ export const WrapInfo = "SEMP-v1-wrap";
25
+ /**
26
+ * Unwrap a wrapped symmetric key per §4.4.1. Reverses the wrap
27
+ * computation: split kemCt from aeadCt by AEAD-overhead size,
28
+ * decapsulate, derive wrap_key, AEAD-open.
29
+ *
30
+ * @param suite negotiated suite that produced the wrap.
31
+ * @param recipientPrivateKey for X25519: 32 bytes; for hybrid:
32
+ * 2432 bytes (kyberPriv || x25519Priv per §4.4.1).
33
+ * @param recipientPublicKey for X25519: 32 bytes; for hybrid:
34
+ * 1216 bytes (kyberPub || x25519Pub per §4.4.1).
35
+ * @param wrappedB64 base64 of (kemCt || aeadCt).
36
+ */
37
+ export function unwrap(suite, recipientPrivateKey, recipientPublicKey, wrappedB64) {
38
+ if (recipientPrivateKey.length === 0) {
39
+ throw new Error("seal: empty recipient private key");
40
+ }
41
+ if (recipientPublicKey.length === 0) {
42
+ throw new Error("seal: empty recipient public key");
43
+ }
44
+ const raw = base64Decode(wrappedB64);
45
+ const aead = suiteAEAD(suite);
46
+ // For both currently defined suites the wrapped symmetric key
47
+ // is 32 bytes (the AEAD key length); AEAD overhead is 16 bytes
48
+ // (Poly1305 tag); so aead_ct length is 48 bytes regardless of
49
+ // the K being wrapped.
50
+ const aeadCTLen = 32 + 16;
51
+ if (raw.length < aeadCTLen) {
52
+ throw new Error("seal: wrapped key truncated");
53
+ }
54
+ const kemCTLen = raw.length - aeadCTLen;
55
+ const kemCT = raw.slice(0, kemCTLen);
56
+ const aeadCT = raw.slice(kemCTLen);
57
+ const sharedSecret = decapsulate(suite, kemCT, recipientPrivateKey);
58
+ // KDF: salt = kemCt || recipientPublicKey, info = SEMP-v1-wrap.
59
+ const salt = concat(kemCT, recipientPublicKey);
60
+ const kdf = newHKDFSHA512();
61
+ const prk = kdf.extract(salt, sharedSecret);
62
+ const wrapKey = kdf.expand(prk, new TextEncoder().encode(WrapInfo), 32);
63
+ // AEAD: zero nonce, recipientPublicKey as AAD. The seal AEAD is
64
+ // ChaCha20-Poly1305 (12-byte nonce) regardless of suite — only
65
+ // the KEM is post-quantum on the PQ side. The `suite`-derived
66
+ // `aead` here is unused but kept for signature parity.
67
+ void aead;
68
+ const nonce = new Uint8Array(12);
69
+ return aeadOpen("chacha20-poly1305", wrapKey, nonce, aeadCT, recipientPublicKey);
70
+ }
71
+ /**
72
+ * Wrap `symmetricKey` for the given recipient under the negotiated
73
+ * suite. Production code path: uses the platform CSPRNG to generate
74
+ * a fresh ephemeral every call, which is what the §4.4.1 wrap
75
+ * construction requires — wrap-key uniqueness is what makes the
76
+ * zero-nonce AEAD safe.
77
+ *
78
+ * For deterministic byte-level reproducibility (vectors, audits),
79
+ * use {@link wrapWithRandomness} instead and pass pinned
80
+ * ephemeral inputs.
81
+ */
82
+ export function wrap(suite, recipientPublicKey, symmetricKey) {
83
+ switch (suite) {
84
+ case "x25519-chacha20-poly1305": {
85
+ const ephPriv = randomBytes(X25519Size);
86
+ return wrapWithRandomness(suite, recipientPublicKey, symmetricKey, {
87
+ ephemeralX25519Priv: ephPriv,
88
+ });
89
+ }
90
+ case "pq-kyber768-x25519": {
91
+ const ephPriv = randomBytes(X25519Size);
92
+ const kyberM = randomBytes(32);
93
+ return wrapWithRandomness(suite, recipientPublicKey, symmetricKey, {
94
+ ephemeralX25519Priv: ephPriv,
95
+ kyberEncapsRandomnessM: kyberM,
96
+ });
97
+ }
98
+ }
99
+ }
100
+ /**
101
+ * Deterministic wrap for vector reproduction and audits. Production
102
+ * code MUST use {@link wrap} (which sources fresh entropy) — a
103
+ * deterministic wrap that leaks `ephemeralX25519Priv` reduces to
104
+ * "the adversary has the wrap key". Exposed here only because
105
+ * cross-language vectors pin these inputs.
106
+ *
107
+ * Returns base64(kemCt || aeadCt) per ENVELOPE.md §4.4.1.
108
+ */
109
+ export function wrapWithRandomness(suite, recipientPublicKey, symmetricKey, randomness) {
110
+ const { kemCT, sharedSecret } = encapsulate(suite, recipientPublicKey, randomness);
111
+ // KDF: salt = kemCt || recipientPublicKey, info = SEMP-v1-wrap.
112
+ const salt = concat(kemCT, recipientPublicKey);
113
+ const kdf = newHKDFSHA512();
114
+ const prk = kdf.extract(salt, sharedSecret);
115
+ const wrapKey = kdf.expand(prk, new TextEncoder().encode(WrapInfo), 32);
116
+ // AEAD: zero nonce, recipientPublicKey as AAD. Always
117
+ // ChaCha20-Poly1305 (12-byte nonce) regardless of suite — only
118
+ // the KEM is post-quantum on the PQ side.
119
+ const nonce = new Uint8Array(12);
120
+ const aeadCT = aeadSeal("chacha20-poly1305", wrapKey, nonce, symmetricKey, recipientPublicKey);
121
+ const wrapped = concat(kemCT, aeadCT);
122
+ return base64Encode(wrapped);
123
+ }
124
+ function encapsulate(suite, recipientPublicKey, randomness) {
125
+ switch (suite) {
126
+ case "x25519-chacha20-poly1305": {
127
+ // X25519 KEM: kemCT is the sender's ephemeral pub; shared
128
+ // secret is ECDH(ephPriv, recipientPub).
129
+ if (recipientPublicKey.length !== X25519Size) {
130
+ throw new Error(`seal: x25519 recipient pub must be ${X25519Size} bytes`);
131
+ }
132
+ const ephPub = x25519PublicKey(randomness.ephemeralX25519Priv);
133
+ const shared = x25519Agree(randomness.ephemeralX25519Priv, recipientPublicKey);
134
+ return { kemCT: ephPub, sharedSecret: shared };
135
+ }
136
+ case "pq-kyber768-x25519": {
137
+ // Hybrid: kyber half (encapsulate against recipient kyber pub
138
+ // with pinned m) + x25519 half (ephemeral ECDH against
139
+ // recipient x25519 pub). Wire layout: kyberCt || x25519EphPub
140
+ // for the ciphertext, kyberSS || x25519SS for the secret.
141
+ if (randomness.kyberEncapsRandomnessM === undefined) {
142
+ throw new Error("seal: PQ wrap requires kyberEncapsRandomnessM");
143
+ }
144
+ const kyberPub = recipientPublicKey.slice(0, Kyber768PublicKeySize);
145
+ const xPub = recipientPublicKey.slice(Kyber768PublicKeySize);
146
+ const { ciphertext: kyberCt, sharedSecret: kyberSS } = kyber768EncapsulateDeterministic(kyberPub, randomness.kyberEncapsRandomnessM);
147
+ const xEphPub = x25519PublicKey(randomness.ephemeralX25519Priv);
148
+ const xSS = x25519Agree(randomness.ephemeralX25519Priv, xPub);
149
+ const kemCT = new Uint8Array(Kyber768CiphertextSize + X25519Size);
150
+ kemCT.set(kyberCt, 0);
151
+ kemCT.set(xEphPub, Kyber768CiphertextSize);
152
+ const shared = new Uint8Array(64);
153
+ shared.set(kyberSS, 0);
154
+ shared.set(xSS, 32);
155
+ return { kemCT, sharedSecret: shared };
156
+ }
157
+ }
158
+ }
159
+ function decapsulate(suite, kemCT, recipientPrivateKey) {
160
+ switch (suite) {
161
+ case "x25519-chacha20-poly1305":
162
+ // KEM ciphertext is the sender's ephemeral public key (32B);
163
+ // shared secret = ECDH(localPriv, ephPub).
164
+ if (kemCT.length !== 32) {
165
+ throw new Error(`seal: x25519 kemCT must be 32 bytes, got ${kemCT.length}`);
166
+ }
167
+ return x25519Agree(recipientPrivateKey, kemCT);
168
+ case "pq-kyber768-x25519":
169
+ return hybridDecapsulate(kemCT, recipientPrivateKey);
170
+ }
171
+ }
172
+ function suiteAEAD(suite) {
173
+ switch (suite) {
174
+ case "x25519-chacha20-poly1305":
175
+ return "chacha20-poly1305";
176
+ case "pq-kyber768-x25519":
177
+ return "xchacha20-poly1305";
178
+ }
179
+ }
180
+ function concat(a, b) {
181
+ const out = new Uint8Array(a.length + b.length);
182
+ out.set(a, 0);
183
+ out.set(b, a.length);
184
+ return out;
185
+ }
186
+ function base64Decode(s) {
187
+ if (typeof Buffer !== "undefined") {
188
+ return new Uint8Array(Buffer.from(s, "base64"));
189
+ }
190
+ const bin = atob(s);
191
+ const out = new Uint8Array(bin.length);
192
+ for (let i = 0; i < bin.length; i++) {
193
+ out[i] = bin.charCodeAt(i);
194
+ }
195
+ return out;
196
+ }
197
+ function base64Encode(b) {
198
+ if (typeof Buffer !== "undefined") {
199
+ return Buffer.from(b).toString("base64");
200
+ }
201
+ let bin = "";
202
+ for (let i = 0; i < b.length; i++) {
203
+ bin += String.fromCharCode(b[i] ?? 0);
204
+ }
205
+ return btoa(bin);
206
+ }
207
+ function randomBytes(n) {
208
+ const out = new Uint8Array(n);
209
+ // Web Crypto is available in Node >= 19 and every modern browser.
210
+ globalThis.crypto.getRandomValues(out);
211
+ return out;
212
+ }
213
+ //# sourceMappingURL=wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../src/seal/wrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Session message dispatcher.
3
+ *
4
+ * Reads frames off a Session's transport in a loop, parses the
5
+ * outermost `type` field, and routes each frame to the matching
6
+ * caller-supplied handler. Designed for the long-running phase
7
+ * after a successful handshake — when the wire carries a mix of
8
+ * envelopes, sealed rekey messages, key-fetch requests, etc.
9
+ *
10
+ * The dispatcher does NOT verify envelope signatures or open
11
+ * sealed payloads itself; those are concerns of the per-type
12
+ * handlers. Its job is solely message-type fan-out and lifecycle.
13
+ *
14
+ * @module
15
+ */
16
+ import type { Session } from "./session.js";
17
+ /** Handlers registered on a {@link runDispatcher} call. */
18
+ export interface DispatchHandlers {
19
+ /**
20
+ * Sealed rekey message. The dispatcher reads the bytes off the
21
+ * transport and invokes this with the JSON object (already
22
+ * parsed). Production callers route through {@link "./rekey".rekeyServer}
23
+ * by feeding the bytes back through their own transport-level
24
+ * input — see the dispatcher example in the README.
25
+ */
26
+ onRekey?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
27
+ /** A wire envelope (`type: SEMP_ENVELOPE`). */
28
+ onEnvelope?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
29
+ /** A SEMP_KEYS request or response. */
30
+ onKeys?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
31
+ /** A SEMP_DISCOVERY response delivered over an in-session channel. */
32
+ onDiscovery?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
33
+ /** A SEMP_DELIVERY_ACK or SEMP_DELIVERY_RECEIPT. */
34
+ onDelivery?: (frame: Uint8Array, parsed: unknown) => Promise<void> | void;
35
+ /**
36
+ * Any frame whose `type` field doesn't match a registered
37
+ * handler. The default behavior (when this handler is not
38
+ * supplied) is to silently drop unknown types per the protocol
39
+ * forward-compatibility rule. Logging-level callers register
40
+ * this hook to surface unknowns at WARN.
41
+ */
42
+ onUnknown?: (type: string, frame: Uint8Array) => Promise<void> | void;
43
+ /**
44
+ * Invoked on a non-fatal error inside a handler. The dispatcher
45
+ * loop continues — the caller MUST decide whether to close the
46
+ * session. If this is not supplied, handler errors are swallowed.
47
+ */
48
+ onHandlerError?: (err: Error, type: string) => void;
49
+ /**
50
+ * Invoked on a fatal transport / parse error. The dispatcher
51
+ * exits its loop after calling this. If not supplied, the loop
52
+ * exits silently on fatal errors and {@link runDispatcher}
53
+ * resolves.
54
+ */
55
+ onFatal?: (err: Error) => void;
56
+ }
57
+ /**
58
+ * Run the dispatcher loop. Resolves when the session closes
59
+ * cleanly (peer EOF) OR after a fatal error has been surfaced
60
+ * to {@link DispatchHandlers.onFatal}. Does NOT close the
61
+ * session; the caller decides whether to call `session.close()`
62
+ * after this resolves.
63
+ */
64
+ export declare function runDispatcher(session: Session, handlers: DispatchHandlers): Promise<void>;
65
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/session/dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEvE,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE1E,uCAAuC;IACvC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEtE,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE3E,oDAAoD;IACpD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE1E;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEtE;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Session message dispatcher.
3
+ *
4
+ * Reads frames off a Session's transport in a loop, parses the
5
+ * outermost `type` field, and routes each frame to the matching
6
+ * caller-supplied handler. Designed for the long-running phase
7
+ * after a successful handshake — when the wire carries a mix of
8
+ * envelopes, sealed rekey messages, key-fetch requests, etc.
9
+ *
10
+ * The dispatcher does NOT verify envelope signatures or open
11
+ * sealed payloads itself; those are concerns of the per-type
12
+ * handlers. Its job is solely message-type fan-out and lifecycle.
13
+ *
14
+ * @module
15
+ */
16
+ /**
17
+ * Run the dispatcher loop. Resolves when the session closes
18
+ * cleanly (peer EOF) OR after a fatal error has been surfaced
19
+ * to {@link DispatchHandlers.onFatal}. Does NOT close the
20
+ * session; the caller decides whether to call `session.close()`
21
+ * after this resolves.
22
+ */
23
+ export async function runDispatcher(session, handlers) {
24
+ while (true) {
25
+ let frame;
26
+ try {
27
+ frame = await session.receive();
28
+ }
29
+ catch (err) {
30
+ handlers.onFatal?.(err instanceof Error ? err : new Error(String(err)));
31
+ return;
32
+ }
33
+ if (frame === null) {
34
+ // Clean EOF.
35
+ return;
36
+ }
37
+ let parsed;
38
+ try {
39
+ parsed = JSON.parse(new TextDecoder().decode(frame));
40
+ }
41
+ catch (err) {
42
+ handlers.onFatal?.(new Error(`dispatcher: malformed frame: ${err instanceof Error ? err.message : String(err)}`));
43
+ return;
44
+ }
45
+ const type = typeof parsed.type === "string"
46
+ ? parsed.type
47
+ : "";
48
+ try {
49
+ await dispatchOne(type, frame, parsed, handlers);
50
+ }
51
+ catch (err) {
52
+ handlers.onHandlerError?.(err instanceof Error ? err : new Error(String(err)), type);
53
+ // Continue the loop; handler errors are non-fatal by default.
54
+ }
55
+ }
56
+ }
57
+ async function dispatchOne(type, frame, parsed, handlers) {
58
+ switch (type) {
59
+ case "SEMP_REKEY":
60
+ if (handlers.onRekey !== undefined) {
61
+ await handlers.onRekey(frame, parsed);
62
+ return;
63
+ }
64
+ break;
65
+ case "SEMP_ENVELOPE":
66
+ if (handlers.onEnvelope !== undefined) {
67
+ await handlers.onEnvelope(frame, parsed);
68
+ return;
69
+ }
70
+ break;
71
+ case "SEMP_KEYS":
72
+ if (handlers.onKeys !== undefined) {
73
+ await handlers.onKeys(frame, parsed);
74
+ return;
75
+ }
76
+ break;
77
+ case "SEMP_DISCOVERY":
78
+ if (handlers.onDiscovery !== undefined) {
79
+ await handlers.onDiscovery(frame, parsed);
80
+ return;
81
+ }
82
+ break;
83
+ case "SEMP_DELIVERY_ACK":
84
+ case "SEMP_DELIVERY_RECEIPT":
85
+ if (handlers.onDelivery !== undefined) {
86
+ await handlers.onDelivery(frame, parsed);
87
+ return;
88
+ }
89
+ break;
90
+ }
91
+ if (handlers.onUnknown !== undefined) {
92
+ await handlers.onUnknown(type, frame);
93
+ }
94
+ // else silently drop, per protocol forward-compatibility.
95
+ }
96
+ //# sourceMappingURL=dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/session/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Session lifecycle layer per `SESSION.md`. Holds the post-handshake
3
+ * keys, TTL, transport, and permission set; lifts the runClient
4
+ * result into a usable session object.
5
+ *
6
+ * Future slices: rekey, resume, sequence-number tracking.
7
+ *
8
+ * @module
9
+ */
10
+ export { type RekeyApply, type Role, type SessionConfig, Session, } from "./session.js";
11
+ export { type SealedRekey, openRekeyMessage, sealRekeyMessage, } from "./rekey_seal.js";
12
+ export { type RekeyAccepted, type RekeyClientOptions, type RekeyInit, type RekeyRejected, type RekeyServerOptions, RekeyRejectedError, rekeyClient, rekeyServer, } from "./rekey.js";
13
+ export { type ResumeAccepted, type ResumeClientConfig, type ResumeRequest, type ResumeServerConfig, type TicketLookupResult, resumeClient, resumeServer, } from "./resume.js";
14
+ export { type DispatchHandlers, runDispatcher } from "./dispatcher.js";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,WAAW,EAChB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Session lifecycle layer per `SESSION.md`. Holds the post-handshake
3
+ * keys, TTL, transport, and permission set; lifts the runClient
4
+ * result into a usable session object.
5
+ *
6
+ * Future slices: rekey, resume, sequence-number tracking.
7
+ *
8
+ * @module
9
+ */
10
+ export { Session, } from "./session.js";
11
+ export { openRekeyMessage, sealRekeyMessage, } from "./rekey_seal.js";
12
+ export { RekeyRejectedError, rekeyClient, rekeyServer, } from "./rekey.js";
13
+ export { resumeClient, resumeServer, } from "./resume.js";
14
+ export { runDispatcher } from "./dispatcher.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,kBAAkB,EAClB,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAML,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAyB,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Rekey driver per SESSION.md §3.3.
3
+ *
4
+ * Both peers can initiate. The flow:
5
+ *
6
+ * 1. Initiator generates a new ephemeral X25519 keypair + a
7
+ * 32-byte rekey nonce. Builds RekeyInit, seals under the
8
+ * current session's directional keys, sends.
9
+ * 2. Responder receives + opens the sealed init. Generates its
10
+ * own new ephemeral + a 32-byte responder nonce + a new
11
+ * session_id. Computes the new shared secret via X25519,
12
+ * derives the five new session keys via HKDF-SHA-512 with
13
+ * salt = rekey_nonce || responder_nonce.
14
+ * 3. Responder builds RekeyAccepted, seals under the current
15
+ * session's directional keys, sends.
16
+ * 4. Both call session.applyRekey() to swap in the new keys
17
+ * and new session_id atomically.
18
+ *
19
+ * On rejection (session_expired, rekey_unsupported, rate_limited),
20
+ * the responder sends a sealed RekeyRejected; the caller sees a
21
+ * RekeyRejectedError.
22
+ *
23
+ * Rekey messages carry no separate identity signature: receiving
24
+ * a valid sealed message is itself authentication, since only a
25
+ * holder of the live session keys can forge one.
26
+ *
27
+ * @module
28
+ */
29
+ import type { Session } from "./session.js";
30
+ /** Rekey-init message (decrypted body). */
31
+ export interface RekeyInit {
32
+ type: "SEMP_REKEY";
33
+ step: "rekey-init";
34
+ version: "1.0.0";
35
+ session_id: string;
36
+ new_ephemeral_key: {
37
+ algorithm: string;
38
+ key: string;
39
+ key_id: string;
40
+ };
41
+ rekey_nonce: string;
42
+ }
43
+ /** Rekey-accepted message (decrypted body). */
44
+ export interface RekeyAccepted {
45
+ type: "SEMP_REKEY";
46
+ step: "rekey-accepted";
47
+ version: "1.0.0";
48
+ session_id: string;
49
+ new_session_id: string;
50
+ new_ephemeral_key: {
51
+ algorithm: string;
52
+ key: string;
53
+ key_id: string;
54
+ };
55
+ rekey_nonce: string;
56
+ responder_nonce: string;
57
+ }
58
+ /** Rekey-rejected message (decrypted body). */
59
+ export interface RekeyRejected {
60
+ type: "SEMP_REKEY";
61
+ step: "rekey-rejected";
62
+ version: "1.0.0";
63
+ session_id: string;
64
+ reason_code: string;
65
+ reason?: string;
66
+ }
67
+ /** Error thrown when the responder rejects a rekey attempt. */
68
+ export declare class RekeyRejectedError extends Error {
69
+ readonly reasonCode: string;
70
+ readonly reason: string | undefined;
71
+ constructor(reasonCode: string, reason: string | undefined);
72
+ }
73
+ /** Inputs to the initiator side of rekey (deterministic-friendly). */
74
+ export interface RekeyClientOptions {
75
+ /** Optional pinned ephemeral private (32 bytes) for tests. */
76
+ ephemeralPriv?: Uint8Array;
77
+ /** Optional pinned 32-byte rekey nonce for tests. */
78
+ rekeyNonce?: Uint8Array;
79
+ }
80
+ /**
81
+ * Initiate a rekey. The session installs new keys + a new
82
+ * session_id on success and resolves with the new session_id.
83
+ *
84
+ * @throws RekeyRejectedError when the responder sends a sealed
85
+ * RekeyRejected.
86
+ */
87
+ export declare function rekeyClient(session: Session, options?: RekeyClientOptions): Promise<string>;
88
+ /** Inputs to the responder side of rekey (deterministic-friendly). */
89
+ export interface RekeyServerOptions {
90
+ /** Optional pinned ephemeral private for tests. */
91
+ ephemeralPriv?: Uint8Array;
92
+ /** Optional pinned 32-byte responder nonce for tests. */
93
+ responderNonce?: Uint8Array;
94
+ /** Generator for the new session_id. Required for production. */
95
+ generateSessionId: () => string;
96
+ }
97
+ /**
98
+ * Respond to a rekey. Reads one sealed message off the session
99
+ * transport, validates it as a RekeyInit, derives new keys,
100
+ * sends a sealed RekeyAccepted, and applies the rekey to the
101
+ * session. Resolves with the new session_id.
102
+ *
103
+ * Production callers wire this into their session-message
104
+ * dispatcher: when an inbound SEMP_REKEY arrives, route the
105
+ * sealed bytes here.
106
+ */
107
+ export declare function rekeyServer(session: Session, options: RekeyServerOptions): Promise<string>;
108
+ //# sourceMappingURL=rekey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rekey.d.ts","sourceRoot":"","sources":["../../src/session/rekey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAO5C,2CAA2C;AAC3C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+DAA+D;AAC/D,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;gBACxB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;CAK3D;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,qDAAqD;IACrD,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAkEjB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,yDAAyD;IACzD,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,iEAAiE;IACjE,iBAAiB,EAAE,MAAM,MAAM,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA0DjB"}