@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,68 @@
1
+ /**
2
+ * SEMP_BLOCK block-list sync wire shape per DELIVERY.md §6.1.
3
+ *
4
+ * Used to propagate block-list changes from a client to its home
5
+ * server and onward to the user's other devices. The message MUST
6
+ * be signed by the originating device's identity key. The home
7
+ * server MUST verify the signature before storing or propagating
8
+ * (DELIVERY.md §6.2 / §8.2).
9
+ *
10
+ * @module
11
+ */
12
+ import { type BlockEntry } from "./blocklist.js";
13
+ /** Wire-level type discriminator. */
14
+ export declare const SyncMessageType = "SEMP_BLOCK";
15
+ /** Schema version. */
16
+ export declare const SyncMessageVersion = "1.0.0";
17
+ /** The only defined step. */
18
+ export declare const SyncStep = "update";
19
+ /** Domain-separation prefix; SEMP_BLOCK uses no extra prefix beyond the SEMP-REVOCATION-style canonical-blanked pattern. */
20
+ export declare const SyncMessagePrefix = "SEMP-BLOCK:";
21
+ /** Sync operation verb. */
22
+ export type SyncOp = "add" | "remove" | "modify";
23
+ /** One entry in {@link SyncMessage.operations}. */
24
+ export interface SyncOperation {
25
+ op: SyncOp;
26
+ /** For `remove` and `modify`. */
27
+ entry_id?: string;
28
+ /** For `add` and `modify`. */
29
+ entry?: BlockEntry;
30
+ }
31
+ /** SEMP_BLOCK reusable signature block. */
32
+ export interface SyncSignatureBlock {
33
+ algorithm: string;
34
+ key_id: string;
35
+ /** Base64. */
36
+ value: string;
37
+ }
38
+ /**
39
+ * SEMP_BLOCK sync message per DELIVERY.md §6.1.
40
+ *
41
+ * Signed by the originating device's identity key under the
42
+ * `SEMP-BLOCK:` prefix; the canonical bytes are computed with
43
+ * `signature.value` blanked.
44
+ */
45
+ export interface SyncMessage {
46
+ type: typeof SyncMessageType;
47
+ step: typeof SyncStep;
48
+ version: string;
49
+ user_id: string;
50
+ device_id: string;
51
+ list_version: number;
52
+ /** ISO 8601 UTC. */
53
+ timestamp: string;
54
+ operations: SyncOperation[];
55
+ signature: SyncSignatureBlock;
56
+ }
57
+ /**
58
+ * Sign `m.signature` with the originating device's identity private
59
+ * key per §6.2. Mutates `m` in place. Returns the base64 signature.
60
+ */
61
+ export declare function signSyncMessage(m: SyncMessage, devicePriv: Uint8Array, deviceKeyId: string): string;
62
+ /** Verify `m.signature` against the originating device's identity public key. */
63
+ export declare function verifySyncMessage(m: SyncMessage, devicePub: Uint8Array): boolean;
64
+ /** Structural validation per §6.1. Throws on first violation. */
65
+ export declare function validateSyncMessage(m: SyncMessage, opts?: {
66
+ skipSignatureCheck?: boolean;
67
+ }): void;
68
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/delivery/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,qCAAqC;AACrC,eAAO,MAAM,eAAe,eAAe,CAAC;AAE5C,sBAAsB;AACtB,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,6BAA6B;AAC7B,eAAO,MAAM,QAAQ,WAAW,CAAC;AAEjC,4HAA4H;AAC5H,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,2BAA2B;AAC3B,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,eAAe,CAAC;IAC7B,IAAI,EAAE,OAAO,QAAQ,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,WAAW,EACd,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CAgBR;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,WAAW,EACd,SAAS,EAAE,UAAU,GACpB,OAAO,CAYT;AAED,iEAAiE;AACjE,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,WAAW,EACd,IAAI,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,IAAI,CAsDN"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * SEMP_BLOCK block-list sync wire shape per DELIVERY.md §6.1.
3
+ *
4
+ * Used to propagate block-list changes from a client to its home
5
+ * server and onward to the user's other devices. The message MUST
6
+ * be signed by the originating device's identity key. The home
7
+ * server MUST verify the signature before storing or propagating
8
+ * (DELIVERY.md §6.2 / §8.2).
9
+ *
10
+ * @module
11
+ */
12
+ import {} from "./blocklist.js";
13
+ import { signSignedDoc, verifySignedDoc } from "../keys/index.js";
14
+ /** Wire-level type discriminator. */
15
+ export const SyncMessageType = "SEMP_BLOCK";
16
+ /** Schema version. */
17
+ export const SyncMessageVersion = "1.0.0";
18
+ /** The only defined step. */
19
+ export const SyncStep = "update";
20
+ /** Domain-separation prefix; SEMP_BLOCK uses no extra prefix beyond the SEMP-REVOCATION-style canonical-blanked pattern. */
21
+ export const SyncMessagePrefix = "SEMP-BLOCK:";
22
+ /**
23
+ * Sign `m.signature` with the originating device's identity private
24
+ * key per §6.2. Mutates `m` in place. Returns the base64 signature.
25
+ */
26
+ export function signSyncMessage(m, devicePriv, deviceKeyId) {
27
+ if (deviceKeyId === "") {
28
+ throw new Error("delivery: empty device key_id");
29
+ }
30
+ validateSyncMessage(m, { skipSignatureCheck: true });
31
+ m.signature.algorithm = "ed25519";
32
+ m.signature.key_id = deviceKeyId;
33
+ m.signature.value = "";
34
+ const { signedJSON, signatureB64 } = signSignedDoc({
35
+ preSignJSON: m,
36
+ seed: devicePriv,
37
+ signaturePath: "signature.value",
38
+ prefix: SyncMessagePrefix,
39
+ });
40
+ m.signature.value = signedJSON.signature.value;
41
+ return signatureB64;
42
+ }
43
+ /** Verify `m.signature` against the originating device's identity public key. */
44
+ export function verifySyncMessage(m, devicePub) {
45
+ validateSyncMessage(m);
46
+ if (m.signature.value === "") {
47
+ return false;
48
+ }
49
+ const { ok } = verifySignedDoc({
50
+ signedJSON: m,
51
+ publicKey: devicePub,
52
+ signaturePath: "signature.value",
53
+ prefix: SyncMessagePrefix,
54
+ });
55
+ return ok;
56
+ }
57
+ /** Structural validation per §6.1. Throws on first violation. */
58
+ export function validateSyncMessage(m, opts = {}) {
59
+ if (m.type !== SyncMessageType) {
60
+ throw new Error(`delivery: sync message type ${JSON.stringify(m.type)}, want ${SyncMessageType}`);
61
+ }
62
+ if (m.step !== SyncStep) {
63
+ throw new Error(`delivery: sync message step ${JSON.stringify(m.step)}, want ${SyncStep}`);
64
+ }
65
+ for (const f of ["version", "user_id", "device_id", "timestamp"]) {
66
+ if (typeof m[f] !== "string" || m[f] === "") {
67
+ throw new Error(`delivery: sync message missing ${f}`);
68
+ }
69
+ }
70
+ if (Number.isNaN(Date.parse(m.timestamp))) {
71
+ throw new Error("delivery: sync message timestamp is not ISO 8601");
72
+ }
73
+ if (!Number.isInteger(m.list_version) ||
74
+ m.list_version < 0) {
75
+ throw new Error(`delivery: sync message list_version ${m.list_version} MUST be an unsigned integer`);
76
+ }
77
+ if (!Array.isArray(m.operations) || m.operations.length === 0) {
78
+ throw new Error("delivery: sync message operations MUST be non-empty");
79
+ }
80
+ for (let i = 0; i < m.operations.length; i++) {
81
+ const op = m.operations[i];
82
+ if (op.op !== "add" && op.op !== "remove" && op.op !== "modify") {
83
+ throw new Error(`delivery: sync operations[${i}] op ${JSON.stringify(op.op)} is invalid`);
84
+ }
85
+ if (op.op === "remove" && (op.entry_id === undefined || op.entry_id === "")) {
86
+ throw new Error(`delivery: sync operations[${i}] op=remove MUST set entry_id`);
87
+ }
88
+ if (op.op === "add" && (op.entry === undefined || op.entry === null)) {
89
+ throw new Error(`delivery: sync operations[${i}] op=add MUST carry entry`);
90
+ }
91
+ }
92
+ if (typeof m.signature?.value !== "string") {
93
+ throw new Error("delivery: sync message signature.value must be a string");
94
+ }
95
+ if (!opts.skipSignatureCheck && m.signature.value === "") {
96
+ throw new Error("delivery: sync message is unsigned");
97
+ }
98
+ }
99
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/delivery/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * SEMP_USER_POLICY wire shape + sign/verify per DELIVERY.md §7.1.
3
+ *
4
+ * Signed by the originating device's identity key under the
5
+ * `SEMP-USER-POLICY:` prefix; the canonical bytes are computed with
6
+ * `signature.value` blanked.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wire-level constants per §7.1. */
11
+ export declare const UserPolicyType = "SEMP_USER_POLICY";
12
+ export declare const UserPolicyStep = "update";
13
+ export declare const UserPolicyVersion = "1.0.0";
14
+ export declare const UserPolicyPrefix = "SEMP-USER-POLICY:";
15
+ /** Policy operation verb per §7.1. The set is closed; extensibility is via new kinds. */
16
+ export type PolicyOp = "add" | "remove" | "modify";
17
+ /**
18
+ * Defined policy rule kinds per §7.3. Operators MAY define more
19
+ * via the §7.2 namespaced-identifier rule; the home server rejects
20
+ * unknown kinds with reason_code `policy_kind_unsupported` per §7.2.
21
+ */
22
+ export declare const PolicyKindBlock = "semp.dev/block";
23
+ export declare const PolicyKindAcceptedSender = "semp.dev/accepted_sender";
24
+ export declare const PolicyKindFirstContact = "semp.dev/first_contact";
25
+ /** One entry inside {@link UserPolicyMessage.operations} per §7.1. */
26
+ export interface PolicyOperation {
27
+ op: PolicyOp;
28
+ kind: string;
29
+ /** For `remove` and `modify` references. */
30
+ entry_id?: string;
31
+ /**
32
+ * For `add` and `modify` carries the new entry shape. Inner shape
33
+ * varies by `kind`.
34
+ */
35
+ entry?: unknown;
36
+ }
37
+ /** Reusable signature block. */
38
+ export interface UserPolicySignatureBlock {
39
+ algorithm: string;
40
+ key_id: string;
41
+ /** Base64. */
42
+ value: string;
43
+ }
44
+ /** SEMP_USER_POLICY update record per §7.1. */
45
+ export interface UserPolicyMessage {
46
+ type: typeof UserPolicyType;
47
+ step: typeof UserPolicyStep;
48
+ version: string;
49
+ user_id: string;
50
+ device_id: string;
51
+ policy_version: number;
52
+ /** ISO 8601 UTC. */
53
+ timestamp: string;
54
+ operations: PolicyOperation[];
55
+ signature: UserPolicySignatureBlock;
56
+ }
57
+ /**
58
+ * Sign `m.signature` with the originating device's identity private
59
+ * key per §7.1. Mutates `m` in place. Returns the base64 signature.
60
+ */
61
+ export declare function signUserPolicyMessage(m: UserPolicyMessage, devicePriv: Uint8Array, deviceKeyId: string): string;
62
+ /** Verify `m.signature` against the originating device's identity public key. */
63
+ export declare function verifyUserPolicyMessage(m: UserPolicyMessage, devicePub: Uint8Array): boolean;
64
+ /**
65
+ * Structural validation per §7.1 + the §7.3 op-kind rules.
66
+ *
67
+ * Singleton-shaped kinds (`semp.dev/first_contact`) accept only
68
+ * `modify`; list-shaped kinds accept `add`, `remove`, and `modify`
69
+ * with the entry_id rules in §7.3.
70
+ */
71
+ export declare function validateUserPolicyMessage(m: UserPolicyMessage, opts?: {
72
+ skipSignatureCheck?: boolean;
73
+ }): void;
74
+ //# sourceMappingURL=user_policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_policy.d.ts","sourceRoot":"","sources":["../../src/delivery/user_policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,qCAAqC;AACrC,eAAO,MAAM,cAAc,qBAAqB,CAAC;AACjD,eAAO,MAAM,cAAc,WAAW,CAAC;AACvC,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAEpD,yFAAyF;AACzF,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,gCAAgC;AAChC,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,SAAS,EAAE,wBAAwB,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,iBAAiB,EACpB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CA0BR;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,iBAAiB,EACpB,SAAS,EAAE,UAAU,GACpB,OAAO,CAYT;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,iBAAiB,EACpB,IAAI,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,IAAI,CAyCN"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * SEMP_USER_POLICY wire shape + sign/verify per DELIVERY.md §7.1.
3
+ *
4
+ * Signed by the originating device's identity key under the
5
+ * `SEMP-USER-POLICY:` prefix; the canonical bytes are computed with
6
+ * `signature.value` blanked.
7
+ *
8
+ * @module
9
+ */
10
+ import { signSignedDoc, verifySignedDoc } from "../keys/index.js";
11
+ /** Wire-level constants per §7.1. */
12
+ export const UserPolicyType = "SEMP_USER_POLICY";
13
+ export const UserPolicyStep = "update";
14
+ export const UserPolicyVersion = "1.0.0";
15
+ export const UserPolicyPrefix = "SEMP-USER-POLICY:";
16
+ /**
17
+ * Defined policy rule kinds per §7.3. Operators MAY define more
18
+ * via the §7.2 namespaced-identifier rule; the home server rejects
19
+ * unknown kinds with reason_code `policy_kind_unsupported` per §7.2.
20
+ */
21
+ export const PolicyKindBlock = "semp.dev/block";
22
+ export const PolicyKindAcceptedSender = "semp.dev/accepted_sender";
23
+ export const PolicyKindFirstContact = "semp.dev/first_contact";
24
+ /**
25
+ * Sign `m.signature` with the originating device's identity private
26
+ * key per §7.1. Mutates `m` in place. Returns the base64 signature.
27
+ */
28
+ export function signUserPolicyMessage(m, devicePriv, deviceKeyId) {
29
+ if (deviceKeyId === "") {
30
+ throw new Error("delivery: empty device key_id");
31
+ }
32
+ // Auto-fill discriminators for caller convenience.
33
+ if (m.type === "") {
34
+ m.type = UserPolicyType;
35
+ }
36
+ if (m.step === "") {
37
+ m.step = UserPolicyStep;
38
+ }
39
+ if (m.version === "") {
40
+ m.version = UserPolicyVersion;
41
+ }
42
+ validateUserPolicyMessage(m, { skipSignatureCheck: true });
43
+ m.signature.algorithm = "ed25519";
44
+ m.signature.key_id = deviceKeyId;
45
+ m.signature.value = "";
46
+ const { signedJSON, signatureB64 } = signSignedDoc({
47
+ preSignJSON: m,
48
+ seed: devicePriv,
49
+ signaturePath: "signature.value",
50
+ prefix: UserPolicyPrefix,
51
+ });
52
+ m.signature.value = signedJSON.signature.value;
53
+ return signatureB64;
54
+ }
55
+ /** Verify `m.signature` against the originating device's identity public key. */
56
+ export function verifyUserPolicyMessage(m, devicePub) {
57
+ validateUserPolicyMessage(m);
58
+ if (m.signature.value === "") {
59
+ return false;
60
+ }
61
+ const { ok } = verifySignedDoc({
62
+ signedJSON: m,
63
+ publicKey: devicePub,
64
+ signaturePath: "signature.value",
65
+ prefix: UserPolicyPrefix,
66
+ });
67
+ return ok;
68
+ }
69
+ /**
70
+ * Structural validation per §7.1 + the §7.3 op-kind rules.
71
+ *
72
+ * Singleton-shaped kinds (`semp.dev/first_contact`) accept only
73
+ * `modify`; list-shaped kinds accept `add`, `remove`, and `modify`
74
+ * with the entry_id rules in §7.3.
75
+ */
76
+ export function validateUserPolicyMessage(m, opts = {}) {
77
+ if (m.type !== UserPolicyType) {
78
+ throw new Error(`delivery: user policy type ${JSON.stringify(m.type)}, want ${UserPolicyType}`);
79
+ }
80
+ if (m.step !== UserPolicyStep) {
81
+ throw new Error(`delivery: user policy step ${JSON.stringify(m.step)}, want ${UserPolicyStep}`);
82
+ }
83
+ if (m.user_id === "") {
84
+ throw new Error("delivery: user policy missing user_id");
85
+ }
86
+ if (m.device_id === "") {
87
+ throw new Error("delivery: user policy missing device_id");
88
+ }
89
+ if (!Number.isInteger(m.policy_version) || m.policy_version < 1) {
90
+ throw new Error(`delivery: user policy policy_version ${m.policy_version} MUST be >= 1`);
91
+ }
92
+ if (typeof m.timestamp !== "string" || m.timestamp === "") {
93
+ throw new Error("delivery: user policy missing timestamp");
94
+ }
95
+ if (Number.isNaN(Date.parse(m.timestamp))) {
96
+ throw new Error("delivery: user policy timestamp is not ISO 8601");
97
+ }
98
+ if (!Array.isArray(m.operations) || m.operations.length === 0) {
99
+ throw new Error("delivery: user policy operations MUST be non-empty");
100
+ }
101
+ for (let i = 0; i < m.operations.length; i++) {
102
+ const op = m.operations[i];
103
+ validateOp(op, i);
104
+ }
105
+ if (typeof m.signature?.value !== "string") {
106
+ throw new Error("delivery: user policy signature.value must be a string");
107
+ }
108
+ if (!opts.skipSignatureCheck && m.signature.value === "") {
109
+ throw new Error("delivery: user policy is unsigned");
110
+ }
111
+ }
112
+ function validateOp(op, i) {
113
+ if (op.op !== "add" && op.op !== "remove" && op.op !== "modify") {
114
+ throw new Error(`delivery: user policy operations[${i}] op ${JSON.stringify(op.op)} is not in the closed set {add, remove, modify}`);
115
+ }
116
+ if (op.kind === "") {
117
+ throw new Error(`delivery: user policy operations[${i}] missing kind`);
118
+ }
119
+ // Singleton kinds accept only modify per §7.3.
120
+ if (op.kind === PolicyKindFirstContact) {
121
+ if (op.op !== "modify") {
122
+ throw new Error(`delivery: user policy operations[${i}] singleton kind ${JSON.stringify(op.kind)} accepts only modify, got ${op.op}`);
123
+ }
124
+ if (op.entry_id !== undefined && op.entry_id !== "") {
125
+ throw new Error(`delivery: user policy operations[${i}] singleton kind ${JSON.stringify(op.kind)} MUST NOT carry entry_id`);
126
+ }
127
+ if (op.entry === undefined || op.entry === null) {
128
+ throw new Error(`delivery: user policy operations[${i}] singleton kind ${JSON.stringify(op.kind)} modify MUST carry entry`);
129
+ }
130
+ }
131
+ // List-shaped kinds: remove/modify reference by entry_id; add
132
+ // supplies a new entry.
133
+ if (op.op === "remove" && (op.entry_id === undefined || op.entry_id === "")) {
134
+ throw new Error(`delivery: user policy operations[${i}] remove op MUST set entry_id`);
135
+ }
136
+ if (op.op === "add" && (op.entry === undefined || op.entry === null)) {
137
+ throw new Error(`delivery: user policy operations[${i}] add op MUST carry entry`);
138
+ }
139
+ }
140
+ //# sourceMappingURL=user_policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_policy.js","sourceRoot":"","sources":["../../src/delivery/user_policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Discovery result cache per DISCOVERY.md §6.1 + §7.3.
3
+ *
4
+ * Resolvers consult the cache before any DNS / HTTPS lookup and
5
+ * write fresh results back with the TTL declared by the source.
6
+ * Implementations MUST respect TTLs, invalidate entries on
7
+ * delivery failure, and encrypt cached results at rest where
8
+ * feasible (the in-memory reference does NOT encrypt; production
9
+ * deployments wrap a durable encrypted backend).
10
+ *
11
+ * @module
12
+ */
13
+ /** Default TTLs when the source declines to declare one. */
14
+ export declare const DefaultTTLSEMPMs: number;
15
+ export declare const DefaultTTLLegacyMs: number;
16
+ export declare const DefaultTTLNotFoundMs: number;
17
+ /**
18
+ * Discovery result cache interface.
19
+ *
20
+ * Keys are normalized by the cache implementation (lowercased) so
21
+ * that case-equivalent addresses share an entry.
22
+ */
23
+ export interface DiscoveryCache<T> {
24
+ get(address: string): Promise<T | null>;
25
+ put(address: string, value: T, ttlMs: number): Promise<void>;
26
+ invalidate(address: string): Promise<void>;
27
+ }
28
+ /** Reference in-memory {@link DiscoveryCache}. Single-process only. */
29
+ export declare class InMemoryDiscoveryCache<T> implements DiscoveryCache<T> {
30
+ private readonly entries;
31
+ private readonly nowFn;
32
+ constructor(nowFn?: () => Date);
33
+ get(address: string): Promise<T | null>;
34
+ put(address: string, value: T, ttlMs: number): Promise<void>;
35
+ invalidate(address: string): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/discovery/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,QAAiB,CAAC;AAC/C,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AACtD,eAAO,MAAM,oBAAoB,QAAiB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,uEAAuE;AACvE,qBAAa,sBAAsB,CAAC,CAAC,CAAE,YAAW,cAAc,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsD;IAC9E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,KAAK,GAAE,MAAM,IAAuB;IAI1C,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAavC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Discovery result cache per DISCOVERY.md §6.1 + §7.3.
3
+ *
4
+ * Resolvers consult the cache before any DNS / HTTPS lookup and
5
+ * write fresh results back with the TTL declared by the source.
6
+ * Implementations MUST respect TTLs, invalidate entries on
7
+ * delivery failure, and encrypt cached results at rest where
8
+ * feasible (the in-memory reference does NOT encrypt; production
9
+ * deployments wrap a durable encrypted backend).
10
+ *
11
+ * @module
12
+ */
13
+ /** Default TTLs when the source declines to declare one. */
14
+ export const DefaultTTLSEMPMs = 60 * 60 * 1000; // 1 hour
15
+ export const DefaultTTLLegacyMs = 24 * 60 * 60 * 1000; // 24 hours
16
+ export const DefaultTTLNotFoundMs = 60 * 60 * 1000; // 1 hour
17
+ /** Reference in-memory {@link DiscoveryCache}. Single-process only. */
18
+ export class InMemoryDiscoveryCache {
19
+ entries = new Map();
20
+ nowFn;
21
+ constructor(nowFn = () => new Date()) {
22
+ this.nowFn = nowFn;
23
+ }
24
+ async get(address) {
25
+ const k = address.toLowerCase();
26
+ const entry = this.entries.get(k);
27
+ if (entry === undefined) {
28
+ return null;
29
+ }
30
+ if (entry.expiresAt > 0 && this.nowFn().getTime() > entry.expiresAt) {
31
+ this.entries.delete(k);
32
+ return null;
33
+ }
34
+ return entry.value;
35
+ }
36
+ async put(address, value, ttlMs) {
37
+ const k = address.toLowerCase();
38
+ const expiresAt = ttlMs > 0 ? this.nowFn().getTime() + ttlMs : 0;
39
+ this.entries.set(k, { value, expiresAt });
40
+ }
41
+ async invalidate(address) {
42
+ this.entries.delete(address.toLowerCase());
43
+ }
44
+ }
45
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/discovery/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAc7D,uEAAuE;AACvE,MAAM,OAAO,sBAAsB;IAChB,OAAO,GAAG,IAAI,GAAG,EAA2C,CAAC;IAC7D,KAAK,CAAa;IAEnC,YAAY,QAAoB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,KAAQ,EAAE,KAAa;QAChD,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Well-known configuration document parsing per DISCOVERY.md §3.1.
3
+ *
4
+ * The bootstrapping path `/.well-known/semp/configuration` returns a
5
+ * JSON document that describes a server's capabilities, transport
6
+ * endpoints, API endpoints, and supported extensions. This module
7
+ * provides a typed shape and a validator that enforces the §3.2
8
+ * "fixed by the protocol" rules:
9
+ *
10
+ * - `type` MUST be `"SEMP_CONFIGURATION"`
11
+ * - `endpoints.client` and `endpoints.federation` MUST each contain
12
+ * at least an `h2` entry
13
+ * - `endpoints.register`, `endpoints.keys`, `endpoints.domain_keys`
14
+ * MUST be present
15
+ * - `suites` MUST contain at least `x25519-chacha20-poly1305`
16
+ * - `limits.max_envelope_size` MUST be present
17
+ *
18
+ * Unknown fields are preserved on the typed object via the
19
+ * index signature so callers can read forward-compatible additions
20
+ * without requiring a parser update.
21
+ *
22
+ * @module
23
+ */
24
+ /** Canonical well-known path. Fixed by the protocol per §3. */
25
+ export declare const WellKnownPath = "/.well-known/semp/configuration";
26
+ /** Document `type` discriminator. */
27
+ export declare const ConfigurationType = "SEMP_CONFIGURATION";
28
+ /**
29
+ * Maximum byte size accepted for a fetched well-known body. 64 KiB
30
+ * is large enough for any reasonable configuration (including rich
31
+ * extension maps) without letting a hostile server feed us
32
+ * gigabytes.
33
+ */
34
+ export declare const WellKnownMaxBytes: number;
35
+ /** Endpoint group: transport-identifier → URL. */
36
+ export type TransportEndpoints = Record<string, string>;
37
+ /** Endpoints object per §3.1.1. */
38
+ export interface ConfigEndpoints {
39
+ client: TransportEndpoints;
40
+ federation: TransportEndpoints;
41
+ register: string;
42
+ device_register?: string;
43
+ blocklist?: string;
44
+ keys: string;
45
+ domain_keys: string;
46
+ reputation?: string;
47
+ reputation_references?: string;
48
+ verify?: string;
49
+ reputation_transfer?: string;
50
+ backup?: string;
51
+ migration?: string;
52
+ transparency_log?: string;
53
+ attachment_storage?: string;
54
+ /** Forward-compatible: any unknown endpoint URL keys land here. */
55
+ [key: string]: string | TransportEndpoints | undefined;
56
+ }
57
+ /** Operational limits per §3.1.3. */
58
+ export interface ConfigLimits {
59
+ max_envelope_size: number;
60
+ /** Future limits land here without requiring a parser update. */
61
+ [key: string]: number | undefined;
62
+ }
63
+ /** Extension declaration per §3.1.4. */
64
+ export interface ConfigExtension {
65
+ id: string;
66
+ required: boolean;
67
+ }
68
+ /** Parsed well-known configuration document. */
69
+ export interface Configuration {
70
+ type: typeof ConfigurationType;
71
+ version: string;
72
+ domain: string;
73
+ revision: number;
74
+ ttl_seconds: number;
75
+ endpoints: ConfigEndpoints;
76
+ suites: string[];
77
+ limits: ConfigLimits;
78
+ extensions?: ConfigExtension[];
79
+ /** Forward-compatible: unknown top-level fields preserved here. */
80
+ [key: string]: unknown;
81
+ }
82
+ /**
83
+ * Validate and narrow a parsed JSON value into a {@link Configuration}.
84
+ * Throws with a descriptive message on the first protocol violation.
85
+ *
86
+ * The validator enforces the §3.2 mandatory-fixed rules (h2 baseline,
87
+ * x25519 baseline, max_envelope_size present) but is permissive about
88
+ * unknown fields per §3.1 ("Implementations MUST ignore unknown
89
+ * fields rather than failing").
90
+ */
91
+ export declare function parseConfiguration(value: unknown): Configuration;
92
+ export declare function isRecord(v: unknown): v is Record<string, unknown>;
93
+ export declare function requireString(obj: Record<string, unknown>, key: string): string;
94
+ export declare function requireInt(obj: Record<string, unknown>, key: string): number;
95
+ export declare function requireObject(obj: Record<string, unknown>, key: string): Record<string, unknown>;
96
+ export declare function requireStringArray(obj: Record<string, unknown>, key: string): string[];
97
+ //# sourceMappingURL=configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/discovery/configuration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,aAAa,oCAAoC,CAAC;AAE/D,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAE3C,kDAAkD;AAClD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;CACxD;AAED,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,iBAAiB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,mEAAmE;IACnE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAyDhE;AAKD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEjE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,EAAE,MAAM,GACV,MAAM,EAAE,CAWV"}