@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,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequential four-signature compose / verify per MIGRATION.md §3.3.
|
|
3
|
+
*
|
|
4
|
+
* The migration record carries a chain of signatures:
|
|
5
|
+
*
|
|
6
|
+
* 1. old_identity_signature
|
|
7
|
+
* 2. new_identity_signature
|
|
8
|
+
* 3. new_domain_signature
|
|
9
|
+
* 4. old_domain_signature (cooperative only)
|
|
10
|
+
*
|
|
11
|
+
* Each signature commits to all prior signatures' final values so
|
|
12
|
+
* walking them in order detects after-the-fact tampering with an
|
|
13
|
+
* earlier signing party's commitment.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { type MigrationRecord } from "./types.js";
|
|
18
|
+
/**
|
|
19
|
+
* Pre-populate algorithm + key_id on every signature slot so the
|
|
20
|
+
* chained-signature canonical bytes are stable across passes per
|
|
21
|
+
* §3.3. Each later signature commits to prior slots' final state
|
|
22
|
+
* (including algorithm and key_id).
|
|
23
|
+
*
|
|
24
|
+
* In cooperative mode this allocates the `old_domain_signature`
|
|
25
|
+
* slot with the old provider's key id populated up front; the old
|
|
26
|
+
* provider populates only the `value` field at AcceptSubmission
|
|
27
|
+
* time. In unilateral mode the slot stays null.
|
|
28
|
+
*/
|
|
29
|
+
export declare function prepareSignatures(r: MigrationRecord, oldIdentityKeyId: string, newIdentityKeyId: string, newDomainKeyId: string, oldDomainKeyId?: string): void;
|
|
30
|
+
/** Sign signing-pass 1 (old identity). */
|
|
31
|
+
export declare function signOldIdentity(r: MigrationRecord, oldIdentityPriv: Uint8Array, oldIdentityKeyId: string): string;
|
|
32
|
+
/** Sign signing-pass 2 (new identity). */
|
|
33
|
+
export declare function signNewIdentity(r: MigrationRecord, newIdentityPriv: Uint8Array, newIdentityKeyId: string): string;
|
|
34
|
+
/** Sign signing-pass 3 (new domain). */
|
|
35
|
+
export declare function signNewDomain(r: MigrationRecord, newDomainPriv: Uint8Array, newDomainKeyId: string): string;
|
|
36
|
+
/** Sign signing-pass 4 (old domain, cooperative only). */
|
|
37
|
+
export declare function signOldDomain(r: MigrationRecord, oldDomainPriv: Uint8Array, oldDomainKeyId: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Verify a single signature pass (zero-indexed: 0=old identity,
|
|
40
|
+
* 1=new identity, 2=new domain, 3=old domain). Used by orchestration
|
|
41
|
+
* code that validates partial submissions before the chain is
|
|
42
|
+
* complete.
|
|
43
|
+
*/
|
|
44
|
+
export declare function verifyMigrationPass(r: MigrationRecord, passIdx: number, pub: Uint8Array): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Verify all signatures in §3.3 order: old identity → new identity
|
|
47
|
+
* → new domain → old domain. Returns true on full success.
|
|
48
|
+
*
|
|
49
|
+
* `oldDomainPub` is consulted only in cooperative mode; pass any
|
|
50
|
+
* value (including a zero-length array) for unilateral records.
|
|
51
|
+
*/
|
|
52
|
+
export declare function verifyMigrationRecord(r: MigrationRecord, oldIdentityPub: Uint8Array, newIdentityPub: Uint8Array, newDomainPub: Uint8Array, oldDomainPub: Uint8Array | null): boolean;
|
|
53
|
+
/** Structural validation per §3.2. Throws on the first violation. */
|
|
54
|
+
export declare function validateMigrationRecord(r: MigrationRecord): void;
|
|
55
|
+
/**
|
|
56
|
+
* Enforce the §3.3 rule: `migrated_at` MUST be at or after the old
|
|
57
|
+
* identity key's `created` timestamp, and MUST NOT be in the future
|
|
58
|
+
* relative to `now` beyond ordinary clock-skew tolerance.
|
|
59
|
+
*
|
|
60
|
+
* `oldKeyCreated` is the `created` timestamp of the old identity
|
|
61
|
+
* key record (resolved from the old key endpoint).
|
|
62
|
+
* `clockSkewMs` defaults to 5 minutes.
|
|
63
|
+
*/
|
|
64
|
+
export declare function checkMigratedAtBound(r: MigrationRecord, oldKeyCreated: Date | null, now: Date, clockSkewMs?: number): void;
|
|
65
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/migration/sign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,EAEL,KAAK,eAAe,EAOrB,MAAM,YAAY,CAAC;AAWpB;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,eAAe,EAClB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CA8BN;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAC7B,CAAC,EAAE,eAAe,EAClB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAER;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAC7B,CAAC,EAAE,eAAe,EAClB,eAAe,EAAE,UAAU,EAC3B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAC3B,CAAC,EAAE,eAAe,EAClB,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,MAAM,GACrB,MAAM,CAUR;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAC3B,CAAC,EAAE,eAAe,EAClB,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,MAAM,GACrB,MAAM,CAqBR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,eAAe,EAClB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,UAAU,GACd,OAAO,CAMT;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,eAAe,EAClB,cAAc,EAAE,UAAU,EAC1B,cAAc,EAAE,UAAU,EAC1B,YAAY,EAAE,UAAU,EACxB,YAAY,EAAE,UAAU,GAAG,IAAI,GAC9B,OAAO,CAyBT;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CA2EhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,eAAe,EAClB,aAAa,EAAE,IAAI,GAAG,IAAI,EAC1B,GAAG,EAAE,IAAI,EACT,WAAW,SAAgB,GAC1B,IAAI,CAeN"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequential four-signature compose / verify per MIGRATION.md §3.3.
|
|
3
|
+
*
|
|
4
|
+
* The migration record carries a chain of signatures:
|
|
5
|
+
*
|
|
6
|
+
* 1. old_identity_signature
|
|
7
|
+
* 2. new_identity_signature
|
|
8
|
+
* 3. new_domain_signature
|
|
9
|
+
* 4. old_domain_signature (cooperative only)
|
|
10
|
+
*
|
|
11
|
+
* Each signature commits to all prior signatures' final values so
|
|
12
|
+
* walking them in order detects after-the-fact tampering with an
|
|
13
|
+
* earlier signing party's commitment.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { marshal as canonicalMarshal } from "../canonical/index.js";
|
|
18
|
+
import { sign as ed25519Sign, verify as ed25519Verify, } from "../keys/index.js";
|
|
19
|
+
import { MaxForwardingWindowMs, MigrationPrefix, MigrationRecordType, MinForwardingWindowMs, SignatureAlgorithmEd25519, } from "./types.js";
|
|
20
|
+
/** Order of signature slots per §3.3. */
|
|
21
|
+
const SIGNATURE_FIELDS = [
|
|
22
|
+
"old_identity_signature",
|
|
23
|
+
"new_identity_signature",
|
|
24
|
+
"new_domain_signature",
|
|
25
|
+
"old_domain_signature",
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Pre-populate algorithm + key_id on every signature slot so the
|
|
29
|
+
* chained-signature canonical bytes are stable across passes per
|
|
30
|
+
* §3.3. Each later signature commits to prior slots' final state
|
|
31
|
+
* (including algorithm and key_id).
|
|
32
|
+
*
|
|
33
|
+
* In cooperative mode this allocates the `old_domain_signature`
|
|
34
|
+
* slot with the old provider's key id populated up front; the old
|
|
35
|
+
* provider populates only the `value` field at AcceptSubmission
|
|
36
|
+
* time. In unilateral mode the slot stays null.
|
|
37
|
+
*/
|
|
38
|
+
export function prepareSignatures(r, oldIdentityKeyId, newIdentityKeyId, newDomainKeyId, oldDomainKeyId) {
|
|
39
|
+
r.old_identity_signature = {
|
|
40
|
+
algorithm: SignatureAlgorithmEd25519,
|
|
41
|
+
key_id: oldIdentityKeyId,
|
|
42
|
+
value: "",
|
|
43
|
+
};
|
|
44
|
+
r.new_identity_signature = {
|
|
45
|
+
algorithm: SignatureAlgorithmEd25519,
|
|
46
|
+
key_id: newIdentityKeyId,
|
|
47
|
+
value: "",
|
|
48
|
+
};
|
|
49
|
+
r.new_domain_signature = {
|
|
50
|
+
algorithm: SignatureAlgorithmEd25519,
|
|
51
|
+
key_id: newDomainKeyId,
|
|
52
|
+
value: "",
|
|
53
|
+
};
|
|
54
|
+
if (r.mode === "cooperative") {
|
|
55
|
+
if (oldDomainKeyId === undefined || oldDomainKeyId === "") {
|
|
56
|
+
throw new Error("migration: cooperative mode requires oldDomainKeyId");
|
|
57
|
+
}
|
|
58
|
+
r.old_domain_signature = {
|
|
59
|
+
algorithm: SignatureAlgorithmEd25519,
|
|
60
|
+
key_id: oldDomainKeyId,
|
|
61
|
+
value: "",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
r.old_domain_signature = null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Sign signing-pass 1 (old identity). */
|
|
69
|
+
export function signOldIdentity(r, oldIdentityPriv, oldIdentityKeyId) {
|
|
70
|
+
return signSlot(r, "old_identity_signature", oldIdentityPriv, oldIdentityKeyId);
|
|
71
|
+
}
|
|
72
|
+
/** Sign signing-pass 2 (new identity). */
|
|
73
|
+
export function signNewIdentity(r, newIdentityPriv, newIdentityKeyId) {
|
|
74
|
+
if (r.old_identity_signature.value === "") {
|
|
75
|
+
throw new Error("migration: signOldIdentity MUST run before signNewIdentity");
|
|
76
|
+
}
|
|
77
|
+
return signSlot(r, "new_identity_signature", newIdentityPriv, newIdentityKeyId);
|
|
78
|
+
}
|
|
79
|
+
/** Sign signing-pass 3 (new domain). */
|
|
80
|
+
export function signNewDomain(r, newDomainPriv, newDomainKeyId) {
|
|
81
|
+
if (r.old_identity_signature.value === "" ||
|
|
82
|
+
r.new_identity_signature.value === "") {
|
|
83
|
+
throw new Error("migration: signNewDomain requires old_identity and new_identity signatures");
|
|
84
|
+
}
|
|
85
|
+
return signSlot(r, "new_domain_signature", newDomainPriv, newDomainKeyId);
|
|
86
|
+
}
|
|
87
|
+
/** Sign signing-pass 4 (old domain, cooperative only). */
|
|
88
|
+
export function signOldDomain(r, oldDomainPriv, oldDomainKeyId) {
|
|
89
|
+
if (r.mode !== "cooperative") {
|
|
90
|
+
throw new Error(`migration: signOldDomain only valid for mode=cooperative (got ${JSON.stringify(r.mode)})`);
|
|
91
|
+
}
|
|
92
|
+
if (r.old_domain_signature === null) {
|
|
93
|
+
throw new Error("migration: prepareSignatures MUST run before signOldDomain (cooperative mode)");
|
|
94
|
+
}
|
|
95
|
+
if (r.old_identity_signature.value === "" ||
|
|
96
|
+
r.new_identity_signature.value === "" ||
|
|
97
|
+
r.new_domain_signature.value === "") {
|
|
98
|
+
throw new Error("migration: signOldDomain requires all three prior signatures");
|
|
99
|
+
}
|
|
100
|
+
return signSlot(r, "old_domain_signature", oldDomainPriv, oldDomainKeyId);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Verify a single signature pass (zero-indexed: 0=old identity,
|
|
104
|
+
* 1=new identity, 2=new domain, 3=old domain). Used by orchestration
|
|
105
|
+
* code that validates partial submissions before the chain is
|
|
106
|
+
* complete.
|
|
107
|
+
*/
|
|
108
|
+
export function verifyMigrationPass(r, passIdx, pub) {
|
|
109
|
+
if (!Number.isInteger(passIdx) || passIdx < 0 || passIdx >= SIGNATURE_FIELDS.length) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
const field = SIGNATURE_FIELDS[passIdx];
|
|
113
|
+
return verifySlot(r, field, passIdx, pub);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Verify all signatures in §3.3 order: old identity → new identity
|
|
117
|
+
* → new domain → old domain. Returns true on full success.
|
|
118
|
+
*
|
|
119
|
+
* `oldDomainPub` is consulted only in cooperative mode; pass any
|
|
120
|
+
* value (including a zero-length array) for unilateral records.
|
|
121
|
+
*/
|
|
122
|
+
export function verifyMigrationRecord(r, oldIdentityPub, newIdentityPub, newDomainPub, oldDomainPub) {
|
|
123
|
+
validateMigrationRecord(r);
|
|
124
|
+
if (!verifySlot(r, "old_identity_signature", 0, oldIdentityPub)) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
if (!verifySlot(r, "new_identity_signature", 1, newIdentityPub)) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
if (!verifySlot(r, "new_domain_signature", 2, newDomainPub)) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
if (r.mode === "cooperative") {
|
|
134
|
+
if (r.old_domain_signature === null) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
if (oldDomainPub === null || oldDomainPub.length === 0) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
if (!verifySlot(r, "old_domain_signature", 3, oldDomainPub)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (r.old_domain_signature !== null) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
/** Structural validation per §3.2. Throws on the first violation. */
|
|
150
|
+
export function validateMigrationRecord(r) {
|
|
151
|
+
if (r.type !== MigrationRecordType) {
|
|
152
|
+
throw new Error(`migration: type ${JSON.stringify(r.type)}, want ${MigrationRecordType}`);
|
|
153
|
+
}
|
|
154
|
+
for (const f of [
|
|
155
|
+
"version",
|
|
156
|
+
"record_id",
|
|
157
|
+
"old_address",
|
|
158
|
+
"new_address",
|
|
159
|
+
"old_identity_key_id",
|
|
160
|
+
"new_identity_key_id",
|
|
161
|
+
"new_identity_public_key",
|
|
162
|
+
"migrated_at",
|
|
163
|
+
]) {
|
|
164
|
+
if (typeof r[f] !== "string" || r[f] === "") {
|
|
165
|
+
throw new Error(`migration: missing ${f}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const migratedMs = Date.parse(r.migrated_at);
|
|
169
|
+
if (Number.isNaN(migratedMs)) {
|
|
170
|
+
throw new Error("migration: migrated_at is not ISO 8601");
|
|
171
|
+
}
|
|
172
|
+
if (r.mode !== "cooperative" && r.mode !== "unilateral") {
|
|
173
|
+
throw new Error(`migration: mode ${JSON.stringify(r.mode)} is invalid`);
|
|
174
|
+
}
|
|
175
|
+
if (r.mode === "cooperative") {
|
|
176
|
+
if (typeof r.forwarding_window_until !== "string" || r.forwarding_window_until === "") {
|
|
177
|
+
throw new Error("migration: cooperative mode MUST set forwarding_window_until");
|
|
178
|
+
}
|
|
179
|
+
const untilMs = Date.parse(r.forwarding_window_until);
|
|
180
|
+
if (Number.isNaN(untilMs)) {
|
|
181
|
+
throw new Error("migration: forwarding_window_until is not ISO 8601");
|
|
182
|
+
}
|
|
183
|
+
const window = untilMs - migratedMs;
|
|
184
|
+
if (window < MinForwardingWindowMs) {
|
|
185
|
+
throw new Error(`migration: cooperative forwarding window ${window} below minimum ${MinForwardingWindowMs}`);
|
|
186
|
+
}
|
|
187
|
+
if (window > MaxForwardingWindowMs) {
|
|
188
|
+
throw new Error(`migration: cooperative forwarding window ${window} exceeds maximum ${MaxForwardingWindowMs}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
for (const f of [
|
|
192
|
+
"old_identity_signature",
|
|
193
|
+
"new_identity_signature",
|
|
194
|
+
"new_domain_signature",
|
|
195
|
+
]) {
|
|
196
|
+
const sig = r[f];
|
|
197
|
+
if (typeof sig?.algorithm !== "string" || sig.algorithm === "") {
|
|
198
|
+
throw new Error(`migration: ${f}.algorithm missing`);
|
|
199
|
+
}
|
|
200
|
+
if (typeof sig?.key_id !== "string" || sig.key_id === "") {
|
|
201
|
+
throw new Error(`migration: ${f}.key_id missing`);
|
|
202
|
+
}
|
|
203
|
+
if (typeof sig?.value !== "string") {
|
|
204
|
+
throw new Error(`migration: ${f}.value must be a string`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (r.mode === "cooperative") {
|
|
208
|
+
if (r.old_domain_signature === null) {
|
|
209
|
+
throw new Error("migration: cooperative record requires old_domain_signature");
|
|
210
|
+
}
|
|
211
|
+
if (typeof r.old_domain_signature.value !== "string") {
|
|
212
|
+
throw new Error("migration: old_domain_signature.value must be a string");
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else if (r.old_domain_signature !== null) {
|
|
216
|
+
throw new Error("migration: unilateral record MUST NOT carry old_domain_signature");
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Enforce the §3.3 rule: `migrated_at` MUST be at or after the old
|
|
221
|
+
* identity key's `created` timestamp, and MUST NOT be in the future
|
|
222
|
+
* relative to `now` beyond ordinary clock-skew tolerance.
|
|
223
|
+
*
|
|
224
|
+
* `oldKeyCreated` is the `created` timestamp of the old identity
|
|
225
|
+
* key record (resolved from the old key endpoint).
|
|
226
|
+
* `clockSkewMs` defaults to 5 minutes.
|
|
227
|
+
*/
|
|
228
|
+
export function checkMigratedAtBound(r, oldKeyCreated, now, clockSkewMs = 5 * 60 * 1000) {
|
|
229
|
+
const migratedMs = Date.parse(r.migrated_at);
|
|
230
|
+
if (Number.isNaN(migratedMs)) {
|
|
231
|
+
throw new Error("migration: migrated_at is not ISO 8601");
|
|
232
|
+
}
|
|
233
|
+
if (oldKeyCreated !== null && migratedMs < oldKeyCreated.getTime()) {
|
|
234
|
+
throw new Error(`migration: migrated_at ${r.migrated_at} precedes old identity key created ${oldKeyCreated.toISOString()}`);
|
|
235
|
+
}
|
|
236
|
+
if (migratedMs > now.getTime() + clockSkewMs) {
|
|
237
|
+
throw new Error(`migration: migrated_at ${r.migrated_at} is in the future beyond clock-skew tolerance`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
// Internal helpers
|
|
242
|
+
function signSlot(r, field, priv, expectedKeyId) {
|
|
243
|
+
const slot = r[field];
|
|
244
|
+
if (slot === null) {
|
|
245
|
+
throw new Error(`migration: ${field} slot is null (call prepareSignatures)`);
|
|
246
|
+
}
|
|
247
|
+
if (slot.algorithm === "" || slot.key_id === "") {
|
|
248
|
+
throw new Error(`migration: ${field} requires algorithm + key_id pre-populated (call prepareSignatures)`);
|
|
249
|
+
}
|
|
250
|
+
if (slot.key_id !== expectedKeyId) {
|
|
251
|
+
throw new Error(`migration: ${field}.key_id ${JSON.stringify(slot.key_id)} does not match passed ${JSON.stringify(expectedKeyId)}`);
|
|
252
|
+
}
|
|
253
|
+
// Build a deep copy + blank from this slot onward.
|
|
254
|
+
const view = JSON.parse(JSON.stringify(r));
|
|
255
|
+
blankFromIndex(view, fieldIndex(field, r.mode));
|
|
256
|
+
const canonical = canonicalMarshal(view);
|
|
257
|
+
const signingInput = concat(new TextEncoder().encode(MigrationPrefix), canonical);
|
|
258
|
+
const sig = ed25519Sign(priv, signingInput);
|
|
259
|
+
const sigB64 = base64Encode(sig);
|
|
260
|
+
slot.value = sigB64;
|
|
261
|
+
return sigB64;
|
|
262
|
+
}
|
|
263
|
+
function verifySlot(r, field, passIdx, pub) {
|
|
264
|
+
const slot = r[field];
|
|
265
|
+
if (slot === null) {
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
if (slot.value === "") {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
let sig;
|
|
272
|
+
try {
|
|
273
|
+
sig = base64Decode(slot.value);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
// Recreate the signing-time canonical bytes: this slot blanked,
|
|
279
|
+
// every later slot also blanked (they hadn't been signed yet).
|
|
280
|
+
const view = JSON.parse(JSON.stringify(r));
|
|
281
|
+
blankFromIndex(view, passIdx);
|
|
282
|
+
const canonical = canonicalMarshal(view);
|
|
283
|
+
const signingInput = concat(new TextEncoder().encode(MigrationPrefix), canonical);
|
|
284
|
+
return ed25519Verify(pub, sig, signingInput);
|
|
285
|
+
}
|
|
286
|
+
function fieldIndex(field, mode) {
|
|
287
|
+
// Skip old_domain_signature in unilateral mode.
|
|
288
|
+
void mode;
|
|
289
|
+
return SIGNATURE_FIELDS.indexOf(field);
|
|
290
|
+
}
|
|
291
|
+
function blankFromIndex(view, fromIndex) {
|
|
292
|
+
for (let i = fromIndex; i < SIGNATURE_FIELDS.length; i++) {
|
|
293
|
+
const field = SIGNATURE_FIELDS[i] ?? "";
|
|
294
|
+
const slot = view[field];
|
|
295
|
+
if (slot === null || slot === undefined) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
if (typeof slot !== "object" || Array.isArray(slot)) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
slot.value = "";
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function concat(a, b) {
|
|
305
|
+
const out = new Uint8Array(a.length + b.length);
|
|
306
|
+
out.set(a, 0);
|
|
307
|
+
out.set(b, a.length);
|
|
308
|
+
return out;
|
|
309
|
+
}
|
|
310
|
+
function base64Encode(b) {
|
|
311
|
+
if (typeof Buffer !== "undefined") {
|
|
312
|
+
return Buffer.from(b).toString("base64");
|
|
313
|
+
}
|
|
314
|
+
let bin = "";
|
|
315
|
+
for (let i = 0; i < b.length; i++) {
|
|
316
|
+
bin += String.fromCharCode(b[i] ?? 0);
|
|
317
|
+
}
|
|
318
|
+
return btoa(bin);
|
|
319
|
+
}
|
|
320
|
+
function base64Decode(s) {
|
|
321
|
+
if (typeof Buffer !== "undefined") {
|
|
322
|
+
return new Uint8Array(Buffer.from(s, "base64"));
|
|
323
|
+
}
|
|
324
|
+
const bin = atob(s);
|
|
325
|
+
const out = new Uint8Array(bin.length);
|
|
326
|
+
for (let i = 0; i < bin.length; i++) {
|
|
327
|
+
out[i] = bin.charCodeAt(i);
|
|
328
|
+
}
|
|
329
|
+
return out;
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/migration/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-record types and constants for SEMP_MIGRATION per
|
|
3
|
+
* MIGRATION.md §3.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
/** Wire-level type discriminators. */
|
|
8
|
+
export declare const MigrationRecordType = "SEMP_MIGRATION";
|
|
9
|
+
export declare const MigrationRecordVersion = "1.0.0";
|
|
10
|
+
/** Domain-separation prefix per ENVELOPE.md §4.3. */
|
|
11
|
+
export declare const MigrationPrefix = "SEMP-MIGRATION-RECORD:";
|
|
12
|
+
/** Notice message type per §4. */
|
|
13
|
+
export declare const MigrationNoticeType = "SEMP_MIGRATION_NOTICE";
|
|
14
|
+
/** Migration mode per §2. */
|
|
15
|
+
export type MigrationMode = "cooperative" | "unilateral";
|
|
16
|
+
/**
|
|
17
|
+
* Forwarding window bounds per §5.1, in milliseconds.
|
|
18
|
+
*
|
|
19
|
+
* - Min: 30 days (cooperative servers MUST NOT accept below this)
|
|
20
|
+
* - Recommended: 180 days
|
|
21
|
+
* - Max: 730 days (~2 years; servers MAY decline above this)
|
|
22
|
+
*/
|
|
23
|
+
export declare const MinForwardingWindowMs: number;
|
|
24
|
+
export declare const RecommendedForwardingWindowMs: number;
|
|
25
|
+
export declare const MaxForwardingWindowMs: number;
|
|
26
|
+
/** Only signature algorithm currently defined for migration records. */
|
|
27
|
+
export declare const SignatureAlgorithmEd25519 = "ed25519";
|
|
28
|
+
/** Reusable signature block. */
|
|
29
|
+
export interface MigrationSignatureBlock {
|
|
30
|
+
algorithm: string;
|
|
31
|
+
key_id: string;
|
|
32
|
+
value: string;
|
|
33
|
+
}
|
|
34
|
+
/** SEMP_MIGRATION record per §3.1. */
|
|
35
|
+
export interface MigrationRecord {
|
|
36
|
+
type: typeof MigrationRecordType;
|
|
37
|
+
version: string;
|
|
38
|
+
record_id: string;
|
|
39
|
+
old_address: string;
|
|
40
|
+
new_address: string;
|
|
41
|
+
old_identity_key_id: string;
|
|
42
|
+
new_identity_key_id: string;
|
|
43
|
+
/** Base64. */
|
|
44
|
+
new_identity_public_key: string;
|
|
45
|
+
/** ISO 8601 UTC. */
|
|
46
|
+
migrated_at: string;
|
|
47
|
+
/**
|
|
48
|
+
* ISO 8601 UTC, or null when no forwarding is offered (typical
|
|
49
|
+
* for unilateral mode where the old provider is non-cooperative).
|
|
50
|
+
*/
|
|
51
|
+
forwarding_window_until: string | null;
|
|
52
|
+
mode: MigrationMode;
|
|
53
|
+
old_identity_signature: MigrationSignatureBlock;
|
|
54
|
+
new_identity_signature: MigrationSignatureBlock;
|
|
55
|
+
new_domain_signature: MigrationSignatureBlock;
|
|
56
|
+
/** Required when mode === "cooperative"; null in unilateral mode. */
|
|
57
|
+
old_domain_signature: MigrationSignatureBlock | null;
|
|
58
|
+
/**
|
|
59
|
+
* Optional extension entries. Every signature in the §3.3 chain
|
|
60
|
+
* covers `extensions`; any content captured here is attested by
|
|
61
|
+
* all signers.
|
|
62
|
+
*/
|
|
63
|
+
extensions?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* SEMP_MIGRATION_NOTICE message a server sends to inform a sender
|
|
67
|
+
* that the recipient has migrated. Per §4.
|
|
68
|
+
*/
|
|
69
|
+
export interface MigrationNotice {
|
|
70
|
+
type: typeof MigrationNoticeType;
|
|
71
|
+
version: string;
|
|
72
|
+
/** ULID for the notice. */
|
|
73
|
+
notice_id: string;
|
|
74
|
+
/** Reference to the published migration record. */
|
|
75
|
+
record_id: string;
|
|
76
|
+
/** URL where the migration record can be fetched. */
|
|
77
|
+
record_url: string;
|
|
78
|
+
/** Old address (the one the sender attempted to deliver to). */
|
|
79
|
+
old_address: string;
|
|
80
|
+
/** New address the sender SHOULD redirect to. */
|
|
81
|
+
new_address: string;
|
|
82
|
+
/** Migration mode (informational). */
|
|
83
|
+
mode: MigrationMode;
|
|
84
|
+
/** ISO 8601 UTC timestamp the notice was issued. */
|
|
85
|
+
issued_at: string;
|
|
86
|
+
}
|
|
87
|
+
/** Rejection wrapper a sender returns when it refuses to honor a notice. */
|
|
88
|
+
export interface MigrationNoticeRejection {
|
|
89
|
+
notice: MigrationNotice;
|
|
90
|
+
reason: string;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,qDAAqD;AACrD,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAExD,kCAAkC;AAClC,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,6BAA6B;AAC7B,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,QAA2B,CAAC;AAC9D,eAAO,MAAM,6BAA6B,QAA4B,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAA4B,CAAC;AAE/D,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,gCAAgC;AAChC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc;IACd,uBAAuB,EAAE,MAAM,CAAC;IAChC,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,EAAE,aAAa,CAAC;IAEpB,sBAAsB,EAAE,uBAAuB,CAAC;IAChD,sBAAsB,EAAE,uBAAuB,CAAC;IAChD,oBAAoB,EAAE,uBAAuB,CAAC;IAC9C,qEAAqE;IACrE,oBAAoB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAErD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,mBAAmB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-record types and constants for SEMP_MIGRATION per
|
|
3
|
+
* MIGRATION.md §3.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
/** Wire-level type discriminators. */
|
|
8
|
+
export const MigrationRecordType = "SEMP_MIGRATION";
|
|
9
|
+
export const MigrationRecordVersion = "1.0.0";
|
|
10
|
+
/** Domain-separation prefix per ENVELOPE.md §4.3. */
|
|
11
|
+
export const MigrationPrefix = "SEMP-MIGRATION-RECORD:";
|
|
12
|
+
/** Notice message type per §4. */
|
|
13
|
+
export const MigrationNoticeType = "SEMP_MIGRATION_NOTICE";
|
|
14
|
+
/**
|
|
15
|
+
* Forwarding window bounds per §5.1, in milliseconds.
|
|
16
|
+
*
|
|
17
|
+
* - Min: 30 days (cooperative servers MUST NOT accept below this)
|
|
18
|
+
* - Recommended: 180 days
|
|
19
|
+
* - Max: 730 days (~2 years; servers MAY decline above this)
|
|
20
|
+
*/
|
|
21
|
+
export const MinForwardingWindowMs = 30 * 24 * 60 * 60 * 1000;
|
|
22
|
+
export const RecommendedForwardingWindowMs = 180 * 24 * 60 * 60 * 1000;
|
|
23
|
+
export const MaxForwardingWindowMs = 730 * 24 * 60 * 60 * 1000;
|
|
24
|
+
/** Only signature algorithm currently defined for migration records. */
|
|
25
|
+
export const SignatureAlgorithmEd25519 = "ed25519";
|
|
26
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migration/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AAE9C,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AAExD,kCAAkC;AAClC,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAK3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9D,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/D,wEAAwE;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reason-code registry per VECTORS.md §8 / HANDSHAKE.md §4.1 /
|
|
3
|
+
* ENVELOPE.md §9.3 / ERRORS.md.
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Machine-readable rejection reason returned by handshake,
|
|
9
|
+
* envelope, key-fetch, and policy operations. Senders use the
|
|
10
|
+
* code to decide whether to retry, surface to user, or rotate
|
|
11
|
+
* credentials.
|
|
12
|
+
*/
|
|
13
|
+
export type ReasonCode = "blocked" | "auth_failed" | "policy_forbidden" | "handshake_expired" | "handshake_invalid" | "no_session" | "rate_limited" | "challenge" | "challenge_failed" | "challenge_invalid" | "server_at_capacity" | "resumption_failed" | "version_unsupported" | "seal_invalid" | "session_mac_invalid" | "envelope_expired" | "envelope_size_exceeded" | "extension_unsupported" | "extension_size_exceeded" | "scope_exceeded" | "scope_invalid" | "certificate_expired" | "server_unavailable" | "session_expired" | "rekey_unsupported" | "policy_kind_unsupported" | "policy_op_invalid" | "policy_version_stale";
|
|
14
|
+
/** The full set of recognized ReasonCode values. */
|
|
15
|
+
export declare const KnownReasonCodes: ReadonlySet<string>;
|
|
16
|
+
/** Type guard: is this string one of the recognized codes? */
|
|
17
|
+
export declare function isKnownReasonCode(code: string): code is ReasonCode;
|
|
18
|
+
/**
|
|
19
|
+
* Reports whether automated retry is appropriate for this reason.
|
|
20
|
+
*
|
|
21
|
+
* Recoverable codes signal a transient or transport condition the
|
|
22
|
+
* sender SHOULD retry after a back-off, OR a state-staleness
|
|
23
|
+
* condition (handshake_expired, no_session, policy_version_stale)
|
|
24
|
+
* the sender resolves with a fresh handshake / refresh and a single
|
|
25
|
+
* retry. Non-recoverable codes signal a permanent condition (blocked,
|
|
26
|
+
* auth_failed, policy_forbidden, scope_invalid, etc.) where the
|
|
27
|
+
* sender MUST NOT retry without operator intervention.
|
|
28
|
+
*
|
|
29
|
+
* Notes on edge cases:
|
|
30
|
+
*
|
|
31
|
+
* - `session_expired` and `rekey_unsupported` are NOT recoverable
|
|
32
|
+
* here because they require a fresh handshake rather than an
|
|
33
|
+
* automated retry on the rekey path.
|
|
34
|
+
* - `challenge_invalid`, `version_unsupported`, `resumption_failed`,
|
|
35
|
+
* `envelope_size_exceeded`, `scope_invalid`, and
|
|
36
|
+
* `certificate_expired` are non-recoverable per ERRORS.md.
|
|
37
|
+
*
|
|
38
|
+
* Mirrors semp-go's `ReasonCode.Recoverable()` byte-for-byte; the
|
|
39
|
+
* vectors at `vectors/v1.0.0/rejection-codes.json` cross-check both.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isRecoverable(code: ReasonCode): boolean;
|
|
42
|
+
//# sourceMappingURL=reasoncodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoncodes.d.ts","sourceRoot":"","sources":["../src/reasoncodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAElB,SAAS,GACT,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,YAAY,GACZ,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,qBAAqB,GAErB,cAAc,GACd,qBAAqB,GACrB,kBAAkB,GAClB,wBAAwB,GACxB,uBAAuB,GACvB,yBAAyB,GACzB,gBAAgB,GAChB,eAAe,GACf,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,mBAAmB,GACnB,yBAAyB,GACzB,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CA6B/C,CAAC;AAEH,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,UAAU,CAElE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAcvD"}
|