@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension validation per EXTENSIONS.md §2-§4.
|
|
3
|
+
*
|
|
4
|
+
* Each extension entry on the wire conforms to:
|
|
5
|
+
*
|
|
6
|
+
* ```json
|
|
7
|
+
* { "required": false, "data": { ... } }
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Per-layer byte-size ceilings (§4) are enforced before signature
|
|
11
|
+
* verification — an over-large `extensions` map MUST be rejected
|
|
12
|
+
* outright, regardless of any signature it might carry.
|
|
13
|
+
*
|
|
14
|
+
* Required extensions a recipient does not understand MUST be
|
|
15
|
+
* rejected per §3, regardless of namespace. The semp.dev/ namespace
|
|
16
|
+
* is reserved for spec-defined keys; vendor.* and x-* keys are at
|
|
17
|
+
* the operator's own risk but are subject to the same
|
|
18
|
+
* required-must-be-understood rule.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
/** Layers an `extensions` object can attach to. */
|
|
23
|
+
export type Layer = "postmark" | "seal" | "brief" | "enclosure";
|
|
24
|
+
/** A single extension entry on the wire. */
|
|
25
|
+
export interface Entry {
|
|
26
|
+
required: boolean;
|
|
27
|
+
data: unknown;
|
|
28
|
+
}
|
|
29
|
+
/** Wire-level container: keys are namespaced extension identifiers. */
|
|
30
|
+
export type Map = Record<string, Entry>;
|
|
31
|
+
/** Per-layer byte-size ceiling per §4.1. */
|
|
32
|
+
export declare function maxBytesFor(layer: Layer): number;
|
|
33
|
+
/** Reserved namespace prefix for spec-defined extension keys. */
|
|
34
|
+
export declare const NamespacePrefixCore = "semp.dev/";
|
|
35
|
+
/** A registered extension. */
|
|
36
|
+
export interface RegistryEntry {
|
|
37
|
+
identifier: string;
|
|
38
|
+
layers: Layer[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Registry of known extensions an implementation supports. Used by
|
|
42
|
+
* {@link validate} to decide whether a required extension is
|
|
43
|
+
* understood (registered) or unknown (rejected).
|
|
44
|
+
*/
|
|
45
|
+
export declare class Registry {
|
|
46
|
+
private readonly entries;
|
|
47
|
+
register(entry: RegistryEntry): void;
|
|
48
|
+
lookup(identifier: string): RegistryEntry | undefined;
|
|
49
|
+
}
|
|
50
|
+
/** Error thrown when a required extension is not registered. */
|
|
51
|
+
export declare class UnsupportedError extends Error {
|
|
52
|
+
readonly key: string;
|
|
53
|
+
readonly layer: Layer;
|
|
54
|
+
readonly reasonCode: "extension_unsupported";
|
|
55
|
+
constructor(key: string, layer: Layer);
|
|
56
|
+
}
|
|
57
|
+
/** Error thrown when the serialized map exceeds the layer's ceiling. */
|
|
58
|
+
export declare class SizeError extends Error {
|
|
59
|
+
readonly layer: Layer;
|
|
60
|
+
readonly size: number;
|
|
61
|
+
readonly limit: number;
|
|
62
|
+
readonly reasonCode: "extension_size_exceeded";
|
|
63
|
+
constructor(layer: Layer, size: number, limit: number);
|
|
64
|
+
}
|
|
65
|
+
/** Error thrown when an extension key fails {@link validateKey}. */
|
|
66
|
+
export declare class KeyError extends Error {
|
|
67
|
+
readonly key: string;
|
|
68
|
+
readonly layer: Layer;
|
|
69
|
+
constructor(key: string, layer: Layer, reason: string);
|
|
70
|
+
}
|
|
71
|
+
/** Maximum byte length of an extension key (the namespaced identifier). */
|
|
72
|
+
export declare const MaxKeyLength = 128;
|
|
73
|
+
/**
|
|
74
|
+
* Validate an extension key per EXTENSIONS.md §2.2: ASCII only,
|
|
75
|
+
* non-empty, MaxKeyLength cap, must contain a `/` after a vendor
|
|
76
|
+
* namespace OR start with `x-` for experimental.
|
|
77
|
+
*/
|
|
78
|
+
export declare function validateKey(key: string): Error | null;
|
|
79
|
+
/**
|
|
80
|
+
* Validate an extensions map at a specific layer. Returns null on
|
|
81
|
+
* accept; an Error on first reject.
|
|
82
|
+
*
|
|
83
|
+
* Rejects:
|
|
84
|
+
* - Malformed key shape ({@link KeyError})
|
|
85
|
+
* - Required extension not in registry, regardless of namespace
|
|
86
|
+
* ({@link UnsupportedError})
|
|
87
|
+
* - Required extension registered but for a different layer
|
|
88
|
+
* ({@link UnsupportedError})
|
|
89
|
+
* - Total serialized size over the layer's ceiling
|
|
90
|
+
* ({@link SizeError})
|
|
91
|
+
*
|
|
92
|
+
* Non-required (`required: false`) extensions are passed through
|
|
93
|
+
* unconditionally — the receiver is free to ignore them.
|
|
94
|
+
*/
|
|
95
|
+
export declare function validate(registry: Registry | null, layer: Layer, m: Map | null | undefined): Error | null;
|
|
96
|
+
/**
|
|
97
|
+
* Validate the serialized byte length of an extensions map against
|
|
98
|
+
* the layer ceiling. Empty / missing maps pass through.
|
|
99
|
+
*/
|
|
100
|
+
export declare function validateSize(layer: Layer, m: Map | null | undefined): Error | null;
|
|
101
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/extensions/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,mDAAmD;AACnD,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEhE,4CAA4C;AAC5C,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,uEAAuE;AACvE,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAExC,4CAA4C;AAC5C,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAWhD;AAED,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAEvE,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIpC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;CAGtD;AAED,gEAAgE;AAChE,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAG,uBAAuB,CAAU;gBAC3C,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;CAOtC;AAED,wEAAwE;AACxE,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAG,yBAAyB,CAAU;gBAC7C,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAQtD;AAED,oEAAoE;AACpE,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;gBACV,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;CAKtD;AAED,2EAA2E;AAC3E,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAiBrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,KAAK,EAAE,KAAK,EACZ,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,GACxB,KAAK,GAAG,IAAI,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,CAelF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension validation per EXTENSIONS.md §2-§4.
|
|
3
|
+
*
|
|
4
|
+
* Each extension entry on the wire conforms to:
|
|
5
|
+
*
|
|
6
|
+
* ```json
|
|
7
|
+
* { "required": false, "data": { ... } }
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Per-layer byte-size ceilings (§4) are enforced before signature
|
|
11
|
+
* verification — an over-large `extensions` map MUST be rejected
|
|
12
|
+
* outright, regardless of any signature it might carry.
|
|
13
|
+
*
|
|
14
|
+
* Required extensions a recipient does not understand MUST be
|
|
15
|
+
* rejected per §3, regardless of namespace. The semp.dev/ namespace
|
|
16
|
+
* is reserved for spec-defined keys; vendor.* and x-* keys are at
|
|
17
|
+
* the operator's own risk but are subject to the same
|
|
18
|
+
* required-must-be-understood rule.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
/** Per-layer byte-size ceiling per §4.1. */
|
|
23
|
+
export function maxBytesFor(layer) {
|
|
24
|
+
switch (layer) {
|
|
25
|
+
case "postmark":
|
|
26
|
+
return 4096;
|
|
27
|
+
case "seal":
|
|
28
|
+
return 4096;
|
|
29
|
+
case "brief":
|
|
30
|
+
return 16_384;
|
|
31
|
+
case "enclosure":
|
|
32
|
+
return 65_536;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/** Reserved namespace prefix for spec-defined extension keys. */
|
|
36
|
+
export const NamespacePrefixCore = "semp.dev/";
|
|
37
|
+
/**
|
|
38
|
+
* Registry of known extensions an implementation supports. Used by
|
|
39
|
+
* {@link validate} to decide whether a required extension is
|
|
40
|
+
* understood (registered) or unknown (rejected).
|
|
41
|
+
*/
|
|
42
|
+
export class Registry {
|
|
43
|
+
entries = new globalThis.Map();
|
|
44
|
+
register(entry) {
|
|
45
|
+
this.entries.set(entry.identifier, entry);
|
|
46
|
+
}
|
|
47
|
+
lookup(identifier) {
|
|
48
|
+
return this.entries.get(identifier);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Error thrown when a required extension is not registered. */
|
|
52
|
+
export class UnsupportedError extends Error {
|
|
53
|
+
key;
|
|
54
|
+
layer;
|
|
55
|
+
reasonCode = "extension_unsupported";
|
|
56
|
+
constructor(key, layer) {
|
|
57
|
+
super(`extensions: ${layer} layer required extension "${key}" is not supported`);
|
|
58
|
+
this.key = key;
|
|
59
|
+
this.layer = layer;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Error thrown when the serialized map exceeds the layer's ceiling. */
|
|
63
|
+
export class SizeError extends Error {
|
|
64
|
+
layer;
|
|
65
|
+
size;
|
|
66
|
+
limit;
|
|
67
|
+
reasonCode = "extension_size_exceeded";
|
|
68
|
+
constructor(layer, size, limit) {
|
|
69
|
+
super(`extensions: ${layer} layer extensions object ${size} bytes exceeds limit ${limit}`);
|
|
70
|
+
this.layer = layer;
|
|
71
|
+
this.size = size;
|
|
72
|
+
this.limit = limit;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Error thrown when an extension key fails {@link validateKey}. */
|
|
76
|
+
export class KeyError extends Error {
|
|
77
|
+
key;
|
|
78
|
+
layer;
|
|
79
|
+
constructor(key, layer, reason) {
|
|
80
|
+
super(`extensions: ${layer} layer key "${key}": ${reason}`);
|
|
81
|
+
this.key = key;
|
|
82
|
+
this.layer = layer;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Maximum byte length of an extension key (the namespaced identifier). */
|
|
86
|
+
export const MaxKeyLength = 128;
|
|
87
|
+
/**
|
|
88
|
+
* Validate an extension key per EXTENSIONS.md §2.2: ASCII only,
|
|
89
|
+
* non-empty, MaxKeyLength cap, must contain a `/` after a vendor
|
|
90
|
+
* namespace OR start with `x-` for experimental.
|
|
91
|
+
*/
|
|
92
|
+
export function validateKey(key) {
|
|
93
|
+
if (key.length === 0) {
|
|
94
|
+
return new Error("empty key");
|
|
95
|
+
}
|
|
96
|
+
if (key.length > MaxKeyLength) {
|
|
97
|
+
return new Error(`key length ${key.length} exceeds ${MaxKeyLength}`);
|
|
98
|
+
}
|
|
99
|
+
for (let i = 0; i < key.length; i++) {
|
|
100
|
+
const code = key.charCodeAt(i);
|
|
101
|
+
if (code < 0x21 || code > 0x7e) {
|
|
102
|
+
return new Error(`non-printable-ASCII byte at offset ${i}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (!key.startsWith("x-") && !key.includes("/")) {
|
|
106
|
+
return new Error("expected `<vendor>/<name>` or `x-<name>`");
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Validate an extensions map at a specific layer. Returns null on
|
|
112
|
+
* accept; an Error on first reject.
|
|
113
|
+
*
|
|
114
|
+
* Rejects:
|
|
115
|
+
* - Malformed key shape ({@link KeyError})
|
|
116
|
+
* - Required extension not in registry, regardless of namespace
|
|
117
|
+
* ({@link UnsupportedError})
|
|
118
|
+
* - Required extension registered but for a different layer
|
|
119
|
+
* ({@link UnsupportedError})
|
|
120
|
+
* - Total serialized size over the layer's ceiling
|
|
121
|
+
* ({@link SizeError})
|
|
122
|
+
*
|
|
123
|
+
* Non-required (`required: false`) extensions are passed through
|
|
124
|
+
* unconditionally — the receiver is free to ignore them.
|
|
125
|
+
*/
|
|
126
|
+
export function validate(registry, layer, m) {
|
|
127
|
+
if (m === null || m === undefined || Object.keys(m).length === 0) {
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
const keys = Object.keys(m).sort();
|
|
131
|
+
for (const k of keys) {
|
|
132
|
+
const keyErr = validateKey(k);
|
|
133
|
+
if (keyErr !== null) {
|
|
134
|
+
return new KeyError(k, layer, keyErr.message);
|
|
135
|
+
}
|
|
136
|
+
const entry = m[k];
|
|
137
|
+
if (entry === undefined || !entry.required) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (registry === null) {
|
|
141
|
+
// No registry == no extension knowledge. A required extension
|
|
142
|
+
// is definitionally unsupported.
|
|
143
|
+
return new UnsupportedError(k, layer);
|
|
144
|
+
}
|
|
145
|
+
const reg = registry.lookup(k);
|
|
146
|
+
if (reg === undefined) {
|
|
147
|
+
return new UnsupportedError(k, layer);
|
|
148
|
+
}
|
|
149
|
+
if (!reg.layers.includes(layer)) {
|
|
150
|
+
return new UnsupportedError(k, layer);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return validateSize(layer, m);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Validate the serialized byte length of an extensions map against
|
|
157
|
+
* the layer ceiling. Empty / missing maps pass through.
|
|
158
|
+
*/
|
|
159
|
+
export function validateSize(layer, m) {
|
|
160
|
+
if (m === null || m === undefined || Object.keys(m).length === 0) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
const limit = maxBytesFor(layer);
|
|
164
|
+
// Count UTF-8 byte length of the JSON serialization. The exact
|
|
165
|
+
// canonical bytes are determined later by the seal computation;
|
|
166
|
+
// for size-limit purposes plain JSON.stringify is within the same
|
|
167
|
+
// order of magnitude (whitespace differences only).
|
|
168
|
+
const serialized = JSON.stringify(m) ?? "";
|
|
169
|
+
const bytes = new TextEncoder().encode(serialized).byteLength;
|
|
170
|
+
if (bytes > limit) {
|
|
171
|
+
return new SizeError(layer, bytes, limit);
|
|
172
|
+
}
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/extensions/limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handshake abort + rejection helpers per HANDSHAKE.md §2.2a.6 + §4.
|
|
3
|
+
*
|
|
4
|
+
* - {@link ChallengeInvalidError}: error type a client raises when a
|
|
5
|
+
* received challenge violates §2.2a.3 binding rules. Drivers catch
|
|
6
|
+
* it and emit a `challenge_invalid` rejection.
|
|
7
|
+
* - {@link buildClientRejection}: produce an unsigned client-side
|
|
8
|
+
* rejection message (party=client). The client has not authenticated
|
|
9
|
+
* to the server at this point, so the wire form has no
|
|
10
|
+
* `server_signature` and uses canonical bytes directly.
|
|
11
|
+
* - {@link isResumptionFailed}: classifies a `HandshakeRejectedError`
|
|
12
|
+
* as a recoverable resumption failure that callers should fall back
|
|
13
|
+
* from to a full handshake.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Error a client raises when a received challenge violates §2.2a.3
|
|
19
|
+
* binding rules. The handshake driver catches this, sends a
|
|
20
|
+
* `challenge_invalid` rejection, then re-raises to the caller.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ChallengeInvalidError extends Error {
|
|
23
|
+
readonly name = "ChallengeInvalidError";
|
|
24
|
+
/** Detail emitted verbatim in the abort message's `reason` field. */
|
|
25
|
+
readonly detail: string;
|
|
26
|
+
constructor(detail: string);
|
|
27
|
+
}
|
|
28
|
+
/** Type guard for {@link ChallengeInvalidError}. */
|
|
29
|
+
export declare function isChallengeInvalid(err: unknown): err is ChallengeInvalidError;
|
|
30
|
+
/**
|
|
31
|
+
* Build an unsigned client-initiator abort message per §2.2a.6.
|
|
32
|
+
*
|
|
33
|
+
* The wire shape is `party: "client"` with no `server_signature` —
|
|
34
|
+
* the initiator has not authenticated to the server at this point
|
|
35
|
+
* and MUST NOT do so as part of an abort.
|
|
36
|
+
*
|
|
37
|
+
* Returns canonical UTF-8 JSON bytes ready to send on the handshake
|
|
38
|
+
* stream. The caller closes the transport after sending.
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildClientRejection(reasonCode: string, reason?: string): Uint8Array;
|
|
41
|
+
/**
|
|
42
|
+
* Report whether `err` is a {@link HandshakeRejectedError} whose
|
|
43
|
+
* reason code indicates the resume attempt failed in a way the
|
|
44
|
+
* client should retry as a full handshake. Per HANDSHAKE.md §2.8:
|
|
45
|
+
* if the server has lost session state or the ticket has expired,
|
|
46
|
+
* the client falls back to a fresh handshake.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isResumptionFailed(err: unknown): boolean;
|
|
49
|
+
//# sourceMappingURL=abort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/handshake/abort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;IACjD,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;CAI3B;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,qBAAqB,CAE7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,UAAU,CAcZ;AASD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKxD"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handshake abort + rejection helpers per HANDSHAKE.md §2.2a.6 + §4.
|
|
3
|
+
*
|
|
4
|
+
* - {@link ChallengeInvalidError}: error type a client raises when a
|
|
5
|
+
* received challenge violates §2.2a.3 binding rules. Drivers catch
|
|
6
|
+
* it and emit a `challenge_invalid` rejection.
|
|
7
|
+
* - {@link buildClientRejection}: produce an unsigned client-side
|
|
8
|
+
* rejection message (party=client). The client has not authenticated
|
|
9
|
+
* to the server at this point, so the wire form has no
|
|
10
|
+
* `server_signature` and uses canonical bytes directly.
|
|
11
|
+
* - {@link isResumptionFailed}: classifies a `HandshakeRejectedError`
|
|
12
|
+
* as a recoverable resumption failure that callers should fall back
|
|
13
|
+
* from to a full handshake.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { marshal as canonicalMarshal } from "../canonical/index.js";
|
|
18
|
+
import { HandshakeRejectedError } from "./driver.js";
|
|
19
|
+
import { HandshakeVersion } from "./messages.js";
|
|
20
|
+
/**
|
|
21
|
+
* Error a client raises when a received challenge violates §2.2a.3
|
|
22
|
+
* binding rules. The handshake driver catches this, sends a
|
|
23
|
+
* `challenge_invalid` rejection, then re-raises to the caller.
|
|
24
|
+
*/
|
|
25
|
+
export class ChallengeInvalidError extends Error {
|
|
26
|
+
name = "ChallengeInvalidError";
|
|
27
|
+
/** Detail emitted verbatim in the abort message's `reason` field. */
|
|
28
|
+
detail;
|
|
29
|
+
constructor(detail) {
|
|
30
|
+
super(`handshake: challenge_invalid: ${detail}`);
|
|
31
|
+
this.detail = detail;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** Type guard for {@link ChallengeInvalidError}. */
|
|
35
|
+
export function isChallengeInvalid(err) {
|
|
36
|
+
return err instanceof ChallengeInvalidError;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build an unsigned client-initiator abort message per §2.2a.6.
|
|
40
|
+
*
|
|
41
|
+
* The wire shape is `party: "client"` with no `server_signature` —
|
|
42
|
+
* the initiator has not authenticated to the server at this point
|
|
43
|
+
* and MUST NOT do so as part of an abort.
|
|
44
|
+
*
|
|
45
|
+
* Returns canonical UTF-8 JSON bytes ready to send on the handshake
|
|
46
|
+
* stream. The caller closes the transport after sending.
|
|
47
|
+
*/
|
|
48
|
+
export function buildClientRejection(reasonCode, reason) {
|
|
49
|
+
if (reasonCode === "") {
|
|
50
|
+
throw new Error("handshake: empty reason_code in client rejection");
|
|
51
|
+
}
|
|
52
|
+
const msg = {
|
|
53
|
+
type: "SEMP_HANDSHAKE",
|
|
54
|
+
step: "rejected",
|
|
55
|
+
party: "client",
|
|
56
|
+
version: HandshakeVersion,
|
|
57
|
+
reason_code: reasonCode,
|
|
58
|
+
reason: reason ?? "",
|
|
59
|
+
extensions: {},
|
|
60
|
+
};
|
|
61
|
+
return canonicalMarshal(msg);
|
|
62
|
+
}
|
|
63
|
+
/** Reason codes per HANDSHAKE.md §2.8 that the spec treats as recoverable resumption failures. */
|
|
64
|
+
const RECOVERABLE_RESUMPTION_REASONS = new Set([
|
|
65
|
+
"resumption_failed",
|
|
66
|
+
"session_expired",
|
|
67
|
+
"no_session",
|
|
68
|
+
]);
|
|
69
|
+
/**
|
|
70
|
+
* Report whether `err` is a {@link HandshakeRejectedError} whose
|
|
71
|
+
* reason code indicates the resume attempt failed in a way the
|
|
72
|
+
* client should retry as a full handshake. Per HANDSHAKE.md §2.8:
|
|
73
|
+
* if the server has lost session state or the ticket has expired,
|
|
74
|
+
* the client falls back to a fresh handshake.
|
|
75
|
+
*/
|
|
76
|
+
export function isResumptionFailed(err) {
|
|
77
|
+
if (!(err instanceof HandshakeRejectedError)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
return RECOVERABLE_RESUMPTION_REASONS.has(err.reasonCode);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/handshake/abort.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC5B,IAAI,GAAG,uBAAuB,CAAC;IACjD,qEAAqE;IAC5D,MAAM,CAAS;IAExB,YAAY,MAAc;QACxB,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,oDAAoD;AACpD,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,OAAO,GAAG,YAAY,qBAAqB,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,MAAe;IAEf,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,GAAG,GAA4B;QACnC,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,MAAM,IAAI,EAAE;QACpB,UAAU,EAAE,EAAE;KACf,CAAC;IACF,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,kGAAkG;AAClG,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CAAC;IAClE,mBAAmB;IACnB,iBAAiB;IACjB,YAAY;CACb,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAC,CAAC,GAAG,YAAY,sBAAsB,CAAC,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,8BAA8B,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability negotiation helpers per HANDSHAKE.md §6.4 + SESSION.md §4.3.
|
|
3
|
+
*
|
|
4
|
+
* `negotiateCapabilities` returns the agreed session parameters from
|
|
5
|
+
* the client's offered capabilities and the server's accepted set,
|
|
6
|
+
* preferring the post-quantum hybrid suite when both peers support
|
|
7
|
+
* it.
|
|
8
|
+
*
|
|
9
|
+
* Selection rules:
|
|
10
|
+
*
|
|
11
|
+
* - Encryption algorithm: walk the spec preference order (PQ hybrid
|
|
12
|
+
* first, then baseline). The strongest mutually supported and
|
|
13
|
+
* library-implemented suite wins.
|
|
14
|
+
* - Extensions: the intersection of `offered.extensions` and
|
|
15
|
+
* `accepted.extensions`, in the order they appear in `offered`.
|
|
16
|
+
* - max_envelope_size / max_batch_size: the smaller of the two
|
|
17
|
+
* when both sides advertise; the side that advertises when only
|
|
18
|
+
* one does; absent when neither does.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
import type { Capabilities, Negotiated } from "./messages.js";
|
|
23
|
+
/**
|
|
24
|
+
* Suite preference order from strongest to weakest. Library MUST
|
|
25
|
+
* walk this list and return the first suite that appears in both
|
|
26
|
+
* `offered` AND `accepted` AND is implemented locally.
|
|
27
|
+
*
|
|
28
|
+
* The `pq-kyber768-x25519` hybrid is RECOMMENDED for new
|
|
29
|
+
* deployments per SESSION.md §4; the baseline
|
|
30
|
+
* `x25519-chacha20-poly1305` is mandatory for interoperability
|
|
31
|
+
* per ENVELOPE.md §7.3.2.
|
|
32
|
+
*/
|
|
33
|
+
export declare const SuitePreferenceOrder: readonly string[];
|
|
34
|
+
/** Library-implemented suite identifiers. */
|
|
35
|
+
export declare const ImplementedSuites: readonly string[];
|
|
36
|
+
/** Default capabilities a baseline conformant client advertises. */
|
|
37
|
+
export declare function defaultClientCapabilities(): Capabilities;
|
|
38
|
+
/** Default capabilities a baseline conformant server accepts. */
|
|
39
|
+
export declare function defaultServerCapabilities(): Capabilities;
|
|
40
|
+
/**
|
|
41
|
+
* Compute the negotiated session parameters per §6.4. Throws when
|
|
42
|
+
* no encryption suite is mutually supported (caller surfaces this
|
|
43
|
+
* as a `policy_forbidden` rejection).
|
|
44
|
+
*/
|
|
45
|
+
export declare function negotiateCapabilities(offered: Capabilities, accepted: Capabilities): Negotiated;
|
|
46
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/handshake/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAGjD,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAG9C,CAAC;AAEF,oEAAoE;AACpE,wBAAgB,yBAAyB,IAAI,YAAY,CAQxD;AAED,iEAAiE;AACjE,wBAAgB,yBAAyB,IAAI,YAAY,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,YAAY,GACrB,UAAU,CA0CZ"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability negotiation helpers per HANDSHAKE.md §6.4 + SESSION.md §4.3.
|
|
3
|
+
*
|
|
4
|
+
* `negotiateCapabilities` returns the agreed session parameters from
|
|
5
|
+
* the client's offered capabilities and the server's accepted set,
|
|
6
|
+
* preferring the post-quantum hybrid suite when both peers support
|
|
7
|
+
* it.
|
|
8
|
+
*
|
|
9
|
+
* Selection rules:
|
|
10
|
+
*
|
|
11
|
+
* - Encryption algorithm: walk the spec preference order (PQ hybrid
|
|
12
|
+
* first, then baseline). The strongest mutually supported and
|
|
13
|
+
* library-implemented suite wins.
|
|
14
|
+
* - Extensions: the intersection of `offered.extensions` and
|
|
15
|
+
* `accepted.extensions`, in the order they appear in `offered`.
|
|
16
|
+
* - max_envelope_size / max_batch_size: the smaller of the two
|
|
17
|
+
* when both sides advertise; the side that advertises when only
|
|
18
|
+
* one does; absent when neither does.
|
|
19
|
+
*
|
|
20
|
+
* @module
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Suite preference order from strongest to weakest. Library MUST
|
|
24
|
+
* walk this list and return the first suite that appears in both
|
|
25
|
+
* `offered` AND `accepted` AND is implemented locally.
|
|
26
|
+
*
|
|
27
|
+
* The `pq-kyber768-x25519` hybrid is RECOMMENDED for new
|
|
28
|
+
* deployments per SESSION.md §4; the baseline
|
|
29
|
+
* `x25519-chacha20-poly1305` is mandatory for interoperability
|
|
30
|
+
* per ENVELOPE.md §7.3.2.
|
|
31
|
+
*/
|
|
32
|
+
export const SuitePreferenceOrder = [
|
|
33
|
+
"pq-kyber768-x25519",
|
|
34
|
+
"x25519-chacha20-poly1305",
|
|
35
|
+
];
|
|
36
|
+
/** Library-implemented suite identifiers. */
|
|
37
|
+
export const ImplementedSuites = [
|
|
38
|
+
"pq-kyber768-x25519",
|
|
39
|
+
"x25519-chacha20-poly1305",
|
|
40
|
+
];
|
|
41
|
+
/** Default capabilities a baseline conformant client advertises. */
|
|
42
|
+
export function defaultClientCapabilities() {
|
|
43
|
+
return {
|
|
44
|
+
encryption_algorithms: [
|
|
45
|
+
"pq-kyber768-x25519",
|
|
46
|
+
"x25519-chacha20-poly1305",
|
|
47
|
+
],
|
|
48
|
+
extensions: [],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Default capabilities a baseline conformant server accepts. */
|
|
52
|
+
export function defaultServerCapabilities() {
|
|
53
|
+
return {
|
|
54
|
+
encryption_algorithms: [
|
|
55
|
+
"pq-kyber768-x25519",
|
|
56
|
+
"x25519-chacha20-poly1305",
|
|
57
|
+
],
|
|
58
|
+
extensions: [],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compute the negotiated session parameters per §6.4. Throws when
|
|
63
|
+
* no encryption suite is mutually supported (caller surfaces this
|
|
64
|
+
* as a `policy_forbidden` rejection).
|
|
65
|
+
*/
|
|
66
|
+
export function negotiateCapabilities(offered, accepted) {
|
|
67
|
+
const offeredSet = new Set(offered.encryption_algorithms);
|
|
68
|
+
const acceptedSet = new Set(accepted.encryption_algorithms);
|
|
69
|
+
const implementedSet = new Set(ImplementedSuites);
|
|
70
|
+
let chosen = null;
|
|
71
|
+
for (const id of SuitePreferenceOrder) {
|
|
72
|
+
if (offeredSet.has(id) && acceptedSet.has(id) && implementedSet.has(id)) {
|
|
73
|
+
chosen = id;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (chosen === null) {
|
|
78
|
+
throw new Error("handshake: no mutually supported encryption suite");
|
|
79
|
+
}
|
|
80
|
+
const negotiatedExtensions = intersectStrings(offered.extensions, accepted.extensions);
|
|
81
|
+
// max_envelope_size: the smaller of the two when both sides advertise.
|
|
82
|
+
let maxEnvelope;
|
|
83
|
+
const oMax = offered.max_envelope_size;
|
|
84
|
+
const aMax = accepted.max_envelope_size;
|
|
85
|
+
if (typeof oMax === "number" && oMax > 0) {
|
|
86
|
+
maxEnvelope = oMax;
|
|
87
|
+
}
|
|
88
|
+
if (typeof aMax === "number" && aMax > 0) {
|
|
89
|
+
maxEnvelope = maxEnvelope === undefined ? aMax : Math.min(maxEnvelope, aMax);
|
|
90
|
+
}
|
|
91
|
+
const out = {
|
|
92
|
+
encryption_algorithm: chosen,
|
|
93
|
+
extensions: negotiatedExtensions,
|
|
94
|
+
};
|
|
95
|
+
if (maxEnvelope !== undefined) {
|
|
96
|
+
out.max_envelope_size = maxEnvelope;
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
/** Intersection of `a` and `b`, ordered by `a`. */
|
|
101
|
+
function intersectStrings(a, b) {
|
|
102
|
+
if (a.length === 0 || b.length === 0) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const set = new Set(b);
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const v of a) {
|
|
108
|
+
if (set.has(v)) {
|
|
109
|
+
out.push(v);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/handshake/capabilities.ts"],"names":[],"mappings":"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"}
|