@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,7 @@
1
+ /**
2
+ * Extensions layer per EXTENSIONS.md.
3
+ *
4
+ * @module
5
+ */
6
+ export { KeyError, MaxKeyLength, NamespacePrefixCore, Registry, SizeError, UnsupportedError, maxBytesFor, validate, validateKey, validateSize, } from "./limits.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Extension validation per EXTENSIONS.md §2-§4.
3
+ *
4
+ * Each extension entry on the wire conforms to:
5
+ *
6
+ * ```json
7
+ * { "required": false, "data": { ... } }
8
+ * ```
9
+ *
10
+ * Per-layer byte-size ceilings (§4) are enforced before signature
11
+ * verification — an over-large `extensions` map MUST be rejected
12
+ * outright, regardless of any signature it might carry.
13
+ *
14
+ * Required extensions a recipient does not understand MUST be
15
+ * rejected per §3, regardless of namespace. The semp.dev/ namespace
16
+ * is reserved for spec-defined keys; vendor.* and x-* keys are at
17
+ * the operator's own risk but are subject to the same
18
+ * required-must-be-understood rule.
19
+ *
20
+ * @module
21
+ */
22
+ /** Layers an `extensions` object can attach to. */
23
+ export type Layer = "postmark" | "seal" | "brief" | "enclosure";
24
+ /** A single extension entry on the wire. */
25
+ export interface Entry {
26
+ required: boolean;
27
+ data: unknown;
28
+ }
29
+ /** Wire-level container: keys are namespaced extension identifiers. */
30
+ export type Map = Record<string, Entry>;
31
+ /** Per-layer byte-size ceiling per §4.1. */
32
+ export declare function maxBytesFor(layer: Layer): number;
33
+ /** Reserved namespace prefix for spec-defined extension keys. */
34
+ export declare const NamespacePrefixCore = "semp.dev/";
35
+ /** A registered extension. */
36
+ export interface RegistryEntry {
37
+ identifier: string;
38
+ layers: Layer[];
39
+ }
40
+ /**
41
+ * Registry of known extensions an implementation supports. Used by
42
+ * {@link validate} to decide whether a required extension is
43
+ * understood (registered) or unknown (rejected).
44
+ */
45
+ export declare class Registry {
46
+ private readonly entries;
47
+ register(entry: RegistryEntry): void;
48
+ lookup(identifier: string): RegistryEntry | undefined;
49
+ }
50
+ /** Error thrown when a required extension is not registered. */
51
+ export declare class UnsupportedError extends Error {
52
+ readonly key: string;
53
+ readonly layer: Layer;
54
+ readonly reasonCode: "extension_unsupported";
55
+ constructor(key: string, layer: Layer);
56
+ }
57
+ /** Error thrown when the serialized map exceeds the layer's ceiling. */
58
+ export declare class SizeError extends Error {
59
+ readonly layer: Layer;
60
+ readonly size: number;
61
+ readonly limit: number;
62
+ readonly reasonCode: "extension_size_exceeded";
63
+ constructor(layer: Layer, size: number, limit: number);
64
+ }
65
+ /** Error thrown when an extension key fails {@link validateKey}. */
66
+ export declare class KeyError extends Error {
67
+ readonly key: string;
68
+ readonly layer: Layer;
69
+ constructor(key: string, layer: Layer, reason: string);
70
+ }
71
+ /** Maximum byte length of an extension key (the namespaced identifier). */
72
+ export declare const MaxKeyLength = 128;
73
+ /**
74
+ * Validate an extension key per EXTENSIONS.md §2.2: ASCII only,
75
+ * non-empty, MaxKeyLength cap, must contain a `/` after a vendor
76
+ * namespace OR start with `x-` for experimental.
77
+ */
78
+ export declare function validateKey(key: string): Error | null;
79
+ /**
80
+ * Validate an extensions map at a specific layer. Returns null on
81
+ * accept; an Error on first reject.
82
+ *
83
+ * Rejects:
84
+ * - Malformed key shape ({@link KeyError})
85
+ * - Required extension not in registry, regardless of namespace
86
+ * ({@link UnsupportedError})
87
+ * - Required extension registered but for a different layer
88
+ * ({@link UnsupportedError})
89
+ * - Total serialized size over the layer's ceiling
90
+ * ({@link SizeError})
91
+ *
92
+ * Non-required (`required: false`) extensions are passed through
93
+ * unconditionally — the receiver is free to ignore them.
94
+ */
95
+ export declare function validate(registry: Registry | null, layer: Layer, m: Map | null | undefined): Error | null;
96
+ /**
97
+ * Validate the serialized byte length of an extensions map against
98
+ * the layer ceiling. Empty / missing maps pass through.
99
+ */
100
+ export declare function validateSize(layer: Layer, m: Map | null | undefined): Error | null;
101
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/extensions/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,mDAAmD;AACnD,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhE,4CAA4C;AAC5C,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAExC,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAWhD;AAED,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAEvE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIpC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;CAGtD;AAED,gEAAgE;AAChE,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAG,uBAAuB,CAAU;gBAC3C,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAOtC;AAED,wEAAwE;AACxE,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAG,yBAAyB,CAAU;gBAC7C,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAQtD;AAED,oEAAoE;AACpE,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBACV,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;CAKtD;AAED,2EAA2E;AAC3E,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAiBrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,GACxB,KAAK,GAAG,IAAI,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,CAelF"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Extension validation per EXTENSIONS.md §2-§4.
3
+ *
4
+ * Each extension entry on the wire conforms to:
5
+ *
6
+ * ```json
7
+ * { "required": false, "data": { ... } }
8
+ * ```
9
+ *
10
+ * Per-layer byte-size ceilings (§4) are enforced before signature
11
+ * verification — an over-large `extensions` map MUST be rejected
12
+ * outright, regardless of any signature it might carry.
13
+ *
14
+ * Required extensions a recipient does not understand MUST be
15
+ * rejected per §3, regardless of namespace. The semp.dev/ namespace
16
+ * is reserved for spec-defined keys; vendor.* and x-* keys are at
17
+ * the operator's own risk but are subject to the same
18
+ * required-must-be-understood rule.
19
+ *
20
+ * @module
21
+ */
22
+ /** Per-layer byte-size ceiling per §4.1. */
23
+ export function maxBytesFor(layer) {
24
+ switch (layer) {
25
+ case "postmark":
26
+ return 4096;
27
+ case "seal":
28
+ return 4096;
29
+ case "brief":
30
+ return 16_384;
31
+ case "enclosure":
32
+ return 65_536;
33
+ }
34
+ }
35
+ /** Reserved namespace prefix for spec-defined extension keys. */
36
+ export const NamespacePrefixCore = "semp.dev/";
37
+ /**
38
+ * Registry of known extensions an implementation supports. Used by
39
+ * {@link validate} to decide whether a required extension is
40
+ * understood (registered) or unknown (rejected).
41
+ */
42
+ export class Registry {
43
+ entries = new globalThis.Map();
44
+ register(entry) {
45
+ this.entries.set(entry.identifier, entry);
46
+ }
47
+ lookup(identifier) {
48
+ return this.entries.get(identifier);
49
+ }
50
+ }
51
+ /** Error thrown when a required extension is not registered. */
52
+ export class UnsupportedError extends Error {
53
+ key;
54
+ layer;
55
+ reasonCode = "extension_unsupported";
56
+ constructor(key, layer) {
57
+ super(`extensions: ${layer} layer required extension "${key}" is not supported`);
58
+ this.key = key;
59
+ this.layer = layer;
60
+ }
61
+ }
62
+ /** Error thrown when the serialized map exceeds the layer's ceiling. */
63
+ export class SizeError extends Error {
64
+ layer;
65
+ size;
66
+ limit;
67
+ reasonCode = "extension_size_exceeded";
68
+ constructor(layer, size, limit) {
69
+ super(`extensions: ${layer} layer extensions object ${size} bytes exceeds limit ${limit}`);
70
+ this.layer = layer;
71
+ this.size = size;
72
+ this.limit = limit;
73
+ }
74
+ }
75
+ /** Error thrown when an extension key fails {@link validateKey}. */
76
+ export class KeyError extends Error {
77
+ key;
78
+ layer;
79
+ constructor(key, layer, reason) {
80
+ super(`extensions: ${layer} layer key "${key}": ${reason}`);
81
+ this.key = key;
82
+ this.layer = layer;
83
+ }
84
+ }
85
+ /** Maximum byte length of an extension key (the namespaced identifier). */
86
+ export const MaxKeyLength = 128;
87
+ /**
88
+ * Validate an extension key per EXTENSIONS.md §2.2: ASCII only,
89
+ * non-empty, MaxKeyLength cap, must contain a `/` after a vendor
90
+ * namespace OR start with `x-` for experimental.
91
+ */
92
+ export function validateKey(key) {
93
+ if (key.length === 0) {
94
+ return new Error("empty key");
95
+ }
96
+ if (key.length > MaxKeyLength) {
97
+ return new Error(`key length ${key.length} exceeds ${MaxKeyLength}`);
98
+ }
99
+ for (let i = 0; i < key.length; i++) {
100
+ const code = key.charCodeAt(i);
101
+ if (code < 0x21 || code > 0x7e) {
102
+ return new Error(`non-printable-ASCII byte at offset ${i}`);
103
+ }
104
+ }
105
+ if (!key.startsWith("x-") && !key.includes("/")) {
106
+ return new Error("expected `<vendor>/<name>` or `x-<name>`");
107
+ }
108
+ return null;
109
+ }
110
+ /**
111
+ * Validate an extensions map at a specific layer. Returns null on
112
+ * accept; an Error on first reject.
113
+ *
114
+ * Rejects:
115
+ * - Malformed key shape ({@link KeyError})
116
+ * - Required extension not in registry, regardless of namespace
117
+ * ({@link UnsupportedError})
118
+ * - Required extension registered but for a different layer
119
+ * ({@link UnsupportedError})
120
+ * - Total serialized size over the layer's ceiling
121
+ * ({@link SizeError})
122
+ *
123
+ * Non-required (`required: false`) extensions are passed through
124
+ * unconditionally — the receiver is free to ignore them.
125
+ */
126
+ export function validate(registry, layer, m) {
127
+ if (m === null || m === undefined || Object.keys(m).length === 0) {
128
+ return null;
129
+ }
130
+ const keys = Object.keys(m).sort();
131
+ for (const k of keys) {
132
+ const keyErr = validateKey(k);
133
+ if (keyErr !== null) {
134
+ return new KeyError(k, layer, keyErr.message);
135
+ }
136
+ const entry = m[k];
137
+ if (entry === undefined || !entry.required) {
138
+ continue;
139
+ }
140
+ if (registry === null) {
141
+ // No registry == no extension knowledge. A required extension
142
+ // is definitionally unsupported.
143
+ return new UnsupportedError(k, layer);
144
+ }
145
+ const reg = registry.lookup(k);
146
+ if (reg === undefined) {
147
+ return new UnsupportedError(k, layer);
148
+ }
149
+ if (!reg.layers.includes(layer)) {
150
+ return new UnsupportedError(k, layer);
151
+ }
152
+ }
153
+ return validateSize(layer, m);
154
+ }
155
+ /**
156
+ * Validate the serialized byte length of an extensions map against
157
+ * the layer ceiling. Empty / missing maps pass through.
158
+ */
159
+ export function validateSize(layer, m) {
160
+ if (m === null || m === undefined || Object.keys(m).length === 0) {
161
+ return null;
162
+ }
163
+ const limit = maxBytesFor(layer);
164
+ // Count UTF-8 byte length of the JSON serialization. The exact
165
+ // canonical bytes are determined later by the seal computation;
166
+ // for size-limit purposes plain JSON.stringify is within the same
167
+ // order of magnitude (whitespace differences only).
168
+ const serialized = JSON.stringify(m) ?? "";
169
+ const bytes = new TextEncoder().encode(serialized).byteLength;
170
+ if (bytes > limit) {
171
+ return new SizeError(layer, bytes, limit);
172
+ }
173
+ return null;
174
+ }
175
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/extensions/limits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Handshake abort + rejection helpers per HANDSHAKE.md §2.2a.6 + §4.
3
+ *
4
+ * - {@link ChallengeInvalidError}: error type a client raises when a
5
+ * received challenge violates §2.2a.3 binding rules. Drivers catch
6
+ * it and emit a `challenge_invalid` rejection.
7
+ * - {@link buildClientRejection}: produce an unsigned client-side
8
+ * rejection message (party=client). The client has not authenticated
9
+ * to the server at this point, so the wire form has no
10
+ * `server_signature` and uses canonical bytes directly.
11
+ * - {@link isResumptionFailed}: classifies a `HandshakeRejectedError`
12
+ * as a recoverable resumption failure that callers should fall back
13
+ * from to a full handshake.
14
+ *
15
+ * @module
16
+ */
17
+ /**
18
+ * Error a client raises when a received challenge violates §2.2a.3
19
+ * binding rules. The handshake driver catches this, sends a
20
+ * `challenge_invalid` rejection, then re-raises to the caller.
21
+ */
22
+ export declare class ChallengeInvalidError extends Error {
23
+ readonly name = "ChallengeInvalidError";
24
+ /** Detail emitted verbatim in the abort message's `reason` field. */
25
+ readonly detail: string;
26
+ constructor(detail: string);
27
+ }
28
+ /** Type guard for {@link ChallengeInvalidError}. */
29
+ export declare function isChallengeInvalid(err: unknown): err is ChallengeInvalidError;
30
+ /**
31
+ * Build an unsigned client-initiator abort message per §2.2a.6.
32
+ *
33
+ * The wire shape is `party: "client"` with no `server_signature` —
34
+ * the initiator has not authenticated to the server at this point
35
+ * and MUST NOT do so as part of an abort.
36
+ *
37
+ * Returns canonical UTF-8 JSON bytes ready to send on the handshake
38
+ * stream. The caller closes the transport after sending.
39
+ */
40
+ export declare function buildClientRejection(reasonCode: string, reason?: string): Uint8Array;
41
+ /**
42
+ * Report whether `err` is a {@link HandshakeRejectedError} whose
43
+ * reason code indicates the resume attempt failed in a way the
44
+ * client should retry as a full handshake. Per HANDSHAKE.md §2.8:
45
+ * if the server has lost session state or the ticket has expired,
46
+ * the client falls back to a fresh handshake.
47
+ */
48
+ export declare function isResumptionFailed(err: unknown): boolean;
49
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/handshake/abort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;IACjD,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;CAI3B;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,qBAAqB,CAE7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,UAAU,CAcZ;AASD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKxD"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Handshake abort + rejection helpers per HANDSHAKE.md §2.2a.6 + §4.
3
+ *
4
+ * - {@link ChallengeInvalidError}: error type a client raises when a
5
+ * received challenge violates §2.2a.3 binding rules. Drivers catch
6
+ * it and emit a `challenge_invalid` rejection.
7
+ * - {@link buildClientRejection}: produce an unsigned client-side
8
+ * rejection message (party=client). The client has not authenticated
9
+ * to the server at this point, so the wire form has no
10
+ * `server_signature` and uses canonical bytes directly.
11
+ * - {@link isResumptionFailed}: classifies a `HandshakeRejectedError`
12
+ * as a recoverable resumption failure that callers should fall back
13
+ * from to a full handshake.
14
+ *
15
+ * @module
16
+ */
17
+ import { marshal as canonicalMarshal } from "../canonical/index.js";
18
+ import { HandshakeRejectedError } from "./driver.js";
19
+ import { HandshakeVersion } from "./messages.js";
20
+ /**
21
+ * Error a client raises when a received challenge violates §2.2a.3
22
+ * binding rules. The handshake driver catches this, sends a
23
+ * `challenge_invalid` rejection, then re-raises to the caller.
24
+ */
25
+ export class ChallengeInvalidError extends Error {
26
+ name = "ChallengeInvalidError";
27
+ /** Detail emitted verbatim in the abort message's `reason` field. */
28
+ detail;
29
+ constructor(detail) {
30
+ super(`handshake: challenge_invalid: ${detail}`);
31
+ this.detail = detail;
32
+ }
33
+ }
34
+ /** Type guard for {@link ChallengeInvalidError}. */
35
+ export function isChallengeInvalid(err) {
36
+ return err instanceof ChallengeInvalidError;
37
+ }
38
+ /**
39
+ * Build an unsigned client-initiator abort message per §2.2a.6.
40
+ *
41
+ * The wire shape is `party: "client"` with no `server_signature` —
42
+ * the initiator has not authenticated to the server at this point
43
+ * and MUST NOT do so as part of an abort.
44
+ *
45
+ * Returns canonical UTF-8 JSON bytes ready to send on the handshake
46
+ * stream. The caller closes the transport after sending.
47
+ */
48
+ export function buildClientRejection(reasonCode, reason) {
49
+ if (reasonCode === "") {
50
+ throw new Error("handshake: empty reason_code in client rejection");
51
+ }
52
+ const msg = {
53
+ type: "SEMP_HANDSHAKE",
54
+ step: "rejected",
55
+ party: "client",
56
+ version: HandshakeVersion,
57
+ reason_code: reasonCode,
58
+ reason: reason ?? "",
59
+ extensions: {},
60
+ };
61
+ return canonicalMarshal(msg);
62
+ }
63
+ /** Reason codes per HANDSHAKE.md §2.8 that the spec treats as recoverable resumption failures. */
64
+ const RECOVERABLE_RESUMPTION_REASONS = new Set([
65
+ "resumption_failed",
66
+ "session_expired",
67
+ "no_session",
68
+ ]);
69
+ /**
70
+ * Report whether `err` is a {@link HandshakeRejectedError} whose
71
+ * reason code indicates the resume attempt failed in a way the
72
+ * client should retry as a full handshake. Per HANDSHAKE.md §2.8:
73
+ * if the server has lost session state or the ticket has expired,
74
+ * the client falls back to a fresh handshake.
75
+ */
76
+ export function isResumptionFailed(err) {
77
+ if (!(err instanceof HandshakeRejectedError)) {
78
+ return false;
79
+ }
80
+ return RECOVERABLE_RESUMPTION_REASONS.has(err.reasonCode);
81
+ }
82
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/handshake/abort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC5B,IAAI,GAAG,uBAAuB,CAAC;IACjD,qEAAqE;IAC5D,MAAM,CAAS;IAExB,YAAY,MAAc;QACxB,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,oDAAoD;AACpD,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,GAAG,YAAY,qBAAqB,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,MAAe;IAEf,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,GAAG,GAA4B;QACnC,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,MAAM,IAAI,EAAE;QACpB,UAAU,EAAE,EAAE;KACf,CAAC;IACF,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,kGAAkG;AAClG,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CAAC;IAClE,mBAAmB;IACnB,iBAAiB;IACjB,YAAY;CACb,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAC,CAAC,GAAG,YAAY,sBAAsB,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,8BAA8B,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Capability negotiation helpers per HANDSHAKE.md §6.4 + SESSION.md §4.3.
3
+ *
4
+ * `negotiateCapabilities` returns the agreed session parameters from
5
+ * the client's offered capabilities and the server's accepted set,
6
+ * preferring the post-quantum hybrid suite when both peers support
7
+ * it.
8
+ *
9
+ * Selection rules:
10
+ *
11
+ * - Encryption algorithm: walk the spec preference order (PQ hybrid
12
+ * first, then baseline). The strongest mutually supported and
13
+ * library-implemented suite wins.
14
+ * - Extensions: the intersection of `offered.extensions` and
15
+ * `accepted.extensions`, in the order they appear in `offered`.
16
+ * - max_envelope_size / max_batch_size: the smaller of the two
17
+ * when both sides advertise; the side that advertises when only
18
+ * one does; absent when neither does.
19
+ *
20
+ * @module
21
+ */
22
+ import type { Capabilities, Negotiated } from "./messages.js";
23
+ /**
24
+ * Suite preference order from strongest to weakest. Library MUST
25
+ * walk this list and return the first suite that appears in both
26
+ * `offered` AND `accepted` AND is implemented locally.
27
+ *
28
+ * The `pq-kyber768-x25519` hybrid is RECOMMENDED for new
29
+ * deployments per SESSION.md §4; the baseline
30
+ * `x25519-chacha20-poly1305` is mandatory for interoperability
31
+ * per ENVELOPE.md §7.3.2.
32
+ */
33
+ export declare const SuitePreferenceOrder: readonly string[];
34
+ /** Library-implemented suite identifiers. */
35
+ export declare const ImplementedSuites: readonly string[];
36
+ /** Default capabilities a baseline conformant client advertises. */
37
+ export declare function defaultClientCapabilities(): Capabilities;
38
+ /** Default capabilities a baseline conformant server accepts. */
39
+ export declare function defaultServerCapabilities(): Capabilities;
40
+ /**
41
+ * Compute the negotiated session parameters per §6.4. Throws when
42
+ * no encryption suite is mutually supported (caller surfaces this
43
+ * as a `policy_forbidden` rejection).
44
+ */
45
+ export declare function negotiateCapabilities(offered: Capabilities, accepted: Capabilities): Negotiated;
46
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/handshake/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAGjD,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAG9C,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,yBAAyB,IAAI,YAAY,CAQxD;AAED,iEAAiE;AACjE,wBAAgB,yBAAyB,IAAI,YAAY,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,YAAY,GACrB,UAAU,CA0CZ"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Capability negotiation helpers per HANDSHAKE.md §6.4 + SESSION.md §4.3.
3
+ *
4
+ * `negotiateCapabilities` returns the agreed session parameters from
5
+ * the client's offered capabilities and the server's accepted set,
6
+ * preferring the post-quantum hybrid suite when both peers support
7
+ * it.
8
+ *
9
+ * Selection rules:
10
+ *
11
+ * - Encryption algorithm: walk the spec preference order (PQ hybrid
12
+ * first, then baseline). The strongest mutually supported and
13
+ * library-implemented suite wins.
14
+ * - Extensions: the intersection of `offered.extensions` and
15
+ * `accepted.extensions`, in the order they appear in `offered`.
16
+ * - max_envelope_size / max_batch_size: the smaller of the two
17
+ * when both sides advertise; the side that advertises when only
18
+ * one does; absent when neither does.
19
+ *
20
+ * @module
21
+ */
22
+ /**
23
+ * Suite preference order from strongest to weakest. Library MUST
24
+ * walk this list and return the first suite that appears in both
25
+ * `offered` AND `accepted` AND is implemented locally.
26
+ *
27
+ * The `pq-kyber768-x25519` hybrid is RECOMMENDED for new
28
+ * deployments per SESSION.md §4; the baseline
29
+ * `x25519-chacha20-poly1305` is mandatory for interoperability
30
+ * per ENVELOPE.md §7.3.2.
31
+ */
32
+ export const SuitePreferenceOrder = [
33
+ "pq-kyber768-x25519",
34
+ "x25519-chacha20-poly1305",
35
+ ];
36
+ /** Library-implemented suite identifiers. */
37
+ export const ImplementedSuites = [
38
+ "pq-kyber768-x25519",
39
+ "x25519-chacha20-poly1305",
40
+ ];
41
+ /** Default capabilities a baseline conformant client advertises. */
42
+ export function defaultClientCapabilities() {
43
+ return {
44
+ encryption_algorithms: [
45
+ "pq-kyber768-x25519",
46
+ "x25519-chacha20-poly1305",
47
+ ],
48
+ extensions: [],
49
+ };
50
+ }
51
+ /** Default capabilities a baseline conformant server accepts. */
52
+ export function defaultServerCapabilities() {
53
+ return {
54
+ encryption_algorithms: [
55
+ "pq-kyber768-x25519",
56
+ "x25519-chacha20-poly1305",
57
+ ],
58
+ extensions: [],
59
+ };
60
+ }
61
+ /**
62
+ * Compute the negotiated session parameters per §6.4. Throws when
63
+ * no encryption suite is mutually supported (caller surfaces this
64
+ * as a `policy_forbidden` rejection).
65
+ */
66
+ export function negotiateCapabilities(offered, accepted) {
67
+ const offeredSet = new Set(offered.encryption_algorithms);
68
+ const acceptedSet = new Set(accepted.encryption_algorithms);
69
+ const implementedSet = new Set(ImplementedSuites);
70
+ let chosen = null;
71
+ for (const id of SuitePreferenceOrder) {
72
+ if (offeredSet.has(id) && acceptedSet.has(id) && implementedSet.has(id)) {
73
+ chosen = id;
74
+ break;
75
+ }
76
+ }
77
+ if (chosen === null) {
78
+ throw new Error("handshake: no mutually supported encryption suite");
79
+ }
80
+ const negotiatedExtensions = intersectStrings(offered.extensions, accepted.extensions);
81
+ // max_envelope_size: the smaller of the two when both sides advertise.
82
+ let maxEnvelope;
83
+ const oMax = offered.max_envelope_size;
84
+ const aMax = accepted.max_envelope_size;
85
+ if (typeof oMax === "number" && oMax > 0) {
86
+ maxEnvelope = oMax;
87
+ }
88
+ if (typeof aMax === "number" && aMax > 0) {
89
+ maxEnvelope = maxEnvelope === undefined ? aMax : Math.min(maxEnvelope, aMax);
90
+ }
91
+ const out = {
92
+ encryption_algorithm: chosen,
93
+ extensions: negotiatedExtensions,
94
+ };
95
+ if (maxEnvelope !== undefined) {
96
+ out.max_envelope_size = maxEnvelope;
97
+ }
98
+ return out;
99
+ }
100
+ /** Intersection of `a` and `b`, ordered by `a`. */
101
+ function intersectStrings(a, b) {
102
+ if (a.length === 0 || b.length === 0) {
103
+ return [];
104
+ }
105
+ const set = new Set(b);
106
+ const out = [];
107
+ for (const v of a) {
108
+ if (set.has(v)) {
109
+ out.push(v);
110
+ }
111
+ }
112
+ return out;
113
+ }
114
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/handshake/capabilities.ts"],"names":[],"mappings":"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"}