@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 @@
1
+ {"version":3,"file":"observation_store.d.ts","sourceRoot":"","sources":["../../src/reputation/observation_store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAYrE,2CAA2C;AAC3C,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gEAAgE;IAChE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,0DAA0D;AAC1D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,KAAK,GAAE,MAAM,IAAuB;IAIhD,oCAAoC;IACpC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;IASlD,mCAAmC;IACnC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IASvD;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,EAAE,GAAG,IAAI;IAQrE,yEAAyE;IACzE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAsBhC,sDAAsD;IACtD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK;IAqC5B,uCAAuC;IACvC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM3B,2DAA2D;IAC3D,IAAI,IAAI,MAAM;IAId,OAAO,CAAC,KAAK;CAiBd;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAqBlD"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Per-domain signal ledger + Score derivation per REPUTATION.md §4.
3
+ *
4
+ * The store records raw counters as they happen (one call per
5
+ * handshake/envelope/abuse) and exposes a {@link Score} query that
6
+ * turns the counters into a Score + {@link Assessment} + the
7
+ * "currently suspicious" verdict operators plug into their PoW
8
+ * policy hook.
9
+ *
10
+ * Production deployments wrap a durable backend; this is the
11
+ * reference in-memory store.
12
+ *
13
+ * @module
14
+ */
15
+ /** In-memory {@link ObservationStore}. Single-process. */
16
+ export class ObservationStore {
17
+ domains = new Map();
18
+ firstSeen = new Map();
19
+ nowFn;
20
+ constructor(nowFn = () => new Date()) {
21
+ this.nowFn = nowFn;
22
+ }
23
+ /** Record one handshake outcome. */
24
+ recordHandshake(domain, ok) {
25
+ const c = this.touch(domain);
26
+ if (ok) {
27
+ c.handshakes_completed++;
28
+ }
29
+ else {
30
+ c.handshakes_rejected++;
31
+ }
32
+ }
33
+ /** Record one envelope outcome. */
34
+ recordEnvelope(domain, accepted) {
35
+ const c = this.touch(domain);
36
+ if (accepted) {
37
+ c.envelopes_accepted++;
38
+ }
39
+ else {
40
+ c.envelopes_rejected++;
41
+ }
42
+ }
43
+ /**
44
+ * Record one abuse report. The caller is expected to have
45
+ * verified the report's authenticity and any embedded disclosure
46
+ * authorization before calling.
47
+ */
48
+ recordAbuseReport(domain, category) {
49
+ const c = this.touch(domain);
50
+ c.abuse_reports++;
51
+ if (category !== "") {
52
+ c.abuse_categories.push(category);
53
+ }
54
+ }
55
+ /** Snapshot of the current counters as a publishable {@link Metrics}. */
56
+ metrics(domain) {
57
+ const c = this.domains.get(normalize(domain));
58
+ if (c === undefined) {
59
+ return {
60
+ envelopes_received: 0,
61
+ envelopes_rejected: 0,
62
+ abuse_reports: 0,
63
+ };
64
+ }
65
+ const m = {
66
+ envelopes_received: c.envelopes_accepted + c.envelopes_rejected,
67
+ envelopes_rejected: c.envelopes_rejected,
68
+ abuse_reports: c.abuse_reports,
69
+ handshakes_completed: c.handshakes_completed,
70
+ handshakes_rejected: c.handshakes_rejected,
71
+ };
72
+ if (c.abuse_categories.length > 0) {
73
+ m.abuse_categories = c.abuse_categories.slice();
74
+ }
75
+ return m;
76
+ }
77
+ /** Compute the current {@link Score} for `domain`. */
78
+ score(domain) {
79
+ const d = normalize(domain);
80
+ const c = this.domains.get(d);
81
+ const firstSeen = this.firstSeen.get(d) ?? null;
82
+ const ageDays = firstSeen === null
83
+ ? -1
84
+ : Math.floor((this.nowFn().getTime() - firstSeen.getTime()) / (1000 * 60 * 60 * 24));
85
+ if (c === undefined) {
86
+ return {
87
+ domain,
88
+ total_envelopes: 0,
89
+ abuse_rate: 0,
90
+ reject_rate: 0,
91
+ handshake_reject_rate: 0,
92
+ first_seen: firstSeen,
93
+ age_days: ageDays,
94
+ assessment: "neutral",
95
+ };
96
+ }
97
+ const total = c.envelopes_accepted + c.envelopes_rejected;
98
+ const handshakes = c.handshakes_completed + c.handshakes_rejected;
99
+ const score = {
100
+ domain,
101
+ total_envelopes: total,
102
+ abuse_rate: total > 0 ? c.abuse_reports / total : 0,
103
+ reject_rate: total > 0 ? c.envelopes_rejected / total : 0,
104
+ handshake_reject_rate: handshakes > 0 ? c.handshakes_rejected / handshakes : 0,
105
+ first_seen: firstSeen,
106
+ age_days: ageDays,
107
+ assessment: "neutral",
108
+ };
109
+ score.assessment = classifyScore(score);
110
+ return score;
111
+ }
112
+ /** Clear all counters for `domain`. */
113
+ reset(domain) {
114
+ const d = normalize(domain);
115
+ this.domains.delete(d);
116
+ this.firstSeen.delete(d);
117
+ }
118
+ /** Number of domains with at least one recorded signal. */
119
+ size() {
120
+ return this.domains.size;
121
+ }
122
+ touch(domain) {
123
+ const d = normalize(domain);
124
+ let c = this.domains.get(d);
125
+ if (c === undefined) {
126
+ c = {
127
+ handshakes_completed: 0,
128
+ handshakes_rejected: 0,
129
+ envelopes_accepted: 0,
130
+ envelopes_rejected: 0,
131
+ abuse_reports: 0,
132
+ abuse_categories: [],
133
+ };
134
+ this.domains.set(d, c);
135
+ this.firstSeen.set(d, this.nowFn());
136
+ }
137
+ return c;
138
+ }
139
+ }
140
+ /**
141
+ * Default scoring curve (REPUTATION.md §4.6 + §8.3.2):
142
+ *
143
+ * - abuse_rate ≥ 0.05 OR reject_rate ≥ 0.50 → hostile
144
+ * - abuse_rate ≥ 0.01 OR reject_rate ≥ 0.20 → suspicious
145
+ * - abuse_rate == 0 AND reject_rate < 0.05 AND total ≥ 100 → trusted
146
+ * - otherwise → neutral
147
+ */
148
+ export function classifyScore(s) {
149
+ const HOSTILE_ABUSE = 0.05;
150
+ const HOSTILE_REJECT = 0.5;
151
+ const SUSPICIOUS_ABUSE = 0.01;
152
+ const SUSPICIOUS_REJECT = 0.2;
153
+ const TRUSTED_MIN_ENVELOPES = 100;
154
+ const TRUSTED_MAX_REJECT = 0.05;
155
+ if (s.abuse_rate >= HOSTILE_ABUSE || s.reject_rate >= HOSTILE_REJECT) {
156
+ return "hostile";
157
+ }
158
+ if (s.abuse_rate >= SUSPICIOUS_ABUSE || s.reject_rate >= SUSPICIOUS_REJECT) {
159
+ return "suspicious";
160
+ }
161
+ if (s.total_envelopes >= TRUSTED_MIN_ENVELOPES &&
162
+ s.abuse_rate === 0 &&
163
+ s.reject_rate < TRUSTED_MAX_REJECT) {
164
+ return "trusted";
165
+ }
166
+ return "neutral";
167
+ }
168
+ function normalize(domain) {
169
+ return domain.trim().toLowerCase();
170
+ }
171
+ //# sourceMappingURL=observation_store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation_store.js","sourceRoot":"","sources":["../../src/reputation/observation_store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Proof-of-Work challenge primitives per REPUTATION.md §8.3.
3
+ *
4
+ * The handshake layer carries the actual SHA-256 PoW solver +
5
+ * verifier (see `handshake/pow.ts`). This module supplies the
6
+ * issuer-side helpers: difficulty selection, challenge minting, and
7
+ * a single-use redemption ledger that prevents replay per §8.3.4.
8
+ *
9
+ * @module
10
+ */
11
+ import type { Assessment } from "./types.js";
12
+ /** Only supported PoW hash algorithm. */
13
+ export declare const PoWAlgorithm = "sha256";
14
+ /** Minimum entropy a challenge prefix must carry per §8.3.1. */
15
+ export declare const MinPrefixBytes = 16;
16
+ /** RECOMMENDED challenge TTL per §8.3.4. */
17
+ export declare const DefaultChallengeTTLMs: number;
18
+ /** Difficulty presets per §8.3.2. */
19
+ export declare const DifficultyBaseline = 20;
20
+ export declare const DifficultyRelaxed = 16;
21
+ export declare const DifficultySuspicious = 22;
22
+ export declare const DifficultyHostile = 26;
23
+ /** New-domain age gate per §2.1: domains younger than this get scrutiny. */
24
+ export declare const DomainAgeGateDays = 30;
25
+ /** A challenge minted by the recipient server per §8.3.1. */
26
+ export interface PoWChallenge {
27
+ /** ULID-shaped 26-character Crockford base32 string. */
28
+ id: string;
29
+ algorithm: typeof PoWAlgorithm;
30
+ /** ≥ {@link MinPrefixBytes} bytes of entropy. */
31
+ prefix: Uint8Array;
32
+ /** Leading zero bits required in the solution hash. */
33
+ difficulty: number;
34
+ /** Single-use deadline. */
35
+ expires: Date;
36
+ }
37
+ /**
38
+ * Difficulty for a zero-reputation, age-known domain per §8.3.2:
39
+ * - age < {@link DomainAgeGateDays} → DifficultyBaseline (20)
40
+ * - age ≥ DomainAgeGateDays → DifficultyRelaxed (16)
41
+ */
42
+ export declare function difficultyForAge(ageDays: number): number;
43
+ /**
44
+ * Difficulty for a domain whose reputation has been summarized as
45
+ * `assessment` per §8.3.2:
46
+ * - "trusted" / "neutral" / "" → 0 (no PoW required)
47
+ * - "suspicious" → DifficultySuspicious (22)
48
+ * - "hostile" → DifficultyHostile (26)
49
+ *
50
+ * A return of 0 MUST be interpreted as "no challenge required".
51
+ */
52
+ export declare function difficultyForAssessment(a: Assessment | ""): number;
53
+ /**
54
+ * Construct a fresh challenge at `difficulty`, with
55
+ * {@link MinPrefixBytes} bytes of fresh prefix entropy and a ULID
56
+ * id derived from the current wall clock.
57
+ *
58
+ * `ttlMs <= 0` is replaced with {@link DefaultChallengeTTLMs}.
59
+ */
60
+ export declare function issueChallenge(difficulty: number, ttlMs?: number, rand?: (n: number) => Uint8Array): PoWChallenge;
61
+ /** Base64-encoded challenge prefix — what the wire carries. */
62
+ export declare function challengePrefixBase64(c: PoWChallenge): string;
63
+ /**
64
+ * Tracks issued + redeemed challenges; prevents replay per §8.3.4.
65
+ * Concurrency-safe under the JS single-thread model. Production
66
+ * deployments wrap a durable backend.
67
+ */
68
+ export declare class ChallengeLedger {
69
+ private readonly entries;
70
+ private lastSweep;
71
+ private readonly sweepIntervalMs;
72
+ private readonly nowFn;
73
+ constructor(sweepIntervalMs?: number, nowFn?: () => Date);
74
+ /** Register `c` so a later {@link redeem} call can find it. */
75
+ record(c: PoWChallenge): void;
76
+ /**
77
+ * Redeem the challenge with `id`. Returns the challenge on success.
78
+ * Throws when:
79
+ * - the challenge is unknown
80
+ * - the challenge has already been redeemed
81
+ * - the challenge has expired
82
+ */
83
+ redeem(id: string): PoWChallenge;
84
+ /** Number of currently-active (unredeemed, unexpired) entries. */
85
+ active(): number;
86
+ /** Force an immediate sweep of expired entries. */
87
+ sweep(): void;
88
+ private maybeSweep;
89
+ private sweepNow;
90
+ }
91
+ //# sourceMappingURL=pow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pow.d.ts","sourceRoot":"","sources":["../../src/reputation/pow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,yCAAyC;AACzC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,gEAAgE;AAChE,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,QAAgB,CAAC;AAEnD,qCAAqC;AACrC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,YAAY,CAAC;IAC/B,iDAAiD;IACjD,MAAM,EAAE,UAAU,CAAC;IACnB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,UAAU,GAAG,EAAE,GAAG,MAAM,CAalE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAwB,GAC5C,YAAY,CAed;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAS7D;AAKD;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqE;IAC7F,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,eAAe,SAAS,EAAE,KAAK,GAAE,MAAM,IAAuB;IAK1E,+DAA+D;IAC/D,MAAM,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI;IAW7B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY;IAiBhC,kEAAkE;IAClE,MAAM,IAAI,MAAM;IAWhB,mDAAmD;IACnD,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,QAAQ;CAQjB"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Proof-of-Work challenge primitives per REPUTATION.md §8.3.
3
+ *
4
+ * The handshake layer carries the actual SHA-256 PoW solver +
5
+ * verifier (see `handshake/pow.ts`). This module supplies the
6
+ * issuer-side helpers: difficulty selection, challenge minting, and
7
+ * a single-use redemption ledger that prevents replay per §8.3.4.
8
+ *
9
+ * @module
10
+ */
11
+ /** Only supported PoW hash algorithm. */
12
+ export const PoWAlgorithm = "sha256";
13
+ /** Minimum entropy a challenge prefix must carry per §8.3.1. */
14
+ export const MinPrefixBytes = 16;
15
+ /** RECOMMENDED challenge TTL per §8.3.4. */
16
+ export const DefaultChallengeTTLMs = 5 * 60 * 1000;
17
+ /** Difficulty presets per §8.3.2. */
18
+ export const DifficultyBaseline = 20;
19
+ export const DifficultyRelaxed = 16;
20
+ export const DifficultySuspicious = 22;
21
+ export const DifficultyHostile = 26;
22
+ /** New-domain age gate per §2.1: domains younger than this get scrutiny. */
23
+ export const DomainAgeGateDays = 30;
24
+ /**
25
+ * Difficulty for a zero-reputation, age-known domain per §8.3.2:
26
+ * - age < {@link DomainAgeGateDays} → DifficultyBaseline (20)
27
+ * - age ≥ DomainAgeGateDays → DifficultyRelaxed (16)
28
+ */
29
+ export function difficultyForAge(ageDays) {
30
+ return ageDays < DomainAgeGateDays ? DifficultyBaseline : DifficultyRelaxed;
31
+ }
32
+ /**
33
+ * Difficulty for a domain whose reputation has been summarized as
34
+ * `assessment` per §8.3.2:
35
+ * - "trusted" / "neutral" / "" → 0 (no PoW required)
36
+ * - "suspicious" → DifficultySuspicious (22)
37
+ * - "hostile" → DifficultyHostile (26)
38
+ *
39
+ * A return of 0 MUST be interpreted as "no challenge required".
40
+ */
41
+ export function difficultyForAssessment(a) {
42
+ switch (a) {
43
+ case "":
44
+ case "trusted":
45
+ case "neutral":
46
+ return 0;
47
+ case "suspicious":
48
+ return DifficultySuspicious;
49
+ case "hostile":
50
+ return DifficultyHostile;
51
+ default:
52
+ return 0;
53
+ }
54
+ }
55
+ /**
56
+ * Construct a fresh challenge at `difficulty`, with
57
+ * {@link MinPrefixBytes} bytes of fresh prefix entropy and a ULID
58
+ * id derived from the current wall clock.
59
+ *
60
+ * `ttlMs <= 0` is replaced with {@link DefaultChallengeTTLMs}.
61
+ */
62
+ export function issueChallenge(difficulty, ttlMs, rand = defaultRand) {
63
+ if (!Number.isInteger(difficulty) || difficulty < 0) {
64
+ throw new Error("reputation: negative or non-integer PoW difficulty");
65
+ }
66
+ if (difficulty > 256) {
67
+ throw new Error("reputation: PoW difficulty exceeds SHA-256 output size");
68
+ }
69
+ const ttl = ttlMs !== undefined && ttlMs > 0 ? ttlMs : DefaultChallengeTTLMs;
70
+ return {
71
+ id: newULID(rand),
72
+ algorithm: PoWAlgorithm,
73
+ prefix: rand(MinPrefixBytes),
74
+ difficulty,
75
+ expires: new Date(Date.now() + ttl),
76
+ };
77
+ }
78
+ /** Base64-encoded challenge prefix — what the wire carries. */
79
+ export function challengePrefixBase64(c) {
80
+ if (typeof Buffer !== "undefined") {
81
+ return Buffer.from(c.prefix).toString("base64");
82
+ }
83
+ let bin = "";
84
+ for (let i = 0; i < c.prefix.length; i++) {
85
+ bin += String.fromCharCode(c.prefix[i] ?? 0);
86
+ }
87
+ return btoa(bin);
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // Redemption ledger
91
+ /**
92
+ * Tracks issued + redeemed challenges; prevents replay per §8.3.4.
93
+ * Concurrency-safe under the JS single-thread model. Production
94
+ * deployments wrap a durable backend.
95
+ */
96
+ export class ChallengeLedger {
97
+ entries = new Map();
98
+ lastSweep = 0;
99
+ sweepIntervalMs;
100
+ nowFn;
101
+ constructor(sweepIntervalMs = 60_000, nowFn = () => new Date()) {
102
+ this.sweepIntervalMs = sweepIntervalMs;
103
+ this.nowFn = nowFn;
104
+ }
105
+ /** Register `c` so a later {@link redeem} call can find it. */
106
+ record(c) {
107
+ if (c.id === "") {
108
+ throw new Error("reputation: challenge id is empty");
109
+ }
110
+ if (this.entries.has(c.id)) {
111
+ throw new Error(`reputation: challenge ${c.id} already recorded`);
112
+ }
113
+ this.entries.set(c.id, { challenge: c, redeemed: false });
114
+ this.maybeSweep();
115
+ }
116
+ /**
117
+ * Redeem the challenge with `id`. Returns the challenge on success.
118
+ * Throws when:
119
+ * - the challenge is unknown
120
+ * - the challenge has already been redeemed
121
+ * - the challenge has expired
122
+ */
123
+ redeem(id) {
124
+ const e = this.entries.get(id);
125
+ if (e === undefined) {
126
+ throw new Error(`reputation: challenge ${id} not found`);
127
+ }
128
+ if (e.redeemed) {
129
+ throw new Error(`reputation: challenge ${id} already used`);
130
+ }
131
+ if (this.nowFn().getTime() >= e.challenge.expires.getTime()) {
132
+ // Drop expired entry now that we've checked it.
133
+ this.entries.delete(id);
134
+ throw new Error(`reputation: challenge ${id} has expired`);
135
+ }
136
+ e.redeemed = true;
137
+ return e.challenge;
138
+ }
139
+ /** Number of currently-active (unredeemed, unexpired) entries. */
140
+ active() {
141
+ let n = 0;
142
+ const now = this.nowFn().getTime();
143
+ for (const e of this.entries.values()) {
144
+ if (!e.redeemed && now < e.challenge.expires.getTime()) {
145
+ n++;
146
+ }
147
+ }
148
+ return n;
149
+ }
150
+ /** Force an immediate sweep of expired entries. */
151
+ sweep() {
152
+ this.sweepNow(this.nowFn().getTime());
153
+ }
154
+ maybeSweep() {
155
+ const now = this.nowFn().getTime();
156
+ if (now - this.lastSweep >= this.sweepIntervalMs) {
157
+ this.sweepNow(now);
158
+ }
159
+ }
160
+ sweepNow(nowMs) {
161
+ for (const [id, e] of this.entries) {
162
+ if (nowMs >= e.challenge.expires.getTime()) {
163
+ this.entries.delete(id);
164
+ }
165
+ }
166
+ this.lastSweep = nowMs;
167
+ }
168
+ }
169
+ // ---------------------------------------------------------------------------
170
+ // Helpers
171
+ function defaultRand(n) {
172
+ const out = new Uint8Array(n);
173
+ globalThis.crypto.getRandomValues(out);
174
+ return out;
175
+ }
176
+ const ULID_ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
177
+ function newULID(rand) {
178
+ const bits = new Uint8Array(16);
179
+ const ms = BigInt(Date.now());
180
+ bits[0] = Number((ms >> 40n) & 0xffn);
181
+ bits[1] = Number((ms >> 32n) & 0xffn);
182
+ bits[2] = Number((ms >> 24n) & 0xffn);
183
+ bits[3] = Number((ms >> 16n) & 0xffn);
184
+ bits[4] = Number((ms >> 8n) & 0xffn);
185
+ bits[5] = Number(ms & 0xffn);
186
+ const random = rand(10);
187
+ for (let i = 0; i < 10; i++) {
188
+ bits[6 + i] = random[i] ?? 0;
189
+ }
190
+ let u = 0n;
191
+ for (let i = 0; i < 8; i++) {
192
+ u = (u << 8n) | BigInt(bits[i] ?? 0);
193
+ }
194
+ let u2 = 0n;
195
+ for (let i = 8; i < 16; i++) {
196
+ u2 = (u2 << 8n) | BigInt(bits[i] ?? 0);
197
+ }
198
+ const out = new Array(26);
199
+ for (let i = 25; i >= 13; i--) {
200
+ out[i] = ULID_ALPHABET[Number(u2 & 31n)] ?? "0";
201
+ u2 >>= 5n;
202
+ }
203
+ for (let i = 12; i >= 0; i--) {
204
+ out[i] = ULID_ALPHABET[Number(u & 31n)] ?? "0";
205
+ u >>= 5n;
206
+ }
207
+ return out.join("");
208
+ }
209
+ //# sourceMappingURL=pow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pow.js","sourceRoot":"","sources":["../../src/reputation/pow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Sign / verify primitives for reputation wire records per
3
+ * REPUTATION.md §4.2 + §3.5 + §5.
4
+ *
5
+ * Reputation records use a NO-PREFIX signing input — the canonical
6
+ * bytes with `signature.value` elided are signed directly under
7
+ * Ed25519. Other SEMP records use SEMP-* domain-separation
8
+ * prefixes (registered in ENVELOPE.md §4.3) but reputation ones do
9
+ * not in the current spec.
10
+ *
11
+ * @module
12
+ */
13
+ import { type AbuseReport, type DisclosureAuthorization, type Observation, type ReputationSignature, type TrustObservations } from "./types.js";
14
+ /** Only signature algorithm currently defined. */
15
+ export declare const SignatureAlgorithmEd25519 = "ed25519";
16
+ /**
17
+ * Bucketize metrics in place (per §4.5.1), then Ed25519-sign
18
+ * `obs.signature` over the canonical bytes with `signature.value`
19
+ * elided.
20
+ */
21
+ export declare function signObservation(obs: Observation, observerPriv: Uint8Array, observerKeyId: string): string;
22
+ /** Verify `obs.signature` against `observerPub`. */
23
+ export declare function verifyObservation(obs: Observation, observerPub: Uint8Array): boolean;
24
+ /** Sign a {@link TrustObservations} response under the observer's signing key. */
25
+ export declare function signTrustObservations(resp: TrustObservations, observerPriv: Uint8Array, observerKeyId: string): string;
26
+ /** Verify a {@link TrustObservations} response. */
27
+ export declare function verifyTrustObservations(resp: TrustObservations, observerPub: Uint8Array): boolean;
28
+ /** Sign a {@link DisclosureAuthorization} under the affected user's identity key. */
29
+ export declare function signDisclosureAuthorization(auth: DisclosureAuthorization, userPriv: Uint8Array, userKeyId: string): string;
30
+ /** Verify a {@link DisclosureAuthorization} against the user's identity public key. */
31
+ export declare function verifyDisclosureAuthorization(auth: DisclosureAuthorization, userPub: Uint8Array): boolean;
32
+ /** Report whether the scope permits disclosing brief content. */
33
+ export declare function authAllowsBrief(auth: DisclosureAuthorization): boolean;
34
+ /** Report whether the scope permits disclosing enclosure content. */
35
+ export declare function authAllowsEnclosure(auth: DisclosureAuthorization): boolean;
36
+ /** Structural validation of an {@link AbuseReport} per §3.2. Throws on first violation. */
37
+ export declare function validateAbuseReport(r: AbuseReport): void;
38
+ /** Re-export so callers can wire the algorithm tag explicitly. */
39
+ export type { ReputationSignature };
40
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/reputation/sign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAEpB,kDAAkD;AAClD,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAKnD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,UAAU,EACxB,aAAa,EAAE,MAAM,GACpB,MAAM,CAqBR;AAED,oDAAoD;AACpD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,UAAU,GACtB,OAAO,CAeT;AAKD,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,UAAU,EACxB,aAAa,EAAE,MAAM,GACpB,MAAM,CAeR;AAED,mDAAmD;AACnD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,UAAU,GACtB,OAAO,CAeT;AAKD,qFAAqF;AACrF,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,MAAM,GAChB,MAAM,CAeR;AAED,uFAAuF;AACvF,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,uBAAuB,EAC7B,OAAO,EAAE,UAAU,GAClB,OAAO,CAeT;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAEtE;AAED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAE1E;AAKD,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CA0CxD;AAuBD,kEAAkE;AAClE,YAAY,EAAE,mBAAmB,EAAE,CAAC"}