@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,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-user authoritative policy view per DELIVERY.md §7.2.
|
|
3
|
+
*
|
|
4
|
+
* `applyPolicyMessage` takes a verified {@link UserPolicyMessage} and
|
|
5
|
+
* either applies every operation atomically (advancing
|
|
6
|
+
* `policy_version`) or rejects the whole message without mutating
|
|
7
|
+
* state. Atomicity is the §7.2 guarantee: a single unrecognized kind
|
|
8
|
+
* rejects the whole message; unrelated operations in the same
|
|
9
|
+
* message MUST NOT be applied.
|
|
10
|
+
*
|
|
11
|
+
* Apply does NOT verify the signature on the message — callers MUST
|
|
12
|
+
* run {@link verifyUserPolicyMessage} before invoking
|
|
13
|
+
* {@link PolicyState.apply}.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { PolicyKindAcceptedSender, PolicyKindBlock, PolicyKindFirstContact, validateUserPolicyMessage, } from "./user_policy.js";
|
|
18
|
+
/** §7.3 default rule kinds for v1.0.0. */
|
|
19
|
+
export function defaultPolicyKinds() {
|
|
20
|
+
return [PolicyKindBlock, PolicyKindAcceptedSender, PolicyKindFirstContact];
|
|
21
|
+
}
|
|
22
|
+
/** Typed error wrapping a structured policy rejection. */
|
|
23
|
+
export class PolicyApplyError extends Error {
|
|
24
|
+
code;
|
|
25
|
+
details;
|
|
26
|
+
name = "PolicyApplyError";
|
|
27
|
+
constructor(code, details = {}) {
|
|
28
|
+
super(messageFor(code, details));
|
|
29
|
+
this.code = code;
|
|
30
|
+
this.details = details;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function messageFor(code, d) {
|
|
34
|
+
switch (code) {
|
|
35
|
+
case "policy_kind_unsupported":
|
|
36
|
+
return `delivery: policy operation[${d.opIndex ?? 0}] kind ${JSON.stringify(d.kind ?? "")} is not supported`;
|
|
37
|
+
case "policy_op_invalid":
|
|
38
|
+
return d.detail !== undefined && d.detail !== ""
|
|
39
|
+
? `delivery: policy operation[${d.opIndex ?? 0}] is invalid: ${d.detail}`
|
|
40
|
+
: `delivery: policy operation[${d.opIndex ?? 0}] is invalid`;
|
|
41
|
+
case "policy_version_stale":
|
|
42
|
+
return `delivery: submitted policy_version ${d.submittedVersion ?? 0} is not greater than current ${d.currentVersion ?? 0}`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Per-user policy state. Concurrency-safe within a single JS event
|
|
47
|
+
* loop (no async mutation between read-modify-write).
|
|
48
|
+
*
|
|
49
|
+
* Does NOT enforce DELIVERY.md §7.5 encrypted-at-rest storage —
|
|
50
|
+
* that is the persistence layer's responsibility.
|
|
51
|
+
*/
|
|
52
|
+
export class PolicyState {
|
|
53
|
+
userIdValue;
|
|
54
|
+
supportedKinds;
|
|
55
|
+
policyVersionValue = 0;
|
|
56
|
+
lastTimestampValue = "";
|
|
57
|
+
listEntriesMap = new Map();
|
|
58
|
+
singletonsMap = new Map();
|
|
59
|
+
/**
|
|
60
|
+
* @param userId - the account this state belongs to
|
|
61
|
+
* @param kinds - rule kinds to register; defaults to {@link defaultPolicyKinds}
|
|
62
|
+
*/
|
|
63
|
+
constructor(userId, kinds) {
|
|
64
|
+
if (userId === "") {
|
|
65
|
+
throw new Error("delivery: policy state requires user_id");
|
|
66
|
+
}
|
|
67
|
+
const ks = kinds === undefined || kinds.length === 0 ? defaultPolicyKinds() : kinds;
|
|
68
|
+
this.userIdValue = userId;
|
|
69
|
+
this.supportedKinds = new Set();
|
|
70
|
+
for (const k of ks) {
|
|
71
|
+
if (k === "") {
|
|
72
|
+
throw new Error("delivery: policy state cannot register empty kind");
|
|
73
|
+
}
|
|
74
|
+
this.supportedKinds.add(k);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Account this state belongs to. */
|
|
78
|
+
userId() {
|
|
79
|
+
return this.userIdValue;
|
|
80
|
+
}
|
|
81
|
+
/** Current policy_version per §7.2. Zero before any message has been applied. */
|
|
82
|
+
currentVersion() {
|
|
83
|
+
return this.policyVersionValue;
|
|
84
|
+
}
|
|
85
|
+
/** Timestamp of the most recently applied message; `""` before any apply. */
|
|
86
|
+
lastTimestamp() {
|
|
87
|
+
return this.lastTimestampValue;
|
|
88
|
+
}
|
|
89
|
+
/** Whether `kind` is registered for this state. */
|
|
90
|
+
supportsKind(kind) {
|
|
91
|
+
return this.supportedKinds.has(kind);
|
|
92
|
+
}
|
|
93
|
+
/** Registered kinds, lexically sorted. */
|
|
94
|
+
registeredKinds() {
|
|
95
|
+
return Array.from(this.supportedKinds.values()).sort();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Apply `m` atomically per §7.2. On success advances
|
|
99
|
+
* `policy_version` and applies every operation. On any per-message
|
|
100
|
+
* failure throws a {@link PolicyApplyError} with structured
|
|
101
|
+
* details and leaves state unchanged.
|
|
102
|
+
*
|
|
103
|
+
* Caller MUST have run {@link verifyUserPolicyMessage} first.
|
|
104
|
+
*/
|
|
105
|
+
apply(m) {
|
|
106
|
+
try {
|
|
107
|
+
validateUserPolicyMessage(m);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
// Translate per-op validate failures into a typed
|
|
111
|
+
// policy_op_invalid; structural failures propagate as-is.
|
|
112
|
+
const probe = classifyOpInvalid(err instanceof Error ? err.message : String(err), m);
|
|
113
|
+
if (probe !== null) {
|
|
114
|
+
throw new PolicyApplyError("policy_op_invalid", {
|
|
115
|
+
kind: probe.kind,
|
|
116
|
+
opIndex: probe.opIndex,
|
|
117
|
+
detail: probe.detail,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
throw err instanceof Error
|
|
121
|
+
? new Error(`delivery: policy validate: ${err.message}`)
|
|
122
|
+
: new Error(`delivery: policy validate: ${String(err)}`);
|
|
123
|
+
}
|
|
124
|
+
if (m.user_id !== this.userIdValue) {
|
|
125
|
+
throw new Error(`delivery: policy message user_id ${JSON.stringify(m.user_id)} does not match state user_id ${JSON.stringify(this.userIdValue)}`);
|
|
126
|
+
}
|
|
127
|
+
// §7.2 ordering: monotonic policy_version with later-timestamp
|
|
128
|
+
// tie-break for equal versions. A submission whose (version,
|
|
129
|
+
// timestamp) is not strictly after the current state is stale.
|
|
130
|
+
const submittedTime = Date.parse(m.timestamp);
|
|
131
|
+
const lastTime = this.lastTimestampValue === ""
|
|
132
|
+
? -Infinity
|
|
133
|
+
: Date.parse(this.lastTimestampValue);
|
|
134
|
+
if (m.policy_version < this.policyVersionValue ||
|
|
135
|
+
(m.policy_version === this.policyVersionValue && submittedTime <= lastTime)) {
|
|
136
|
+
throw new PolicyApplyError("policy_version_stale", {
|
|
137
|
+
submittedVersion: m.policy_version,
|
|
138
|
+
currentVersion: this.policyVersionValue,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Pre-flight every op for unsupported-kind before mutating —
|
|
142
|
+
// §7.2 atomicity.
|
|
143
|
+
for (let i = 0; i < m.operations.length; i++) {
|
|
144
|
+
const op = m.operations[i];
|
|
145
|
+
if (!this.supportedKinds.has(op.kind)) {
|
|
146
|
+
throw new PolicyApplyError("policy_kind_unsupported", {
|
|
147
|
+
kind: op.kind,
|
|
148
|
+
opIndex: i,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Apply.
|
|
153
|
+
for (const op of m.operations) {
|
|
154
|
+
this.applyOp(op);
|
|
155
|
+
}
|
|
156
|
+
this.policyVersionValue = m.policy_version;
|
|
157
|
+
this.lastTimestampValue = m.timestamp;
|
|
158
|
+
}
|
|
159
|
+
applyOp(op) {
|
|
160
|
+
if (op.kind === PolicyKindFirstContact) {
|
|
161
|
+
// Singleton: modify is upsert; add/remove rejected upstream.
|
|
162
|
+
this.singletonsMap.set(op.kind, deepClone(op.entry));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// List-shaped kinds.
|
|
166
|
+
let bucket = this.listEntriesMap.get(op.kind);
|
|
167
|
+
if (bucket === undefined) {
|
|
168
|
+
bucket = new Map();
|
|
169
|
+
this.listEntriesMap.set(op.kind, bucket);
|
|
170
|
+
}
|
|
171
|
+
if (op.op === "add" || op.op === "modify") {
|
|
172
|
+
const id = entryIdFor(op);
|
|
173
|
+
if (id === "") {
|
|
174
|
+
// Skip silently rather than inserting under "" so callers
|
|
175
|
+
// see the no-op rather than a corrupted bucket.
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
bucket.set(id, deepClone(op.entry));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (op.op === "remove") {
|
|
182
|
+
if (op.entry_id !== undefined && op.entry_id !== "") {
|
|
183
|
+
bucket.delete(op.entry_id);
|
|
184
|
+
}
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/** Deep copy of the entries currently held for `kind`, keyed by entry id. */
|
|
189
|
+
listEntries(kind) {
|
|
190
|
+
const src = this.listEntriesMap.get(kind);
|
|
191
|
+
const out = {};
|
|
192
|
+
if (src === undefined) {
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
195
|
+
for (const [id, v] of src) {
|
|
196
|
+
out[id] = deepClone(v);
|
|
197
|
+
}
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Copy of the current singleton entry for `kind`, or `undefined`
|
|
202
|
+
* if none has been set.
|
|
203
|
+
*/
|
|
204
|
+
singleton(kind) {
|
|
205
|
+
if (!this.singletonsMap.has(kind)) {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
return deepClone(this.singletonsMap.get(kind));
|
|
209
|
+
}
|
|
210
|
+
/** Deep copy of all state for propagation / persistence. */
|
|
211
|
+
snapshot() {
|
|
212
|
+
const list = {};
|
|
213
|
+
for (const [kind, bucket] of this.listEntriesMap) {
|
|
214
|
+
const inner = {};
|
|
215
|
+
for (const [id, v] of bucket) {
|
|
216
|
+
inner[id] = deepClone(v);
|
|
217
|
+
}
|
|
218
|
+
list[kind] = inner;
|
|
219
|
+
}
|
|
220
|
+
const singletons = {};
|
|
221
|
+
for (const [kind, v] of this.singletonsMap) {
|
|
222
|
+
singletons[kind] = deepClone(v);
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
user_id: this.userIdValue,
|
|
226
|
+
policy_version: this.policyVersionValue,
|
|
227
|
+
last_timestamp: this.lastTimestampValue,
|
|
228
|
+
list_entries: list,
|
|
229
|
+
singletons,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Extract the entry id from a list-shaped op. For remove/modify the
|
|
235
|
+
* op's own `entry_id` is authoritative; for add the spec puts the
|
|
236
|
+
* id inside the entry payload (`id` field, ULID RECOMMENDED per
|
|
237
|
+
* §7.3).
|
|
238
|
+
*/
|
|
239
|
+
function entryIdFor(op) {
|
|
240
|
+
if (op.entry_id !== undefined && op.entry_id !== "") {
|
|
241
|
+
return op.entry_id;
|
|
242
|
+
}
|
|
243
|
+
if (typeof op.entry === "object" &&
|
|
244
|
+
op.entry !== null &&
|
|
245
|
+
"id" in op.entry) {
|
|
246
|
+
const id = op.entry.id;
|
|
247
|
+
if (typeof id === "string") {
|
|
248
|
+
return id;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return "";
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Heuristically map a `validateUserPolicyMessage` error to the
|
|
255
|
+
* triple (op_index, kind, detail) when it originates from a §7.3
|
|
256
|
+
* op-kind violation. Returns null for structural errors that are
|
|
257
|
+
* not specific op-kind violations.
|
|
258
|
+
*
|
|
259
|
+
* The mapping leans on the validator's stable error-string format
|
|
260
|
+
* (`delivery: user policy operations[N] ...`) — same approach as
|
|
261
|
+
* the semp-go reference.
|
|
262
|
+
*/
|
|
263
|
+
function classifyOpInvalid(msg, m) {
|
|
264
|
+
const prefix = "delivery: user policy operations[";
|
|
265
|
+
if (!msg.startsWith(prefix)) {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
const rest = msg.slice(prefix.length);
|
|
269
|
+
const end = rest.indexOf("]");
|
|
270
|
+
if (end < 1) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
const idxStr = rest.slice(0, end);
|
|
274
|
+
if (!/^\d+$/.test(idxStr)) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const idx = Number(idxStr);
|
|
278
|
+
if (idx < 0 || idx >= m.operations.length) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
let detail = rest.slice(end + 1);
|
|
282
|
+
if (detail.startsWith(" ")) {
|
|
283
|
+
detail = detail.slice(1);
|
|
284
|
+
}
|
|
285
|
+
return { opIndex: idx, kind: m.operations[idx].kind, detail };
|
|
286
|
+
}
|
|
287
|
+
function deepClone(v) {
|
|
288
|
+
if (v === undefined || v === null) {
|
|
289
|
+
return v;
|
|
290
|
+
}
|
|
291
|
+
return JSON.parse(JSON.stringify(v));
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=policy_state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy_state.js","sourceRoot":"","sources":["../../src/delivery/policy_state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-recipient queue state record per DELIVERY.md §2.5.
|
|
3
|
+
*
|
|
4
|
+
* The sending server maintains one record per (envelope_id,
|
|
5
|
+
* recipient) pair; the record is authoritative for what the
|
|
6
|
+
* sending client displays to the user.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { ReasonCode } from "../reasoncodes.js";
|
|
11
|
+
/** Lifecycle position per §2.5. */
|
|
12
|
+
export type QueueRecordState = "queued" | "delivered" | "rejected" | "expired" | "canceled";
|
|
13
|
+
/** Report whether a state is terminal (no further transitions). */
|
|
14
|
+
export declare function isTerminalState(s: QueueRecordState): boolean;
|
|
15
|
+
/** Per-recipient queue state record. */
|
|
16
|
+
export interface QueueState {
|
|
17
|
+
envelope_id: string;
|
|
18
|
+
recipient: string;
|
|
19
|
+
state: QueueRecordState;
|
|
20
|
+
attempts: number;
|
|
21
|
+
/** ISO 8601 UTC, or null if never attempted. */
|
|
22
|
+
last_attempt_at: string | null;
|
|
23
|
+
/** "delivered" | "rejected" | "silent" | null. */
|
|
24
|
+
last_outcome: string | null;
|
|
25
|
+
last_reason_code: ReasonCode | null;
|
|
26
|
+
/** ISO 8601 UTC, or null on terminal records. */
|
|
27
|
+
next_attempt_at: string | null;
|
|
28
|
+
/** Effective deadline per §2.4. ISO 8601 UTC. */
|
|
29
|
+
deadline: string;
|
|
30
|
+
/**
|
|
31
|
+
* Internal-only: wall-clock at which `state` transitioned to a
|
|
32
|
+
* terminal value. Used by the §2.5 retention prune. Excluded from
|
|
33
|
+
* canonical wire bytes; serialize with a custom replacer if
|
|
34
|
+
* exporting.
|
|
35
|
+
*/
|
|
36
|
+
terminal_at?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Transition `q` to `state`, recording the transition wall-clock
|
|
40
|
+
* on `terminal_at` and clearing `next_attempt_at`. No-op when:
|
|
41
|
+
*
|
|
42
|
+
* - `state` is non-terminal
|
|
43
|
+
* - `q` is already terminal (the §2.7.2 "MUST NOT override a prior
|
|
44
|
+
* terminal state" rule is the caller's responsibility)
|
|
45
|
+
*/
|
|
46
|
+
export declare function setTerminal(q: QueueState, state: QueueRecordState, now: Date): void;
|
|
47
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/delivery/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,WAAW,GACX,UAAU,GACV,SAAS,GACT,UAAU,CAAC;AAEf,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAE5D;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kDAAkD;IAClD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,iDAAiD;IACjD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE,UAAU,EACb,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,IAAI,GACR,IAAI,CAUN"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-recipient queue state record per DELIVERY.md §2.5.
|
|
3
|
+
*
|
|
4
|
+
* The sending server maintains one record per (envelope_id,
|
|
5
|
+
* recipient) pair; the record is authoritative for what the
|
|
6
|
+
* sending client displays to the user.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
/** Report whether a state is terminal (no further transitions). */
|
|
11
|
+
export function isTerminalState(s) {
|
|
12
|
+
return s !== "queued";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Transition `q` to `state`, recording the transition wall-clock
|
|
16
|
+
* on `terminal_at` and clearing `next_attempt_at`. No-op when:
|
|
17
|
+
*
|
|
18
|
+
* - `state` is non-terminal
|
|
19
|
+
* - `q` is already terminal (the §2.7.2 "MUST NOT override a prior
|
|
20
|
+
* terminal state" rule is the caller's responsibility)
|
|
21
|
+
*/
|
|
22
|
+
export function setTerminal(q, state, now) {
|
|
23
|
+
if (!isTerminalState(state)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (isTerminalState(q.state)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
q.state = state;
|
|
30
|
+
q.next_attempt_at = null;
|
|
31
|
+
q.terminal_at = now.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/delivery/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,CAAmB;IACjD,OAAO,CAAC,KAAK,QAAQ,CAAC;AACxB,CAAC;AA0BD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CACzB,CAAa,EACb,KAAuB,EACvB,GAAS;IAET,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signed delivery receipts per DELIVERY.md §1.1.1.
|
|
3
|
+
*
|
|
4
|
+
* Every `delivered` acknowledgment a recipient server returns to a
|
|
5
|
+
* sending server MUST carry a signed receipt. The receipt binds
|
|
6
|
+
* `(envelope_hash, recipient_domain, accepted_at)` under the recipient
|
|
7
|
+
* domain's Ed25519 signing key with the `SEMP-DELIVERY-RECEIPT:`
|
|
8
|
+
* domain-separation prefix. It is a portable, non-repudiable artifact
|
|
9
|
+
* the sending user can later export to a `.semp-receipt` file.
|
|
10
|
+
*
|
|
11
|
+
* This module provides:
|
|
12
|
+
*
|
|
13
|
+
* - {@link computeEnvelopeHash}: SHA-256 over canonical envelope bytes
|
|
14
|
+
* (the same canonical form `seal.signature` is computed over —
|
|
15
|
+
* `signature` and `session_mac` blanked, `hop_count` and `padding`
|
|
16
|
+
* omitted).
|
|
17
|
+
* - {@link signDeliveryReceipt}: build + sign a receipt from
|
|
18
|
+
* pre-sign inputs.
|
|
19
|
+
* - {@link verifyDeliveryReceipt}: Ed25519-verify a receipt against
|
|
20
|
+
* a recipient domain public key.
|
|
21
|
+
* - {@link verifyEnvelopeBinding}: cross-check the receipt's
|
|
22
|
+
* `envelope_hash.value` against a fresh canonical envelope hash.
|
|
23
|
+
* - {@link validateReceipt}: structural checks per §1.1.1.2.
|
|
24
|
+
*
|
|
25
|
+
* The companion {@link "./receipt_store"} module holds receipts the
|
|
26
|
+
* sending server has issued to its sending users until at least one
|
|
27
|
+
* client device acknowledges the delivery event carrying it.
|
|
28
|
+
*
|
|
29
|
+
* @module
|
|
30
|
+
*/
|
|
31
|
+
/** Domain-separation prefix for the receipt signature, per ENVELOPE.md §4.3. */
|
|
32
|
+
export declare const DeliveryReceiptPrefix = "SEMP-DELIVERY-RECEIPT:";
|
|
33
|
+
/** `type` discriminator for the receipt JSON. */
|
|
34
|
+
export declare const DeliveryReceiptType = "SEMP_DELIVERY_RECEIPT";
|
|
35
|
+
/** Receipt schema version per §1.1.1.1. */
|
|
36
|
+
export declare const DeliveryReceiptVersion = "1.0.0";
|
|
37
|
+
/** Only digest algorithm defined for v1.0.0 receipts per §1.1.1.3. */
|
|
38
|
+
export declare const EnvelopeHashAlgorithmSHA256 = "sha-256";
|
|
39
|
+
/** Receipt signature algorithm. */
|
|
40
|
+
export declare const ReceiptSignatureAlgorithmEd25519 = "ed25519";
|
|
41
|
+
/**
|
|
42
|
+
* Receiver-side tolerance window per §1.1.1.5: "Verifiers MUST NOT
|
|
43
|
+
* reject a receipt solely because `accepted_at` is within 120 seconds
|
|
44
|
+
* of their own current time in either direction."
|
|
45
|
+
*/
|
|
46
|
+
export declare const ReceiptClockSkewToleranceSeconds = 120;
|
|
47
|
+
/** Hash binding inside a {@link DeliveryReceipt} per §1.1.1.3. */
|
|
48
|
+
export interface EnvelopeHash {
|
|
49
|
+
algorithm: string;
|
|
50
|
+
/** Base64-encoded digest. */
|
|
51
|
+
value: string;
|
|
52
|
+
}
|
|
53
|
+
/** Signature block per §1.1.1.4. */
|
|
54
|
+
export interface ReceiptSignature {
|
|
55
|
+
algorithm: string;
|
|
56
|
+
/** Lowercase-hex SHA-256 fingerprint of the recipient domain pub. */
|
|
57
|
+
key_id: string;
|
|
58
|
+
/** Base64-encoded Ed25519 signature. Empty when blanked. */
|
|
59
|
+
value: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* SEMP_DELIVERY_RECEIPT record per §1.1.1. The wire form is a JSON
|
|
63
|
+
* object with these exact field names; canonical bytes are produced
|
|
64
|
+
* by {@link "../canonical".marshal}.
|
|
65
|
+
*/
|
|
66
|
+
export interface DeliveryReceipt {
|
|
67
|
+
type: typeof DeliveryReceiptType;
|
|
68
|
+
version: string;
|
|
69
|
+
envelope_hash: EnvelopeHash;
|
|
70
|
+
recipient_domain: string;
|
|
71
|
+
/** ISO 8601 UTC timestamp, second precision. */
|
|
72
|
+
accepted_at: string;
|
|
73
|
+
signature: ReceiptSignature;
|
|
74
|
+
}
|
|
75
|
+
/** Inputs to {@link signDeliveryReceipt}. */
|
|
76
|
+
export interface SignDeliveryReceiptInput {
|
|
77
|
+
/** Base64 SHA-256 of canonical envelope bytes per §1.1.1.3. */
|
|
78
|
+
envelopeHashB64: string;
|
|
79
|
+
/** Recipient server's domain. */
|
|
80
|
+
recipientDomain: string;
|
|
81
|
+
/** ISO 8601 UTC timestamp of the recipient's accept decision. */
|
|
82
|
+
acceptedAt: string;
|
|
83
|
+
/** Lowercase-hex SHA-256 fingerprint of the signing public key. */
|
|
84
|
+
domainKeyId: string;
|
|
85
|
+
/** 32-byte Ed25519 secret seed for the recipient domain signing key. */
|
|
86
|
+
domainSigningSeed: Uint8Array;
|
|
87
|
+
}
|
|
88
|
+
/** Result of a successful {@link signDeliveryReceipt} call. */
|
|
89
|
+
export interface SignDeliveryReceiptResult {
|
|
90
|
+
/** Receipt with `signature.value` populated. */
|
|
91
|
+
receipt: DeliveryReceipt;
|
|
92
|
+
/** Bare base64 signature value (also present in `receipt.signature.value`). */
|
|
93
|
+
signatureB64: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* SHA-256 of canonical envelope bytes, base64-encoded, per
|
|
97
|
+
* §1.1.1.3. The caller is responsible for producing the canonical
|
|
98
|
+
* bytes — typically via `envelope.canonicalEnvelopeFor(env)` which
|
|
99
|
+
* applies §4.3 elision (signature, session_mac, hop_count, padding).
|
|
100
|
+
*/
|
|
101
|
+
export declare function computeEnvelopeHash(canonicalEnvelopeBytes: Uint8Array): string;
|
|
102
|
+
/**
|
|
103
|
+
* Build and Ed25519-sign a SEMP_DELIVERY_RECEIPT under the recipient
|
|
104
|
+
* domain's signing key, following §1.1.1.4.
|
|
105
|
+
*/
|
|
106
|
+
export declare function signDeliveryReceipt(input: SignDeliveryReceiptInput): SignDeliveryReceiptResult;
|
|
107
|
+
/** Inputs to {@link verifyDeliveryReceipt}. */
|
|
108
|
+
export interface VerifyDeliveryReceiptInput {
|
|
109
|
+
/** Receipt as received. */
|
|
110
|
+
receipt: DeliveryReceipt;
|
|
111
|
+
/** 32-byte Ed25519 public key for the recipient domain. */
|
|
112
|
+
domainPub: Uint8Array;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Ed25519-verify a delivery receipt's signature against the
|
|
116
|
+
* recipient domain public key. Returns true on success. Throws on
|
|
117
|
+
* structural validation failure (use {@link validateReceipt} ahead
|
|
118
|
+
* of time to surface those as boolean false instead).
|
|
119
|
+
*
|
|
120
|
+
* Does NOT cross-check `accepted_at` against the verifier's clock —
|
|
121
|
+
* that is a §1.1.1.5 caller-side decision and MUST be applied with
|
|
122
|
+
* the {@link ReceiptClockSkewToleranceSeconds} tolerance.
|
|
123
|
+
*/
|
|
124
|
+
export declare function verifyDeliveryReceipt(input: VerifyDeliveryReceiptInput): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Cross-check that the receipt's `envelope_hash.value` matches the
|
|
127
|
+
* fresh hash of the supplied canonical envelope bytes per §1.1.1.7
|
|
128
|
+
* step 4. Returns true when the binding holds.
|
|
129
|
+
*/
|
|
130
|
+
export declare function verifyEnvelopeBinding(receipt: DeliveryReceipt, canonicalEnvelopeBytes: Uint8Array): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Structural validation per §1.1.1.2. Throws on the first missing or
|
|
133
|
+
* malformed field. Callers that want a boolean outcome can wrap in
|
|
134
|
+
* try/catch.
|
|
135
|
+
*/
|
|
136
|
+
export declare function validateReceipt(r: DeliveryReceipt): void;
|
|
137
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/delivery/receipt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AASH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,sEAAsE;AACtE,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD,mCAAmC;AACnC,eAAO,MAAM,gCAAgC,YAAY,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAEpD,kEAAkE;AAClE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,YAAY,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,gBAAgB,CAAC;CAC7B;AAED,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,iBAAiB,EAAE,UAAU,CAAC;CAC/B;AAED,+DAA+D;AAC/D,MAAM,WAAW,yBAAyB;IACxC,gDAAgD;IAChD,OAAO,EAAE,eAAe,CAAC;IACzB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,sBAAsB,EAAE,UAAU,GAAG,MAAM,CAG9E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAC9B,yBAAyB,CAyC3B;AAED,+CAA+C;AAC/C,MAAM,WAAW,0BAA0B;IACzC,2BAA2B;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,2DAA2D;IAC3D,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAYT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EACxB,sBAAsB,EAAE,UAAU,GACjC,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CA8BxD"}
|