@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,141 @@
1
+ /**
2
+ * Per-attempt delivery acknowledgment objects per DELIVERY.md §1.
3
+ *
4
+ * A recipient server returns exactly one of three acknowledgments
5
+ * for every envelope delivery attempt:
6
+ *
7
+ * - `delivered` — accepted; carries a signed
8
+ * {@link "./receipt".DeliveryReceipt} per §1.1.1, MAY include a
9
+ * {@link RecipientStatus} per §1.6 if the sender matches the
10
+ * recipient's visibility rules.
11
+ * - `rejected` — explicitly refused with a reason code per §1.2.
12
+ * - `silent` — no response within the sender's timeout window
13
+ * per §1.3. The wire form for silent is "no response sent at
14
+ * all"; this module exposes a constant value the sending server
15
+ * uses internally to record the outcome on its own queue state.
16
+ *
17
+ * The {@link DeliveryAck} JSON shape is what the recipient server
18
+ * places in its response body (§1.1.1.5 example).
19
+ *
20
+ * @module
21
+ */
22
+ /** Maximum length of {@link RecipientStatus.message} per §1.6.2. */
23
+ export const MaxStatusMessageBytes = 256;
24
+ /**
25
+ * Build a `delivered` ack from a signed receipt and optional
26
+ * recipient status. Per §1.6.4 the caller is responsible for
27
+ * deciding whether `recipientStatus` should be attached at all
28
+ * (call {@link matchVisibility} first).
29
+ */
30
+ export function buildDeliveredAck(receipt, recipientStatus) {
31
+ const ack = {
32
+ acknowledgment: "delivered",
33
+ receipt,
34
+ };
35
+ if (recipientStatus !== undefined) {
36
+ ack.recipient_status = recipientStatus;
37
+ }
38
+ return ack;
39
+ }
40
+ /** Build a `rejected` ack with a reason code and optional reason text. */
41
+ export function buildRejectedAck(reasonCode, reason) {
42
+ const ack = {
43
+ acknowledgment: "rejected",
44
+ reason_code: reasonCode,
45
+ };
46
+ if (reason !== undefined && reason !== "") {
47
+ ack.reason = reason;
48
+ }
49
+ return ack;
50
+ }
51
+ /**
52
+ * Resolve visibility per §1.6.4. Returns true when the
53
+ * recipient_status should be attached to the acknowledgment.
54
+ *
55
+ * - `nobody` (default): never disclose, regardless of the allow list.
56
+ * - `everyone`: always disclose, regardless of the allow list.
57
+ * - `domains` / `servers` / `users`: walk the allow list looking for
58
+ * a match. The mode constrains which entry kinds are honored — in
59
+ * `domains` mode only entries with `type: "domain"`, etc.
60
+ * Mismatched entries in the allow list are ignored.
61
+ *
62
+ * All comparisons are case-insensitive. Multiple rules combine as a
63
+ * union: any matching entry returns true.
64
+ *
65
+ * A nil/undefined visibility (no configuration at all) is equivalent
66
+ * to mode=nobody.
67
+ */
68
+ export function matchVisibility(visibility, sender) {
69
+ if (visibility === undefined) {
70
+ return false;
71
+ }
72
+ switch (visibility.mode) {
73
+ case "nobody":
74
+ return false;
75
+ case "everyone":
76
+ return true;
77
+ case "domains":
78
+ case "servers":
79
+ case "users":
80
+ break;
81
+ default:
82
+ // Unknown mode — fail closed.
83
+ return false;
84
+ }
85
+ const senderAddress = (sender.address ?? "").toLowerCase();
86
+ const senderDomain = (sender.domain ?? "").toLowerCase();
87
+ const senderServer = (sender.server ?? "").toLowerCase();
88
+ const allow = visibility.allow ?? [];
89
+ for (const entry of allow) {
90
+ switch (entry.type) {
91
+ case "domain":
92
+ if (visibility.mode !== "domains") {
93
+ continue;
94
+ }
95
+ if (senderDomain !== "" &&
96
+ (entry.domain ?? "").toLowerCase() === senderDomain) {
97
+ return true;
98
+ }
99
+ break;
100
+ case "server":
101
+ if (visibility.mode !== "servers") {
102
+ continue;
103
+ }
104
+ if (senderServer !== "" &&
105
+ (entry.server ?? "").toLowerCase() === senderServer) {
106
+ return true;
107
+ }
108
+ break;
109
+ case "user":
110
+ if (visibility.mode !== "users") {
111
+ continue;
112
+ }
113
+ if (senderAddress !== "" &&
114
+ (entry.address ?? "").toLowerCase() === senderAddress) {
115
+ return true;
116
+ }
117
+ break;
118
+ default:
119
+ // Unknown entry type — skip.
120
+ break;
121
+ }
122
+ }
123
+ return false;
124
+ }
125
+ /**
126
+ * Validate a {@link RecipientStatus} per §1.6.2: the `message` field
127
+ * MUST NOT exceed 256 UTF-8 bytes, and `state` MUST be one of the
128
+ * three documented values. Throws on the first violation.
129
+ */
130
+ export function validateRecipientStatus(s) {
131
+ if (s.state !== "available" && s.state !== "away" && s.state !== "do_not_disturb") {
132
+ throw new Error(`recipient_status: invalid state ${JSON.stringify(s.state)}`);
133
+ }
134
+ if (s.message !== undefined) {
135
+ const byteLen = new TextEncoder().encode(s.message).length;
136
+ if (byteLen > MaxStatusMessageBytes) {
137
+ throw new Error(`recipient_status: message exceeds ${MaxStatusMessageBytes} UTF-8 bytes (${byteLen})`);
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=ack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ack.js","sourceRoot":"","sources":["../../src/delivery/ack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAmDH,oEAAoE;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAsBzC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAwB,EACxB,eAAiC;IAEjC,MAAM,GAAG,GAAgB;QACvB,cAAc,EAAE,WAAW;QAC3B,OAAO;KACR,CAAC;IACF,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,CAAC,gBAAgB,GAAG,eAAe,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAC9B,UAAsB,EACtB,MAAe;IAEf,MAAM,GAAG,GAAgB;QACvB,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,UAAU;KACxB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAkC,EAClC,MAAsB;IAEtB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,UAAU;YACb,OAAO,IAAI,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,OAAO;YACV,MAAM;QACR;YACE,8BAA8B;YAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,QAAQ;gBACX,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,SAAS;gBACX,CAAC;gBACD,IACE,YAAY,KAAK,EAAE;oBACnB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,EACnD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,SAAS;gBACX,CAAC;gBACD,IACE,YAAY,KAAK,EAAE;oBACnB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,EACnD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAChC,SAAS;gBACX,CAAC;gBACD,IACE,aAAa,KAAK,EAAE;oBACpB,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,aAAa,EACrD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM;YACR;gBACE,6BAA6B;gBAC7B,MAAM;QACV,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAAkB;IACxD,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,IAAI,OAAO,GAAG,qBAAqB,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,qCAAqC,qBAAqB,iBAAiB,OAAO,GAAG,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Per-user block list per DELIVERY.md §4.
3
+ *
4
+ * The list is server-readable only when explicitly decrypted by
5
+ * the owning user's authenticated client device. Production
6
+ * deployments store entries encrypted at rest per §6.3 and unwrap
7
+ * on demand.
8
+ *
9
+ * @module
10
+ */
11
+ import type { Acknowledgment } from "./ack.js";
12
+ /** Entity kinds per §4.3. */
13
+ export type BlocklistEntityType = "user" | "domain" | "server";
14
+ /** Delivery-time applicability per §4.4. */
15
+ export type BlocklistScope = "all" | "direct" | "group";
16
+ /** One entry in a {@link BlockList}. */
17
+ export interface BlockEntry {
18
+ id: string;
19
+ entity: BlocklistEntity;
20
+ acknowledgment: Acknowledgment;
21
+ reason?: string;
22
+ scope: BlocklistScope;
23
+ /** ISO 8601 UTC. */
24
+ created_at: string;
25
+ /** ISO 8601 UTC; absent for permanent blocks. */
26
+ expires_at?: string;
27
+ created_by_device_id: string;
28
+ extensions?: Record<string, unknown>;
29
+ }
30
+ /**
31
+ * Block-list entity. Only the field appropriate for `type` is
32
+ * populated.
33
+ */
34
+ export interface BlocklistEntity {
35
+ type: BlocklistEntityType;
36
+ /** Required when `type === "user"`. */
37
+ address?: string;
38
+ /** Required when `type === "domain"`. */
39
+ domain?: string;
40
+ /** Required when `type === "server"`. */
41
+ hostname?: string;
42
+ }
43
+ /** A user's full block list per §4.1. */
44
+ export interface BlockList {
45
+ user_id: string;
46
+ list_version: number;
47
+ entries: BlockEntry[];
48
+ }
49
+ /** Sender-side identifiers used by {@link matchBlockList}. */
50
+ export interface BlockListSender {
51
+ /** Full sender address from `brief.from`. */
52
+ address?: string;
53
+ /** Verified sender domain from `postmark.from_domain`. */
54
+ domain?: string;
55
+ /** SEMP server hostname through which the envelope was routed. */
56
+ server?: string;
57
+ /** True when the envelope is part of a group / mailing-list thread. */
58
+ isGroup?: boolean;
59
+ }
60
+ /**
61
+ * Return the most-specific entry that matches `sender`, or null
62
+ * when no entry applies. Entity-type precedence per §4.4:
63
+ * `user > server > domain`.
64
+ *
65
+ * Entries past `expires_at` are skipped (no clock-skew tolerance
66
+ * applied here — callers that want the §4.4 grace window evaluate
67
+ * expiry themselves).
68
+ *
69
+ * All comparisons are case-insensitive.
70
+ */
71
+ export declare function matchBlockList(list: BlockList | null, sender: BlockListSender, now?: Date): BlockEntry | null;
72
+ /**
73
+ * Minimal lookup interface the delivery pipeline consumes at step
74
+ * 8 of DELIVERY.md §2. Implementations return the recipient's full
75
+ * block list. Returning null is the canonical "no list configured"
76
+ * answer and is treated as "no entries match".
77
+ */
78
+ export interface BlockListLookup {
79
+ lookup(recipient: string): Promise<BlockList | null>;
80
+ }
81
+ /** Trivial in-memory {@link BlockListLookup} keyed by recipient address. */
82
+ export declare class StaticBlockListLookup implements BlockListLookup {
83
+ private readonly lists;
84
+ constructor(lists?: Record<string, BlockList>);
85
+ lookup(recipient: string): Promise<BlockList | null>;
86
+ }
87
+ //# sourceMappingURL=blocklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklist.d.ts","sourceRoot":"","sources":["../../src/delivery/blocklist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,6BAA6B;AAC7B,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,GAAG,IAAI,EACtB,MAAM,EAAE,eAAe,EACvB,GAAG,GAAE,IAAiB,GACrB,UAAU,GAAG,IAAI,CAkEnB;AAgBD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;CACtD;AAED,4EAA4E;AAC5E,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;gBAEnC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAM;IAO3C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAG3D"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Per-user block list per DELIVERY.md §4.
3
+ *
4
+ * The list is server-readable only when explicitly decrypted by
5
+ * the owning user's authenticated client device. Production
6
+ * deployments store entries encrypted at rest per §6.3 and unwrap
7
+ * on demand.
8
+ *
9
+ * @module
10
+ */
11
+ /**
12
+ * Return the most-specific entry that matches `sender`, or null
13
+ * when no entry applies. Entity-type precedence per §4.4:
14
+ * `user > server > domain`.
15
+ *
16
+ * Entries past `expires_at` are skipped (no clock-skew tolerance
17
+ * applied here — callers that want the §4.4 grace window evaluate
18
+ * expiry themselves).
19
+ *
20
+ * All comparisons are case-insensitive.
21
+ */
22
+ export function matchBlockList(list, sender, now = new Date()) {
23
+ if (list === null || list.entries.length === 0) {
24
+ return null;
25
+ }
26
+ const address = (sender.address ?? "").toLowerCase();
27
+ const domain = (sender.domain ?? "").toLowerCase();
28
+ const server = (sender.server ?? "").toLowerCase();
29
+ const isGroup = sender.isGroup ?? false;
30
+ const RANK_DOMAIN = 1;
31
+ const RANK_SERVER = 2;
32
+ const RANK_USER = 3;
33
+ let bestRank = 0;
34
+ let bestEntry = null;
35
+ for (const entry of list.entries) {
36
+ if (entry.expires_at !== undefined && entry.expires_at !== "") {
37
+ const exp = Date.parse(entry.expires_at);
38
+ if (!Number.isNaN(exp) && exp <= now.getTime()) {
39
+ continue;
40
+ }
41
+ }
42
+ if (!scopeApplies(entry.scope, isGroup)) {
43
+ continue;
44
+ }
45
+ let rank = 0;
46
+ switch (entry.entity.type) {
47
+ case "user":
48
+ if (address === "" ||
49
+ (entry.entity.address ?? "").toLowerCase() !== address) {
50
+ continue;
51
+ }
52
+ rank = RANK_USER;
53
+ break;
54
+ case "server":
55
+ if (server === "" ||
56
+ (entry.entity.hostname ?? "").toLowerCase() !== server) {
57
+ continue;
58
+ }
59
+ rank = RANK_SERVER;
60
+ break;
61
+ case "domain":
62
+ if (domain === "" ||
63
+ (entry.entity.domain ?? "").toLowerCase() !== domain) {
64
+ continue;
65
+ }
66
+ rank = RANK_DOMAIN;
67
+ break;
68
+ default:
69
+ continue; // unknown entity type — forward-compat ignore
70
+ }
71
+ if (rank > bestRank) {
72
+ bestRank = rank;
73
+ bestEntry = entry;
74
+ if (bestRank === RANK_USER) {
75
+ return bestEntry;
76
+ }
77
+ }
78
+ }
79
+ return bestEntry;
80
+ }
81
+ function scopeApplies(scope, isGroup) {
82
+ switch (scope) {
83
+ case "all":
84
+ return true;
85
+ case "direct":
86
+ return !isGroup;
87
+ case "group":
88
+ return isGroup;
89
+ default:
90
+ // Empty/unknown scope: forward-compat treats as "all".
91
+ return scope === undefined || scope === "";
92
+ }
93
+ }
94
+ /** Trivial in-memory {@link BlockListLookup} keyed by recipient address. */
95
+ export class StaticBlockListLookup {
96
+ lists;
97
+ constructor(lists = {}) {
98
+ this.lists = new Map();
99
+ for (const [k, v] of Object.entries(lists)) {
100
+ this.lists.set(k.toLowerCase(), v);
101
+ }
102
+ }
103
+ async lookup(recipient) {
104
+ return this.lists.get(recipient.toLowerCase()) ?? null;
105
+ }
106
+ }
107
+ //# sourceMappingURL=blocklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../src/delivery/blocklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * SEMP_SUBMISSION cancel / cancel_response wire shapes per
3
+ * DELIVERY.md §2.7.
4
+ *
5
+ * @module
6
+ */
7
+ import { type QueueRecordState } from "./queue.js";
8
+ import { type SubmissionStep, SubmissionType } from "./submission.js";
9
+ /**
10
+ * SEMP_SUBMISSION cancel request per §2.7.1 / CLIENT.md §6.6.
11
+ *
12
+ * The client identifies the target envelope by `envelope_id`. An
13
+ * optional `recipient` narrows cancellation to one queue-state
14
+ * record; an empty / absent `recipient` means whole-envelope cancel
15
+ * (every still-non-terminal record).
16
+ */
17
+ export interface CancelRequest {
18
+ type: typeof SubmissionType;
19
+ step: "cancel";
20
+ version: string;
21
+ envelope_id: string;
22
+ recipient?: string;
23
+ /** ISO 8601 UTC. */
24
+ timestamp: string;
25
+ }
26
+ /** Construct a {@link CancelRequest}. */
27
+ export declare function newCancelRequest(envelopeId: string, opts?: {
28
+ recipient?: string;
29
+ nowFn?: () => Date;
30
+ }): CancelRequest;
31
+ /** One entry in {@link CancelResponse.results} per §2.7.2. */
32
+ export interface CancelResult {
33
+ recipient: string;
34
+ state: QueueRecordState;
35
+ /**
36
+ * Optional human-readable explanation for unusual outcomes
37
+ * (e.g. "already delivered, cancellation no-op per §2.7.4").
38
+ */
39
+ reason?: string;
40
+ }
41
+ /**
42
+ * Per-record summary returned by the sending server per §2.7.2.
43
+ *
44
+ * A no-op (record was already terminal) returns the prior terminal
45
+ * state without changing it; the caller distinguishes by comparing
46
+ * `state` to the expected `"canceled"`.
47
+ */
48
+ export interface CancelResponse {
49
+ type: typeof SubmissionType;
50
+ step: "cancel_response";
51
+ version: string;
52
+ envelope_id: string;
53
+ /** ISO 8601 UTC. */
54
+ timestamp: string;
55
+ results: CancelResult[];
56
+ }
57
+ /** Construct a {@link CancelResponse}. */
58
+ export declare function newCancelResponse(envelopeId: string, results: CancelResult[], nowFn?: () => Date): CancelResponse;
59
+ export type { SubmissionStep };
60
+ //# sourceMappingURL=cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/delivery/cancel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,KAAK,cAAc,EACnB,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CAAO,GACpD,aAAa,CAef;AAED,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,GAAE,MAAM,IAAuB,GACnC,cAAc,CAYhB;AAID,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * SEMP_SUBMISSION cancel / cancel_response wire shapes per
3
+ * DELIVERY.md §2.7.
4
+ *
5
+ * @module
6
+ */
7
+ import {} from "./queue.js";
8
+ import { SubmissionType, SubmissionVersion, } from "./submission.js";
9
+ /** Construct a {@link CancelRequest}. */
10
+ export function newCancelRequest(envelopeId, opts = {}) {
11
+ if (envelopeId === "") {
12
+ throw new Error("delivery: empty envelope_id");
13
+ }
14
+ const r = {
15
+ type: SubmissionType,
16
+ step: "cancel",
17
+ version: SubmissionVersion,
18
+ envelope_id: envelopeId,
19
+ timestamp: isoSecond((opts.nowFn ?? (() => new Date()))()),
20
+ };
21
+ if (opts.recipient !== undefined && opts.recipient !== "") {
22
+ r.recipient = opts.recipient;
23
+ }
24
+ return r;
25
+ }
26
+ /** Construct a {@link CancelResponse}. */
27
+ export function newCancelResponse(envelopeId, results, nowFn = () => new Date()) {
28
+ if (envelopeId === "") {
29
+ throw new Error("delivery: empty envelope_id");
30
+ }
31
+ return {
32
+ type: SubmissionType,
33
+ step: "cancel_response",
34
+ version: SubmissionVersion,
35
+ envelope_id: envelopeId,
36
+ timestamp: isoSecond(nowFn()),
37
+ results,
38
+ };
39
+ }
40
+ function isoSecond(d) {
41
+ return d.toISOString().replace(/\.\d{3}Z$/, "Z");
42
+ }
43
+ //# sourceMappingURL=cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/delivery/cancel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAyB,MAAM,YAAY,CAAC;AACnD,OAAO,EAEL,cAAc,EACd,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAoBzB,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,OAAmD,EAAE;IAErD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,CAAC,GAAkB;QACvB,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;QAC1D,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AA8BD,0CAA0C;AAC1C,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,OAAuB,EACvB,QAAoB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IAEpC,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC;AAMD,SAAS,SAAS,CAAC,CAAO;IACxB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Delivery disposition data per DELIVERY.md §3.2 + CLIENT.md §4.5.7.
3
+ *
4
+ * The `delivery-disposition` sync kind is the control signal a
5
+ * staged device emits to tell the home server whether a held
6
+ * envelope should advance to the next stage or be suppressed.
7
+ *
8
+ * @module
9
+ */
10
+ /** The literal `kind` string identifying a delivery-disposition sync marker. */
11
+ export declare const DispositionKind = "delivery-disposition";
12
+ /** Disposition decision per CLIENT.md §4.5.7. */
13
+ export type DispositionDecision = "advance" | "suppress";
14
+ /** Recommended reason tags per CLIENT.md §4.5.7. Operators MAY define more. */
15
+ export declare const DispositionReasonSpam = "spam";
16
+ export declare const DispositionReasonAccepted = "accepted";
17
+ export declare const DispositionReasonPolicy = "policy";
18
+ export declare const DispositionReasonOther = "other";
19
+ /**
20
+ * Payload of a `delivery-disposition` sync marker. Carries the
21
+ * inner `data` object of the `semp.dev/device-sync` extension when
22
+ * the extension's `kind` is `"delivery-disposition"`.
23
+ */
24
+ export interface Disposition {
25
+ kind: typeof DispositionKind;
26
+ source_envelope_id: string;
27
+ disposition: DispositionDecision;
28
+ reason?: string;
29
+ device_id: string;
30
+ }
31
+ /**
32
+ * Validate `d` is structurally well-formed per CLIENT.md §4.5.7.
33
+ * Does NOT verify authentication; the home server verifies §3.2.5
34
+ * (session belongs to `device_id`) at receipt.
35
+ */
36
+ export declare function validateDisposition(d: Disposition): void;
37
+ /** Outcome of aggregating dispositions at one stage per §3.2.3. */
38
+ export type StageOutcome = "advance" | "suppress";
39
+ /**
40
+ * Apply the §3.2.3 conservative aggregation rule across the
41
+ * dispositions collected at one stage:
42
+ *
43
+ * - If any disposition is `suppress`, return `"suppress"`.
44
+ * - Otherwise return `"advance"` (covers "any advance" and "no
45
+ * dispositions at all" via §3.2.4 fail-open on timeout).
46
+ *
47
+ * Does NOT itself enforce the §3.2.5 authentication rules; the
48
+ * caller filters out late or off-stage dispositions before
49
+ * aggregating.
50
+ */
51
+ export declare function aggregateDispositions(ds: Disposition[]): StageOutcome;
52
+ /**
53
+ * Recommended stage timeout per DELIVERY.md §3.2.2. Operators MAY
54
+ * configure longer windows.
55
+ */
56
+ export declare const DefaultStageTimeoutMs = 30000;
57
+ /**
58
+ * One stage's pending-device set inside a {@link StagedHeld}
59
+ * record per §3.2.2.
60
+ */
61
+ export interface StagedHeldStage {
62
+ /** 1-based stage index; lower delivers first. */
63
+ stage: number;
64
+ /**
65
+ * Devices at this stage that the held envelope was wrapped for
66
+ * and that have not yet emitted a disposition.
67
+ */
68
+ pending_device_ids: string[];
69
+ /** Dispositions collected so far at this stage. */
70
+ dispositions: Disposition[];
71
+ }
72
+ /**
73
+ * One envelope held in the staged-delivery queue per §3.2.2. The
74
+ * envelope itself is NOT stored twice — this record is the
75
+ * per-stage pointer set the server maintains.
76
+ */
77
+ export interface StagedHeld {
78
+ /** `postmark.id` of the held envelope. */
79
+ envelope_id: string;
80
+ /**
81
+ * Ordered list of stages still to deliver. `stages[0]` is the
82
+ * current pending stage; lower stages have already delivered or
83
+ * been bypassed.
84
+ */
85
+ stages: StagedHeldStage[];
86
+ /**
87
+ * Wall-clock time at which the current stage times out (set by
88
+ * the home server when entering a stage). ISO 8601 UTC. Empty
89
+ * string means "no deadline set".
90
+ */
91
+ deadline: string;
92
+ }
93
+ /**
94
+ * Whether the wait at the current stage MUST terminate per §3.2.2.
95
+ * Either every device at the stage has emitted a disposition, or
96
+ * the deadline has passed.
97
+ *
98
+ * Does NOT return the outcome; the caller follows up with
99
+ * {@link aggregateDispositions} to compute that.
100
+ *
101
+ * @param stage - the current stage record
102
+ * @param now - current wall-clock
103
+ * @param deadline - ISO 8601 UTC string; empty means "no deadline"
104
+ */
105
+ export declare function isStageComplete(stage: StagedHeldStage, now: Date, deadline: string): boolean;
106
+ //# sourceMappingURL=disposition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.d.ts","sourceRoot":"","sources":["../../src/delivery/disposition.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gFAAgF;AAChF,eAAO,MAAM,eAAe,yBAAyB,CAAC;AAEtD,iDAAiD;AACjD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzD,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAC5C,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAChD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,eAAe,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,mBAAmB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAuBxD;AAED,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,YAAY,CAOrE;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,mDAAmD;IACnD,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,IAAI,EACT,QAAQ,EAAE,MAAM,GACf,OAAO,CAyBT"}