@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,263 @@
1
+ /**
2
+ * Session resumption driver per HANDSHAKE.md §2.8 / SESSION.md §2.7.
3
+ *
4
+ * Resume condenses the full handshake into ONE round trip:
5
+ *
6
+ * client -> server step=resume (client_eph + client_nonce +
7
+ * resumption_ticket from prior session)
8
+ * server -> client step=accepted (server_eph + server_nonce +
9
+ * new session_id + new ticket +
10
+ * server_signature)
11
+ *
12
+ * Both peers derive new session keys by mixing the FRESH X25519
13
+ * shared secret with the K_resumption secret retained from the
14
+ * previous session. The retained secret proves continuity of
15
+ * identity, so no separate identity proof is required.
16
+ *
17
+ * Production callers use this when they want a low-latency
18
+ * reconnect after a brief disconnection. If the server has lost
19
+ * the session state (or the ticket has expired), the server
20
+ * MUST respond with step=rejected and the client falls back to
21
+ * a full {@link "../handshake/driver".runClient} handshake.
22
+ *
23
+ * @module
24
+ */
25
+ import { marshal as canonicalMarshal } from "../canonical/index.js";
26
+ import { deriveResumedSessionKeys, newHKDFSHA512, x25519Agree, x25519PublicKey, } from "../crypto/index.js";
27
+ import { fingerprint, publicKeyFromSeed, signSignedDoc, verify as ed25519Verify } from "../keys/index.js";
28
+ import { HandshakePrefix, } from "../handshake/messages.js";
29
+ import { HandshakeRejectedError } from "../handshake/driver.js";
30
+ import { Session } from "./session.js";
31
+ /**
32
+ * Drive the client side of a resume. Resolves with a fresh
33
+ * {@link Session} on success; throws {@link HandshakeRejectedError}
34
+ * if the server rejects.
35
+ */
36
+ export async function resumeClient(transport, config) {
37
+ try {
38
+ return await resumeClientInner(transport, config);
39
+ }
40
+ catch (err) {
41
+ try {
42
+ await transport.close();
43
+ }
44
+ catch {
45
+ // already closed
46
+ }
47
+ throw err;
48
+ }
49
+ }
50
+ async function resumeClientInner(transport, config) {
51
+ const ephPriv = config.clientEphemeralPriv ?? randomBytes(32);
52
+ const ephPub = x25519PublicKey(ephPriv);
53
+ const clientNonce = config.clientNonce ?? randomBytes(32);
54
+ // Build + send resume request.
55
+ const req = {
56
+ type: "SEMP_HANDSHAKE",
57
+ step: "resume",
58
+ party: "client",
59
+ version: "1.0.0",
60
+ nonce: base64Encode(clientNonce),
61
+ resumption_ticket: config.resumptionTicket,
62
+ client_ephemeral_key: {
63
+ algorithm: "x25519-chacha20-poly1305",
64
+ key: base64Encode(ephPub),
65
+ key_id: fingerprint(ephPub),
66
+ },
67
+ transport: config.transport,
68
+ extensions: config.extensions ?? {},
69
+ };
70
+ await transport.send(canonicalMarshal(req));
71
+ // Receive accepted (or rejected).
72
+ const respBytes = await transport.receive();
73
+ if (respBytes === null) {
74
+ throw new Error("resume: connection closed waiting for response");
75
+ }
76
+ const respMsg = JSON.parse(new TextDecoder().decode(respBytes));
77
+ if (respMsg.step === "rejected") {
78
+ const r = respMsg;
79
+ throw new HandshakeRejectedError(r.session_id ?? "", r.reason_code ?? "auth_failed", r.reason);
80
+ }
81
+ if (respMsg.step !== "accepted") {
82
+ throw new Error(`resume: expected step=accepted, got ${respMsg.step ?? "?"}`);
83
+ }
84
+ const accepted = respMsg;
85
+ // Verify server_signature.
86
+ verifyAcceptedSignature(accepted, config.serverDomainPub);
87
+ // Derive new session keys.
88
+ const serverEphPub = base64Decode(accepted.server_ephemeral_key.key);
89
+ const serverNonce = base64Decode(accepted.server_nonce);
90
+ const ephSharedSecret = x25519Agree(ephPriv, serverEphPub);
91
+ const kdf = newHKDFSHA512();
92
+ const keys = deriveResumedSessionKeys(kdf, ephSharedSecret, config.kResumption, clientNonce, serverNonce);
93
+ return new Session({
94
+ role: "client",
95
+ sessionId: accepted.session_id,
96
+ sessionTTL: accepted.session_ttl,
97
+ establishedAt: new Date(),
98
+ permissions: [], // resume preserves the prior permission set; the
99
+ // higher-level client carries it over from the previous session
100
+ keys,
101
+ transport,
102
+ resumptionTicket: accepted.resumption_ticket,
103
+ extensions: accepted.extensions,
104
+ });
105
+ }
106
+ function verifyAcceptedSignature(accepted, serverDomainPub) {
107
+ const sig = base64Decode(accepted.server_signature);
108
+ const blanked = { ...accepted, server_signature: "" };
109
+ const canonical = canonicalMarshal(blanked);
110
+ const signingInput = concat(new TextEncoder().encode(HandshakePrefix), canonical);
111
+ if (!ed25519Verify(serverDomainPub, sig, signingInput)) {
112
+ throw new Error("resume: server_signature did not verify under server domain pub");
113
+ }
114
+ }
115
+ /**
116
+ * Drive the server side of a resume. Reads the resume request,
117
+ * looks up the ticket, generates a fresh ephemeral + nonce + new
118
+ * session_id, builds and signs the accepted response, and returns
119
+ * a Session.
120
+ */
121
+ export async function resumeServer(transport, config) {
122
+ try {
123
+ return await resumeServerInner(transport, config);
124
+ }
125
+ catch (err) {
126
+ try {
127
+ await transport.close();
128
+ }
129
+ catch {
130
+ // already closed
131
+ }
132
+ throw err;
133
+ }
134
+ }
135
+ async function resumeServerInner(transport, config) {
136
+ // Receive resume request.
137
+ const reqBytes = await transport.receive();
138
+ if (reqBytes === null) {
139
+ throw new Error("resume: connection closed waiting for request");
140
+ }
141
+ const req = JSON.parse(new TextDecoder().decode(reqBytes));
142
+ if (req.type !== "SEMP_HANDSHAKE" || req.step !== "resume") {
143
+ throw new Error(`resume: expected step=resume, got ${req.step}`);
144
+ }
145
+ // Validate ticket.
146
+ const lookup = await config.lookupTicket(req.resumption_ticket);
147
+ if (!lookup.ok) {
148
+ await sendRejected(transport, req, lookup.reasonCode, lookup.reason, config.serverDomainSigningSeed);
149
+ throw new Error(`resume: ticket invalid: ${lookup.reasonCode}`);
150
+ }
151
+ // Fresh ephemeral + nonce + new session_id + new ticket.
152
+ const ephPriv = config.serverEphemeralPriv ?? randomBytes(32);
153
+ const ephPub = x25519PublicKey(ephPriv);
154
+ const serverNonce = config.serverNonce ?? randomBytes(32);
155
+ const newSessionId = config.generateSessionId();
156
+ const newTicket = config.generateNewTicket();
157
+ // Derive new session keys using the retained K_resumption.
158
+ const clientEphPub = base64Decode(req.client_ephemeral_key.key);
159
+ const clientNonce = base64Decode(req.nonce);
160
+ const ephSharedSecret = x25519Agree(ephPriv, clientEphPub);
161
+ const kdf = newHKDFSHA512();
162
+ const keys = deriveResumedSessionKeys(kdf, ephSharedSecret, lookup.kResumption, clientNonce, serverNonce);
163
+ // Build + sign accepted.
164
+ const accepted = {
165
+ type: "SEMP_HANDSHAKE",
166
+ step: "accepted",
167
+ party: "server",
168
+ version: "1.0.0",
169
+ session_id: newSessionId,
170
+ session_ttl: config.sessionTTL,
171
+ server_nonce: base64Encode(serverNonce),
172
+ server_ephemeral_key: {
173
+ algorithm: "x25519-chacha20-poly1305",
174
+ key: base64Encode(ephPub),
175
+ key_id: fingerprint(ephPub),
176
+ },
177
+ resumption_ticket: newTicket,
178
+ server_signature: "",
179
+ extensions: config.acceptedExtensions ?? {},
180
+ };
181
+ const { signedJSON } = signSignedDoc({
182
+ preSignJSON: accepted,
183
+ seed: config.serverDomainSigningSeed,
184
+ signaturePath: "server_signature",
185
+ prefix: HandshakePrefix,
186
+ });
187
+ await transport.send(canonicalMarshal(signedJSON));
188
+ return new Session({
189
+ role: "server",
190
+ sessionId: newSessionId,
191
+ sessionTTL: config.sessionTTL,
192
+ establishedAt: new Date(),
193
+ permissions: [...lookup.permissions],
194
+ keys,
195
+ transport,
196
+ resumptionTicket: newTicket,
197
+ serverIdentityProofKeyId: fingerprint(publicKeyFromSeed(config.serverDomainSigningSeed)),
198
+ extensions: config.acceptedExtensions ?? {},
199
+ });
200
+ }
201
+ async function sendRejected(transport, req, reasonCode, reason, serverDomainSigningSeed) {
202
+ const rejected = {
203
+ type: "SEMP_HANDSHAKE",
204
+ step: "rejected",
205
+ party: "server",
206
+ version: "1.0.0",
207
+ session_id: "",
208
+ reason_code: reasonCode,
209
+ server_signature: "",
210
+ extensions: {},
211
+ };
212
+ if (reason !== undefined) {
213
+ rejected.reason = reason;
214
+ }
215
+ void req; // request kept for trace context if logging is added later
216
+ const { signedJSON } = signSignedDoc({
217
+ preSignJSON: rejected,
218
+ seed: serverDomainSigningSeed,
219
+ signaturePath: "server_signature",
220
+ prefix: HandshakePrefix,
221
+ });
222
+ try {
223
+ await transport.send(canonicalMarshal(signedJSON));
224
+ }
225
+ catch {
226
+ // peer may have already disconnected
227
+ }
228
+ }
229
+ // ---------------------------------------------------------------------------
230
+ // Helpers
231
+ function concat(a, b) {
232
+ const out = new Uint8Array(a.length + b.length);
233
+ out.set(a, 0);
234
+ out.set(b, a.length);
235
+ return out;
236
+ }
237
+ function randomBytes(n) {
238
+ const out = new Uint8Array(n);
239
+ globalThis.crypto.getRandomValues(out);
240
+ return out;
241
+ }
242
+ function base64Encode(b) {
243
+ if (typeof Buffer !== "undefined") {
244
+ return Buffer.from(b).toString("base64");
245
+ }
246
+ let bin = "";
247
+ for (let i = 0; i < b.length; i++) {
248
+ bin += String.fromCharCode(b[i] ?? 0);
249
+ }
250
+ return btoa(bin);
251
+ }
252
+ function base64Decode(s) {
253
+ if (typeof Buffer !== "undefined") {
254
+ return new Uint8Array(Buffer.from(s, "base64"));
255
+ }
256
+ const bin = atob(s);
257
+ const out = new Uint8Array(bin.length);
258
+ for (let i = 0; i < bin.length; i++) {
259
+ out[i] = bin.charCodeAt(i);
260
+ }
261
+ return out;
262
+ }
263
+ //# sourceMappingURL=resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/session/resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Session lifecycle per `SESSION.md` §2.
3
+ *
4
+ * A Session holds the post-handshake state both peers retain:
5
+ *
6
+ * - The five SEMP session keys (encC2S, encS2C, macC2S, macS2C,
7
+ * envMAC) plus K_resumption.
8
+ * - session_id and the negotiated TTL.
9
+ * - permissions and resumption_ticket if the server supplied one.
10
+ * - The underlying transport, surfaced for the next-layer envelope
11
+ * sender/receiver.
12
+ *
13
+ * State transitions:
14
+ *
15
+ * active ── close() ──> closed
16
+ * active ── ttl elapsed, isExpired() returns true ──> active
17
+ * (state stays "active"; callers MUST check
18
+ * isExpired() before trusting envelope verification)
19
+ * active ── erase() ──> closed (keys zeroized)
20
+ *
21
+ * The v1 module is intentionally minimal: it does not implement
22
+ * rekey, resume, or per-direction sequence number tracking. Those
23
+ * land in the next slice.
24
+ *
25
+ * @module
26
+ */
27
+ import { type SessionKeys } from "../crypto/index.js";
28
+ import type { Transport } from "../transport/index.js";
29
+ /** Session role: "client" if the local end ran runClient. */
30
+ export type Role = "client" | "server";
31
+ /** New keys + new session id installed by a successful rekey. */
32
+ export interface RekeyApply {
33
+ /** Replacement session_id from RekeyAccepted. */
34
+ newSessionId: string;
35
+ /** Newly derived session keys per SESSION.md §3.3. */
36
+ newKeys: SessionKeys;
37
+ }
38
+ /** Configuration to construct a Session from a completed handshake. */
39
+ export interface SessionConfig {
40
+ role: Role;
41
+ sessionId: string;
42
+ /** TTL in seconds returned by ACCEPTED. */
43
+ sessionTTL: number;
44
+ /** Wall-clock instant when the session was established. */
45
+ establishedAt: Date;
46
+ permissions: string[];
47
+ keys: SessionKeys;
48
+ transport: Transport;
49
+ /** Optional resumption ticket from ACCEPTED. */
50
+ resumptionTicket?: {
51
+ value: string;
52
+ expires_at: string;
53
+ };
54
+ /** Server identity proof from RESPONSE (forwarded for higher layers). */
55
+ serverIdentityProofKeyId?: string;
56
+ serverIdentityProofSignature?: string;
57
+ /** Extensions echoed back from ACCEPTED. */
58
+ extensions?: Record<string, unknown>;
59
+ }
60
+ /**
61
+ * Live SEMP session. Outlives the handshake; lives until close()
62
+ * or until the underlying transport drops. Higher-level senders
63
+ * borrow `keys.envMAC` for envelope MAC computation and the
64
+ * transport for raw send/receive of envelope bytes.
65
+ */
66
+ export declare class Session {
67
+ readonly role: Role;
68
+ /**
69
+ * Current session_id. Mutable: a successful rekey installs a new
70
+ * id atomically with the new keys (see {@link applyRekey}).
71
+ */
72
+ sessionId: string;
73
+ readonly sessionTTL: number;
74
+ readonly establishedAt: Date;
75
+ readonly permissions: ReadonlySet<string>;
76
+ readonly resumptionTicket: {
77
+ value: string;
78
+ expires_at: string;
79
+ } | undefined;
80
+ readonly serverIdentityProofKeyId: string | undefined;
81
+ readonly serverIdentityProofSignature: string | undefined;
82
+ readonly extensions: Readonly<Record<string, unknown>>;
83
+ private _keys;
84
+ private _transport;
85
+ private _closed;
86
+ constructor(config: SessionConfig);
87
+ /** True after close() or erase(). */
88
+ get closed(): boolean;
89
+ /** Wall-clock instant the session expires (establishedAt + TTL). */
90
+ expiresAt(): Date;
91
+ /** Reports whether the session has passed its TTL relative to `now`. */
92
+ isExpired(now?: Date): boolean;
93
+ /**
94
+ * Live session keys. Throws if the session has been closed or
95
+ * erased — once erase() runs, the bytes are zeroized and any
96
+ * caller still holding a Session reference cannot accidentally
97
+ * encrypt under invalidated material.
98
+ */
99
+ get keys(): SessionKeys;
100
+ /** The underlying transport. Throws if the session is closed. */
101
+ get transport(): Transport;
102
+ /**
103
+ * Send raw bytes (typically a canonical envelope) over the
104
+ * transport. Caller is responsible for envelope composition,
105
+ * including the envelope-level MAC computed over the canonical
106
+ * bytes with `keys.envMAC`.
107
+ */
108
+ send(message: Uint8Array): Promise<void>;
109
+ /**
110
+ * Receive raw bytes from the transport. Returns null on clean
111
+ * peer close. Caller verifies the envelope's session_mac with
112
+ * `keys.envMAC` before trusting the contents.
113
+ */
114
+ receive(): Promise<Uint8Array | null>;
115
+ /**
116
+ * Close the session and the underlying transport. Idempotent.
117
+ * Does NOT zeroize keys — callers that want zeroization use
118
+ * {@link erase}.
119
+ */
120
+ close(): Promise<void>;
121
+ /**
122
+ * Atomically install new session keys + a new session_id from a
123
+ * successful rekey. Zeroizes the prior keys before swapping. The
124
+ * session retains its TTL boundary (TTL counts from the original
125
+ * establishedAt) — rekey rolls forward the keys, not the lifetime.
126
+ */
127
+ applyRekey(apply: RekeyApply): void;
128
+ /**
129
+ * Close the session AND zeroize all session keys. After this,
130
+ * `keys` throws and the underlying byte buffers are filled with
131
+ * zero. Safe to call multiple times. RECOMMENDED on logout / app
132
+ * suspend / any time the session is no longer needed.
133
+ */
134
+ erase(): Promise<void>;
135
+ }
136
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvC,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,aAAa,EAAE,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,yEAAyE;IACzE,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,4BAA4B,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvD,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,aAAa;IAcjC,qCAAqC;IACrC,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,oEAAoE;IACpE,SAAS,IAAI,IAAI;IAIjB,wEAAwE;IACxE,SAAS,CAAC,GAAG,GAAE,IAAiB,GAAG,OAAO;IAI1C;;;;;OAKG;IACH,IAAI,IAAI,IAAI,WAAW,CAKtB;IAED,iEAAiE;IACjE,IAAI,SAAS,IAAI,SAAS,CAKzB;IAED;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAO3C;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAqBnC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAe7B"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Session lifecycle per `SESSION.md` §2.
3
+ *
4
+ * A Session holds the post-handshake state both peers retain:
5
+ *
6
+ * - The five SEMP session keys (encC2S, encS2C, macC2S, macS2C,
7
+ * envMAC) plus K_resumption.
8
+ * - session_id and the negotiated TTL.
9
+ * - permissions and resumption_ticket if the server supplied one.
10
+ * - The underlying transport, surfaced for the next-layer envelope
11
+ * sender/receiver.
12
+ *
13
+ * State transitions:
14
+ *
15
+ * active ── close() ──> closed
16
+ * active ── ttl elapsed, isExpired() returns true ──> active
17
+ * (state stays "active"; callers MUST check
18
+ * isExpired() before trusting envelope verification)
19
+ * active ── erase() ──> closed (keys zeroized)
20
+ *
21
+ * The v1 module is intentionally minimal: it does not implement
22
+ * rekey, resume, or per-direction sequence number tracking. Those
23
+ * land in the next slice.
24
+ *
25
+ * @module
26
+ */
27
+ import {} from "../crypto/index.js";
28
+ /**
29
+ * Live SEMP session. Outlives the handshake; lives until close()
30
+ * or until the underlying transport drops. Higher-level senders
31
+ * borrow `keys.envMAC` for envelope MAC computation and the
32
+ * transport for raw send/receive of envelope bytes.
33
+ */
34
+ export class Session {
35
+ role;
36
+ /**
37
+ * Current session_id. Mutable: a successful rekey installs a new
38
+ * id atomically with the new keys (see {@link applyRekey}).
39
+ */
40
+ sessionId;
41
+ sessionTTL;
42
+ establishedAt;
43
+ permissions;
44
+ resumptionTicket;
45
+ serverIdentityProofKeyId;
46
+ serverIdentityProofSignature;
47
+ extensions;
48
+ _keys;
49
+ _transport;
50
+ _closed = false;
51
+ constructor(config) {
52
+ this.role = config.role;
53
+ this.sessionId = config.sessionId;
54
+ this.sessionTTL = config.sessionTTL;
55
+ this.establishedAt = config.establishedAt;
56
+ this.permissions = new Set(config.permissions);
57
+ this.resumptionTicket = config.resumptionTicket;
58
+ this.serverIdentityProofKeyId = config.serverIdentityProofKeyId;
59
+ this.serverIdentityProofSignature = config.serverIdentityProofSignature;
60
+ this.extensions = Object.freeze({ ...(config.extensions ?? {}) });
61
+ this._keys = config.keys;
62
+ this._transport = config.transport;
63
+ }
64
+ /** True after close() or erase(). */
65
+ get closed() {
66
+ return this._closed;
67
+ }
68
+ /** Wall-clock instant the session expires (establishedAt + TTL). */
69
+ expiresAt() {
70
+ return new Date(this.establishedAt.getTime() + this.sessionTTL * 1000);
71
+ }
72
+ /** Reports whether the session has passed its TTL relative to `now`. */
73
+ isExpired(now = new Date()) {
74
+ return now.getTime() >= this.expiresAt().getTime();
75
+ }
76
+ /**
77
+ * Live session keys. Throws if the session has been closed or
78
+ * erased — once erase() runs, the bytes are zeroized and any
79
+ * caller still holding a Session reference cannot accidentally
80
+ * encrypt under invalidated material.
81
+ */
82
+ get keys() {
83
+ if (this._keys === null) {
84
+ throw new Error("session: keys have been erased");
85
+ }
86
+ return this._keys;
87
+ }
88
+ /** The underlying transport. Throws if the session is closed. */
89
+ get transport() {
90
+ if (this._closed) {
91
+ throw new Error("session: closed");
92
+ }
93
+ return this._transport;
94
+ }
95
+ /**
96
+ * Send raw bytes (typically a canonical envelope) over the
97
+ * transport. Caller is responsible for envelope composition,
98
+ * including the envelope-level MAC computed over the canonical
99
+ * bytes with `keys.envMAC`.
100
+ */
101
+ async send(message) {
102
+ if (this._closed) {
103
+ throw new Error("session: closed");
104
+ }
105
+ await this._transport.send(message);
106
+ }
107
+ /**
108
+ * Receive raw bytes from the transport. Returns null on clean
109
+ * peer close. Caller verifies the envelope's session_mac with
110
+ * `keys.envMAC` before trusting the contents.
111
+ */
112
+ async receive() {
113
+ if (this._closed) {
114
+ throw new Error("session: closed");
115
+ }
116
+ return this._transport.receive();
117
+ }
118
+ /**
119
+ * Close the session and the underlying transport. Idempotent.
120
+ * Does NOT zeroize keys — callers that want zeroization use
121
+ * {@link erase}.
122
+ */
123
+ async close() {
124
+ if (this._closed) {
125
+ return;
126
+ }
127
+ this._closed = true;
128
+ try {
129
+ await this._transport.close();
130
+ }
131
+ catch {
132
+ // already closing
133
+ }
134
+ }
135
+ /**
136
+ * Atomically install new session keys + a new session_id from a
137
+ * successful rekey. Zeroizes the prior keys before swapping. The
138
+ * session retains its TTL boundary (TTL counts from the original
139
+ * establishedAt) — rekey rolls forward the keys, not the lifetime.
140
+ */
141
+ applyRekey(apply) {
142
+ if (this._keys === null) {
143
+ throw new Error("session: applyRekey after erase");
144
+ }
145
+ if (this._closed) {
146
+ throw new Error("session: applyRekey on closed session");
147
+ }
148
+ // Zeroize previous keys before dropping the reference.
149
+ const prev = this._keys;
150
+ zero(prev.encC2S);
151
+ zero(prev.encS2C);
152
+ zero(prev.macC2S);
153
+ zero(prev.macS2C);
154
+ zero(prev.envMAC);
155
+ if (prev.resumption !== undefined) {
156
+ zero(prev.resumption);
157
+ }
158
+ this._keys = apply.newKeys;
159
+ this.sessionId = apply.newSessionId;
160
+ }
161
+ /**
162
+ * Close the session AND zeroize all session keys. After this,
163
+ * `keys` throws and the underlying byte buffers are filled with
164
+ * zero. Safe to call multiple times. RECOMMENDED on logout / app
165
+ * suspend / any time the session is no longer needed.
166
+ */
167
+ async erase() {
168
+ await this.close();
169
+ if (this._keys !== null) {
170
+ const k = this._keys;
171
+ zero(k.encC2S);
172
+ zero(k.encS2C);
173
+ zero(k.macC2S);
174
+ zero(k.macS2C);
175
+ zero(k.envMAC);
176
+ if (k.resumption !== undefined) {
177
+ zero(k.resumption);
178
+ }
179
+ this._keys = null;
180
+ }
181
+ }
182
+ }
183
+ function zero(b) {
184
+ for (let i = 0; i < b.length; i++) {
185
+ b[i] = 0;
186
+ }
187
+ }
188
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Key transparency layer per TRANSPARENCY.md.
3
+ *
4
+ * RFC 6962 Merkle math + STH sign/verify/freshness +
5
+ * append-only Log with inclusion/consistency proof generation.
6
+ *
7
+ * @module
8
+ */
9
+ export { type ConsistencyProof, type InclusionProof, type LogEntry, type LogEntryEvent, type LogKeyType, type SignedTreeHead, type TransparencySignature, InteriorPrefix, LeafPrefix, LogEntryVersion, MaxSTHFreshnessMs, SignedTreeHeadVersion, } from "./types.js";
10
+ export { auditPath, encodeHash, hashInterior, hashLeaf, hashLeafFromEntry, largestPowerOfTwoLessThan, subproof, subtreeRoot, verifyConsistencyProof, verifyInclusionProof, } from "./merkle.js";
11
+ export { type SignSTHInput, type SignSTHResult, SignatureAlgorithmEd25519, TransparencySTHPrefix, checkSTHFresh, signSTH, validateLogEntry, validateSTH, verifySTH, } from "./sign.js";
12
+ export { type LogConfig, Log } from "./log.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transparency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,yBAAyB,EACzB,QAAQ,EACR,WAAW,EACX,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,SAAS,GACV,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Key transparency layer per TRANSPARENCY.md.
3
+ *
4
+ * RFC 6962 Merkle math + STH sign/verify/freshness +
5
+ * append-only Log with inclusion/consistency proof generation.
6
+ *
7
+ * @module
8
+ */
9
+ export { InteriorPrefix, LeafPrefix, LogEntryVersion, MaxSTHFreshnessMs, SignedTreeHeadVersion, } from "./types.js";
10
+ export { auditPath, encodeHash, hashInterior, hashLeaf, hashLeafFromEntry, largestPowerOfTwoLessThan, subproof, subtreeRoot, verifyConsistencyProof, verifyInclusionProof, } from "./merkle.js";
11
+ export { SignatureAlgorithmEd25519, TransparencySTHPrefix, checkSTHFresh, signSTH, validateLogEntry, validateSTH, verifySTH, } from "./sign.js";
12
+ export { Log } from "./log.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transparency/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAQL,cAAc,EACd,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,yBAAyB,EACzB,QAAQ,EACR,WAAW,EACX,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGL,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,EACb,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,SAAS,GACV,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAkB,GAAG,EAAE,MAAM,UAAU,CAAC"}