@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,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Staged-delivery partition computation per DELIVERY.md §3.2.1.
|
|
3
|
+
*
|
|
4
|
+
* Given a user's device directory, the per-device scoped
|
|
5
|
+
* certificates, the set of device public keys for which an inbound
|
|
6
|
+
* envelope's seal carries an enclosure-recipient wrap, and the
|
|
7
|
+
* sender address, returns the slice of {@link StagedHeldStage}
|
|
8
|
+
* values the staging runner feeds into the held-envelope queue.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { scopeAllowsSender } from "../keys/device_certificate.js";
|
|
13
|
+
/**
|
|
14
|
+
* Compute the §3.2.1 stage partition for an inbound envelope.
|
|
15
|
+
*
|
|
16
|
+
* Algorithm:
|
|
17
|
+
*
|
|
18
|
+
* 1. Walk the directory; for each device whose pubkey is in
|
|
19
|
+
* `enclosureRecipients`:
|
|
20
|
+
* - Full-access devices are deferred (their stage is computed
|
|
21
|
+
* implicitly per §10.3.3.1: `max(delegated_stages) + 1`).
|
|
22
|
+
* - Delegated devices are evaluated against their scoped cert:
|
|
23
|
+
* fetch the cert, run `scope.receive` against `senderAddress`.
|
|
24
|
+
* Devices whose receive matcher rejects the envelope (mode,
|
|
25
|
+
* allow/deny, or rate limit at the matcher level) are
|
|
26
|
+
* excluded from the partition entirely.
|
|
27
|
+
* 2. Compute the implicit full-access stage as
|
|
28
|
+
* `max(delegated_stages_with_mode_not_none) + 1`, taken across
|
|
29
|
+
* ALL delegates with `receive.mode !== "none"` — not just those
|
|
30
|
+
* that allowed THIS envelope. Matches §10.3.3.1's "the maximum
|
|
31
|
+
* is taken over all delegated devices of the account that have
|
|
32
|
+
* a receive matcher whose mode is not none". When no such
|
|
33
|
+
* delegate exists, full-access devices are at stage 1 and
|
|
34
|
+
* staging is a no-op.
|
|
35
|
+
* 3. Group eligible devices by stage and emit a sorted, monotonic
|
|
36
|
+
* `StagedHeldStage[]`. Stages with no devices are pruned.
|
|
37
|
+
*
|
|
38
|
+
* Does NOT consult §10.3.3.3 rate-limit counters; rate-limit gating
|
|
39
|
+
* is the caller's concern. The matcher mode and allow/deny ARE
|
|
40
|
+
* checked.
|
|
41
|
+
*
|
|
42
|
+
* Returns an empty array when no eligible devices remain (the
|
|
43
|
+
* envelope is undeliverable to any device of the account; the
|
|
44
|
+
* caller surfaces this as silent or rejected per its own policy).
|
|
45
|
+
*/
|
|
46
|
+
export function partitionStages(input) {
|
|
47
|
+
const eligible = [];
|
|
48
|
+
const fullAccessIds = [];
|
|
49
|
+
let maxDelegateMode = 0;
|
|
50
|
+
for (const dev of input.directory.devices) {
|
|
51
|
+
const recipientWanted = input.enclosureRecipients.has(dev.device_public_key);
|
|
52
|
+
if (dev.role === "full_access") {
|
|
53
|
+
if (recipientWanted) {
|
|
54
|
+
fullAccessIds.push(dev.device_id);
|
|
55
|
+
}
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
// Delegated device.
|
|
59
|
+
const cert = input.certificateProvider(dev.device_id);
|
|
60
|
+
if (cert === null) {
|
|
61
|
+
// No current cert: per §10.3.7.3 step 3, stop delivering.
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// max-stage tally first: every delegate whose mode is not "none"
|
|
65
|
+
// contributes to the implicit full-access stage, even if its
|
|
66
|
+
// allow/deny rejects THIS envelope.
|
|
67
|
+
if (cert.scope.receive.mode !== "none") {
|
|
68
|
+
const stage = cert.scope.receive.delivery_stage ?? 0;
|
|
69
|
+
if (stage > maxDelegateMode) {
|
|
70
|
+
maxDelegateMode = stage;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!recipientWanted) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (cert.scope.receive.mode === "none") {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (!scopeAllowsSender(cert.scope.receive, input.senderAddress)) {
|
|
80
|
+
// Sender does not pass the matcher; exclude per §3.2.1.
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
let stage = cert.scope.receive.delivery_stage ?? 0;
|
|
84
|
+
if (stage < 1) {
|
|
85
|
+
// Defensive: a delegated cert without a stage gets stage 1 so
|
|
86
|
+
// it does not collide with the full-access implicit stage.
|
|
87
|
+
stage = 1;
|
|
88
|
+
}
|
|
89
|
+
eligible.push({ deviceId: dev.device_id, stage });
|
|
90
|
+
}
|
|
91
|
+
// Implicit full-access stage per §10.3.3.1 / §3.2.1.
|
|
92
|
+
const fullAccessStage = maxDelegateMode > 0 ? maxDelegateMode + 1 : 1;
|
|
93
|
+
for (const id of fullAccessIds) {
|
|
94
|
+
eligible.push({ deviceId: id, stage: fullAccessStage });
|
|
95
|
+
}
|
|
96
|
+
if (eligible.length === 0) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
// Group by stage, then emit a sorted slice.
|
|
100
|
+
const byStage = new Map();
|
|
101
|
+
for (const e of eligible) {
|
|
102
|
+
const list = byStage.get(e.stage);
|
|
103
|
+
if (list === undefined) {
|
|
104
|
+
byStage.set(e.stage, [e.deviceId]);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
list.push(e.deviceId);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const stages = Array.from(byStage.keys()).sort((a, b) => a - b);
|
|
111
|
+
const out = [];
|
|
112
|
+
for (const s of stages) {
|
|
113
|
+
const ids = byStage.get(s).slice().sort();
|
|
114
|
+
out.push({
|
|
115
|
+
stage: s,
|
|
116
|
+
pending_device_ids: ids,
|
|
117
|
+
dispositions: [],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=stage_partition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stage_partition.js","sourceRoot":"","sources":["../../src/delivery/stage_partition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Staged-delivery runtime per DELIVERY.md §3.2.
|
|
3
|
+
*
|
|
4
|
+
* Drives the wait-and-aggregate loop:
|
|
5
|
+
*
|
|
6
|
+
* - {@link StagedRunner.hold} registers a held envelope with its
|
|
7
|
+
* stage partition (output of
|
|
8
|
+
* {@link "./stage_partition".partitionStages}) and immediately
|
|
9
|
+
* delivers to the lowest stage.
|
|
10
|
+
* - {@link StagedRunner.ingestDisposition} records a stage-N
|
|
11
|
+
* device's decision per §3.2.5.
|
|
12
|
+
* - {@link StagedRunner.tick} advances envelopes whose current
|
|
13
|
+
* stage has completed (every pending device emitted, or the
|
|
14
|
+
* stage timeout elapsed per §3.2.4).
|
|
15
|
+
*
|
|
16
|
+
* Single-process, callable across many envelopes. JS event-loop
|
|
17
|
+
* concurrency: each call is run-to-completion atomic. There is no
|
|
18
|
+
* cross-thread state.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
import { type Disposition, type StagedHeldStage } from "./disposition.js";
|
|
23
|
+
/** Hook delivering an envelope to one stage's pending device set. */
|
|
24
|
+
export type StageDeliverFunc = (envelopeId: string, stage: number, deviceIds: string[]) => Promise<void>;
|
|
25
|
+
/** Hook invoked when aggregation at any stage produces `suppress`. */
|
|
26
|
+
export type StageSuppressFunc = (envelopeId: string, stage: number) => Promise<void>;
|
|
27
|
+
/** Hook invoked when every stage advances without suppress. */
|
|
28
|
+
export type StageCompleteFunc = (envelopeId: string) => Promise<void>;
|
|
29
|
+
/** Inputs to {@link StagedRunner}. */
|
|
30
|
+
export interface StagedRunnerConfig {
|
|
31
|
+
deliver: StageDeliverFunc;
|
|
32
|
+
suppress: StageSuppressFunc;
|
|
33
|
+
complete: StageCompleteFunc;
|
|
34
|
+
/** Per-stage wait window. Defaults to {@link DefaultStageTimeoutMs}. */
|
|
35
|
+
stageTimeoutMs?: number;
|
|
36
|
+
/** Wall-clock hook; defaults to `() => new Date()`. */
|
|
37
|
+
now?: () => Date;
|
|
38
|
+
}
|
|
39
|
+
/** Sentinel error: envelope is already in the held queue. */
|
|
40
|
+
export declare class EnvelopeAlreadyHeldError extends Error {
|
|
41
|
+
readonly name = "EnvelopeAlreadyHeldError";
|
|
42
|
+
constructor(envelopeId: string);
|
|
43
|
+
}
|
|
44
|
+
/** Sentinel error: envelope is not in the held queue. */
|
|
45
|
+
export declare class EnvelopeNotHeldError extends Error {
|
|
46
|
+
readonly name = "EnvelopeNotHeldError";
|
|
47
|
+
constructor(envelopeId: string);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Staged-delivery runtime. Concurrency-safe within a single JS event
|
|
51
|
+
* loop (run-to-completion).
|
|
52
|
+
*/
|
|
53
|
+
export declare class StagedRunner {
|
|
54
|
+
private readonly cfg;
|
|
55
|
+
private readonly heldMap;
|
|
56
|
+
constructor(cfg: StagedRunnerConfig);
|
|
57
|
+
/**
|
|
58
|
+
* Register `envelopeId` with `stages` and deliver to the lowest
|
|
59
|
+
* stage. `stages[i].stage` MUST be monotonically increasing.
|
|
60
|
+
* Stages with empty `pending_device_ids` are pruned.
|
|
61
|
+
*/
|
|
62
|
+
hold(envelopeId: string, stages: StagedHeldStage[]): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Record `d` for `envelopeId`'s current stage per §3.2.5.
|
|
65
|
+
*
|
|
66
|
+
* `submitterDeviceId` is the device_id bound to the session that
|
|
67
|
+
* delivered the disposition; it MUST equal `d.device_id`.
|
|
68
|
+
*
|
|
69
|
+
* Idempotent on repeats from the same device — keeps the FIRST
|
|
70
|
+
* disposition (conservative aggregation).
|
|
71
|
+
*/
|
|
72
|
+
ingestDisposition(envelopeId: string, submitterDeviceId: string, d: Disposition): void;
|
|
73
|
+
/**
|
|
74
|
+
* Advance every held envelope whose current stage is complete.
|
|
75
|
+
* Returns the number of envelopes advanced and the first
|
|
76
|
+
* non-fatal callback error encountered (per-envelope errors do
|
|
77
|
+
* not abort the tick).
|
|
78
|
+
*/
|
|
79
|
+
tick(): Promise<{
|
|
80
|
+
advanced: number;
|
|
81
|
+
firstError?: Error;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Recompute a held envelope's stage partition per §3.2.6 in
|
|
85
|
+
* response to a delegated device's certificate being updated or
|
|
86
|
+
* revoked while the envelope is in flight. `newStages` is the
|
|
87
|
+
* freshly-computed partition (typically the output of
|
|
88
|
+
* `partitionStages` over the current directory + cert state).
|
|
89
|
+
*
|
|
90
|
+
* Carries forward dispositions already collected at the current
|
|
91
|
+
* stage. Stages strictly below the current stage have already
|
|
92
|
+
* been processed and are not part of the held entry.
|
|
93
|
+
*/
|
|
94
|
+
reevaluate(envelopeId: string, newStages: StagedHeldStage[]): void;
|
|
95
|
+
/** Whether `envelopeId` is currently held. */
|
|
96
|
+
isHeld(envelopeId: string): boolean;
|
|
97
|
+
/** Number of envelopes currently held. */
|
|
98
|
+
size(): number;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=staged_runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staged_runner.d.ts","sourceRoot":"","sources":["../../src/delivery/staged_runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,eAAe,EAKrB,MAAM,kBAAkB,CAAC;AAE1B,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtE,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,6DAA6D;AAC7D,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAkB,IAAI,8BAA8B;gBACxC,UAAU,EAAE,MAAM;CAG/B;AAED,yDAAyD;AACzD,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAkB,IAAI,0BAA0B;gBACpC,UAAU,EAAE,MAAM;CAG/B;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAE4B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;gBAE7C,GAAG,EAAE,kBAAkB;IAsBnC;;;;OAIG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDxE;;;;;;;;OAQG;IACH,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EACzB,CAAC,EAAE,WAAW,GACb,IAAI;IAsCP;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;IAkF/D;;;;;;;;;;OAUG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI;IAsClE,8CAA8C;IAC9C,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAInC,0CAA0C;IAC1C,IAAI,IAAI,MAAM;CAGf"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Staged-delivery runtime per DELIVERY.md §3.2.
|
|
3
|
+
*
|
|
4
|
+
* Drives the wait-and-aggregate loop:
|
|
5
|
+
*
|
|
6
|
+
* - {@link StagedRunner.hold} registers a held envelope with its
|
|
7
|
+
* stage partition (output of
|
|
8
|
+
* {@link "./stage_partition".partitionStages}) and immediately
|
|
9
|
+
* delivers to the lowest stage.
|
|
10
|
+
* - {@link StagedRunner.ingestDisposition} records a stage-N
|
|
11
|
+
* device's decision per §3.2.5.
|
|
12
|
+
* - {@link StagedRunner.tick} advances envelopes whose current
|
|
13
|
+
* stage has completed (every pending device emitted, or the
|
|
14
|
+
* stage timeout elapsed per §3.2.4).
|
|
15
|
+
*
|
|
16
|
+
* Single-process, callable across many envelopes. JS event-loop
|
|
17
|
+
* concurrency: each call is run-to-completion atomic. There is no
|
|
18
|
+
* cross-thread state.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
import { DefaultStageTimeoutMs, aggregateDispositions, isStageComplete, validateDisposition, } from "./disposition.js";
|
|
23
|
+
/** Sentinel error: envelope is already in the held queue. */
|
|
24
|
+
export class EnvelopeAlreadyHeldError extends Error {
|
|
25
|
+
name = "EnvelopeAlreadyHeldError";
|
|
26
|
+
constructor(envelopeId) {
|
|
27
|
+
super(`delivery: envelope ${JSON.stringify(envelopeId)} is already held`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Sentinel error: envelope is not in the held queue. */
|
|
31
|
+
export class EnvelopeNotHeldError extends Error {
|
|
32
|
+
name = "EnvelopeNotHeldError";
|
|
33
|
+
constructor(envelopeId) {
|
|
34
|
+
super(`delivery: envelope ${JSON.stringify(envelopeId)} is not held`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Staged-delivery runtime. Concurrency-safe within a single JS event
|
|
39
|
+
* loop (run-to-completion).
|
|
40
|
+
*/
|
|
41
|
+
export class StagedRunner {
|
|
42
|
+
cfg;
|
|
43
|
+
heldMap = new Map();
|
|
44
|
+
constructor(cfg) {
|
|
45
|
+
if (cfg.deliver === undefined) {
|
|
46
|
+
throw new Error("delivery: staged runner requires deliver");
|
|
47
|
+
}
|
|
48
|
+
if (cfg.suppress === undefined) {
|
|
49
|
+
throw new Error("delivery: staged runner requires suppress");
|
|
50
|
+
}
|
|
51
|
+
if (cfg.complete === undefined) {
|
|
52
|
+
throw new Error("delivery: staged runner requires complete");
|
|
53
|
+
}
|
|
54
|
+
this.cfg = {
|
|
55
|
+
deliver: cfg.deliver,
|
|
56
|
+
suppress: cfg.suppress,
|
|
57
|
+
complete: cfg.complete,
|
|
58
|
+
stageTimeoutMs: cfg.stageTimeoutMs !== undefined && cfg.stageTimeoutMs > 0
|
|
59
|
+
? cfg.stageTimeoutMs
|
|
60
|
+
: DefaultStageTimeoutMs,
|
|
61
|
+
now: cfg.now ?? (() => new Date()),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Register `envelopeId` with `stages` and deliver to the lowest
|
|
66
|
+
* stage. `stages[i].stage` MUST be monotonically increasing.
|
|
67
|
+
* Stages with empty `pending_device_ids` are pruned.
|
|
68
|
+
*/
|
|
69
|
+
async hold(envelopeId, stages) {
|
|
70
|
+
if (envelopeId === "") {
|
|
71
|
+
throw new Error("delivery: hold empty envelope_id");
|
|
72
|
+
}
|
|
73
|
+
const cleaned = [];
|
|
74
|
+
for (const s of stages) {
|
|
75
|
+
if (s.pending_device_ids.length === 0) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
cleaned.push({
|
|
79
|
+
stage: s.stage,
|
|
80
|
+
pending_device_ids: s.pending_device_ids.slice(),
|
|
81
|
+
dispositions: [],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (cleaned.length === 0) {
|
|
85
|
+
throw new Error("delivery: hold partition has no pending devices at any stage");
|
|
86
|
+
}
|
|
87
|
+
for (let i = 1; i < cleaned.length; i++) {
|
|
88
|
+
if (cleaned[i].stage <= cleaned[i - 1].stage) {
|
|
89
|
+
throw new Error(`delivery: hold stages not monotonically increasing: stage[${i}]=${cleaned[i].stage} <= stage[${i - 1}]=${cleaned[i - 1].stage}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (this.heldMap.has(envelopeId)) {
|
|
93
|
+
throw new EnvelopeAlreadyHeldError(envelopeId);
|
|
94
|
+
}
|
|
95
|
+
const deadline = isoSecond(new Date(this.cfg.now().getTime() + this.cfg.stageTimeoutMs));
|
|
96
|
+
const rec = {
|
|
97
|
+
envelope_id: envelopeId,
|
|
98
|
+
stages: cleaned,
|
|
99
|
+
deadline,
|
|
100
|
+
};
|
|
101
|
+
this.heldMap.set(envelopeId, rec);
|
|
102
|
+
try {
|
|
103
|
+
await this.cfg.deliver(envelopeId, cleaned[0].stage, cleaned[0].pending_device_ids);
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
// Best-effort cleanup so a retry can re-hold.
|
|
107
|
+
this.heldMap.delete(envelopeId);
|
|
108
|
+
throw new Error(`delivery: stage ${cleaned[0].stage} deliver: ${err instanceof Error ? err.message : String(err)}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Record `d` for `envelopeId`'s current stage per §3.2.5.
|
|
113
|
+
*
|
|
114
|
+
* `submitterDeviceId` is the device_id bound to the session that
|
|
115
|
+
* delivered the disposition; it MUST equal `d.device_id`.
|
|
116
|
+
*
|
|
117
|
+
* Idempotent on repeats from the same device — keeps the FIRST
|
|
118
|
+
* disposition (conservative aggregation).
|
|
119
|
+
*/
|
|
120
|
+
ingestDisposition(envelopeId, submitterDeviceId, d) {
|
|
121
|
+
validateDisposition(d);
|
|
122
|
+
if (submitterDeviceId === "") {
|
|
123
|
+
throw new Error("delivery: ingest: submitter device_id is required for §3.2.5 authentication");
|
|
124
|
+
}
|
|
125
|
+
if (submitterDeviceId !== d.device_id) {
|
|
126
|
+
throw new Error(`delivery: ingest: submitter ${JSON.stringify(submitterDeviceId)} does not match disposition device_id ${JSON.stringify(d.device_id)} (§3.2.5)`);
|
|
127
|
+
}
|
|
128
|
+
const rec = this.heldMap.get(envelopeId);
|
|
129
|
+
if (rec === undefined) {
|
|
130
|
+
throw new Error(`delivery: ingest: no held envelope for ${JSON.stringify(envelopeId)}`);
|
|
131
|
+
}
|
|
132
|
+
if (rec.stages.length === 0) {
|
|
133
|
+
throw new Error(`delivery: ingest: envelope ${JSON.stringify(envelopeId)} has no remaining stages`);
|
|
134
|
+
}
|
|
135
|
+
const current = rec.stages[0];
|
|
136
|
+
if (!current.pending_device_ids.includes(d.device_id)) {
|
|
137
|
+
throw new Error(`delivery: ingest: device ${JSON.stringify(d.device_id)} is not in current stage ${current.stage}'s pending set (§3.2.5)`);
|
|
138
|
+
}
|
|
139
|
+
for (const prior of current.dispositions) {
|
|
140
|
+
if (prior.device_id === d.device_id) {
|
|
141
|
+
// Idempotent on a repeat: keep the first vote.
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
current.dispositions.push(d);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Advance every held envelope whose current stage is complete.
|
|
149
|
+
* Returns the number of envelopes advanced and the first
|
|
150
|
+
* non-fatal callback error encountered (per-envelope errors do
|
|
151
|
+
* not abort the tick).
|
|
152
|
+
*/
|
|
153
|
+
async tick() {
|
|
154
|
+
const toRun = [];
|
|
155
|
+
const now = this.cfg.now();
|
|
156
|
+
for (const [id, rec] of this.heldMap) {
|
|
157
|
+
if (rec.stages.length === 0) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const current = rec.stages[0];
|
|
161
|
+
if (!isStageComplete(current, now, rec.deadline)) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const outcome = aggregateDispositions(current.dispositions);
|
|
165
|
+
if (outcome === "suppress") {
|
|
166
|
+
toRun.push({ envelopeId: id, outcome, stage: current.stage });
|
|
167
|
+
this.heldMap.delete(id);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// Advance: pop the current stage, deliver to next if any.
|
|
171
|
+
rec.stages.shift();
|
|
172
|
+
if (rec.stages.length === 0) {
|
|
173
|
+
toRun.push({
|
|
174
|
+
envelopeId: id,
|
|
175
|
+
outcome,
|
|
176
|
+
stage: current.stage,
|
|
177
|
+
done: true,
|
|
178
|
+
});
|
|
179
|
+
this.heldMap.delete(id);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const next = rec.stages[0];
|
|
183
|
+
rec.deadline = isoSecond(new Date(now.getTime() + this.cfg.stageTimeoutMs));
|
|
184
|
+
toRun.push({
|
|
185
|
+
envelopeId: id,
|
|
186
|
+
outcome,
|
|
187
|
+
stage: current.stage,
|
|
188
|
+
nextStage: next.stage,
|
|
189
|
+
nextDevs: next.pending_device_ids.slice(),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
// Sort so callback order is deterministic across runs.
|
|
193
|
+
toRun.sort((a, b) => a.envelopeId < b.envelopeId ? -1 : a.envelopeId > b.envelopeId ? 1 : 0);
|
|
194
|
+
let firstErr;
|
|
195
|
+
for (const p of toRun) {
|
|
196
|
+
try {
|
|
197
|
+
if (p.outcome === "suppress") {
|
|
198
|
+
await this.cfg.suppress(p.envelopeId, p.stage);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (p.done === true) {
|
|
202
|
+
await this.cfg.complete(p.envelopeId);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
await this.cfg.deliver(p.envelopeId, p.nextStage, p.nextDevs);
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
if (firstErr === undefined) {
|
|
209
|
+
firstErr =
|
|
210
|
+
err instanceof Error
|
|
211
|
+
? err
|
|
212
|
+
: new Error(`staged tick callback: ${String(err)}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return firstErr === undefined
|
|
217
|
+
? { advanced: toRun.length }
|
|
218
|
+
: { advanced: toRun.length, firstError: firstErr };
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Recompute a held envelope's stage partition per §3.2.6 in
|
|
222
|
+
* response to a delegated device's certificate being updated or
|
|
223
|
+
* revoked while the envelope is in flight. `newStages` is the
|
|
224
|
+
* freshly-computed partition (typically the output of
|
|
225
|
+
* `partitionStages` over the current directory + cert state).
|
|
226
|
+
*
|
|
227
|
+
* Carries forward dispositions already collected at the current
|
|
228
|
+
* stage. Stages strictly below the current stage have already
|
|
229
|
+
* been processed and are not part of the held entry.
|
|
230
|
+
*/
|
|
231
|
+
reevaluate(envelopeId, newStages) {
|
|
232
|
+
if (envelopeId === "") {
|
|
233
|
+
throw new Error("delivery: reevaluate empty envelope_id");
|
|
234
|
+
}
|
|
235
|
+
const rec = this.heldMap.get(envelopeId);
|
|
236
|
+
if (rec === undefined) {
|
|
237
|
+
throw new EnvelopeNotHeldError(envelopeId);
|
|
238
|
+
}
|
|
239
|
+
if (rec.stages.length === 0) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
const currentStage = rec.stages[0].stage;
|
|
243
|
+
const priorDispositions = rec.stages[0].dispositions;
|
|
244
|
+
const sortedNew = newStages
|
|
245
|
+
.filter((s) => s.stage >= currentStage)
|
|
246
|
+
.sort((a, b) => a.stage - b.stage);
|
|
247
|
+
const rebuilt = [];
|
|
248
|
+
for (const s of sortedNew) {
|
|
249
|
+
if (s.pending_device_ids.length === 0) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
rebuilt.push({
|
|
253
|
+
stage: s.stage,
|
|
254
|
+
pending_device_ids: s.pending_device_ids.slice(),
|
|
255
|
+
dispositions: s.stage === currentStage ? priorDispositions.slice() : [],
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
if (rebuilt.length === 0) {
|
|
259
|
+
// No stages remain — let the next tick detect completion.
|
|
260
|
+
rec.stages = [];
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
rec.stages = rebuilt;
|
|
264
|
+
}
|
|
265
|
+
/** Whether `envelopeId` is currently held. */
|
|
266
|
+
isHeld(envelopeId) {
|
|
267
|
+
return this.heldMap.has(envelopeId);
|
|
268
|
+
}
|
|
269
|
+
/** Number of envelopes currently held. */
|
|
270
|
+
size() {
|
|
271
|
+
return this.heldMap.size;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
function isoSecond(d) {
|
|
275
|
+
return d.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=staged_runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staged_runner.js","sourceRoot":"","sources":["../../src/delivery/staged_runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEMP_SUBMISSION wire shapes per CLIENT.md §6.1, §6.5 and
|
|
3
|
+
* DELIVERY.md §2.7.
|
|
4
|
+
*
|
|
5
|
+
* `SubmissionResponse` is the synchronous outcome a home server
|
|
6
|
+
* returns to a client after the client submits an envelope.
|
|
7
|
+
* `SubmissionEvent` is the asynchronous follow-up notification a
|
|
8
|
+
* server sends when a previously-queued envelope's outcome resolves.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import type { Acknowledgment } from "./ack.js";
|
|
13
|
+
import type { DeliveryReceipt } from "./receipt.js";
|
|
14
|
+
/** Wire-level type discriminator. */
|
|
15
|
+
export declare const SubmissionType = "SEMP_SUBMISSION";
|
|
16
|
+
/** Schema version. */
|
|
17
|
+
export declare const SubmissionVersion = "1.0.0";
|
|
18
|
+
/**
|
|
19
|
+
* Discriminator for which submission message variant this is.
|
|
20
|
+
* `cancel` and `cancel_response` are added by the cancel module
|
|
21
|
+
* per DELIVERY.md §2.7.
|
|
22
|
+
*/
|
|
23
|
+
export type SubmissionStep = "response" | "event" | "cancel" | "cancel_response";
|
|
24
|
+
/** Per-recipient delivery outcome per CLIENT.md §6.2. */
|
|
25
|
+
export interface SubmissionResult {
|
|
26
|
+
recipient: string;
|
|
27
|
+
status: Acknowledgment | "queued" | "no_receipt";
|
|
28
|
+
reason_code?: string;
|
|
29
|
+
reason?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Populated when `status === "delivered"` per DELIVERY.md
|
|
32
|
+
* §1.1.1.5; `null` otherwise. Sender-side servers MUST verify
|
|
33
|
+
* before treating the result as terminal delivered (§1.1.1.6).
|
|
34
|
+
*/
|
|
35
|
+
receipt?: DeliveryReceipt | null;
|
|
36
|
+
}
|
|
37
|
+
/** SEMP_SUBMISSION response per CLIENT.md §6.1. */
|
|
38
|
+
export interface SubmissionResponse {
|
|
39
|
+
type: typeof SubmissionType;
|
|
40
|
+
step: "response";
|
|
41
|
+
version: string;
|
|
42
|
+
envelope_id: string;
|
|
43
|
+
/** ISO 8601 UTC. */
|
|
44
|
+
timestamp: string;
|
|
45
|
+
results: SubmissionResult[];
|
|
46
|
+
}
|
|
47
|
+
/** Construct a {@link SubmissionResponse}. */
|
|
48
|
+
export declare function newSubmissionResponse(envelopeId: string, results: SubmissionResult[], nowFn?: () => Date): SubmissionResponse;
|
|
49
|
+
/**
|
|
50
|
+
* Asynchronous follow-up sent when a queued envelope's outcome
|
|
51
|
+
* resolves per CLIENT.md §6.5. Single per-recipient event rather
|
|
52
|
+
* than a batch.
|
|
53
|
+
*/
|
|
54
|
+
export interface SubmissionEvent {
|
|
55
|
+
type: typeof SubmissionType;
|
|
56
|
+
step: "event";
|
|
57
|
+
version: string;
|
|
58
|
+
envelope_id: string;
|
|
59
|
+
recipient: string;
|
|
60
|
+
status: Acknowledgment | "queued" | "no_receipt";
|
|
61
|
+
reason_code?: string;
|
|
62
|
+
reason?: string;
|
|
63
|
+
/** ISO 8601 UTC. */
|
|
64
|
+
timestamp: string;
|
|
65
|
+
}
|
|
66
|
+
/** Construct a {@link SubmissionEvent}. */
|
|
67
|
+
export declare function newSubmissionEvent(envelopeId: string, recipient: string, status: SubmissionEvent["status"], opts?: {
|
|
68
|
+
reason_code?: string;
|
|
69
|
+
reason?: string;
|
|
70
|
+
nowFn?: () => Date;
|
|
71
|
+
}): SubmissionEvent;
|
|
72
|
+
//# sourceMappingURL=submission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.d.ts","sourceRoot":"","sources":["../../src/delivery/submission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,qCAAqC;AACrC,eAAO,MAAM,cAAc,oBAAoB,CAAC;AAEhD,sBAAsB;AACtB,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,iBAAiB,CAAC;AAEtB,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;CAClC;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,8CAA8C;AAC9C,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,KAAK,GAAE,MAAM,IAAuB,GACnC,kBAAkB,CAYpB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CAAO,GACvE,eAAe,CAuBjB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEMP_SUBMISSION wire shapes per CLIENT.md §6.1, §6.5 and
|
|
3
|
+
* DELIVERY.md §2.7.
|
|
4
|
+
*
|
|
5
|
+
* `SubmissionResponse` is the synchronous outcome a home server
|
|
6
|
+
* returns to a client after the client submits an envelope.
|
|
7
|
+
* `SubmissionEvent` is the asynchronous follow-up notification a
|
|
8
|
+
* server sends when a previously-queued envelope's outcome resolves.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
/** Wire-level type discriminator. */
|
|
13
|
+
export const SubmissionType = "SEMP_SUBMISSION";
|
|
14
|
+
/** Schema version. */
|
|
15
|
+
export const SubmissionVersion = "1.0.0";
|
|
16
|
+
/** Construct a {@link SubmissionResponse}. */
|
|
17
|
+
export function newSubmissionResponse(envelopeId, results, nowFn = () => new Date()) {
|
|
18
|
+
if (envelopeId === "") {
|
|
19
|
+
throw new Error("delivery: empty envelope_id");
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
type: SubmissionType,
|
|
23
|
+
step: "response",
|
|
24
|
+
version: SubmissionVersion,
|
|
25
|
+
envelope_id: envelopeId,
|
|
26
|
+
timestamp: isoSecond(nowFn()),
|
|
27
|
+
results,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** Construct a {@link SubmissionEvent}. */
|
|
31
|
+
export function newSubmissionEvent(envelopeId, recipient, status, opts = {}) {
|
|
32
|
+
if (envelopeId === "") {
|
|
33
|
+
throw new Error("delivery: empty envelope_id");
|
|
34
|
+
}
|
|
35
|
+
if (recipient === "") {
|
|
36
|
+
throw new Error("delivery: empty recipient");
|
|
37
|
+
}
|
|
38
|
+
const ev = {
|
|
39
|
+
type: SubmissionType,
|
|
40
|
+
step: "event",
|
|
41
|
+
version: SubmissionVersion,
|
|
42
|
+
envelope_id: envelopeId,
|
|
43
|
+
recipient,
|
|
44
|
+
status,
|
|
45
|
+
timestamp: isoSecond((opts.nowFn ?? (() => new Date()))()),
|
|
46
|
+
};
|
|
47
|
+
if (opts.reason_code !== undefined) {
|
|
48
|
+
ev.reason_code = opts.reason_code;
|
|
49
|
+
}
|
|
50
|
+
if (opts.reason !== undefined) {
|
|
51
|
+
ev.reason = opts.reason;
|
|
52
|
+
}
|
|
53
|
+
return ev;
|
|
54
|
+
}
|
|
55
|
+
function isoSecond(d) {
|
|
56
|
+
return d.toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submission.js","sourceRoot":"","sources":["../../src/delivery/submission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,qCAAqC;AACrC,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEhD,sBAAsB;AACtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAsCzC,8CAA8C;AAC9C,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,OAA2B,EAC3B,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,UAAU;QAChB,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC;AAoBD,2CAA2C;AAC3C,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,SAAiB,EACjB,MAAiC,EACjC,OAAsE,EAAE;IAExE,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,EAAE,GAAoB;QAC1B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,UAAU;QACvB,SAAS;QACT,MAAM;QACN,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,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,CAAO;IACxB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnD,CAAC"}
|