@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.
- package/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/brief/address.d.ts +77 -0
- package/dist/brief/address.d.ts.map +1 -0
- package/dist/brief/address.js +217 -0
- package/dist/brief/address.js.map +1 -0
- package/dist/brief/brief.d.ts +75 -0
- package/dist/brief/brief.d.ts.map +1 -0
- package/dist/brief/brief.js +56 -0
- package/dist/brief/brief.js.map +1 -0
- package/dist/brief/index.d.ts +11 -0
- package/dist/brief/index.d.ts.map +1 -0
- package/dist/brief/index.js +11 -0
- package/dist/brief/index.js.map +1 -0
- package/dist/canonical/index.d.ts +8 -0
- package/dist/canonical/index.d.ts.map +1 -0
- package/dist/canonical/index.js +8 -0
- package/dist/canonical/index.js.map +1 -0
- package/dist/canonical/marshal.d.ts +35 -0
- package/dist/canonical/marshal.d.ts.map +1 -0
- package/dist/canonical/marshal.js +107 -0
- package/dist/canonical/marshal.js.map +1 -0
- package/dist/clockskew/index.d.ts +52 -0
- package/dist/clockskew/index.d.ts.map +1 -0
- package/dist/clockskew/index.js +62 -0
- package/dist/clockskew/index.js.map +1 -0
- package/dist/closure/closure.d.ts +106 -0
- package/dist/closure/closure.d.ts.map +1 -0
- package/dist/closure/closure.js +152 -0
- package/dist/closure/closure.js.map +1 -0
- package/dist/closure/driver.d.ts +103 -0
- package/dist/closure/driver.d.ts.map +1 -0
- package/dist/closure/driver.js +126 -0
- package/dist/closure/driver.js.map +1 -0
- package/dist/closure/index.d.ts +13 -0
- package/dist/closure/index.d.ts.map +1 -0
- package/dist/closure/index.js +13 -0
- package/dist/closure/index.js.map +1 -0
- package/dist/closure/store.d.ts +80 -0
- package/dist/closure/store.d.ts.map +1 -0
- package/dist/closure/store.js +89 -0
- package/dist/closure/store.js.map +1 -0
- package/dist/crypto/aead.d.ts +29 -0
- package/dist/crypto/aead.d.ts.map +1 -0
- package/dist/crypto/aead.js +48 -0
- package/dist/crypto/aead.js.map +1 -0
- package/dist/crypto/argon2.d.ts +20 -0
- package/dist/crypto/argon2.d.ts.map +1 -0
- package/dist/crypto/argon2.js +28 -0
- package/dist/crypto/argon2.js.map +1 -0
- package/dist/crypto/index.d.ts +14 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +14 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/kdf.d.ts +96 -0
- package/dist/crypto/kdf.d.ts.map +1 -0
- package/dist/crypto/kdf.js +122 -0
- package/dist/crypto/kdf.js.map +1 -0
- package/dist/crypto/kem.d.ts +85 -0
- package/dist/crypto/kem.d.ts.map +1 -0
- package/dist/crypto/kem.js +130 -0
- package/dist/crypto/kem.js.map +1 -0
- package/dist/crypto/mac.d.ts +19 -0
- package/dist/crypto/mac.d.ts.map +1 -0
- package/dist/crypto/mac.js +32 -0
- package/dist/crypto/mac.js.map +1 -0
- package/dist/delivery/ack.d.ts +125 -0
- package/dist/delivery/ack.d.ts.map +1 -0
- package/dist/delivery/ack.js +141 -0
- package/dist/delivery/ack.js.map +1 -0
- package/dist/delivery/blocklist.d.ts +87 -0
- package/dist/delivery/blocklist.d.ts.map +1 -0
- package/dist/delivery/blocklist.js +107 -0
- package/dist/delivery/blocklist.js.map +1 -0
- package/dist/delivery/cancel.d.ts +60 -0
- package/dist/delivery/cancel.d.ts.map +1 -0
- package/dist/delivery/cancel.js +43 -0
- package/dist/delivery/cancel.js.map +1 -0
- package/dist/delivery/disposition.d.ts +106 -0
- package/dist/delivery/disposition.d.ts.map +1 -0
- package/dist/delivery/disposition.js +105 -0
- package/dist/delivery/disposition.js.map +1 -0
- package/dist/delivery/fetch.d.ts +59 -0
- package/dist/delivery/fetch.d.ts.map +1 -0
- package/dist/delivery/fetch.js +47 -0
- package/dist/delivery/fetch.js.map +1 -0
- package/dist/delivery/forwarder.d.ts +106 -0
- package/dist/delivery/forwarder.d.ts.map +1 -0
- package/dist/delivery/forwarder.js +251 -0
- package/dist/delivery/forwarder.js.map +1 -0
- package/dist/delivery/inbox.d.ts +42 -0
- package/dist/delivery/inbox.d.ts.map +1 -0
- package/dist/delivery/inbox.js +68 -0
- package/dist/delivery/inbox.js.map +1 -0
- package/dist/delivery/index.d.ts +31 -0
- package/dist/delivery/index.d.ts.map +1 -0
- package/dist/delivery/index.js +31 -0
- package/dist/delivery/index.js.map +1 -0
- package/dist/delivery/internalroute.d.ts +50 -0
- package/dist/delivery/internalroute.d.ts.map +1 -0
- package/dist/delivery/internalroute.js +23 -0
- package/dist/delivery/internalroute.js.map +1 -0
- package/dist/delivery/pipeline.d.ts +153 -0
- package/dist/delivery/pipeline.d.ts.map +1 -0
- package/dist/delivery/pipeline.js +356 -0
- package/dist/delivery/pipeline.js.map +1 -0
- package/dist/delivery/policy_state.d.ts +105 -0
- package/dist/delivery/policy_state.d.ts.map +1 -0
- package/dist/delivery/policy_state.js +293 -0
- package/dist/delivery/policy_state.js.map +1 -0
- package/dist/delivery/queue.d.ts +47 -0
- package/dist/delivery/queue.d.ts.map +1 -0
- package/dist/delivery/queue.js +33 -0
- package/dist/delivery/queue.js.map +1 -0
- package/dist/delivery/receipt.d.ts +137 -0
- package/dist/delivery/receipt.d.ts.map +1 -0
- package/dist/delivery/receipt.js +181 -0
- package/dist/delivery/receipt.js.map +1 -0
- package/dist/delivery/receipt_store.d.ts +81 -0
- package/dist/delivery/receipt_store.d.ts.map +1 -0
- package/dist/delivery/receipt_store.js +74 -0
- package/dist/delivery/receipt_store.js.map +1 -0
- package/dist/delivery/retry.d.ts +78 -0
- package/dist/delivery/retry.d.ts.map +1 -0
- package/dist/delivery/retry.js +132 -0
- package/dist/delivery/retry.js.map +1 -0
- package/dist/delivery/scheduler.d.ts +156 -0
- package/dist/delivery/scheduler.d.ts.map +1 -0
- package/dist/delivery/scheduler.js +349 -0
- package/dist/delivery/scheduler.js.map +1 -0
- package/dist/delivery/stage_partition.d.ts +87 -0
- package/dist/delivery/stage_partition.d.ts.map +1 -0
- package/dist/delivery/stage_partition.js +122 -0
- package/dist/delivery/stage_partition.js.map +1 -0
- package/dist/delivery/staged_runner.d.ts +100 -0
- package/dist/delivery/staged_runner.d.ts.map +1 -0
- package/dist/delivery/staged_runner.js +277 -0
- package/dist/delivery/staged_runner.js.map +1 -0
- package/dist/delivery/submission.d.ts +72 -0
- package/dist/delivery/submission.d.ts.map +1 -0
- package/dist/delivery/submission.js +58 -0
- package/dist/delivery/submission.js.map +1 -0
- package/dist/delivery/sync.d.ts +68 -0
- package/dist/delivery/sync.d.ts.map +1 -0
- package/dist/delivery/sync.js +99 -0
- package/dist/delivery/sync.js.map +1 -0
- package/dist/delivery/user_policy.d.ts +74 -0
- package/dist/delivery/user_policy.d.ts.map +1 -0
- package/dist/delivery/user_policy.js +140 -0
- package/dist/delivery/user_policy.js.map +1 -0
- package/dist/discovery/cache.d.ts +37 -0
- package/dist/discovery/cache.d.ts.map +1 -0
- package/dist/discovery/cache.js +45 -0
- package/dist/discovery/cache.js.map +1 -0
- package/dist/discovery/configuration.d.ts +97 -0
- package/dist/discovery/configuration.d.ts.map +1 -0
- package/dist/discovery/configuration.js +146 -0
- package/dist/discovery/configuration.js.map +1 -0
- package/dist/discovery/dns.d.ts +56 -0
- package/dist/discovery/dns.d.ts.map +1 -0
- package/dist/discovery/dns.js +120 -0
- package/dist/discovery/dns.js.map +1 -0
- package/dist/discovery/domain_keys.d.ts +62 -0
- package/dist/discovery/domain_keys.d.ts.map +1 -0
- package/dist/discovery/domain_keys.js +89 -0
- package/dist/discovery/domain_keys.js.map +1 -0
- package/dist/discovery/index.d.ts +19 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +19 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/lookup.d.ts +72 -0
- package/dist/discovery/lookup.d.ts.map +1 -0
- package/dist/discovery/lookup.js +121 -0
- package/dist/discovery/lookup.js.map +1 -0
- package/dist/discovery/onion.d.ts +34 -0
- package/dist/discovery/onion.d.ts.map +1 -0
- package/dist/discovery/onion.js +61 -0
- package/dist/discovery/onion.js.map +1 -0
- package/dist/discovery/partition.d.ts +96 -0
- package/dist/discovery/partition.d.ts.map +1 -0
- package/dist/discovery/partition.js +247 -0
- package/dist/discovery/partition.js.map +1 -0
- package/dist/discovery/resolver.d.ts +113 -0
- package/dist/discovery/resolver.d.ts.map +1 -0
- package/dist/discovery/resolver.js +176 -0
- package/dist/discovery/resolver.js.map +1 -0
- package/dist/discovery/txt.d.ts +39 -0
- package/dist/discovery/txt.d.ts.map +1 -0
- package/dist/discovery/txt.js +71 -0
- package/dist/discovery/txt.js.map +1 -0
- package/dist/enclosure/forwarding.d.ts +128 -0
- package/dist/enclosure/forwarding.d.ts.map +1 -0
- package/dist/enclosure/forwarding.js +119 -0
- package/dist/enclosure/forwarding.js.map +1 -0
- package/dist/enclosure/index.d.ts +11 -0
- package/dist/enclosure/index.d.ts.map +1 -0
- package/dist/enclosure/index.js +11 -0
- package/dist/enclosure/index.js.map +1 -0
- package/dist/envelope/buckets.d.ts +38 -0
- package/dist/envelope/buckets.d.ts.map +1 -0
- package/dist/envelope/buckets.js +73 -0
- package/dist/envelope/buckets.js.map +1 -0
- package/dist/envelope/canonical.d.ts +28 -0
- package/dist/envelope/canonical.d.ts.map +1 -0
- package/dist/envelope/canonical.js +54 -0
- package/dist/envelope/canonical.js.map +1 -0
- package/dist/envelope/compose.d.ts +171 -0
- package/dist/envelope/compose.d.ts.map +1 -0
- package/dist/envelope/compose.js +237 -0
- package/dist/envelope/compose.js.map +1 -0
- package/dist/envelope/encode.d.ts +41 -0
- package/dist/envelope/encode.d.ts.map +1 -0
- package/dist/envelope/encode.js +69 -0
- package/dist/envelope/encode.js.map +1 -0
- package/dist/envelope/index.d.ts +20 -0
- package/dist/envelope/index.d.ts.map +1 -0
- package/dist/envelope/index.js +20 -0
- package/dist/envelope/index.js.map +1 -0
- package/dist/envelope/open_any.d.ts +48 -0
- package/dist/envelope/open_any.d.ts.map +1 -0
- package/dist/envelope/open_any.js +81 -0
- package/dist/envelope/open_any.js.map +1 -0
- package/dist/envelope/open_verified.d.ts +59 -0
- package/dist/envelope/open_verified.d.ts.map +1 -0
- package/dist/envelope/open_verified.js +67 -0
- package/dist/envelope/open_verified.js.map +1 -0
- package/dist/envelope/padding.d.ts +55 -0
- package/dist/envelope/padding.d.ts.map +1 -0
- package/dist/envelope/padding.js +162 -0
- package/dist/envelope/padding.js.map +1 -0
- package/dist/envelope/rejection.d.ts +22 -0
- package/dist/envelope/rejection.d.ts.map +1 -0
- package/dist/envelope/rejection.js +30 -0
- package/dist/envelope/rejection.js.map +1 -0
- package/dist/envelope/sendtime.d.ts +49 -0
- package/dist/envelope/sendtime.d.ts.map +1 -0
- package/dist/envelope/sendtime.js +87 -0
- package/dist/envelope/sendtime.js.map +1 -0
- package/dist/envelope/verify.d.ts +29 -0
- package/dist/envelope/verify.d.ts.map +1 -0
- package/dist/envelope/verify.js +90 -0
- package/dist/envelope/verify.js.map +1 -0
- package/dist/extensions/index.d.ts +7 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +7 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/limits.d.ts +101 -0
- package/dist/extensions/limits.d.ts.map +1 -0
- package/dist/extensions/limits.js +175 -0
- package/dist/extensions/limits.js.map +1 -0
- package/dist/handshake/abort.d.ts +49 -0
- package/dist/handshake/abort.d.ts.map +1 -0
- package/dist/handshake/abort.js +82 -0
- package/dist/handshake/abort.js.map +1 -0
- package/dist/handshake/capabilities.d.ts +46 -0
- package/dist/handshake/capabilities.d.ts.map +1 -0
- package/dist/handshake/capabilities.js +114 -0
- package/dist/handshake/capabilities.js.map +1 -0
- package/dist/handshake/client_state.d.ts +186 -0
- package/dist/handshake/client_state.d.ts.map +1 -0
- package/dist/handshake/client_state.js +520 -0
- package/dist/handshake/client_state.js.map +1 -0
- package/dist/handshake/confirm.d.ts +21 -0
- package/dist/handshake/confirm.d.ts.map +1 -0
- package/dist/handshake/confirm.js +27 -0
- package/dist/handshake/confirm.js.map +1 -0
- package/dist/handshake/driver.d.ts +126 -0
- package/dist/handshake/driver.d.ts.map +1 -0
- package/dist/handshake/driver.js +251 -0
- package/dist/handshake/driver.js.map +1 -0
- package/dist/handshake/federation.d.ts +365 -0
- package/dist/handshake/federation.d.ts.map +1 -0
- package/dist/handshake/federation.js +664 -0
- package/dist/handshake/federation.js.map +1 -0
- package/dist/handshake/first_contact.d.ts +57 -0
- package/dist/handshake/first_contact.d.ts.map +1 -0
- package/dist/handshake/first_contact.js +124 -0
- package/dist/handshake/first_contact.js.map +1 -0
- package/dist/handshake/identity.d.ts +101 -0
- package/dist/handshake/identity.d.ts.map +1 -0
- package/dist/handshake/identity.js +117 -0
- package/dist/handshake/identity.js.map +1 -0
- package/dist/handshake/index.d.ts +21 -0
- package/dist/handshake/index.d.ts.map +1 -0
- package/dist/handshake/index.js +21 -0
- package/dist/handshake/index.js.map +1 -0
- package/dist/handshake/messages.d.ts +176 -0
- package/dist/handshake/messages.d.ts.map +1 -0
- package/dist/handshake/messages.js +125 -0
- package/dist/handshake/messages.js.map +1 -0
- package/dist/handshake/pow.d.ts +53 -0
- package/dist/handshake/pow.d.ts.map +1 -0
- package/dist/handshake/pow.js +142 -0
- package/dist/handshake/pow.js.map +1 -0
- package/dist/handshake/resume_driver.d.ts +56 -0
- package/dist/handshake/resume_driver.d.ts.map +1 -0
- package/dist/handshake/resume_driver.js +75 -0
- package/dist/handshake/resume_driver.js.map +1 -0
- package/dist/handshake/server.d.ts +112 -0
- package/dist/handshake/server.d.ts.map +1 -0
- package/dist/handshake/server.js +247 -0
- package/dist/handshake/server.js.map +1 -0
- package/dist/handshake/server_state.d.ts +102 -0
- package/dist/handshake/server_state.d.ts.map +1 -0
- package/dist/handshake/server_state.js +278 -0
- package/dist/handshake/server_state.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/compromise.d.ts +118 -0
- package/dist/keys/compromise.d.ts.map +1 -0
- package/dist/keys/compromise.js +218 -0
- package/dist/keys/compromise.js.map +1 -0
- package/dist/keys/device_certificate.d.ts +166 -0
- package/dist/keys/device_certificate.d.ts.map +1 -0
- package/dist/keys/device_certificate.js +328 -0
- package/dist/keys/device_certificate.js.map +1 -0
- package/dist/keys/device_records.d.ts +175 -0
- package/dist/keys/device_records.d.ts.map +1 -0
- package/dist/keys/device_records.js +418 -0
- package/dist/keys/device_records.js.map +1 -0
- package/dist/keys/directory_cache.d.ts +64 -0
- package/dist/keys/directory_cache.d.ts.map +1 -0
- package/dist/keys/directory_cache.js +98 -0
- package/dist/keys/directory_cache.js.map +1 -0
- package/dist/keys/directory_state.d.ts +79 -0
- package/dist/keys/directory_state.d.ts.map +1 -0
- package/dist/keys/directory_state.js +155 -0
- package/dist/keys/directory_state.js.map +1 -0
- package/dist/keys/index.d.ts +18 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +18 -0
- package/dist/keys/index.js.map +1 -0
- package/dist/keys/key_revocation.d.ts +61 -0
- package/dist/keys/key_revocation.d.ts.map +1 -0
- package/dist/keys/key_revocation.js +88 -0
- package/dist/keys/key_revocation.js.map +1 -0
- package/dist/keys/request.d.ts +124 -0
- package/dist/keys/request.d.ts.map +1 -0
- package/dist/keys/request.js +130 -0
- package/dist/keys/request.js.map +1 -0
- package/dist/keys/sign.d.ts +49 -0
- package/dist/keys/sign.d.ts.map +1 -0
- package/dist/keys/sign.js +80 -0
- package/dist/keys/sign.js.map +1 -0
- package/dist/keys/signed.d.ts +80 -0
- package/dist/keys/signed.d.ts.map +1 -0
- package/dist/keys/signed.js +138 -0
- package/dist/keys/signed.js.map +1 -0
- package/dist/keys/store.d.ts +138 -0
- package/dist/keys/store.d.ts.map +1 -0
- package/dist/keys/store.js +107 -0
- package/dist/keys/store.js.map +1 -0
- package/dist/largeattachment/crypto.d.ts +47 -0
- package/dist/largeattachment/crypto.d.ts.map +1 -0
- package/dist/largeattachment/crypto.js +235 -0
- package/dist/largeattachment/crypto.js.map +1 -0
- package/dist/largeattachment/enclosure.d.ts +48 -0
- package/dist/largeattachment/enclosure.d.ts.map +1 -0
- package/dist/largeattachment/enclosure.js +102 -0
- package/dist/largeattachment/enclosure.js.map +1 -0
- package/dist/largeattachment/index.d.ts +15 -0
- package/dist/largeattachment/index.d.ts.map +1 -0
- package/dist/largeattachment/index.js +15 -0
- package/dist/largeattachment/index.js.map +1 -0
- package/dist/largeattachment/store.d.ts +36 -0
- package/dist/largeattachment/store.d.ts.map +1 -0
- package/dist/largeattachment/store.js +37 -0
- package/dist/largeattachment/store.js.map +1 -0
- package/dist/largeattachment/types.d.ts +56 -0
- package/dist/largeattachment/types.d.ts.map +1 -0
- package/dist/largeattachment/types.js +31 -0
- package/dist/largeattachment/types.js.map +1 -0
- package/dist/largeattachment/upload.d.ts +62 -0
- package/dist/largeattachment/upload.d.ts.map +1 -0
- package/dist/largeattachment/upload.js +166 -0
- package/dist/largeattachment/upload.js.map +1 -0
- package/dist/migration/index.d.ts +17 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +17 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/lockout.d.ts +48 -0
- package/dist/migration/lockout.d.ts.map +1 -0
- package/dist/migration/lockout.js +57 -0
- package/dist/migration/lockout.js.map +1 -0
- package/dist/migration/migration.d.ts +48 -0
- package/dist/migration/migration.d.ts.map +1 -0
- package/dist/migration/migration.js +58 -0
- package/dist/migration/migration.js.map +1 -0
- package/dist/migration/notice.d.ts +33 -0
- package/dist/migration/notice.d.ts.map +1 -0
- package/dist/migration/notice.js +85 -0
- package/dist/migration/notice.js.map +1 -0
- package/dist/migration/orchestrate.d.ts +109 -0
- package/dist/migration/orchestrate.d.ts.map +1 -0
- package/dist/migration/orchestrate.js +212 -0
- package/dist/migration/orchestrate.js.map +1 -0
- package/dist/migration/publication_store.d.ts +34 -0
- package/dist/migration/publication_store.d.ts.map +1 -0
- package/dist/migration/publication_store.js +44 -0
- package/dist/migration/publication_store.js.map +1 -0
- package/dist/migration/sign.d.ts +65 -0
- package/dist/migration/sign.d.ts.map +1 -0
- package/dist/migration/sign.js +331 -0
- package/dist/migration/sign.js.map +1 -0
- package/dist/migration/types.d.ts +92 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +26 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/reasoncodes.d.ts +42 -0
- package/dist/reasoncodes.d.ts.map +1 -0
- package/dist/reasoncodes.js +80 -0
- package/dist/reasoncodes.js.map +1 -0
- package/dist/recovery/bundle.d.ts +34 -0
- package/dist/recovery/bundle.d.ts.map +1 -0
- package/dist/recovery/bundle.js +144 -0
- package/dist/recovery/bundle.js.map +1 -0
- package/dist/recovery/bundle_crypto.d.ts +60 -0
- package/dist/recovery/bundle_crypto.d.ts.map +1 -0
- package/dist/recovery/bundle_crypto.js +179 -0
- package/dist/recovery/bundle_crypto.js.map +1 -0
- package/dist/recovery/bundle_store.d.ts +57 -0
- package/dist/recovery/bundle_store.d.ts.map +1 -0
- package/dist/recovery/bundle_store.js +104 -0
- package/dist/recovery/bundle_store.js.map +1 -0
- package/dist/recovery/index.d.ts +19 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +19 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/recovery/manifest_crosscheck.d.ts +59 -0
- package/dist/recovery/manifest_crosscheck.d.ts.map +1 -0
- package/dist/recovery/manifest_crosscheck.js +59 -0
- package/dist/recovery/manifest_crosscheck.js.map +1 -0
- package/dist/recovery/shamir.d.ts +51 -0
- package/dist/recovery/shamir.d.ts.map +1 -0
- package/dist/recovery/shamir.js +181 -0
- package/dist/recovery/shamir.js.map +1 -0
- package/dist/recovery/sign.d.ts +61 -0
- package/dist/recovery/sign.d.ts.map +1 -0
- package/dist/recovery/sign.js +359 -0
- package/dist/recovery/sign.js.map +1 -0
- package/dist/recovery/types.d.ts +180 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/recovery/types.js +31 -0
- package/dist/recovery/types.js.map +1 -0
- package/dist/reputation/abuse_report.d.ts +62 -0
- package/dist/reputation/abuse_report.d.ts.map +1 -0
- package/dist/reputation/abuse_report.js +111 -0
- package/dist/reputation/abuse_report.js.map +1 -0
- package/dist/reputation/bucketize.d.ts +31 -0
- package/dist/reputation/bucketize.d.ts.map +1 -0
- package/dist/reputation/bucketize.js +77 -0
- package/dist/reputation/bucketize.js.map +1 -0
- package/dist/reputation/gossip.d.ts +24 -0
- package/dist/reputation/gossip.d.ts.map +1 -0
- package/dist/reputation/gossip.js +64 -0
- package/dist/reputation/gossip.js.map +1 -0
- package/dist/reputation/gossip_fetch.d.ts +64 -0
- package/dist/reputation/gossip_fetch.d.ts.map +1 -0
- package/dist/reputation/gossip_fetch.js +114 -0
- package/dist/reputation/gossip_fetch.js.map +1 -0
- package/dist/reputation/index.d.ts +20 -0
- package/dist/reputation/index.d.ts.map +1 -0
- package/dist/reputation/index.js +20 -0
- package/dist/reputation/index.js.map +1 -0
- package/dist/reputation/observation_store.d.ts +67 -0
- package/dist/reputation/observation_store.d.ts.map +1 -0
- package/dist/reputation/observation_store.js +171 -0
- package/dist/reputation/observation_store.js.map +1 -0
- package/dist/reputation/pow.d.ts +91 -0
- package/dist/reputation/pow.d.ts.map +1 -0
- package/dist/reputation/pow.js +209 -0
- package/dist/reputation/pow.js.map +1 -0
- package/dist/reputation/sign.d.ts +40 -0
- package/dist/reputation/sign.d.ts.map +1 -0
- package/dist/reputation/sign.js +202 -0
- package/dist/reputation/sign.js.map +1 -0
- package/dist/reputation/types.d.ts +133 -0
- package/dist/reputation/types.d.ts.map +1 -0
- package/dist/reputation/types.js +33 -0
- package/dist/reputation/types.js.map +1 -0
- package/dist/reputation/whois.d.ts +25 -0
- package/dist/reputation/whois.d.ts.map +1 -0
- package/dist/reputation/whois.js +20 -0
- package/dist/reputation/whois.js.map +1 -0
- package/dist/seal/index.d.ts +8 -0
- package/dist/seal/index.d.ts.map +1 -0
- package/dist/seal/index.js +8 -0
- package/dist/seal/index.js.map +1 -0
- package/dist/seal/wrap.d.ts +74 -0
- package/dist/seal/wrap.d.ts.map +1 -0
- package/dist/seal/wrap.js +213 -0
- package/dist/seal/wrap.js.map +1 -0
- package/dist/session/dispatcher.d.ts +65 -0
- package/dist/session/dispatcher.d.ts.map +1 -0
- package/dist/session/dispatcher.js +96 -0
- package/dist/session/dispatcher.js.map +1 -0
- package/dist/session/index.d.ts +15 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +15 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/rekey.d.ts +108 -0
- package/dist/session/rekey.d.ts.map +1 -0
- package/dist/session/rekey.js +207 -0
- package/dist/session/rekey.js.map +1 -0
- package/dist/session/rekey_seal.d.ts +66 -0
- package/dist/session/rekey_seal.d.ts.map +1 -0
- package/dist/session/rekey_seal.js +153 -0
- package/dist/session/rekey_seal.js.map +1 -0
- package/dist/session/resume.d.ts +125 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +263 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/session/session.d.ts +136 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +188 -0
- package/dist/session/session.js.map +1 -0
- package/dist/transparency/index.d.ts +13 -0
- package/dist/transparency/index.d.ts.map +1 -0
- package/dist/transparency/index.js +13 -0
- package/dist/transparency/index.js.map +1 -0
- package/dist/transparency/log.d.ts +61 -0
- package/dist/transparency/log.d.ts.map +1 -0
- package/dist/transparency/log.js +133 -0
- package/dist/transparency/log.js.map +1 -0
- package/dist/transparency/merkle.d.ts +59 -0
- package/dist/transparency/merkle.d.ts.map +1 -0
- package/dist/transparency/merkle.js +314 -0
- package/dist/transparency/merkle.js.map +1 -0
- package/dist/transparency/sign.d.ts +48 -0
- package/dist/transparency/sign.d.ts.map +1 -0
- package/dist/transparency/sign.js +140 -0
- package/dist/transparency/sign.js.map +1 -0
- package/dist/transparency/types.d.ts +97 -0
- package/dist/transparency/types.d.ts.map +1 -0
- package/dist/transparency/types.js +25 -0
- package/dist/transparency/types.js.map +1 -0
- package/dist/transport/h2.d.ts +163 -0
- package/dist/transport/h2.d.ts.map +1 -0
- package/dist/transport/h2.js +397 -0
- package/dist/transport/h2.js.map +1 -0
- package/dist/transport/index.d.ts +15 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +15 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/memory.d.ts +21 -0
- package/dist/transport/memory.d.ts.map +1 -0
- package/dist/transport/memory.js +112 -0
- package/dist/transport/memory.js.map +1 -0
- package/dist/transport/transport.d.ts +54 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +20 -0
- package/dist/transport/transport.js.map +1 -0
- package/dist/transport/ws.d.ts +40 -0
- package/dist/transport/ws.d.ts.map +1 -0
- package/dist/transport/ws.js +204 -0
- package/dist/transport/ws.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|