@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,65 @@
1
+ /**
2
+ * Sequential four-signature compose / verify per MIGRATION.md §3.3.
3
+ *
4
+ * The migration record carries a chain of signatures:
5
+ *
6
+ * 1. old_identity_signature
7
+ * 2. new_identity_signature
8
+ * 3. new_domain_signature
9
+ * 4. old_domain_signature (cooperative only)
10
+ *
11
+ * Each signature commits to all prior signatures' final values so
12
+ * walking them in order detects after-the-fact tampering with an
13
+ * earlier signing party's commitment.
14
+ *
15
+ * @module
16
+ */
17
+ import { type MigrationRecord } from "./types.js";
18
+ /**
19
+ * Pre-populate algorithm + key_id on every signature slot so the
20
+ * chained-signature canonical bytes are stable across passes per
21
+ * §3.3. Each later signature commits to prior slots' final state
22
+ * (including algorithm and key_id).
23
+ *
24
+ * In cooperative mode this allocates the `old_domain_signature`
25
+ * slot with the old provider's key id populated up front; the old
26
+ * provider populates only the `value` field at AcceptSubmission
27
+ * time. In unilateral mode the slot stays null.
28
+ */
29
+ export declare function prepareSignatures(r: MigrationRecord, oldIdentityKeyId: string, newIdentityKeyId: string, newDomainKeyId: string, oldDomainKeyId?: string): void;
30
+ /** Sign signing-pass 1 (old identity). */
31
+ export declare function signOldIdentity(r: MigrationRecord, oldIdentityPriv: Uint8Array, oldIdentityKeyId: string): string;
32
+ /** Sign signing-pass 2 (new identity). */
33
+ export declare function signNewIdentity(r: MigrationRecord, newIdentityPriv: Uint8Array, newIdentityKeyId: string): string;
34
+ /** Sign signing-pass 3 (new domain). */
35
+ export declare function signNewDomain(r: MigrationRecord, newDomainPriv: Uint8Array, newDomainKeyId: string): string;
36
+ /** Sign signing-pass 4 (old domain, cooperative only). */
37
+ export declare function signOldDomain(r: MigrationRecord, oldDomainPriv: Uint8Array, oldDomainKeyId: string): string;
38
+ /**
39
+ * Verify a single signature pass (zero-indexed: 0=old identity,
40
+ * 1=new identity, 2=new domain, 3=old domain). Used by orchestration
41
+ * code that validates partial submissions before the chain is
42
+ * complete.
43
+ */
44
+ export declare function verifyMigrationPass(r: MigrationRecord, passIdx: number, pub: Uint8Array): boolean;
45
+ /**
46
+ * Verify all signatures in §3.3 order: old identity → new identity
47
+ * → new domain → old domain. Returns true on full success.
48
+ *
49
+ * `oldDomainPub` is consulted only in cooperative mode; pass any
50
+ * value (including a zero-length array) for unilateral records.
51
+ */
52
+ export declare function verifyMigrationRecord(r: MigrationRecord, oldIdentityPub: Uint8Array, newIdentityPub: Uint8Array, newDomainPub: Uint8Array, oldDomainPub: Uint8Array | null): boolean;
53
+ /** Structural validation per §3.2. Throws on the first violation. */
54
+ export declare function validateMigrationRecord(r: MigrationRecord): void;
55
+ /**
56
+ * Enforce the §3.3 rule: `migrated_at` MUST be at or after the old
57
+ * identity key's `created` timestamp, and MUST NOT be in the future
58
+ * relative to `now` beyond ordinary clock-skew tolerance.
59
+ *
60
+ * `oldKeyCreated` is the `created` timestamp of the old identity
61
+ * key record (resolved from the old key endpoint).
62
+ * `clockSkewMs` defaults to 5 minutes.
63
+ */
64
+ export declare function checkMigratedAtBound(r: MigrationRecord, oldKeyCreated: Date | null, now: Date, clockSkewMs?: number): void;
65
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/migration/sign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,EAEL,KAAK,eAAe,EAOrB,MAAM,YAAY,CAAC;AAWpB;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,eAAe,EAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CA8BN;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAC7B,CAAC,EAAE,eAAe,EAClB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAER;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAC7B,CAAC,EAAE,eAAe,EAClB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAC3B,CAAC,EAAE,eAAe,EAClB,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,MAAM,GACrB,MAAM,CAUR;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAC3B,CAAC,EAAE,eAAe,EAClB,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,MAAM,GACrB,MAAM,CAqBR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,eAAe,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,UAAU,GACd,OAAO,CAMT;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,eAAe,EAClB,cAAc,EAAE,UAAU,EAC1B,cAAc,EAAE,UAAU,EAC1B,YAAY,EAAE,UAAU,EACxB,YAAY,EAAE,UAAU,GAAG,IAAI,GAC9B,OAAO,CAyBT;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CA2EhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,eAAe,EAClB,aAAa,EAAE,IAAI,GAAG,IAAI,EAC1B,GAAG,EAAE,IAAI,EACT,WAAW,SAAgB,GAC1B,IAAI,CAeN"}
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Sequential four-signature compose / verify per MIGRATION.md §3.3.
3
+ *
4
+ * The migration record carries a chain of signatures:
5
+ *
6
+ * 1. old_identity_signature
7
+ * 2. new_identity_signature
8
+ * 3. new_domain_signature
9
+ * 4. old_domain_signature (cooperative only)
10
+ *
11
+ * Each signature commits to all prior signatures' final values so
12
+ * walking them in order detects after-the-fact tampering with an
13
+ * earlier signing party's commitment.
14
+ *
15
+ * @module
16
+ */
17
+ import { marshal as canonicalMarshal } from "../canonical/index.js";
18
+ import { sign as ed25519Sign, verify as ed25519Verify, } from "../keys/index.js";
19
+ import { MaxForwardingWindowMs, MigrationPrefix, MigrationRecordType, MinForwardingWindowMs, SignatureAlgorithmEd25519, } from "./types.js";
20
+ /** Order of signature slots per §3.3. */
21
+ const SIGNATURE_FIELDS = [
22
+ "old_identity_signature",
23
+ "new_identity_signature",
24
+ "new_domain_signature",
25
+ "old_domain_signature",
26
+ ];
27
+ /**
28
+ * Pre-populate algorithm + key_id on every signature slot so the
29
+ * chained-signature canonical bytes are stable across passes per
30
+ * §3.3. Each later signature commits to prior slots' final state
31
+ * (including algorithm and key_id).
32
+ *
33
+ * In cooperative mode this allocates the `old_domain_signature`
34
+ * slot with the old provider's key id populated up front; the old
35
+ * provider populates only the `value` field at AcceptSubmission
36
+ * time. In unilateral mode the slot stays null.
37
+ */
38
+ export function prepareSignatures(r, oldIdentityKeyId, newIdentityKeyId, newDomainKeyId, oldDomainKeyId) {
39
+ r.old_identity_signature = {
40
+ algorithm: SignatureAlgorithmEd25519,
41
+ key_id: oldIdentityKeyId,
42
+ value: "",
43
+ };
44
+ r.new_identity_signature = {
45
+ algorithm: SignatureAlgorithmEd25519,
46
+ key_id: newIdentityKeyId,
47
+ value: "",
48
+ };
49
+ r.new_domain_signature = {
50
+ algorithm: SignatureAlgorithmEd25519,
51
+ key_id: newDomainKeyId,
52
+ value: "",
53
+ };
54
+ if (r.mode === "cooperative") {
55
+ if (oldDomainKeyId === undefined || oldDomainKeyId === "") {
56
+ throw new Error("migration: cooperative mode requires oldDomainKeyId");
57
+ }
58
+ r.old_domain_signature = {
59
+ algorithm: SignatureAlgorithmEd25519,
60
+ key_id: oldDomainKeyId,
61
+ value: "",
62
+ };
63
+ }
64
+ else {
65
+ r.old_domain_signature = null;
66
+ }
67
+ }
68
+ /** Sign signing-pass 1 (old identity). */
69
+ export function signOldIdentity(r, oldIdentityPriv, oldIdentityKeyId) {
70
+ return signSlot(r, "old_identity_signature", oldIdentityPriv, oldIdentityKeyId);
71
+ }
72
+ /** Sign signing-pass 2 (new identity). */
73
+ export function signNewIdentity(r, newIdentityPriv, newIdentityKeyId) {
74
+ if (r.old_identity_signature.value === "") {
75
+ throw new Error("migration: signOldIdentity MUST run before signNewIdentity");
76
+ }
77
+ return signSlot(r, "new_identity_signature", newIdentityPriv, newIdentityKeyId);
78
+ }
79
+ /** Sign signing-pass 3 (new domain). */
80
+ export function signNewDomain(r, newDomainPriv, newDomainKeyId) {
81
+ if (r.old_identity_signature.value === "" ||
82
+ r.new_identity_signature.value === "") {
83
+ throw new Error("migration: signNewDomain requires old_identity and new_identity signatures");
84
+ }
85
+ return signSlot(r, "new_domain_signature", newDomainPriv, newDomainKeyId);
86
+ }
87
+ /** Sign signing-pass 4 (old domain, cooperative only). */
88
+ export function signOldDomain(r, oldDomainPriv, oldDomainKeyId) {
89
+ if (r.mode !== "cooperative") {
90
+ throw new Error(`migration: signOldDomain only valid for mode=cooperative (got ${JSON.stringify(r.mode)})`);
91
+ }
92
+ if (r.old_domain_signature === null) {
93
+ throw new Error("migration: prepareSignatures MUST run before signOldDomain (cooperative mode)");
94
+ }
95
+ if (r.old_identity_signature.value === "" ||
96
+ r.new_identity_signature.value === "" ||
97
+ r.new_domain_signature.value === "") {
98
+ throw new Error("migration: signOldDomain requires all three prior signatures");
99
+ }
100
+ return signSlot(r, "old_domain_signature", oldDomainPriv, oldDomainKeyId);
101
+ }
102
+ /**
103
+ * Verify a single signature pass (zero-indexed: 0=old identity,
104
+ * 1=new identity, 2=new domain, 3=old domain). Used by orchestration
105
+ * code that validates partial submissions before the chain is
106
+ * complete.
107
+ */
108
+ export function verifyMigrationPass(r, passIdx, pub) {
109
+ if (!Number.isInteger(passIdx) || passIdx < 0 || passIdx >= SIGNATURE_FIELDS.length) {
110
+ return false;
111
+ }
112
+ const field = SIGNATURE_FIELDS[passIdx];
113
+ return verifySlot(r, field, passIdx, pub);
114
+ }
115
+ /**
116
+ * Verify all signatures in §3.3 order: old identity → new identity
117
+ * → new domain → old domain. Returns true on full success.
118
+ *
119
+ * `oldDomainPub` is consulted only in cooperative mode; pass any
120
+ * value (including a zero-length array) for unilateral records.
121
+ */
122
+ export function verifyMigrationRecord(r, oldIdentityPub, newIdentityPub, newDomainPub, oldDomainPub) {
123
+ validateMigrationRecord(r);
124
+ if (!verifySlot(r, "old_identity_signature", 0, oldIdentityPub)) {
125
+ return false;
126
+ }
127
+ if (!verifySlot(r, "new_identity_signature", 1, newIdentityPub)) {
128
+ return false;
129
+ }
130
+ if (!verifySlot(r, "new_domain_signature", 2, newDomainPub)) {
131
+ return false;
132
+ }
133
+ if (r.mode === "cooperative") {
134
+ if (r.old_domain_signature === null) {
135
+ return false;
136
+ }
137
+ if (oldDomainPub === null || oldDomainPub.length === 0) {
138
+ return false;
139
+ }
140
+ if (!verifySlot(r, "old_domain_signature", 3, oldDomainPub)) {
141
+ return false;
142
+ }
143
+ }
144
+ else if (r.old_domain_signature !== null) {
145
+ return false;
146
+ }
147
+ return true;
148
+ }
149
+ /** Structural validation per §3.2. Throws on the first violation. */
150
+ export function validateMigrationRecord(r) {
151
+ if (r.type !== MigrationRecordType) {
152
+ throw new Error(`migration: type ${JSON.stringify(r.type)}, want ${MigrationRecordType}`);
153
+ }
154
+ for (const f of [
155
+ "version",
156
+ "record_id",
157
+ "old_address",
158
+ "new_address",
159
+ "old_identity_key_id",
160
+ "new_identity_key_id",
161
+ "new_identity_public_key",
162
+ "migrated_at",
163
+ ]) {
164
+ if (typeof r[f] !== "string" || r[f] === "") {
165
+ throw new Error(`migration: missing ${f}`);
166
+ }
167
+ }
168
+ const migratedMs = Date.parse(r.migrated_at);
169
+ if (Number.isNaN(migratedMs)) {
170
+ throw new Error("migration: migrated_at is not ISO 8601");
171
+ }
172
+ if (r.mode !== "cooperative" && r.mode !== "unilateral") {
173
+ throw new Error(`migration: mode ${JSON.stringify(r.mode)} is invalid`);
174
+ }
175
+ if (r.mode === "cooperative") {
176
+ if (typeof r.forwarding_window_until !== "string" || r.forwarding_window_until === "") {
177
+ throw new Error("migration: cooperative mode MUST set forwarding_window_until");
178
+ }
179
+ const untilMs = Date.parse(r.forwarding_window_until);
180
+ if (Number.isNaN(untilMs)) {
181
+ throw new Error("migration: forwarding_window_until is not ISO 8601");
182
+ }
183
+ const window = untilMs - migratedMs;
184
+ if (window < MinForwardingWindowMs) {
185
+ throw new Error(`migration: cooperative forwarding window ${window} below minimum ${MinForwardingWindowMs}`);
186
+ }
187
+ if (window > MaxForwardingWindowMs) {
188
+ throw new Error(`migration: cooperative forwarding window ${window} exceeds maximum ${MaxForwardingWindowMs}`);
189
+ }
190
+ }
191
+ for (const f of [
192
+ "old_identity_signature",
193
+ "new_identity_signature",
194
+ "new_domain_signature",
195
+ ]) {
196
+ const sig = r[f];
197
+ if (typeof sig?.algorithm !== "string" || sig.algorithm === "") {
198
+ throw new Error(`migration: ${f}.algorithm missing`);
199
+ }
200
+ if (typeof sig?.key_id !== "string" || sig.key_id === "") {
201
+ throw new Error(`migration: ${f}.key_id missing`);
202
+ }
203
+ if (typeof sig?.value !== "string") {
204
+ throw new Error(`migration: ${f}.value must be a string`);
205
+ }
206
+ }
207
+ if (r.mode === "cooperative") {
208
+ if (r.old_domain_signature === null) {
209
+ throw new Error("migration: cooperative record requires old_domain_signature");
210
+ }
211
+ if (typeof r.old_domain_signature.value !== "string") {
212
+ throw new Error("migration: old_domain_signature.value must be a string");
213
+ }
214
+ }
215
+ else if (r.old_domain_signature !== null) {
216
+ throw new Error("migration: unilateral record MUST NOT carry old_domain_signature");
217
+ }
218
+ }
219
+ /**
220
+ * Enforce the §3.3 rule: `migrated_at` MUST be at or after the old
221
+ * identity key's `created` timestamp, and MUST NOT be in the future
222
+ * relative to `now` beyond ordinary clock-skew tolerance.
223
+ *
224
+ * `oldKeyCreated` is the `created` timestamp of the old identity
225
+ * key record (resolved from the old key endpoint).
226
+ * `clockSkewMs` defaults to 5 minutes.
227
+ */
228
+ export function checkMigratedAtBound(r, oldKeyCreated, now, clockSkewMs = 5 * 60 * 1000) {
229
+ const migratedMs = Date.parse(r.migrated_at);
230
+ if (Number.isNaN(migratedMs)) {
231
+ throw new Error("migration: migrated_at is not ISO 8601");
232
+ }
233
+ if (oldKeyCreated !== null && migratedMs < oldKeyCreated.getTime()) {
234
+ throw new Error(`migration: migrated_at ${r.migrated_at} precedes old identity key created ${oldKeyCreated.toISOString()}`);
235
+ }
236
+ if (migratedMs > now.getTime() + clockSkewMs) {
237
+ throw new Error(`migration: migrated_at ${r.migrated_at} is in the future beyond clock-skew tolerance`);
238
+ }
239
+ }
240
+ // ---------------------------------------------------------------------------
241
+ // Internal helpers
242
+ function signSlot(r, field, priv, expectedKeyId) {
243
+ const slot = r[field];
244
+ if (slot === null) {
245
+ throw new Error(`migration: ${field} slot is null (call prepareSignatures)`);
246
+ }
247
+ if (slot.algorithm === "" || slot.key_id === "") {
248
+ throw new Error(`migration: ${field} requires algorithm + key_id pre-populated (call prepareSignatures)`);
249
+ }
250
+ if (slot.key_id !== expectedKeyId) {
251
+ throw new Error(`migration: ${field}.key_id ${JSON.stringify(slot.key_id)} does not match passed ${JSON.stringify(expectedKeyId)}`);
252
+ }
253
+ // Build a deep copy + blank from this slot onward.
254
+ const view = JSON.parse(JSON.stringify(r));
255
+ blankFromIndex(view, fieldIndex(field, r.mode));
256
+ const canonical = canonicalMarshal(view);
257
+ const signingInput = concat(new TextEncoder().encode(MigrationPrefix), canonical);
258
+ const sig = ed25519Sign(priv, signingInput);
259
+ const sigB64 = base64Encode(sig);
260
+ slot.value = sigB64;
261
+ return sigB64;
262
+ }
263
+ function verifySlot(r, field, passIdx, pub) {
264
+ const slot = r[field];
265
+ if (slot === null) {
266
+ return false;
267
+ }
268
+ if (slot.value === "") {
269
+ return false;
270
+ }
271
+ let sig;
272
+ try {
273
+ sig = base64Decode(slot.value);
274
+ }
275
+ catch {
276
+ return false;
277
+ }
278
+ // Recreate the signing-time canonical bytes: this slot blanked,
279
+ // every later slot also blanked (they hadn't been signed yet).
280
+ const view = JSON.parse(JSON.stringify(r));
281
+ blankFromIndex(view, passIdx);
282
+ const canonical = canonicalMarshal(view);
283
+ const signingInput = concat(new TextEncoder().encode(MigrationPrefix), canonical);
284
+ return ed25519Verify(pub, sig, signingInput);
285
+ }
286
+ function fieldIndex(field, mode) {
287
+ // Skip old_domain_signature in unilateral mode.
288
+ void mode;
289
+ return SIGNATURE_FIELDS.indexOf(field);
290
+ }
291
+ function blankFromIndex(view, fromIndex) {
292
+ for (let i = fromIndex; i < SIGNATURE_FIELDS.length; i++) {
293
+ const field = SIGNATURE_FIELDS[i] ?? "";
294
+ const slot = view[field];
295
+ if (slot === null || slot === undefined) {
296
+ continue;
297
+ }
298
+ if (typeof slot !== "object" || Array.isArray(slot)) {
299
+ continue;
300
+ }
301
+ slot.value = "";
302
+ }
303
+ }
304
+ function concat(a, b) {
305
+ const out = new Uint8Array(a.length + b.length);
306
+ out.set(a, 0);
307
+ out.set(b, a.length);
308
+ return out;
309
+ }
310
+ function base64Encode(b) {
311
+ if (typeof Buffer !== "undefined") {
312
+ return Buffer.from(b).toString("base64");
313
+ }
314
+ let bin = "";
315
+ for (let i = 0; i < b.length; i++) {
316
+ bin += String.fromCharCode(b[i] ?? 0);
317
+ }
318
+ return btoa(bin);
319
+ }
320
+ function base64Decode(s) {
321
+ if (typeof Buffer !== "undefined") {
322
+ return new Uint8Array(Buffer.from(s, "base64"));
323
+ }
324
+ const bin = atob(s);
325
+ const out = new Uint8Array(bin.length);
326
+ for (let i = 0; i < bin.length; i++) {
327
+ out[i] = bin.charCodeAt(i);
328
+ }
329
+ return out;
330
+ }
331
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/migration/sign.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Wire-record types and constants for SEMP_MIGRATION per
3
+ * MIGRATION.md §3.
4
+ *
5
+ * @module
6
+ */
7
+ /** Wire-level type discriminators. */
8
+ export declare const MigrationRecordType = "SEMP_MIGRATION";
9
+ export declare const MigrationRecordVersion = "1.0.0";
10
+ /** Domain-separation prefix per ENVELOPE.md §4.3. */
11
+ export declare const MigrationPrefix = "SEMP-MIGRATION-RECORD:";
12
+ /** Notice message type per §4. */
13
+ export declare const MigrationNoticeType = "SEMP_MIGRATION_NOTICE";
14
+ /** Migration mode per §2. */
15
+ export type MigrationMode = "cooperative" | "unilateral";
16
+ /**
17
+ * Forwarding window bounds per §5.1, in milliseconds.
18
+ *
19
+ * - Min: 30 days (cooperative servers MUST NOT accept below this)
20
+ * - Recommended: 180 days
21
+ * - Max: 730 days (~2 years; servers MAY decline above this)
22
+ */
23
+ export declare const MinForwardingWindowMs: number;
24
+ export declare const RecommendedForwardingWindowMs: number;
25
+ export declare const MaxForwardingWindowMs: number;
26
+ /** Only signature algorithm currently defined for migration records. */
27
+ export declare const SignatureAlgorithmEd25519 = "ed25519";
28
+ /** Reusable signature block. */
29
+ export interface MigrationSignatureBlock {
30
+ algorithm: string;
31
+ key_id: string;
32
+ value: string;
33
+ }
34
+ /** SEMP_MIGRATION record per §3.1. */
35
+ export interface MigrationRecord {
36
+ type: typeof MigrationRecordType;
37
+ version: string;
38
+ record_id: string;
39
+ old_address: string;
40
+ new_address: string;
41
+ old_identity_key_id: string;
42
+ new_identity_key_id: string;
43
+ /** Base64. */
44
+ new_identity_public_key: string;
45
+ /** ISO 8601 UTC. */
46
+ migrated_at: string;
47
+ /**
48
+ * ISO 8601 UTC, or null when no forwarding is offered (typical
49
+ * for unilateral mode where the old provider is non-cooperative).
50
+ */
51
+ forwarding_window_until: string | null;
52
+ mode: MigrationMode;
53
+ old_identity_signature: MigrationSignatureBlock;
54
+ new_identity_signature: MigrationSignatureBlock;
55
+ new_domain_signature: MigrationSignatureBlock;
56
+ /** Required when mode === "cooperative"; null in unilateral mode. */
57
+ old_domain_signature: MigrationSignatureBlock | null;
58
+ /**
59
+ * Optional extension entries. Every signature in the §3.3 chain
60
+ * covers `extensions`; any content captured here is attested by
61
+ * all signers.
62
+ */
63
+ extensions?: Record<string, unknown>;
64
+ }
65
+ /**
66
+ * SEMP_MIGRATION_NOTICE message a server sends to inform a sender
67
+ * that the recipient has migrated. Per §4.
68
+ */
69
+ export interface MigrationNotice {
70
+ type: typeof MigrationNoticeType;
71
+ version: string;
72
+ /** ULID for the notice. */
73
+ notice_id: string;
74
+ /** Reference to the published migration record. */
75
+ record_id: string;
76
+ /** URL where the migration record can be fetched. */
77
+ record_url: string;
78
+ /** Old address (the one the sender attempted to deliver to). */
79
+ old_address: string;
80
+ /** New address the sender SHOULD redirect to. */
81
+ new_address: string;
82
+ /** Migration mode (informational). */
83
+ mode: MigrationMode;
84
+ /** ISO 8601 UTC timestamp the notice was issued. */
85
+ issued_at: string;
86
+ }
87
+ /** Rejection wrapper a sender returns when it refuses to honor a notice. */
88
+ export interface MigrationNoticeRejection {
89
+ notice: MigrationNotice;
90
+ reason: string;
91
+ }
92
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,qDAAqD;AACrD,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD,kCAAkC;AAClC,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,6BAA6B;AAC7B,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAA2B,CAAC;AAC9D,eAAO,MAAM,6BAA6B,QAA4B,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAA4B,CAAC;AAE/D,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,gCAAgC;AAChC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc;IACd,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,EAAE,aAAa,CAAC;IAEpB,sBAAsB,EAAE,uBAAuB,CAAC;IAChD,sBAAsB,EAAE,uBAAuB,CAAC;IAChD,oBAAoB,EAAE,uBAAuB,CAAC;IAC9C,qEAAqE;IACrE,oBAAoB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAErD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Wire-record types and constants for SEMP_MIGRATION per
3
+ * MIGRATION.md §3.
4
+ *
5
+ * @module
6
+ */
7
+ /** Wire-level type discriminators. */
8
+ export const MigrationRecordType = "SEMP_MIGRATION";
9
+ export const MigrationRecordVersion = "1.0.0";
10
+ /** Domain-separation prefix per ENVELOPE.md §4.3. */
11
+ export const MigrationPrefix = "SEMP-MIGRATION-RECORD:";
12
+ /** Notice message type per §4. */
13
+ export const MigrationNoticeType = "SEMP_MIGRATION_NOTICE";
14
+ /**
15
+ * Forwarding window bounds per §5.1, in milliseconds.
16
+ *
17
+ * - Min: 30 days (cooperative servers MUST NOT accept below this)
18
+ * - Recommended: 180 days
19
+ * - Max: 730 days (~2 years; servers MAY decline above this)
20
+ */
21
+ export const MinForwardingWindowMs = 30 * 24 * 60 * 60 * 1000;
22
+ export const RecommendedForwardingWindowMs = 180 * 24 * 60 * 60 * 1000;
23
+ export const MaxForwardingWindowMs = 730 * 24 * 60 * 60 * 1000;
24
+ /** Only signature algorithm currently defined for migration records. */
25
+ export const SignatureAlgorithmEd25519 = "ed25519";
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAE9C,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAK3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9D,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/D,wEAAwE;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Reason-code registry per VECTORS.md §8 / HANDSHAKE.md §4.1 /
3
+ * ENVELOPE.md §9.3 / ERRORS.md.
4
+ *
5
+ * @module
6
+ */
7
+ /**
8
+ * Machine-readable rejection reason returned by handshake,
9
+ * envelope, key-fetch, and policy operations. Senders use the
10
+ * code to decide whether to retry, surface to user, or rotate
11
+ * credentials.
12
+ */
13
+ export type ReasonCode = "blocked" | "auth_failed" | "policy_forbidden" | "handshake_expired" | "handshake_invalid" | "no_session" | "rate_limited" | "challenge" | "challenge_failed" | "challenge_invalid" | "server_at_capacity" | "resumption_failed" | "version_unsupported" | "seal_invalid" | "session_mac_invalid" | "envelope_expired" | "envelope_size_exceeded" | "extension_unsupported" | "extension_size_exceeded" | "scope_exceeded" | "scope_invalid" | "certificate_expired" | "server_unavailable" | "session_expired" | "rekey_unsupported" | "policy_kind_unsupported" | "policy_op_invalid" | "policy_version_stale";
14
+ /** The full set of recognized ReasonCode values. */
15
+ export declare const KnownReasonCodes: ReadonlySet<string>;
16
+ /** Type guard: is this string one of the recognized codes? */
17
+ export declare function isKnownReasonCode(code: string): code is ReasonCode;
18
+ /**
19
+ * Reports whether automated retry is appropriate for this reason.
20
+ *
21
+ * Recoverable codes signal a transient or transport condition the
22
+ * sender SHOULD retry after a back-off, OR a state-staleness
23
+ * condition (handshake_expired, no_session, policy_version_stale)
24
+ * the sender resolves with a fresh handshake / refresh and a single
25
+ * retry. Non-recoverable codes signal a permanent condition (blocked,
26
+ * auth_failed, policy_forbidden, scope_invalid, etc.) where the
27
+ * sender MUST NOT retry without operator intervention.
28
+ *
29
+ * Notes on edge cases:
30
+ *
31
+ * - `session_expired` and `rekey_unsupported` are NOT recoverable
32
+ * here because they require a fresh handshake rather than an
33
+ * automated retry on the rekey path.
34
+ * - `challenge_invalid`, `version_unsupported`, `resumption_failed`,
35
+ * `envelope_size_exceeded`, `scope_invalid`, and
36
+ * `certificate_expired` are non-recoverable per ERRORS.md.
37
+ *
38
+ * Mirrors semp-go's `ReasonCode.Recoverable()` byte-for-byte; the
39
+ * vectors at `vectors/v1.0.0/rejection-codes.json` cross-check both.
40
+ */
41
+ export declare function isRecoverable(code: ReasonCode): boolean;
42
+ //# sourceMappingURL=reasoncodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoncodes.d.ts","sourceRoot":"","sources":["../src/reasoncodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAElB,SAAS,GACT,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,YAAY,GACZ,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GAErB,cAAc,GACd,qBAAqB,GACrB,kBAAkB,GAClB,wBAAwB,GACxB,uBAAuB,GACvB,yBAAyB,GACzB,gBAAgB,GAChB,eAAe,GACf,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,mBAAmB,GACnB,yBAAyB,GACzB,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CA6B/C,CAAC;AAEH,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,UAAU,CAElE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAcvD"}