@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,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Well-known configuration document parsing per DISCOVERY.md §3.1.
|
|
3
|
+
*
|
|
4
|
+
* The bootstrapping path `/.well-known/semp/configuration` returns a
|
|
5
|
+
* JSON document that describes a server's capabilities, transport
|
|
6
|
+
* endpoints, API endpoints, and supported extensions. This module
|
|
7
|
+
* provides a typed shape and a validator that enforces the §3.2
|
|
8
|
+
* "fixed by the protocol" rules:
|
|
9
|
+
*
|
|
10
|
+
* - `type` MUST be `"SEMP_CONFIGURATION"`
|
|
11
|
+
* - `endpoints.client` and `endpoints.federation` MUST each contain
|
|
12
|
+
* at least an `h2` entry
|
|
13
|
+
* - `endpoints.register`, `endpoints.keys`, `endpoints.domain_keys`
|
|
14
|
+
* MUST be present
|
|
15
|
+
* - `suites` MUST contain at least `x25519-chacha20-poly1305`
|
|
16
|
+
* - `limits.max_envelope_size` MUST be present
|
|
17
|
+
*
|
|
18
|
+
* Unknown fields are preserved on the typed object via the
|
|
19
|
+
* index signature so callers can read forward-compatible additions
|
|
20
|
+
* without requiring a parser update.
|
|
21
|
+
*
|
|
22
|
+
* @module
|
|
23
|
+
*/
|
|
24
|
+
/** Canonical well-known path. Fixed by the protocol per §3. */
|
|
25
|
+
export const WellKnownPath = "/.well-known/semp/configuration";
|
|
26
|
+
/** Document `type` discriminator. */
|
|
27
|
+
export const ConfigurationType = "SEMP_CONFIGURATION";
|
|
28
|
+
/**
|
|
29
|
+
* Maximum byte size accepted for a fetched well-known body. 64 KiB
|
|
30
|
+
* is large enough for any reasonable configuration (including rich
|
|
31
|
+
* extension maps) without letting a hostile server feed us
|
|
32
|
+
* gigabytes.
|
|
33
|
+
*/
|
|
34
|
+
export const WellKnownMaxBytes = 64 * 1024;
|
|
35
|
+
/**
|
|
36
|
+
* Validate and narrow a parsed JSON value into a {@link Configuration}.
|
|
37
|
+
* Throws with a descriptive message on the first protocol violation.
|
|
38
|
+
*
|
|
39
|
+
* The validator enforces the §3.2 mandatory-fixed rules (h2 baseline,
|
|
40
|
+
* x25519 baseline, max_envelope_size present) but is permissive about
|
|
41
|
+
* unknown fields per §3.1 ("Implementations MUST ignore unknown
|
|
42
|
+
* fields rather than failing").
|
|
43
|
+
*/
|
|
44
|
+
export function parseConfiguration(value) {
|
|
45
|
+
if (!isRecord(value)) {
|
|
46
|
+
throw new Error("configuration: not a JSON object");
|
|
47
|
+
}
|
|
48
|
+
if (value.type !== ConfigurationType) {
|
|
49
|
+
throw new Error(`configuration: type ${JSON.stringify(value.type)}, want ${ConfigurationType}`);
|
|
50
|
+
}
|
|
51
|
+
requireString(value, "version");
|
|
52
|
+
requireString(value, "domain");
|
|
53
|
+
requireInt(value, "revision");
|
|
54
|
+
requireInt(value, "ttl_seconds");
|
|
55
|
+
const endpoints = requireObject(value, "endpoints");
|
|
56
|
+
const client = requireTransportMap(endpoints, "endpoints.client");
|
|
57
|
+
const federation = requireTransportMap(endpoints, "endpoints.federation");
|
|
58
|
+
if (typeof client.h2 !== "string" || client.h2 === "") {
|
|
59
|
+
throw new Error("configuration: endpoints.client.h2 missing (mandatory baseline)");
|
|
60
|
+
}
|
|
61
|
+
if (typeof federation.h2 !== "string" || federation.h2 === "") {
|
|
62
|
+
throw new Error("configuration: endpoints.federation.h2 missing (mandatory baseline)");
|
|
63
|
+
}
|
|
64
|
+
requireString(endpoints, "register");
|
|
65
|
+
requireString(endpoints, "keys");
|
|
66
|
+
requireString(endpoints, "domain_keys");
|
|
67
|
+
const suites = requireStringArray(value, "suites");
|
|
68
|
+
if (!suites.includes("x25519-chacha20-poly1305")) {
|
|
69
|
+
throw new Error("configuration: suites missing x25519-chacha20-poly1305 (mandatory baseline)");
|
|
70
|
+
}
|
|
71
|
+
const limits = requireObject(value, "limits");
|
|
72
|
+
requireInt(limits, "max_envelope_size");
|
|
73
|
+
// Extensions optional per §3.1.4.
|
|
74
|
+
if (value.extensions !== undefined) {
|
|
75
|
+
if (!Array.isArray(value.extensions)) {
|
|
76
|
+
throw new Error("configuration: extensions: not an array");
|
|
77
|
+
}
|
|
78
|
+
for (let i = 0; i < value.extensions.length; i++) {
|
|
79
|
+
const ext = value.extensions[i];
|
|
80
|
+
if (!isRecord(ext)) {
|
|
81
|
+
throw new Error(`configuration: extensions[${i}]: not an object`);
|
|
82
|
+
}
|
|
83
|
+
if (typeof ext.id !== "string" || ext.id === "") {
|
|
84
|
+
throw new Error(`configuration: extensions[${i}].id missing`);
|
|
85
|
+
}
|
|
86
|
+
if (typeof ext.required !== "boolean") {
|
|
87
|
+
throw new Error(`configuration: extensions[${i}].required must be boolean`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// Tiny type-narrowing helpers shared with domain_keys.ts.
|
|
95
|
+
export function isRecord(v) {
|
|
96
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
97
|
+
}
|
|
98
|
+
export function requireString(obj, key) {
|
|
99
|
+
const v = obj[key];
|
|
100
|
+
if (typeof v !== "string" || v === "") {
|
|
101
|
+
throw new Error(`configuration: ${key}: missing or not a non-empty string`);
|
|
102
|
+
}
|
|
103
|
+
return v;
|
|
104
|
+
}
|
|
105
|
+
export function requireInt(obj, key) {
|
|
106
|
+
const v = obj[key];
|
|
107
|
+
if (typeof v !== "number" || !Number.isInteger(v)) {
|
|
108
|
+
throw new Error(`configuration: ${key}: missing or not an integer`);
|
|
109
|
+
}
|
|
110
|
+
return v;
|
|
111
|
+
}
|
|
112
|
+
export function requireObject(obj, key) {
|
|
113
|
+
const v = obj[key];
|
|
114
|
+
if (!isRecord(v)) {
|
|
115
|
+
throw new Error(`configuration: ${key}: missing or not an object`);
|
|
116
|
+
}
|
|
117
|
+
return v;
|
|
118
|
+
}
|
|
119
|
+
export function requireStringArray(obj, key) {
|
|
120
|
+
const v = obj[key];
|
|
121
|
+
if (!Array.isArray(v)) {
|
|
122
|
+
throw new Error(`configuration: ${key}: missing or not an array`);
|
|
123
|
+
}
|
|
124
|
+
for (let i = 0; i < v.length; i++) {
|
|
125
|
+
if (typeof v[i] !== "string") {
|
|
126
|
+
throw new Error(`configuration: ${key}[${i}]: not a string`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return v;
|
|
130
|
+
}
|
|
131
|
+
function requireTransportMap(obj, key) {
|
|
132
|
+
// The path here is a dotted key like "endpoints.client" but the
|
|
133
|
+
// actual lookup is the leaf segment.
|
|
134
|
+
const leaf = key.split(".").pop() ?? key;
|
|
135
|
+
const v = obj[leaf];
|
|
136
|
+
if (!isRecord(v)) {
|
|
137
|
+
throw new Error(`configuration: ${key}: missing or not an object`);
|
|
138
|
+
}
|
|
139
|
+
for (const [k, val] of Object.entries(v)) {
|
|
140
|
+
if (typeof val !== "string" || val === "") {
|
|
141
|
+
throw new Error(`configuration: ${key}.${k}: not a non-empty string`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return v;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=configuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/discovery/configuration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAE/D,qCAAqC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAsD3C;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,uBAAuB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,iBAAiB,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAChC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/B,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9B,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,mBAAmB,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAC1E,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,EAAE,KAAK,QAAQ,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACrC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9C,UAAU,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAExC,kCAAkC;IAClC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,4BAA4B,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAiC,CAAC;AAC3C,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAE1D,MAAM,UAAU,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAA4B,EAAE,GAAW;IACrE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,qCAAqC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAA4B,EAAE,GAAW;IAClE,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,6BAA6B,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAA4B,EAC5B,GAAW;IAEX,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,4BAA4B,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAA4B,EAC5B,GAAW;IAEX,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,2BAA2B,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,CAAa,CAAC;AACvB,CAAC;AAED,SAAS,mBAAmB,CAC1B,GAA4B,EAC5B,GAAW;IAEX,gEAAgE;IAChE,qCAAqC;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;IACzC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,4BAA4B,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,OAAO,CAAuB,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DNS lookup helpers per DISCOVERY.md §2.1 + §2.2 + §7.2.
|
|
3
|
+
*
|
|
4
|
+
* Provides `lookupSRV`, `lookupTXT`, and `lookupMX` wrappers around
|
|
5
|
+
* Node's `node:dns/promises` resolver. Tests inject a custom
|
|
6
|
+
* {@link DNSLookup} implementation.
|
|
7
|
+
*
|
|
8
|
+
* This module is Node-only; `defaultDNSLookup` calls into
|
|
9
|
+
* `node:dns/promises`. Browser / Deno callers must pass a custom
|
|
10
|
+
* {@link DNSLookup} (e.g. backed by DNS-over-HTTPS).
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { type TXTCapabilities } from "./txt.js";
|
|
15
|
+
/** A parsed _semp._tcp.<domain> SRV record per §2.1. */
|
|
16
|
+
export interface SRVRecord {
|
|
17
|
+
priority: number;
|
|
18
|
+
weight: number;
|
|
19
|
+
port: number;
|
|
20
|
+
target: string;
|
|
21
|
+
}
|
|
22
|
+
/** A parsed MX record per §7.2. */
|
|
23
|
+
export interface MXRecord {
|
|
24
|
+
preference: number;
|
|
25
|
+
exchange: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Narrow DNS interface that {@link lookupSRV} / {@link lookupTXT} /
|
|
29
|
+
* {@link lookupMX} consume. Tests inject a fake; production callers
|
|
30
|
+
* use {@link defaultDNSLookup}.
|
|
31
|
+
*/
|
|
32
|
+
export interface DNSLookup {
|
|
33
|
+
lookupSRV(domain: string): Promise<SRVRecord[]>;
|
|
34
|
+
lookupTXT(domain: string): Promise<string[]>;
|
|
35
|
+
lookupMX(domain: string): Promise<MXRecord[]>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Default DNS lookup backed by Node's `node:dns/promises`. Throws
|
|
39
|
+
* a descriptive error in non-Node environments.
|
|
40
|
+
*/
|
|
41
|
+
export declare function defaultDNSLookup(): Promise<DNSLookup>;
|
|
42
|
+
/**
|
|
43
|
+
* Look up `_semp._tcp.<domain>` SRV records and return them in
|
|
44
|
+
* priority-ascending order (clients applying weighted random
|
|
45
|
+
* selection per RFC 2782 sort within a priority group themselves).
|
|
46
|
+
*/
|
|
47
|
+
export declare function lookupSRV(domain: string, lookup?: DNSLookup): Promise<SRVRecord[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Look up `_semp._tcp.<domain>` TXT records and return the first
|
|
50
|
+
* one whose `v=` parameter is `semp1`. Returns null when no SEMP
|
|
51
|
+
* TXT record is published.
|
|
52
|
+
*/
|
|
53
|
+
export declare function lookupTXT(domain: string, lookup?: DNSLookup): Promise<TXTCapabilities | null>;
|
|
54
|
+
/** Look up MX records for `domain`, sorted by preference ascending. */
|
|
55
|
+
export declare function lookupMX(domain: string, lookup?: DNSLookup): Promise<MXRecord[]>;
|
|
56
|
+
//# sourceMappingURL=dns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns.d.ts","sourceRoot":"","sources":["../../src/discovery/dns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,UAAU,CAAC;AAEtE,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC,CAqD3D;AAoBD;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAKtB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAWjC;AAED,uEAAuE;AACvE,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAGrB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DNS lookup helpers per DISCOVERY.md §2.1 + §2.2 + §7.2.
|
|
3
|
+
*
|
|
4
|
+
* Provides `lookupSRV`, `lookupTXT`, and `lookupMX` wrappers around
|
|
5
|
+
* Node's `node:dns/promises` resolver. Tests inject a custom
|
|
6
|
+
* {@link DNSLookup} implementation.
|
|
7
|
+
*
|
|
8
|
+
* This module is Node-only; `defaultDNSLookup` calls into
|
|
9
|
+
* `node:dns/promises`. Browser / Deno callers must pass a custom
|
|
10
|
+
* {@link DNSLookup} (e.g. backed by DNS-over-HTTPS).
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import { parseTXTCapabilities } from "./txt.js";
|
|
15
|
+
/**
|
|
16
|
+
* Default DNS lookup backed by Node's `node:dns/promises`. Throws
|
|
17
|
+
* a descriptive error in non-Node environments.
|
|
18
|
+
*/
|
|
19
|
+
export async function defaultDNSLookup() {
|
|
20
|
+
let dns;
|
|
21
|
+
try {
|
|
22
|
+
dns = await import("node:dns/promises");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
throw new Error("discovery: node:dns/promises unavailable; pass a DNSLookup explicitly in non-Node environments");
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
async lookupSRV(domain) {
|
|
29
|
+
try {
|
|
30
|
+
const recs = await dns.resolveSrv(domain);
|
|
31
|
+
return recs.map((r) => ({
|
|
32
|
+
priority: r.priority,
|
|
33
|
+
weight: r.weight,
|
|
34
|
+
port: r.port,
|
|
35
|
+
target: r.name.replace(/\.$/, ""),
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (isNoData(err) || isNotFound(err)) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async lookupTXT(domain) {
|
|
46
|
+
try {
|
|
47
|
+
const recs = await dns.resolveTxt(domain);
|
|
48
|
+
return recs.map((parts) => parts.join(""));
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (isNoData(err) || isNotFound(err)) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
async lookupMX(domain) {
|
|
58
|
+
try {
|
|
59
|
+
const recs = await dns.resolveMx(domain);
|
|
60
|
+
const sorted = [...recs].sort((a, b) => a.priority - b.priority);
|
|
61
|
+
return sorted.map((r) => ({
|
|
62
|
+
preference: r.priority,
|
|
63
|
+
exchange: r.exchange.replace(/\.$/, ""),
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (isNoData(err) || isNotFound(err)) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function isNoData(err) {
|
|
76
|
+
return (err !== null &&
|
|
77
|
+
typeof err === "object" &&
|
|
78
|
+
"code" in err &&
|
|
79
|
+
err.code === "ENODATA");
|
|
80
|
+
}
|
|
81
|
+
function isNotFound(err) {
|
|
82
|
+
return (err !== null &&
|
|
83
|
+
typeof err === "object" &&
|
|
84
|
+
"code" in err &&
|
|
85
|
+
err.code === "ENOTFOUND");
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Look up `_semp._tcp.<domain>` SRV records and return them in
|
|
89
|
+
* priority-ascending order (clients applying weighted random
|
|
90
|
+
* selection per RFC 2782 sort within a priority group themselves).
|
|
91
|
+
*/
|
|
92
|
+
export async function lookupSRV(domain, lookup) {
|
|
93
|
+
const dns = lookup ?? (await defaultDNSLookup());
|
|
94
|
+
const name = `_semp._tcp.${domain}`;
|
|
95
|
+
const recs = await dns.lookupSRV(name);
|
|
96
|
+
return [...recs].sort((a, b) => a.priority - b.priority);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Look up `_semp._tcp.<domain>` TXT records and return the first
|
|
100
|
+
* one whose `v=` parameter is `semp1`. Returns null when no SEMP
|
|
101
|
+
* TXT record is published.
|
|
102
|
+
*/
|
|
103
|
+
export async function lookupTXT(domain, lookup) {
|
|
104
|
+
const dns = lookup ?? (await defaultDNSLookup());
|
|
105
|
+
const name = `_semp._tcp.${domain}`;
|
|
106
|
+
const txts = await dns.lookupTXT(name);
|
|
107
|
+
for (const raw of txts) {
|
|
108
|
+
const cap = parseTXTCapabilities(raw);
|
|
109
|
+
if (cap.v === "semp1") {
|
|
110
|
+
return cap;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/** Look up MX records for `domain`, sorted by preference ascending. */
|
|
116
|
+
export async function lookupMX(domain, lookup) {
|
|
117
|
+
const dns = lookup ?? (await defaultDNSLookup());
|
|
118
|
+
return dns.lookupMX(domain);
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=dns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/discovery/dns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain key publication parsing per DISCOVERY.md §3.3.
|
|
3
|
+
*
|
|
4
|
+
* Federation peers fetch the domain signing + encryption keys from
|
|
5
|
+
* the URL advertised as `endpoints.domain_keys` in a server's
|
|
6
|
+
* configuration document. The HTTPS certificate chain is the trust
|
|
7
|
+
* anchor: if the TLS certificate is valid for the hostname, the
|
|
8
|
+
* domain keys it publishes are trusted (§3.3 paragraph 4).
|
|
9
|
+
*
|
|
10
|
+
* Beyond the TLS check, peers MUST cross-verify that
|
|
11
|
+
* `signing_key.key_id` is the SHA-256 fingerprint of the published
|
|
12
|
+
* `signing_key.public_key`. Otherwise a misconfigured server (or an
|
|
13
|
+
* attacker on the publication path) could swap in a key whose
|
|
14
|
+
* fingerprint doesn't match the one the peer cached. This module
|
|
15
|
+
* exposes that check as {@link verifyDomainKeyFingerprint}.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
/** `type` discriminator for a domain-keys document. */
|
|
20
|
+
export declare const DomainKeysType = "SEMP_DOMAIN_KEYS";
|
|
21
|
+
/** Maximum byte size accepted for a fetched domain-keys body. */
|
|
22
|
+
export declare const DomainKeysMaxBytes: number;
|
|
23
|
+
/** A single algorithm-tagged public key block. */
|
|
24
|
+
export interface KeyBlock {
|
|
25
|
+
algorithm: string;
|
|
26
|
+
/** Base64-encoded raw public key bytes. */
|
|
27
|
+
public_key: string;
|
|
28
|
+
/** SHA-256 fingerprint of the raw public key bytes, hex-encoded. */
|
|
29
|
+
key_id: string;
|
|
30
|
+
}
|
|
31
|
+
/** Parsed domain-keys document per §3.3. */
|
|
32
|
+
export interface DomainKeys {
|
|
33
|
+
type: typeof DomainKeysType;
|
|
34
|
+
version: string;
|
|
35
|
+
domain: string;
|
|
36
|
+
signing_key: KeyBlock;
|
|
37
|
+
encryption_key: KeyBlock;
|
|
38
|
+
/** Forward-compatible: unknown fields preserved. */
|
|
39
|
+
[key: string]: unknown;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Validate and narrow a parsed JSON value into a {@link DomainKeys}.
|
|
43
|
+
* Does NOT perform the fingerprint cross-check; call
|
|
44
|
+
* {@link verifyDomainKeyFingerprint} on each {@link KeyBlock} after
|
|
45
|
+
* parsing.
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseDomainKeys(value: unknown): DomainKeys;
|
|
48
|
+
/**
|
|
49
|
+
* Decode `block.public_key` from base64. The caller asserts the
|
|
50
|
+
* algorithm is one whose raw key is a fixed size (32 bytes for both
|
|
51
|
+
* Ed25519 signing and X25519 encryption); this helper does not
|
|
52
|
+
* enforce a length.
|
|
53
|
+
*/
|
|
54
|
+
export declare function decodeKeyBlockPublic(block: KeyBlock): Uint8Array;
|
|
55
|
+
/**
|
|
56
|
+
* Cross-check that `block.key_id` is the lowercase-hex SHA-256
|
|
57
|
+
* fingerprint of the decoded `block.public_key`. Returns true when
|
|
58
|
+
* the binding holds. Production callers MUST use this on every
|
|
59
|
+
* fetched {@link DomainKeys} before trusting either key.
|
|
60
|
+
*/
|
|
61
|
+
export declare function verifyDomainKeyFingerprint(block: KeyBlock): boolean;
|
|
62
|
+
//# sourceMappingURL=domain_keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain_keys.d.ts","sourceRoot":"","sources":["../../src/discovery/domain_keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,uDAAuD;AACvD,eAAO,MAAM,cAAc,qBAAqB,CAAC;AAEjD,iEAAiE;AACjE,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAE5C,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,cAAc,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,QAAQ,CAAC;IACtB,cAAc,EAAE,QAAQ,CAAC;IACzB,oDAAoD;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAuB1D;AAcD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,UAAU,CAUhE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAInE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain key publication parsing per DISCOVERY.md §3.3.
|
|
3
|
+
*
|
|
4
|
+
* Federation peers fetch the domain signing + encryption keys from
|
|
5
|
+
* the URL advertised as `endpoints.domain_keys` in a server's
|
|
6
|
+
* configuration document. The HTTPS certificate chain is the trust
|
|
7
|
+
* anchor: if the TLS certificate is valid for the hostname, the
|
|
8
|
+
* domain keys it publishes are trusted (§3.3 paragraph 4).
|
|
9
|
+
*
|
|
10
|
+
* Beyond the TLS check, peers MUST cross-verify that
|
|
11
|
+
* `signing_key.key_id` is the SHA-256 fingerprint of the published
|
|
12
|
+
* `signing_key.public_key`. Otherwise a misconfigured server (or an
|
|
13
|
+
* attacker on the publication path) could swap in a key whose
|
|
14
|
+
* fingerprint doesn't match the one the peer cached. This module
|
|
15
|
+
* exposes that check as {@link verifyDomainKeyFingerprint}.
|
|
16
|
+
*
|
|
17
|
+
* @module
|
|
18
|
+
*/
|
|
19
|
+
import { fingerprint as computeFingerprint } from "../keys/index.js";
|
|
20
|
+
import { isRecord, requireString, } from "./configuration.js";
|
|
21
|
+
/** `type` discriminator for a domain-keys document. */
|
|
22
|
+
export const DomainKeysType = "SEMP_DOMAIN_KEYS";
|
|
23
|
+
/** Maximum byte size accepted for a fetched domain-keys body. */
|
|
24
|
+
export const DomainKeysMaxBytes = 32 * 1024;
|
|
25
|
+
/**
|
|
26
|
+
* Validate and narrow a parsed JSON value into a {@link DomainKeys}.
|
|
27
|
+
* Does NOT perform the fingerprint cross-check; call
|
|
28
|
+
* {@link verifyDomainKeyFingerprint} on each {@link KeyBlock} after
|
|
29
|
+
* parsing.
|
|
30
|
+
*/
|
|
31
|
+
export function parseDomainKeys(value) {
|
|
32
|
+
if (!isRecord(value)) {
|
|
33
|
+
throw new Error("domain_keys: not a JSON object");
|
|
34
|
+
}
|
|
35
|
+
if (value.type !== DomainKeysType) {
|
|
36
|
+
throw new Error(`domain_keys: type ${JSON.stringify(value.type)}, want ${DomainKeysType}`);
|
|
37
|
+
}
|
|
38
|
+
requireString(value, "version");
|
|
39
|
+
requireString(value, "domain");
|
|
40
|
+
if (!isRecord(value.signing_key)) {
|
|
41
|
+
throw new Error("domain_keys: signing_key: missing or not an object");
|
|
42
|
+
}
|
|
43
|
+
validateKeyBlock(value.signing_key, "signing_key");
|
|
44
|
+
if (!isRecord(value.encryption_key)) {
|
|
45
|
+
throw new Error("domain_keys: encryption_key: missing or not an object");
|
|
46
|
+
}
|
|
47
|
+
validateKeyBlock(value.encryption_key, "encryption_key");
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
function validateKeyBlock(obj, label) {
|
|
51
|
+
if (typeof obj.algorithm !== "string" || obj.algorithm === "") {
|
|
52
|
+
throw new Error(`domain_keys: ${label}.algorithm: missing`);
|
|
53
|
+
}
|
|
54
|
+
if (typeof obj.public_key !== "string" || obj.public_key === "") {
|
|
55
|
+
throw new Error(`domain_keys: ${label}.public_key: missing`);
|
|
56
|
+
}
|
|
57
|
+
if (typeof obj.key_id !== "string" || obj.key_id === "") {
|
|
58
|
+
throw new Error(`domain_keys: ${label}.key_id: missing`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Decode `block.public_key` from base64. The caller asserts the
|
|
63
|
+
* algorithm is one whose raw key is a fixed size (32 bytes for both
|
|
64
|
+
* Ed25519 signing and X25519 encryption); this helper does not
|
|
65
|
+
* enforce a length.
|
|
66
|
+
*/
|
|
67
|
+
export function decodeKeyBlockPublic(block) {
|
|
68
|
+
if (typeof Buffer !== "undefined") {
|
|
69
|
+
return new Uint8Array(Buffer.from(block.public_key, "base64"));
|
|
70
|
+
}
|
|
71
|
+
const bin = atob(block.public_key);
|
|
72
|
+
const out = new Uint8Array(bin.length);
|
|
73
|
+
for (let i = 0; i < bin.length; i++) {
|
|
74
|
+
out[i] = bin.charCodeAt(i);
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Cross-check that `block.key_id` is the lowercase-hex SHA-256
|
|
80
|
+
* fingerprint of the decoded `block.public_key`. Returns true when
|
|
81
|
+
* the binding holds. Production callers MUST use this on every
|
|
82
|
+
* fetched {@link DomainKeys} before trusting either key.
|
|
83
|
+
*/
|
|
84
|
+
export function verifyDomainKeyFingerprint(block) {
|
|
85
|
+
const pub = decodeKeyBlockPublic(block);
|
|
86
|
+
const want = computeFingerprint(pub);
|
|
87
|
+
return block.key_id.toLowerCase() === want;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=domain_keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain_keys.js","sourceRoot":"","sources":["../../src/discovery/domain_keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery layer per DISCOVERY.md.
|
|
3
|
+
*
|
|
4
|
+
* DNS lookups (SRV / TXT / MX), well-known URI configuration +
|
|
5
|
+
* domain-keys fetch (§3), signed SEMP_DISCOVERY lookup (§4), and
|
|
6
|
+
* a discovery result cache (§6.1).
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
export { parseTXTCapabilities, type TXTCapabilities } from "./txt.js";
|
|
11
|
+
export { type ConfigEndpoints, type ConfigExtension, type ConfigLimits, type Configuration, type TransportEndpoints, ConfigurationType, WellKnownMaxBytes, WellKnownPath, parseConfiguration, } from "./configuration.js";
|
|
12
|
+
export { type DomainKeys, type KeyBlock, DomainKeysMaxBytes, DomainKeysType, decodeKeyBlockPublic, parseDomainKeys, verifyDomainKeyFingerprint, } from "./domain_keys.js";
|
|
13
|
+
export { type FetchLike, type FetchOptions, type ResolveServerOptions, type ResolvedServer, fetchConfiguration, fetchDomainKeys, resolveServer, wellKnownUrl, } from "./resolver.js";
|
|
14
|
+
export { type DNSLookup, type MXRecord, type SRVRecord, defaultDNSLookup, lookupMX, lookupSRV, lookupTXT, } from "./dns.js";
|
|
15
|
+
export { type DiscoveryCache, DefaultTTLLegacyMs, DefaultTTLNotFoundMs, DefaultTTLSEMPMs, InMemoryDiscoveryCache, } from "./cache.js";
|
|
16
|
+
export { type DiscoveryRequest, type DiscoveryResponse, type DiscoveryResult, type DiscoverySignature, type DiscoveryStatus, DiscoveryMessageType, DiscoveryRecordVersion, DiscoverySignaturePrefix, DiscoveryStepRequest, DiscoveryStepResponse, signDiscoveryResponse, validateDiscoveryRequest, validateDiscoveryResponse, verifyDiscoveryResponse, } from "./lookup.js";
|
|
17
|
+
export { OnionSuffix, OnionV3LabelLength, isOnionDomain, validateOnionDomain, } from "./onion.js";
|
|
18
|
+
export { type AlphaRange, type PartitionConfig, type PartitionLookupFunc, type PartitionResolverConfig, type PartitionStrategy, defaultAlphaRanges, parsePartitionTXT, resolvePartition, } from "./partition.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAEtE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,SAAS,GACV,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,KAAK,cAAc,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery layer per DISCOVERY.md.
|
|
3
|
+
*
|
|
4
|
+
* DNS lookups (SRV / TXT / MX), well-known URI configuration +
|
|
5
|
+
* domain-keys fetch (§3), signed SEMP_DISCOVERY lookup (§4), and
|
|
6
|
+
* a discovery result cache (§6.1).
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
export { parseTXTCapabilities } from "./txt.js";
|
|
11
|
+
export { ConfigurationType, WellKnownMaxBytes, WellKnownPath, parseConfiguration, } from "./configuration.js";
|
|
12
|
+
export { DomainKeysMaxBytes, DomainKeysType, decodeKeyBlockPublic, parseDomainKeys, verifyDomainKeyFingerprint, } from "./domain_keys.js";
|
|
13
|
+
export { fetchConfiguration, fetchDomainKeys, resolveServer, wellKnownUrl, } from "./resolver.js";
|
|
14
|
+
export { defaultDNSLookup, lookupMX, lookupSRV, lookupTXT, } from "./dns.js";
|
|
15
|
+
export { DefaultTTLLegacyMs, DefaultTTLNotFoundMs, DefaultTTLSEMPMs, InMemoryDiscoveryCache, } from "./cache.js";
|
|
16
|
+
export { DiscoveryMessageType, DiscoveryRecordVersion, DiscoverySignaturePrefix, DiscoveryStepRequest, DiscoveryStepResponse, signDiscoveryResponse, validateDiscoveryRequest, validateDiscoveryResponse, verifyDiscoveryResponse, } from "./lookup.js";
|
|
17
|
+
export { OnionSuffix, OnionV3LabelLength, isOnionDomain, validateOnionDomain, } from "./onion.js";
|
|
18
|
+
export { defaultAlphaRanges, parsePartitionTXT, resolvePartition, } from "./partition.js";
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAwB,MAAM,UAAU,CAAC;AAEtE,OAAO,EAML,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAGL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAKL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAIL,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,SAAS,GACV,MAAM,UAAU,CAAC;AAElB,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAML,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAML,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEMP_DISCOVERY signed lookup per DISCOVERY.md §4.
|
|
3
|
+
*
|
|
4
|
+
* Wire shape:
|
|
5
|
+
* - Request body: `{type, step="request", version, id, timestamp,
|
|
6
|
+
* addresses, extensions?}`
|
|
7
|
+
* - Response body: `{type, step="response", version, id, timestamp,
|
|
8
|
+
* results, signature, extensions?}`
|
|
9
|
+
*
|
|
10
|
+
* The response is signed by the answering server's domain signing
|
|
11
|
+
* key with the `SEMP-DISCOVERY:` prefix per ENVELOPE.md §4.3.
|
|
12
|
+
*
|
|
13
|
+
* @module
|
|
14
|
+
*/
|
|
15
|
+
/** Wire-level constants. */
|
|
16
|
+
export declare const DiscoveryMessageType = "SEMP_DISCOVERY";
|
|
17
|
+
export declare const DiscoveryStepRequest = "request";
|
|
18
|
+
export declare const DiscoveryStepResponse = "response";
|
|
19
|
+
export declare const DiscoveryRecordVersion = "1.0.0";
|
|
20
|
+
export declare const DiscoverySignaturePrefix = "SEMP-DISCOVERY:";
|
|
21
|
+
/** §4.6 status values. */
|
|
22
|
+
export type DiscoveryStatus = "found" | "not_found" | "unsupported" | "rate_limited" | "deferred";
|
|
23
|
+
/** Reusable signature block. */
|
|
24
|
+
export interface DiscoverySignature {
|
|
25
|
+
algorithm: string;
|
|
26
|
+
key_id: string;
|
|
27
|
+
value: string;
|
|
28
|
+
}
|
|
29
|
+
/** SEMP_DISCOVERY request body per §4.1. */
|
|
30
|
+
export interface DiscoveryRequest {
|
|
31
|
+
type: typeof DiscoveryMessageType;
|
|
32
|
+
step: typeof DiscoveryStepRequest;
|
|
33
|
+
version: string;
|
|
34
|
+
id: string;
|
|
35
|
+
/** ISO 8601 UTC. */
|
|
36
|
+
timestamp: string;
|
|
37
|
+
addresses: string[];
|
|
38
|
+
extensions?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/** One entry in a {@link DiscoveryResponse}. */
|
|
41
|
+
export interface DiscoveryResult {
|
|
42
|
+
address: string;
|
|
43
|
+
status: DiscoveryStatus;
|
|
44
|
+
transports?: string[];
|
|
45
|
+
suites?: string[];
|
|
46
|
+
server?: string;
|
|
47
|
+
/** Cache TTL in seconds. */
|
|
48
|
+
ttl: number;
|
|
49
|
+
}
|
|
50
|
+
/** SEMP_DISCOVERY response body per §4.3. */
|
|
51
|
+
export interface DiscoveryResponse {
|
|
52
|
+
type: typeof DiscoveryMessageType;
|
|
53
|
+
step: typeof DiscoveryStepResponse;
|
|
54
|
+
version: string;
|
|
55
|
+
id: string;
|
|
56
|
+
/** ISO 8601 UTC. */
|
|
57
|
+
timestamp: string;
|
|
58
|
+
results: DiscoveryResult[];
|
|
59
|
+
signature: DiscoverySignature;
|
|
60
|
+
extensions?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
/** Sign a {@link DiscoveryResponse} under the answering domain's signing key. */
|
|
63
|
+
export declare function signDiscoveryResponse(resp: DiscoveryResponse, domainPriv: Uint8Array, domainKeyId: string): string;
|
|
64
|
+
/** Verify a {@link DiscoveryResponse} under the answering domain's public key. */
|
|
65
|
+
export declare function verifyDiscoveryResponse(resp: DiscoveryResponse, domainPub: Uint8Array): boolean;
|
|
66
|
+
/** Structural validation of a {@link DiscoveryRequest}. Throws on first violation. */
|
|
67
|
+
export declare function validateDiscoveryRequest(req: DiscoveryRequest): void;
|
|
68
|
+
/** Structural validation of a {@link DiscoveryResponse}. Throws on first violation. */
|
|
69
|
+
export declare function validateDiscoveryResponse(resp: DiscoveryResponse, opts?: {
|
|
70
|
+
skipSignatureCheck?: boolean;
|
|
71
|
+
}): void;
|
|
72
|
+
//# sourceMappingURL=lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../src/discovery/lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,4BAA4B;AAC5B,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAC9C,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D,0BAA0B;AAC1B,MAAM,MAAM,eAAe,GACvB,OAAO,GACP,WAAW,GACX,aAAa,GACb,cAAc,GACd,UAAU,CAAC;AAEf,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,oBAAoB,CAAC;IAClC,IAAI,EAAE,OAAO,oBAAoB,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,oBAAoB,CAAC;IAClC,IAAI,EAAE,OAAO,qBAAqB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CAgBR;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,UAAU,GACpB,OAAO,CAYT;AAED,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CA2BpE;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,iBAAiB,EACvB,IAAI,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC1C,IAAI,CAgDN"}
|