@mdbase-dev/sdk 0.0.0-stage → 0.1.0-beta.149
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 +844 -2
- package/dist/account-key.d.ts +176 -0
- package/dist/account-key.js +409 -0
- package/dist/account-key.js.map +1 -0
- package/dist/account.d.ts +11 -0
- package/dist/account.js +9 -0
- package/dist/account.js.map +1 -0
- package/dist/app-grant/client.d.ts +209 -0
- package/dist/app-grant/client.js +930 -0
- package/dist/app-grant/client.js.map +1 -0
- package/dist/app-grant/grant-store.d.ts +77 -0
- package/dist/app-grant/grant-store.js +201 -0
- package/dist/app-grant/grant-store.js.map +1 -0
- package/dist/app-grant/index.d.ts +11 -0
- package/dist/app-grant/index.js +10 -0
- package/dist/app-grant/index.js.map +1 -0
- package/dist/app-grant/native-completion.d.ts +22 -0
- package/dist/app-grant/native-completion.js +63 -0
- package/dist/app-grant/native-completion.js.map +1 -0
- package/dist/app-grant/people.d.ts +10 -0
- package/dist/app-grant/people.js +84 -0
- package/dist/app-grant/people.js.map +1 -0
- package/dist/app-grant/setup-attempt.d.ts +12 -0
- package/dist/app-grant/setup-attempt.js +62 -0
- package/dist/app-grant/setup-attempt.js.map +1 -0
- package/dist/app-grant/setup-producer.d.ts +31 -0
- package/dist/app-grant/setup-producer.js +65 -0
- package/dist/app-grant/setup-producer.js.map +1 -0
- package/dist/app-grant/setup.d.ts +11 -0
- package/dist/app-grant/setup.js +222 -0
- package/dist/app-grant/setup.js.map +1 -0
- package/dist/app-host/app-environment.d.ts +27 -0
- package/dist/app-host/app-environment.js +48 -0
- package/dist/app-host/app-environment.js.map +1 -0
- package/dist/app-host/app-origin.d.ts +7 -0
- package/dist/app-host/app-origin.js +49 -0
- package/dist/app-host/app-origin.js.map +1 -0
- package/dist/app-host/bases-pages.d.ts +29 -0
- package/dist/app-host/bases-pages.js +42 -0
- package/dist/app-host/bases-pages.js.map +1 -0
- package/dist/app-host/bases-wire.d.ts +159 -0
- package/dist/app-host/bases-wire.js +376 -0
- package/dist/app-host/bases-wire.js.map +1 -0
- package/dist/app-host/browser-direct-access.d.ts +18 -0
- package/dist/app-host/browser-direct-access.js +17 -0
- package/dist/app-host/browser-direct-access.js.map +1 -0
- package/dist/app-host/cloud-copy-bootstrap.d.ts +127 -0
- package/dist/app-host/cloud-copy-bootstrap.js +608 -0
- package/dist/app-host/cloud-copy-bootstrap.js.map +1 -0
- package/dist/app-host/cloud-copy-host.d.ts +248 -0
- package/dist/app-host/cloud-copy-host.js +1028 -0
- package/dist/app-host/cloud-copy-host.js.map +1 -0
- package/dist/app-host/cloud-copy-persistence-idb.d.ts +33 -0
- package/dist/app-host/cloud-copy-persistence-idb.js +255 -0
- package/dist/app-host/cloud-copy-persistence-idb.js.map +1 -0
- package/dist/app-host/cloud-copy-persistence.d.ts +57 -0
- package/dist/app-host/cloud-copy-persistence.js +341 -0
- package/dist/app-host/cloud-copy-persistence.js.map +1 -0
- package/dist/app-host/collection-control.d.ts +111 -0
- package/dist/app-host/collection-control.js +604 -0
- package/dist/app-host/collection-control.js.map +1 -0
- package/dist/app-host/collection-delete.d.ts +7 -0
- package/dist/app-host/collection-delete.js +54 -0
- package/dist/app-host/collection-delete.js.map +1 -0
- package/dist/app-host/collection-display-name.d.ts +2 -0
- package/dist/app-host/collection-display-name.js +22 -0
- package/dist/app-host/collection-display-name.js.map +1 -0
- package/dist/app-host/collection-join-ledger.d.ts +52 -0
- package/dist/app-host/collection-join-ledger.js +208 -0
- package/dist/app-host/collection-join-ledger.js.map +1 -0
- package/dist/app-host/collection-people.d.ts +32 -0
- package/dist/app-host/collection-people.js +119 -0
- package/dist/app-host/collection-people.js.map +1 -0
- package/dist/app-host/collection-readiness.d.ts +119 -0
- package/dist/app-host/collection-readiness.js +649 -0
- package/dist/app-host/collection-readiness.js.map +1 -0
- package/dist/app-host/collection-setup-journal.d.ts +59 -0
- package/dist/app-host/collection-setup-journal.js +813 -0
- package/dist/app-host/collection-setup-journal.js.map +1 -0
- package/dist/app-host/collection-setup-types.d.ts +155 -0
- package/dist/app-host/collection-setup-types.js +10 -0
- package/dist/app-host/collection-setup-types.js.map +1 -0
- package/dist/app-host/cp-authority.d.ts +65 -0
- package/dist/app-host/cp-authority.js +243 -0
- package/dist/app-host/cp-authority.js.map +1 -0
- package/dist/app-host/cp-people.d.ts +23 -0
- package/dist/app-host/cp-people.js +145 -0
- package/dist/app-host/cp-people.js.map +1 -0
- package/dist/app-host/cp-problem.d.ts +34 -0
- package/dist/app-host/cp-problem.js +114 -0
- package/dist/app-host/cp-problem.js.map +1 -0
- package/dist/app-host/device-key-custody.d.ts +51 -0
- package/dist/app-host/device-key-custody.js +128 -0
- package/dist/app-host/device-key-custody.js.map +1 -0
- package/dist/app-host/device-key-idb.d.ts +31 -0
- package/dist/app-host/device-key-idb.js +176 -0
- package/dist/app-host/device-key-idb.js.map +1 -0
- package/dist/app-host/device-key-provider.d.ts +33 -0
- package/dist/app-host/device-key-provider.js +181 -0
- package/dist/app-host/device-key-provider.js.map +1 -0
- package/dist/app-host/device-registration.d.ts +51 -0
- package/dist/app-host/device-registration.js +180 -0
- package/dist/app-host/device-registration.js.map +1 -0
- package/dist/app-host/foreground-wake.d.ts +43 -0
- package/dist/app-host/foreground-wake.js +113 -0
- package/dist/app-host/foreground-wake.js.map +1 -0
- package/dist/app-host/handover.d.ts +27 -0
- package/dist/app-host/handover.js +82 -0
- package/dist/app-host/handover.js.map +1 -0
- package/dist/app-host/http-log.d.ts +96 -0
- package/dist/app-host/http-log.js +609 -0
- package/dist/app-host/http-log.js.map +1 -0
- package/dist/app-host/index.d.ts +63 -0
- package/dist/app-host/index.js +33 -0
- package/dist/app-host/index.js.map +1 -0
- package/dist/app-host/initial-sync.d.ts +22 -0
- package/dist/app-host/initial-sync.js +41 -0
- package/dist/app-host/initial-sync.js.map +1 -0
- package/dist/app-host/installation-sign-in.d.ts +319 -0
- package/dist/app-host/installation-sign-in.js +1231 -0
- package/dist/app-host/installation-sign-in.js.map +1 -0
- package/dist/app-host/installation-store.d.ts +56 -0
- package/dist/app-host/installation-store.js +285 -0
- package/dist/app-host/installation-store.js.map +1 -0
- package/dist/app-host/ledger-rows.d.ts +3 -0
- package/dist/app-host/ledger-rows.js +23 -0
- package/dist/app-host/ledger-rows.js.map +1 -0
- package/dist/app-host/local-facade.d.ts +24 -0
- package/dist/app-host/local-facade.js +361 -0
- package/dist/app-host/local-facade.js.map +1 -0
- package/dist/app-host/log-pump.d.ts +124 -0
- package/dist/app-host/log-pump.js +326 -0
- package/dist/app-host/log-pump.js.map +1 -0
- package/dist/app-host/log-push.d.ts +90 -0
- package/dist/app-host/log-push.js +377 -0
- package/dist/app-host/log-push.js.map +1 -0
- package/dist/app-host/log-token-cache.d.ts +28 -0
- package/dist/app-host/log-token-cache.js +104 -0
- package/dist/app-host/log-token-cache.js.map +1 -0
- package/dist/app-host/native-sign-in.d.ts +27 -0
- package/dist/app-host/native-sign-in.js +12 -0
- package/dist/app-host/native-sign-in.js.map +1 -0
- package/dist/app-host/noise-custody.d.ts +62 -0
- package/dist/app-host/noise-custody.js +238 -0
- package/dist/app-host/noise-custody.js.map +1 -0
- package/dist/app-host/noise-idb.d.ts +33 -0
- package/dist/app-host/noise-idb.js +199 -0
- package/dist/app-host/noise-idb.js.map +1 -0
- package/dist/app-host/open-wait.d.ts +3 -0
- package/dist/app-host/open-wait.js +17 -0
- package/dist/app-host/open-wait.js.map +1 -0
- package/dist/app-host/opening-progress.d.ts +3 -0
- package/dist/app-host/opening-progress.js +5 -0
- package/dist/app-host/opening-progress.js.map +1 -0
- package/dist/app-host/owner.d.ts +103 -0
- package/dist/app-host/owner.js +262 -0
- package/dist/app-host/owner.js.map +1 -0
- package/dist/app-host/private-bootstrap.d.ts +78 -0
- package/dist/app-host/private-bootstrap.js +230 -0
- package/dist/app-host/private-bootstrap.js.map +1 -0
- package/dist/app-host/private-persistence-idb.d.ts +32 -0
- package/dist/app-host/private-persistence-idb.js +188 -0
- package/dist/app-host/private-persistence-idb.js.map +1 -0
- package/dist/app-host/private-persistence.d.ts +55 -0
- package/dist/app-host/private-persistence.js +257 -0
- package/dist/app-host/private-persistence.js.map +1 -0
- package/dist/app-host/scoped-sign-in-session.d.ts +49 -0
- package/dist/app-host/scoped-sign-in-session.js +243 -0
- package/dist/app-host/scoped-sign-in-session.js.map +1 -0
- package/dist/app-host/setup-engine.d.ts +14 -0
- package/dist/app-host/setup-engine.js +73 -0
- package/dist/app-host/setup-engine.js.map +1 -0
- package/dist/app-host/sign-out-erase.d.ts +37 -0
- package/dist/app-host/sign-out-erase.js +139 -0
- package/dist/app-host/sign-out-erase.js.map +1 -0
- package/dist/app-host/status.d.ts +62 -0
- package/dist/app-host/status.js +43 -0
- package/dist/app-host/status.js.map +1 -0
- package/dist/app-host/storage-probe.d.ts +46 -0
- package/dist/app-host/storage-probe.js +63 -0
- package/dist/app-host/storage-probe.js.map +1 -0
- package/dist/app-host/timer-port.d.ts +29 -0
- package/dist/app-host/timer-port.js +483 -0
- package/dist/app-host/timer-port.js.map +1 -0
- package/dist/app-host/wasm-runtime.d.ts +302 -0
- package/dist/app-host/wasm-runtime.js +1050 -0
- package/dist/app-host/wasm-runtime.js.map +1 -0
- package/dist/app-host/web-collection.d.ts +78 -0
- package/dist/app-host/web-collection.js +671 -0
- package/dist/app-host/web-collection.js.map +1 -0
- package/dist/app-host/web-sign-in-problem.d.ts +17 -0
- package/dist/app-host/web-sign-in-problem.js +59 -0
- package/dist/app-host/web-sign-in-problem.js.map +1 -0
- package/dist/app-host/web-sign-in-session.d.ts +367 -0
- package/dist/app-host/web-sign-in-session.js +1258 -0
- package/dist/app-host/web-sign-in-session.js.map +1 -0
- package/dist/app-storage/app-binary-index.d.ts +33 -0
- package/dist/app-storage/app-binary-index.js +274 -0
- package/dist/app-storage/app-binary-index.js.map +1 -0
- package/dist/app-storage/app-sqlite-index.d.ts +40 -0
- package/dist/app-storage/app-sqlite-index.js +102 -0
- package/dist/app-storage/app-sqlite-index.js.map +1 -0
- package/dist/app-storage/collection-sql.d.ts +39 -0
- package/dist/app-storage/collection-sql.js +93 -0
- package/dist/app-storage/collection-sql.js.map +1 -0
- package/dist/app-storage/index.d.ts +10 -0
- package/dist/app-storage/index.js +7 -0
- package/dist/app-storage/index.js.map +1 -0
- package/dist/app-storage/sqlite-index.d.ts +95 -0
- package/dist/app-storage/sqlite-index.js +280 -0
- package/dist/app-storage/sqlite-index.js.map +1 -0
- package/dist/application/asset-loader.d.ts +22 -0
- package/dist/application/asset-loader.js +130 -0
- package/dist/application/asset-loader.js.map +1 -0
- package/dist/application/asset-pins.json +24 -0
- package/dist/application/browser-capabilities.d.ts +48 -0
- package/dist/application/browser-capabilities.js +87 -0
- package/dist/application/browser-capabilities.js.map +1 -0
- package/dist/application/browser-selection.d.ts +58 -0
- package/dist/application/browser-selection.js +160 -0
- package/dist/application/browser-selection.js.map +1 -0
- package/dist/application/capabilities.d.ts +20 -0
- package/dist/application/capabilities.js +22 -0
- package/dist/application/capabilities.js.map +1 -0
- package/dist/application/collection-selection.d.ts +147 -0
- package/dist/application/collection-selection.js +351 -0
- package/dist/application/collection-selection.js.map +1 -0
- package/dist/application/configuration.d.ts +52 -0
- package/dist/application/configuration.js +568 -0
- package/dist/application/configuration.js.map +1 -0
- package/dist/application/declaration.d.ts +51 -0
- package/dist/application/declaration.js +100 -0
- package/dist/application/declaration.js.map +1 -0
- package/dist/application/entry.d.ts +343 -0
- package/dist/application/entry.js +945 -0
- package/dist/application/entry.js.map +1 -0
- package/dist/application/file-access.d.ts +55 -0
- package/dist/application/file-access.js +93 -0
- package/dist/application/file-access.js.map +1 -0
- package/dist/application/file-readiness.d.ts +16 -0
- package/dist/application/file-readiness.js +53 -0
- package/dist/application/file-readiness.js.map +1 -0
- package/dist/application/forgotten.d.ts +15 -0
- package/dist/application/forgotten.js +70 -0
- package/dist/application/forgotten.js.map +1 -0
- package/dist/application/front-door.d.ts +68 -0
- package/dist/application/front-door.js +66 -0
- package/dist/application/front-door.js.map +1 -0
- package/dist/application/local-build.d.ts +5 -0
- package/dist/application/local-build.js +22 -0
- package/dist/application/local-build.js.map +1 -0
- package/dist/application/manifest.d.ts +16 -0
- package/dist/application/manifest.js +31 -0
- package/dist/application/manifest.js.map +1 -0
- package/dist/application/native-assets.d.ts +25 -0
- package/dist/application/native-assets.js +29 -0
- package/dist/application/native-assets.js.map +1 -0
- package/dist/application/native-authorization-rpc.d.ts +23 -0
- package/dist/application/native-authorization-rpc.js +54 -0
- package/dist/application/native-authorization-rpc.js.map +1 -0
- package/dist/application/notification-readiness.d.ts +33 -0
- package/dist/application/notification-readiness.js +222 -0
- package/dist/application/notification-readiness.js.map +1 -0
- package/dist/application/packaged-assets.d.ts +5 -0
- package/dist/application/packaged-assets.js +55 -0
- package/dist/application/packaged-assets.js.map +1 -0
- package/dist/application/packaged-trust.d.ts +5 -0
- package/dist/application/packaged-trust.js +10 -0
- package/dist/application/packaged-trust.js.map +1 -0
- package/dist/application/people-readiness.d.ts +23 -0
- package/dist/application/people-readiness.js +213 -0
- package/dist/application/people-readiness.js.map +1 -0
- package/dist/application/phase.d.ts +108 -0
- package/dist/application/phase.js +113 -0
- package/dist/application/phase.js.map +1 -0
- package/dist/application/portal-reservation.d.ts +38 -0
- package/dist/application/portal-reservation.js +183 -0
- package/dist/application/portal-reservation.js.map +1 -0
- package/dist/application/private-collections.d.ts +114 -0
- package/dist/application/private-collections.js +415 -0
- package/dist/application/private-collections.js.map +1 -0
- package/dist/application/readiness.d.ts +59 -0
- package/dist/application/readiness.js +223 -0
- package/dist/application/readiness.js.map +1 -0
- package/dist/application/registration-refusal.d.ts +16 -0
- package/dist/application/registration-refusal.js +41 -0
- package/dist/application/registration-refusal.js.map +1 -0
- package/dist/application/registration.d.ts +26 -0
- package/dist/application/registration.js +372 -0
- package/dist/application/registration.js.map +1 -0
- package/dist/application/return-url.d.ts +1 -0
- package/dist/application/return-url.js +41 -0
- package/dist/application/return-url.js.map +1 -0
- package/dist/application/runtime.d.ts +107 -0
- package/dist/application/runtime.js +379 -0
- package/dist/application/runtime.js.map +1 -0
- package/dist/application/scope.d.ts +34 -0
- package/dist/application/scope.js +164 -0
- package/dist/application/scope.js.map +1 -0
- package/dist/application/session-hint.d.ts +21 -0
- package/dist/application/session-hint.js +87 -0
- package/dist/application/session-hint.js.map +1 -0
- package/dist/application/setup.d.ts +105 -0
- package/dist/application/setup.js +137 -0
- package/dist/application/setup.js.map +1 -0
- package/dist/application/sign-out.d.ts +17 -0
- package/dist/application/sign-out.js +28 -0
- package/dist/application/sign-out.js.map +1 -0
- package/dist/application/storage-scope.d.ts +8 -0
- package/dist/application/storage-scope.js +15 -0
- package/dist/application/storage-scope.js.map +1 -0
- package/dist/application/tabs.d.ts +98 -0
- package/dist/application/tabs.js +407 -0
- package/dist/application/tabs.js.map +1 -0
- package/dist/application/timer-criteria.d.ts +5 -0
- package/dist/application/timer-criteria.js +15 -0
- package/dist/application/timer-criteria.js.map +1 -0
- package/dist/application/ui-connections.d.ts +35 -0
- package/dist/application/ui-connections.js +129 -0
- package/dist/application/ui-connections.js.map +1 -0
- package/dist/application/worker-client.d.ts +59 -0
- package/dist/application/worker-client.js +381 -0
- package/dist/application/worker-client.js.map +1 -0
- package/dist/application/worker-host.d.ts +84 -0
- package/dist/application/worker-host.js +547 -0
- package/dist/application/worker-host.js.map +1 -0
- package/dist/application/worker-protocol.d.ts +40 -0
- package/dist/application/worker-protocol.js +83 -0
- package/dist/application/worker-protocol.js.map +1 -0
- package/dist/application/worker-session.d.ts +45 -0
- package/dist/application/worker-session.js +37 -0
- package/dist/application/worker-session.js.map +1 -0
- package/dist/application/worker.d.ts +1 -0
- package/dist/application/worker.js +34826 -0
- package/dist/application/worker.js.map +1 -0
- package/dist/attachment-wire.d.ts +15 -0
- package/dist/attachment-wire.js +47 -0
- package/dist/attachment-wire.js.map +1 -0
- package/dist/browser/mdbase-sdk.js +49392 -0
- package/dist/browser/mdbase-sdk.min.js +130 -0
- package/dist/browser.d.ts +4 -0
- package/dist/browser.js +5 -0
- package/dist/browser.js.map +1 -0
- package/dist/cbor.d.ts +52 -0
- package/dist/cbor.js +480 -0
- package/dist/cbor.js.map +1 -0
- package/dist/client.d.ts +656 -0
- package/dist/client.js +1962 -0
- package/dist/client.js.map +1 -0
- package/dist/codec.d.ts +82 -0
- package/dist/codec.js +388 -0
- package/dist/codec.js.map +1 -0
- package/dist/collection-availability.d.ts +34 -0
- package/dist/collection-availability.js +63 -0
- package/dist/collection-availability.js.map +1 -0
- package/dist/contract-query.d.ts +31 -0
- package/dist/contract-query.js +13 -0
- package/dist/contract-query.js.map +1 -0
- package/dist/contract-records.d.ts +51 -0
- package/dist/contract-records.js +14 -0
- package/dist/contract-records.js.map +1 -0
- package/dist/describe-error.d.ts +61 -0
- package/dist/describe-error.js +452 -0
- package/dist/describe-error.js.map +1 -0
- package/dist/errors.d.ts +65 -0
- package/dist/errors.js +94 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +147 -0
- package/dist/files.js +537 -0
- package/dist/files.js.map +1 -0
- package/dist/holds.d.ts +74 -0
- package/dist/holds.js +118 -0
- package/dist/holds.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +40 -0
- package/dist/keys.js +181 -0
- package/dist/keys.js.map +1 -0
- package/dist/live.d.ts +38 -0
- package/dist/live.js +82 -0
- package/dist/live.js.map +1 -0
- package/dist/local-build.d.ts +9 -0
- package/dist/local-build.js +33 -0
- package/dist/local-build.js.map +1 -0
- package/dist/native/provenance.json +23 -0
- package/dist/native/runtime.wasm +0 -0
- package/dist/native/sqlite3.d.ts +5 -0
- package/dist/native/sqlite3.js +17392 -0
- package/dist/native/sqlite3.js.map +1 -0
- package/dist/native/sqlite3.wasm +0 -0
- package/dist/node.d.ts +63 -0
- package/dist/node.js +255 -0
- package/dist/node.js.map +1 -0
- package/dist/notifications.d.ts +95 -0
- package/dist/notifications.js +226 -0
- package/dist/notifications.js.map +1 -0
- package/dist/offline-shell-build.d.ts +25 -0
- package/dist/offline-shell-build.js +78 -0
- package/dist/offline-shell-build.js.map +1 -0
- package/dist/offline-shell-worker.d.ts +46 -0
- package/dist/offline-shell-worker.js +115 -0
- package/dist/offline-shell-worker.js.map +1 -0
- package/dist/people.d.ts +82 -0
- package/dist/people.js +199 -0
- package/dist/people.js.map +1 -0
- package/dist/presence.d.ts +21 -0
- package/dist/presence.js +109 -0
- package/dist/presence.js.map +1 -0
- package/dist/private-account.d.ts +197 -0
- package/dist/private-account.js +510 -0
- package/dist/private-account.js.map +1 -0
- package/dist/private.d.ts +55 -0
- package/dist/private.js +69 -0
- package/dist/private.js.map +1 -0
- package/dist/read-helpers.d.ts +32 -0
- package/dist/read-helpers.js +181 -0
- package/dist/read-helpers.js.map +1 -0
- package/dist/records/session.d.ts +60 -0
- package/dist/records/session.js +534 -0
- package/dist/records/session.js.map +1 -0
- package/dist/records/types.d.ts +76 -0
- package/dist/records/types.js +2 -0
- package/dist/records/types.js.map +1 -0
- package/dist/records/witness.d.ts +19 -0
- package/dist/records/witness.js +64 -0
- package/dist/records/witness.js.map +1 -0
- package/dist/records.d.ts +23 -0
- package/dist/records.js +234 -0
- package/dist/records.js.map +1 -0
- package/dist/runtime/wasm.d.ts +69 -0
- package/dist/runtime/wasm.js +274 -0
- package/dist/runtime/wasm.js.map +1 -0
- package/dist/runtime-wire.d.ts +71 -0
- package/dist/runtime-wire.js +71 -0
- package/dist/runtime-wire.js.map +1 -0
- package/dist/saved-views.d.ts +29 -0
- package/dist/saved-views.js +171 -0
- package/dist/saved-views.js.map +1 -0
- package/dist/semver.d.ts +22 -0
- package/dist/semver.js +63 -0
- package/dist/semver.js.map +1 -0
- package/dist/session.d.ts +65 -0
- package/dist/session.js +332 -0
- package/dist/session.js.map +1 -0
- package/dist/status.d.ts +46 -0
- package/dist/status.js +59 -0
- package/dist/status.js.map +1 -0
- package/dist/strength.d.ts +12 -0
- package/dist/strength.js +194 -0
- package/dist/strength.js.map +1 -0
- package/dist/testing/application.d.ts +59 -0
- package/dist/testing/application.js +230 -0
- package/dist/testing/application.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.js +6 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/memory-contracts.d.ts +40 -0
- package/dist/testing/memory-contracts.js +127 -0
- package/dist/testing/memory-contracts.js.map +1 -0
- package/dist/testing/memory-replica.d.ts +191 -0
- package/dist/testing/memory-replica.js +1465 -0
- package/dist/testing/memory-replica.js.map +1 -0
- package/dist/testing/noise-server.d.ts +11 -0
- package/dist/testing/noise-server.js +65 -0
- package/dist/testing/noise-server.js.map +1 -0
- package/dist/testing/test-app.d.ts +93 -0
- package/dist/testing/test-app.js +140 -0
- package/dist/testing/test-app.js.map +1 -0
- package/dist/thin-client.d.ts +67 -0
- package/dist/thin-client.js +42 -0
- package/dist/thin-client.js.map +1 -0
- package/dist/timers.d.ts +158 -0
- package/dist/timers.js +258 -0
- package/dist/timers.js.map +1 -0
- package/dist/transport/bases-rpc.d.ts +15 -0
- package/dist/transport/bases-rpc.js +61 -0
- package/dist/transport/bases-rpc.js.map +1 -0
- package/dist/transport/control-route.d.ts +34 -0
- package/dist/transport/control-route.js +84 -0
- package/dist/transport/control-route.js.map +1 -0
- package/dist/transport/inprocess.d.ts +13 -0
- package/dist/transport/inprocess.js +37 -0
- package/dist/transport/inprocess.js.map +1 -0
- package/dist/transport/local-link.d.ts +53 -0
- package/dist/transport/local-link.js +66 -0
- package/dist/transport/local-link.js.map +1 -0
- package/dist/transport/next-relay.d.ts +64 -0
- package/dist/transport/next-relay.js +222 -0
- package/dist/transport/next-relay.js.map +1 -0
- package/dist/transport/noise-session.d.ts +88 -0
- package/dist/transport/noise-session.js +264 -0
- package/dist/transport/noise-session.js.map +1 -0
- package/dist/transport/noise.d.ts +102 -0
- package/dist/transport/noise.js +307 -0
- package/dist/transport/noise.js.map +1 -0
- package/dist/transport/original-session.d.ts +6 -0
- package/dist/transport/original-session.js +6 -0
- package/dist/transport/original-session.js.map +1 -0
- package/dist/transport/port.d.ts +67 -0
- package/dist/transport/port.js +184 -0
- package/dist/transport/port.js.map +1 -0
- package/dist/transport/read-fence-policy.d.ts +3 -0
- package/dist/transport/read-fence-policy.js +11 -0
- package/dist/transport/read-fence-policy.js.map +1 -0
- package/dist/transport/relay-close.d.ts +31 -0
- package/dist/transport/relay-close.js +23 -0
- package/dist/transport/relay-close.js.map +1 -0
- package/dist/transport/relay-pipe.d.ts +15 -0
- package/dist/transport/relay-pipe.js +190 -0
- package/dist/transport/relay-pipe.js.map +1 -0
- package/dist/transport/relay.d.ts +36 -0
- package/dist/transport/relay.js +45 -0
- package/dist/transport/relay.js.map +1 -0
- package/dist/type-packs.d.ts +124 -0
- package/dist/type-packs.js +188 -0
- package/dist/type-packs.js.map +1 -0
- package/dist/validation.d.ts +30 -0
- package/dist/validation.js +125 -0
- package/dist/validation.js.map +1 -0
- package/dist/values.d.ts +37 -0
- package/dist/values.js +133 -0
- package/dist/values.js.map +1 -0
- package/dist/view-sources.d.ts +31 -0
- package/dist/view-sources.js +78 -0
- package/dist/view-sources.js.map +1 -0
- package/dist/wire.d.ts +856 -0
- package/dist/wire.js +914 -0
- package/dist/wire.js.map +1 -0
- package/dist/witness.d.ts +7 -0
- package/dist/witness.js +82 -0
- package/dist/witness.js.map +1 -0
- package/dist/write-ledger.d.ts +41 -0
- package/dist/write-ledger.js +184 -0
- package/dist/write-ledger.js.map +1 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/application-authorization.d.ts +32 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/application-authorization.js +207 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/application-contract.d.ts +23 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/application-contract.js +76 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/application-declaration.d.ts +120 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/application-declaration.js +1 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/authorization-errors.d.ts +34 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/authorization-errors.js +52 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/capabilities.d.ts +73 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/capabilities.js +92 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/change-events.generated.d.ts +48 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/change-events.generated.js +18 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/collection-setup.d.ts +93 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/collection-setup.js +7 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/compatibility.d.ts +37 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/compatibility.js +65 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/connect-problems.generated.d.ts +1533 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/connect-problems.generated.js +598 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/files.d.ts +288 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/files.js +426 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/index.d.ts +723 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/index.js +104 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/manifest-validators.generated.d.ts +13 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/manifest-validators.generated.js +7940 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/manifest.d.ts +72 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/manifest.js +643 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/mutation-fingerprint.d.ts +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/mutation-fingerprint.js +116 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/next-authorization.d.ts +30 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/next-authorization.js +90 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/operations.d.ts +15 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/operations.js +196 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/people.d.ts +33 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/people.js +26 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/records.d.ts +108 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/records.js +3 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/type-packs.d.ts +154 -0
- package/node_modules/@mdbase-dev/connect-protocol/dist/type-packs.js +30 -0
- package/node_modules/@mdbase-dev/connect-protocol/package.json +49 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/application-capability-catalog.v1.json +40 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/application-capability-catalog.v2.json +68 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/catalog.json +17 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/change-events.v1.json +48 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/connect-problem.v1.schema.json +5665 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/connect-problems.v1.catalog.json +373 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/connect-protocol.v1.schema.json +901 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/data-contract.schema.json +163 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/encrypted-relay.v1.schema.json +63 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/encrypted-relay.v2.schema.json +63 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/encrypted-relay.v3.schema.json +64 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/files.v1.schema.json +551 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/action-cancellation.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/action-invocation.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/action-outcome.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/action-provider-declaration.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/action-request.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/conformance-claim.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/event-source-declaration.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/event.schema.json +6 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/interop/v0.1/profile.schema.json +456 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/mdbase-app.legacy-v1.schema.json +430 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/mdbase-app.schema.json +437 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/mdbase-query.v0.3.schema.json +176 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/next-trust.v1.schema.json +54 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/notification-webhook.v1.schema.json +56 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/operation-catalog.v1.json +43 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/operation-mutation-classification.v1.json +554 -0
- package/node_modules/@mdbase-dev/connect-protocol/schemas/sync.v1.schema.json +483 -0
- package/node_modules/@noble/hashes/LICENSE +21 -0
- package/node_modules/@noble/hashes/README.md +478 -0
- package/node_modules/@noble/hashes/_blake.d.ts +20 -0
- package/node_modules/@noble/hashes/_blake.js +59 -0
- package/node_modules/@noble/hashes/_md.d.ts +95 -0
- package/node_modules/@noble/hashes/_md.js +209 -0
- package/node_modules/@noble/hashes/_u64.d.ts +36 -0
- package/node_modules/@noble/hashes/_u64.js +77 -0
- package/node_modules/@noble/hashes/argon2.d.ts +148 -0
- package/node_modules/@noble/hashes/argon2.js +577 -0
- package/node_modules/@noble/hashes/blake1.d.ts +162 -0
- package/node_modules/@noble/hashes/blake1.js +630 -0
- package/node_modules/@noble/hashes/blake2.d.ts +203 -0
- package/node_modules/@noble/hashes/blake2.js +573 -0
- package/node_modules/@noble/hashes/blake3.d.ts +68 -0
- package/node_modules/@noble/hashes/blake3.js +310 -0
- package/node_modules/@noble/hashes/eskdf.d.ts +91 -0
- package/node_modules/@noble/hashes/eskdf.js +225 -0
- package/node_modules/@noble/hashes/hkdf.d.ts +70 -0
- package/node_modules/@noble/hashes/hkdf.js +152 -0
- package/node_modules/@noble/hashes/hmac.d.ts +50 -0
- package/node_modules/@noble/hashes/hmac.js +93 -0
- package/node_modules/@noble/hashes/index.d.ts +1 -0
- package/node_modules/@noble/hashes/index.js +34 -0
- package/node_modules/@noble/hashes/legacy.d.ts +107 -0
- package/node_modules/@noble/hashes/legacy.js +348 -0
- package/node_modules/@noble/hashes/package.json +91 -0
- package/node_modules/@noble/hashes/pbkdf2.d.ts +66 -0
- package/node_modules/@noble/hashes/pbkdf2.js +176 -0
- package/node_modules/@noble/hashes/scrypt.d.ts +98 -0
- package/node_modules/@noble/hashes/scrypt.js +304 -0
- package/node_modules/@noble/hashes/sha2.d.ts +176 -0
- package/node_modules/@noble/hashes/sha2.js +446 -0
- package/node_modules/@noble/hashes/sha3-addons.d.ts +533 -0
- package/node_modules/@noble/hashes/sha3-addons.js +973 -0
- package/node_modules/@noble/hashes/sha3.d.ts +208 -0
- package/node_modules/@noble/hashes/sha3.js +475 -0
- package/node_modules/@noble/hashes/src/_blake.ts +67 -0
- package/node_modules/@noble/hashes/src/_md.ts +227 -0
- package/node_modules/@noble/hashes/src/_u64.ts +111 -0
- package/node_modules/@noble/hashes/src/argon2.ts +693 -0
- package/node_modules/@noble/hashes/src/blake1.ts +677 -0
- package/node_modules/@noble/hashes/src/blake2.ts +648 -0
- package/node_modules/@noble/hashes/src/blake3.ts +344 -0
- package/node_modules/@noble/hashes/src/eskdf.ts +265 -0
- package/node_modules/@noble/hashes/src/hkdf.ts +161 -0
- package/node_modules/@noble/hashes/src/hmac.ts +130 -0
- package/node_modules/@noble/hashes/src/index.ts +33 -0
- package/node_modules/@noble/hashes/src/legacy.ts +361 -0
- package/node_modules/@noble/hashes/src/pbkdf2.ts +219 -0
- package/node_modules/@noble/hashes/src/scrypt.ts +375 -0
- package/node_modules/@noble/hashes/src/sha2.ts +486 -0
- package/node_modules/@noble/hashes/src/sha3-addons.ts +1157 -0
- package/node_modules/@noble/hashes/src/sha3.ts +525 -0
- package/node_modules/@noble/hashes/src/utils.ts +978 -0
- package/node_modules/@noble/hashes/src/webcrypto.ts +283 -0
- package/node_modules/@noble/hashes/utils.d.ts +560 -0
- package/node_modules/@noble/hashes/utils.js +687 -0
- package/node_modules/@noble/hashes/webcrypto.d.ts +121 -0
- package/node_modules/@noble/hashes/webcrypto.js +228 -0
- package/node_modules/yaml/LICENSE +13 -0
- package/node_modules/yaml/README.md +172 -0
- package/node_modules/yaml/bin.mjs +11 -0
- package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +226 -0
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/node_modules/yaml/browser/dist/errors.js +57 -0
- package/node_modules/yaml/browser/dist/index.js +17 -0
- package/node_modules/yaml/browser/dist/log.js +11 -0
- package/node_modules/yaml/browser/dist/nodes/Alias.js +118 -0
- package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/node_modules/yaml/browser/dist/util.js +11 -0
- package/node_modules/yaml/browser/dist/visit.js +233 -0
- package/node_modules/yaml/browser/index.js +5 -0
- package/node_modules/yaml/browser/package.json +3 -0
- package/node_modules/yaml/dist/cli.d.ts +8 -0
- package/node_modules/yaml/dist/cli.mjs +201 -0
- package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/node_modules/yaml/dist/compose/composer.js +224 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +228 -0
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/node_modules/yaml/dist/doc/Document.js +337 -0
- package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/node_modules/yaml/dist/doc/directives.js +178 -0
- package/node_modules/yaml/dist/errors.d.ts +21 -0
- package/node_modules/yaml/dist/errors.js +62 -0
- package/node_modules/yaml/dist/index.d.ts +25 -0
- package/node_modules/yaml/dist/index.js +50 -0
- package/node_modules/yaml/dist/log.d.ts +3 -0
- package/node_modules/yaml/dist/log.js +19 -0
- package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/Alias.js +120 -0
- package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/node_modules/yaml/dist/options.d.ts +350 -0
- package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/node_modules/yaml/dist/parse/cst.js +112 -0
- package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/node_modules/yaml/dist/parse/parser.js +980 -0
- package/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/node_modules/yaml/dist/public-api.js +107 -0
- package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/node_modules/yaml/dist/schema/tags.js +99 -0
- package/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/node_modules/yaml/dist/test-events.js +134 -0
- package/node_modules/yaml/dist/util.d.ts +16 -0
- package/node_modules/yaml/dist/util.js +28 -0
- package/node_modules/yaml/dist/visit.d.ts +102 -0
- package/node_modules/yaml/dist/visit.js +236 -0
- package/node_modules/yaml/package.json +97 -0
- package/node_modules/yaml/util.js +2 -0
- package/package.json +108 -4
- package/vendor/mdbase-connect-sdk-e6e66bcd172f.json +13 -0
- package/vendor/mdbase-dev-connect-protocol-0.1.0-beta.145-e6e66bcd172f.tgz +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The control plane's routing endpoint for mdbase-next apps:
|
|
3
|
+
* `GET {server}/v1/next/collections/:id/route` with the app's access token.
|
|
4
|
+
*
|
|
5
|
+
* ```json
|
|
6
|
+
* {"collection": "…", "grant": "…", "targets": [{"kind": "…", "device": "<uuid>",
|
|
7
|
+
* "noise_pk": "<64 hex>", "url": "wss://…/v1/next/relay/client", "relay_collection": "…"}],
|
|
8
|
+
* "availability": {"state": "unavailable", "reason": "device_offline"},
|
|
9
|
+
* "reason": "no_device_registered"}
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* `availability` (Private collections) is advisory; an `unavailable` one fails the
|
|
13
|
+
* open with {@link collectionUnavailableError}, including the 200 `sync_required`
|
|
14
|
+
* answer for a grant whose collection must be set up again.
|
|
15
|
+
*
|
|
16
|
+
* `routeFromControl` turns one response into the `RelayRoute` `relayConnector` wants,
|
|
17
|
+
* and `controlRouteResolver` fetches it on every (re)connect, so the three app ports
|
|
18
|
+
* share one mapping.
|
|
19
|
+
*/
|
|
20
|
+
import { LOCAL_APPLICATION_BUILD, localApplicationHttpOrigin } from "../local-build.js";
|
|
21
|
+
import { fromHex } from "../cbor.js";
|
|
22
|
+
import { collectionUnavailableError, parseCollectionAvailability } from "../collection-availability.js";
|
|
23
|
+
import { mdbaseError } from "../errors.js";
|
|
24
|
+
/**
|
|
25
|
+
* The first usable target, or `null` when there is none (the SDK then reports
|
|
26
|
+
* `unavailable` / `no_device_online`; `no_device_registered` is kept as the reason).
|
|
27
|
+
* Relay targets (with `relay_collection`) use the relay Noise pipe and need the
|
|
28
|
+
* access token; others are direct WebSockets (the hosted replica).
|
|
29
|
+
*/
|
|
30
|
+
export function routeFromControl(res, accessToken) {
|
|
31
|
+
for (const t of res.targets ?? []) {
|
|
32
|
+
if (!/^[0-9a-f]{64}$/i.test(t.noise_pk) || !t.url || !t.device)
|
|
33
|
+
continue;
|
|
34
|
+
const route = { url: t.url, targetDevice: t.device, noisePublicKey: fromHex(t.noise_pk) };
|
|
35
|
+
if (t.relay_collection)
|
|
36
|
+
route.pipe = { collection: t.relay_collection, accessToken };
|
|
37
|
+
return route;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
/** A `resolveRoute` for `relayConnector`, backed by the control plane. */
|
|
42
|
+
export function controlRouteResolver(o) {
|
|
43
|
+
let server;
|
|
44
|
+
try {
|
|
45
|
+
server = new URL(o.server);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw mdbaseError("invalid_request", "The control plane requires an HTTPS origin");
|
|
49
|
+
}
|
|
50
|
+
if ((server.protocol !== "https:" && !(LOCAL_APPLICATION_BUILD && localApplicationHttpOrigin(o.server))) || server.username || server.password || server.pathname !== "/" || server.search || server.hash) {
|
|
51
|
+
throw mdbaseError("invalid_request", "The control plane requires an HTTPS origin without credentials, path, query or fragment");
|
|
52
|
+
}
|
|
53
|
+
// Snapshot the validated destination before retrieving any access token.
|
|
54
|
+
const url = `${server.origin}/v1/next/collections/${encodeURIComponent(o.collection)}/route`;
|
|
55
|
+
const f = o.fetch ?? globalThis.fetch.bind(globalThis);
|
|
56
|
+
return async () => {
|
|
57
|
+
const token = await o.accessToken();
|
|
58
|
+
let res;
|
|
59
|
+
try {
|
|
60
|
+
res = await f(url, { headers: { authorization: `Bearer ${token}` }, redirect: "error" });
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw mdbaseError("unavailable", "cannot reach the control plane", "control_unreachable");
|
|
64
|
+
}
|
|
65
|
+
if (res.status === 401)
|
|
66
|
+
throw mdbaseError("unauthenticated", "the control plane refused the access token");
|
|
67
|
+
if (res.status === 409) {
|
|
68
|
+
// The grant has no registered client key: consent must run again.
|
|
69
|
+
throw mdbaseError("unauthenticated", "this app's key is not registered with its grant", "client_key_required");
|
|
70
|
+
}
|
|
71
|
+
if (!res.ok)
|
|
72
|
+
throw mdbaseError("unavailable", `control plane answered ${res.status}`, "control_error");
|
|
73
|
+
const body = (await res.json());
|
|
74
|
+
const availability = parseCollectionAvailability(body.availability);
|
|
75
|
+
if (availability?.state === "unavailable")
|
|
76
|
+
throw collectionUnavailableError(availability.reason);
|
|
77
|
+
const route = routeFromControl(body, token);
|
|
78
|
+
if (!route && body.reason === "no_device_registered") {
|
|
79
|
+
throw mdbaseError("unavailable", "this collection has no device set up to serve it", "no_device_registered");
|
|
80
|
+
}
|
|
81
|
+
return route;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=control-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-route.js","sourceRoot":"","sources":["../../src/transport/control-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Connector, FramePort } from "./port.js";
|
|
2
|
+
export interface InProcessConnectOptions {
|
|
3
|
+
/** The grant of a plugin attaching to another plugin's host; absent for the hosting plugin. */
|
|
4
|
+
grant?: string;
|
|
5
|
+
/** The collection to attach to, when the runtime hosts several. */
|
|
6
|
+
collection?: string;
|
|
7
|
+
}
|
|
8
|
+
/** What a shared runtime offers in process. */
|
|
9
|
+
export interface InProcessRuntime {
|
|
10
|
+
connect(options: InProcessConnectOptions): FramePort;
|
|
11
|
+
}
|
|
12
|
+
/** A connector to a runtime in this JS process. */
|
|
13
|
+
export declare function inProcessConnector(runtime: InProcessRuntime, options?: InProcessConnectOptions): Connector;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { mdbaseError } from "../errors.js";
|
|
2
|
+
/** A connector to a runtime in this JS process. */
|
|
3
|
+
export function inProcessConnector(runtime, options = {}) {
|
|
4
|
+
return {
|
|
5
|
+
description: "in-process",
|
|
6
|
+
open(hello, signal) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
let port;
|
|
9
|
+
try {
|
|
10
|
+
port = runtime.connect(options);
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
reject(mdbaseError("unavailable", `runtime refused to connect: ${String(e)}`));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const onAbort = () => {
|
|
17
|
+
port.close();
|
|
18
|
+
reject(mdbaseError("cancelled", "connect aborted"));
|
|
19
|
+
};
|
|
20
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
21
|
+
port.onframe = (f) => {
|
|
22
|
+
// The first frame back is the hello response (request ID 0).
|
|
23
|
+
signal?.removeEventListener("abort", onAbort);
|
|
24
|
+
port.onframe = null;
|
|
25
|
+
port.onclose = null;
|
|
26
|
+
resolve({ port, helloResponse: f });
|
|
27
|
+
};
|
|
28
|
+
port.onclose = (e) => {
|
|
29
|
+
signal?.removeEventListener("abort", onAbort);
|
|
30
|
+
reject(e ?? mdbaseError("unavailable", "runtime closed the session"));
|
|
31
|
+
};
|
|
32
|
+
port.send(hello);
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=inprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inprocess.js","sourceRoot":"","sources":["../../src/transport/inprocess.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAe3C,mDAAmD;AACnD,MAAM,UAAU,kBAAkB,CAAC,OAAyB,EAAE,UAAmC,EAAE;IACjG,OAAO;QACL,WAAW,EAAE,YAAY;QACzB,IAAI,CAAC,KAAgB,EAAE,MAAoB;YACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,IAAe,CAAC;gBACpB,IAAI,CAAC;oBACH,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,+BAA+B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC/E,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,GAAG,EAAE;oBACnB,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;gBACtD,CAAC,CAAC;gBACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;oBACnB,6DAA6D;oBAC7D,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtC,CAAC,CAAC;gBACF,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;oBACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC9C,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC,CAAC;gBACxE,CAAC,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The localhost link between the Obsidian runtime and the desktop daemon
|
|
3
|
+
* (`replica-client-api.md` §12.4):
|
|
4
|
+
*
|
|
5
|
+
* - `ws://127.0.0.1:<port>/v1/plugin`, port and per-start token from the daemon's
|
|
6
|
+
* owner-only `local-link.json` (read by the host: `readLocalLink` in
|
|
7
|
+
* `@mdbase-dev/sdk/node`, or the plugin's own desktop file API);
|
|
8
|
+
* - the daemon's Noise key from its owner-only `daemon.json` is **pinned** as the IK
|
|
9
|
+
* responder key, so a process squatting on the port fails the handshake;
|
|
10
|
+
* - the 64-byte prologue goes first in clear (one WebSocket message), then Noise
|
|
11
|
+
* message 1 whose encrypted payload is `{0: token, 1: hello-params}`: the token never
|
|
12
|
+
* appears in a URL or in clear;
|
|
13
|
+
* - prologue: `"mdbase/v1/client" ‖ collection ‖ 16 zero bytes ‖ daemon device ID`
|
|
14
|
+
* (zero device ID for a local-only collection); the zero grant marks the hosting
|
|
15
|
+
* session;
|
|
16
|
+
* - message 2 carries the `hello` response frame; frames as §12.3;
|
|
17
|
+
* - the daemon serves the session only if the user linked this static key to the
|
|
18
|
+
* collection on screen (`link_not_approved` otherwise), and only the data, holds,
|
|
19
|
+
* files, presence and fence methods (anything else: `confirm_in_daemon_ui`).
|
|
20
|
+
*/
|
|
21
|
+
import { CborValue } from "../cbor.js";
|
|
22
|
+
import { Uuid } from "../wire.js";
|
|
23
|
+
import { KeyPair, StaticKey } from "./noise.js";
|
|
24
|
+
import { WebSocketFactory } from "./noise-session.js";
|
|
25
|
+
import type { Connector } from "./port.js";
|
|
26
|
+
export interface LocalLink {
|
|
27
|
+
port: number;
|
|
28
|
+
/** 32 bytes, fresh at each daemon start. */
|
|
29
|
+
token: Uint8Array;
|
|
30
|
+
/** The daemon's device ID (`daemon.json`). */
|
|
31
|
+
device: Uuid;
|
|
32
|
+
/** The daemon's replica Noise public key (`daemon.json`): pinned. */
|
|
33
|
+
noisePublicKey: Uint8Array;
|
|
34
|
+
}
|
|
35
|
+
export interface LocalLinkConnectorOptions {
|
|
36
|
+
link: LocalLink | (() => Promise<LocalLink>);
|
|
37
|
+
collection: Uuid;
|
|
38
|
+
/** A local-only collection uses the zero device ID in the prologue. */
|
|
39
|
+
localOnly?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Initiator static key. Pass a key kept for this plugin installation: the daemon
|
|
42
|
+
* serves a collection on the link only to a key the user linked to it on screen
|
|
43
|
+
* (once per collection and key). The token only proves the plugin
|
|
44
|
+
* can read the link file. An ephemeral key (the default) asks the user every time.
|
|
45
|
+
*/
|
|
46
|
+
staticKey?: KeyPair | StaticKey;
|
|
47
|
+
/** WebSocket factory (Obsidian desktop: the global WebSocket, Origin app://obsidian.md). */
|
|
48
|
+
webSocket?: WebSocketFactory;
|
|
49
|
+
}
|
|
50
|
+
/** `{0: token, 1: hello-params}`, canonical, from the `hello` request frame. */
|
|
51
|
+
export declare function localLinkFirstPayload(token: Uint8Array, hello: CborValue): Uint8Array;
|
|
52
|
+
/** A connector to the desktop daemon over the authenticated localhost link. */
|
|
53
|
+
export declare function localLinkConnector(o: LocalLinkConnectorOptions): Connector;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The localhost link between the Obsidian runtime and the desktop daemon
|
|
3
|
+
* (`replica-client-api.md` §12.4):
|
|
4
|
+
*
|
|
5
|
+
* - `ws://127.0.0.1:<port>/v1/plugin`, port and per-start token from the daemon's
|
|
6
|
+
* owner-only `local-link.json` (read by the host: `readLocalLink` in
|
|
7
|
+
* `@mdbase-dev/sdk/node`, or the plugin's own desktop file API);
|
|
8
|
+
* - the daemon's Noise key from its owner-only `daemon.json` is **pinned** as the IK
|
|
9
|
+
* responder key, so a process squatting on the port fails the handshake;
|
|
10
|
+
* - the 64-byte prologue goes first in clear (one WebSocket message), then Noise
|
|
11
|
+
* message 1 whose encrypted payload is `{0: token, 1: hello-params}`: the token never
|
|
12
|
+
* appears in a URL or in clear;
|
|
13
|
+
* - prologue: `"mdbase/v1/client" ‖ collection ‖ 16 zero bytes ‖ daemon device ID`
|
|
14
|
+
* (zero device ID for a local-only collection); the zero grant marks the hosting
|
|
15
|
+
* session;
|
|
16
|
+
* - message 2 carries the `hello` response frame; frames as §12.3;
|
|
17
|
+
* - the daemon serves the session only if the user linked this static key to the
|
|
18
|
+
* collection on screen (`link_not_approved` otherwise), and only the data, holds,
|
|
19
|
+
* files, presence and fence methods (anything else: `confirm_in_daemon_ui`).
|
|
20
|
+
*/
|
|
21
|
+
import { encode } from "../cbor.js";
|
|
22
|
+
import { uuidToBytes } from "../codec.js";
|
|
23
|
+
import { mdbaseError } from "../errors.js";
|
|
24
|
+
import { clientFrame } from "../wire.js";
|
|
25
|
+
import { clientPrologue, generateKeyPair } from "./noise.js";
|
|
26
|
+
import { noiseConnector, webSocketCarrier } from "./noise-session.js";
|
|
27
|
+
const ZERO16 = new Uint8Array(16);
|
|
28
|
+
/** `{0: token, 1: hello-params}`, canonical, from the `hello` request frame. */
|
|
29
|
+
export function localLinkFirstPayload(token, hello) {
|
|
30
|
+
if (token.length !== 32)
|
|
31
|
+
throw mdbaseError("invalid_request", "the link token is 32 bytes");
|
|
32
|
+
const f = clientFrame.dec(hello);
|
|
33
|
+
if (f.kind !== "request" || f.method !== "hello")
|
|
34
|
+
throw mdbaseError("internal", "expected the hello request");
|
|
35
|
+
return encode(new Map([
|
|
36
|
+
[0, token],
|
|
37
|
+
[1, f.params],
|
|
38
|
+
]));
|
|
39
|
+
}
|
|
40
|
+
/** A connector to the desktop daemon over the authenticated localhost link. */
|
|
41
|
+
export function localLinkConnector(o) {
|
|
42
|
+
const collection = uuidToBytes(o.collection);
|
|
43
|
+
const staticKey = o.staticKey ?? generateKeyPair();
|
|
44
|
+
let current = null;
|
|
45
|
+
return noiseConnector({
|
|
46
|
+
description: "localhost-link",
|
|
47
|
+
staticKey,
|
|
48
|
+
firstPayload: (hello) => localLinkFirstPayload(current.token, hello),
|
|
49
|
+
target: async () => {
|
|
50
|
+
// Re-read every (re)connect: the daemon mints a new port and token at each start.
|
|
51
|
+
current = typeof o.link === "function" ? await o.link() : o.link;
|
|
52
|
+
const link = current;
|
|
53
|
+
if (!Number.isInteger(link.port) || link.port <= 0 || link.port > 65535) {
|
|
54
|
+
throw mdbaseError("unavailable", "invalid local link port", "daemon_not_running");
|
|
55
|
+
}
|
|
56
|
+
const prologue = clientPrologue(collection, null, o.localOnly ? ZERO16 : uuidToBytes(link.device));
|
|
57
|
+
return {
|
|
58
|
+
prologue,
|
|
59
|
+
preamble: prologue,
|
|
60
|
+
remoteStatic: link.noisePublicKey,
|
|
61
|
+
openCarrier: (signal) => webSocketCarrier(`ws://127.0.0.1:${link.port}/v1/plugin`, o.webSocket, signal),
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=local-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-link.js","sourceRoot":"","sources":["../../src/transport/local-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAa,MAAM,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAQ,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AA6BxF,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAElC,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,KAAiB,EAAE,KAAgB;IACvE,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QAAE,MAAM,WAAW,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;IAC5F,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;QAAE,MAAM,WAAW,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IAC9G,OAAO,MAAM,CACX,IAAI,GAAG,CAAoB;QACzB,CAAC,CAAC,EAAE,KAAK,CAAC;QACV,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;KACd,CAAC,CACH,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,CAA4B;IAC7D,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;IACnD,IAAI,OAAO,GAAqB,IAAI,CAAC;IACrC,OAAO,cAAc,CAAC;QACpB,WAAW,EAAE,gBAAgB;QAC7B,SAAS;QACT,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QACrE,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,kFAAkF;YAClF,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,IAAI,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;gBACxE,MAAM,WAAW,CAAC,aAAa,EAAE,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;YACpF,CAAC;YACD,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACnG,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,IAAI,CAAC,cAAc;gBACjC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC;aACxG,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type CollectionAvailability } from "../collection-availability.js";
|
|
2
|
+
import type { Uuid } from "../wire.js";
|
|
3
|
+
import { KeyPair, StaticKey } from "./noise.js";
|
|
4
|
+
import { MessageCarrier } from "./noise-session.js";
|
|
5
|
+
import type { Connector } from "./port.js";
|
|
6
|
+
/** The authenticated relay stream `openPipe` returns: raw chunks, not whole messages. */
|
|
7
|
+
export interface AuthenticatedRelayByteDuplex {
|
|
8
|
+
send(bytes: Uint8Array): void;
|
|
9
|
+
onmessage: ((bytes: Uint8Array) => void) | null;
|
|
10
|
+
onclose: ((event?: {
|
|
11
|
+
code?: number;
|
|
12
|
+
reason?: string;
|
|
13
|
+
}) => void) | null;
|
|
14
|
+
close(): void;
|
|
15
|
+
}
|
|
16
|
+
export interface NextRouteTarget {
|
|
17
|
+
readonly kind: "desktop" | "cli" | "hosted";
|
|
18
|
+
readonly device: string;
|
|
19
|
+
readonly noise_pk: string;
|
|
20
|
+
readonly url: string;
|
|
21
|
+
readonly relay_collection?: string;
|
|
22
|
+
/** Preference hint only; never authorization or proof of reachability. */
|
|
23
|
+
readonly online?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface NextRouteResponse {
|
|
26
|
+
readonly collection: string;
|
|
27
|
+
readonly grant: string;
|
|
28
|
+
readonly targets: readonly NextRouteTarget[];
|
|
29
|
+
/** Private collections: advisory; `unavailable` fails the open with its reason. */
|
|
30
|
+
readonly availability?: CollectionAvailability;
|
|
31
|
+
readonly reason?: "no_device_registered";
|
|
32
|
+
}
|
|
33
|
+
/** What `mdbaseNext(connection)` from `@mdbase-dev/connect/next` provides. */
|
|
34
|
+
export interface NextBridge {
|
|
35
|
+
route(collection: string, options?: {
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
}): Promise<NextRouteResponse>;
|
|
38
|
+
/** `options.signal` bounds the open and, once admitted, the pipe's whole lifetime. */
|
|
39
|
+
openPipe(collection: string, target: NextRouteTarget, options?: {
|
|
40
|
+
signal?: AbortSignal;
|
|
41
|
+
}): Promise<AuthenticatedRelayByteDuplex>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whole Noise messages over an authenticated relay duplex: `u32be(len) ‖ message` out,
|
|
45
|
+
* reassembled from arbitrarily chunked input. Oversized lengths end the pipe.
|
|
46
|
+
*/
|
|
47
|
+
export declare function duplexCarrier(d: AuthenticatedRelayByteDuplex): MessageCarrier;
|
|
48
|
+
export interface NextRelayConnectorOptions {
|
|
49
|
+
/** `mdbaseNext(connection)` from `@mdbase-dev/connect/next`. */
|
|
50
|
+
next: NextBridge;
|
|
51
|
+
/** The collection the app holds a grant for (the route's `collection`). */
|
|
52
|
+
collection: Uuid;
|
|
53
|
+
/** The grant's client key, registered at consent (`nextClientKey`). */
|
|
54
|
+
staticKey: KeyPair | StaticKey;
|
|
55
|
+
}
|
|
56
|
+
/** Valid relay targets, sticky device first, then those hinted online, in route order. */
|
|
57
|
+
export declare function orderTargets(route: NextRouteResponse, sticky: string | null): NextRouteTarget[];
|
|
58
|
+
/**
|
|
59
|
+
* A connector for web apps reaching a device replica through the relay. Every
|
|
60
|
+
* (re)connect asks for a fresh route and pipe; the token never reaches this code.
|
|
61
|
+
*/
|
|
62
|
+
export declare function nextRelayConnector(o: NextRelayConnectorOptions): Connector & {
|
|
63
|
+
readonly target: string | null;
|
|
64
|
+
};
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser apps to a device replica through Connect's relay, with the access token kept
|
|
3
|
+
* inside the Connect client (`@mdbase-dev/connect/next`, control contracts pinned to
|
|
4
|
+
* Connect #600/#604):
|
|
5
|
+
*
|
|
6
|
+
* 1. `next.route(collection)` lists the grant's targets (no token in the response);
|
|
7
|
+
* 2. `next.openPipe(collection, target)` re-validates that target, authenticates the
|
|
8
|
+
* relay pipe (`pipe_auth` → `pipe_opened`) and returns an authenticated byte duplex;
|
|
9
|
+
* 3. this module frames `u32be(len) ‖ Noise message` on that duplex exactly once and
|
|
10
|
+
* runs Noise IK with a prologue binding the relay collection, the route's grant and
|
|
11
|
+
* the target device — the same values the relay gives the daemon in `pipe_open`.
|
|
12
|
+
* It never sends a second `pipe_auth` and never sees the token.
|
|
13
|
+
*
|
|
14
|
+
* **Sticky target.** Reconnects stay on the device they last reached while the route
|
|
15
|
+
* still lists it; only then do they move. The client's read fence
|
|
16
|
+
* (`MdbaseClient`, `confirmed_through`) keeps a switch from serving older data.
|
|
17
|
+
*/
|
|
18
|
+
import { uuidToBytes } from "../codec.js";
|
|
19
|
+
import { collectionUnavailableError, parseCollectionAvailability } from "../collection-availability.js";
|
|
20
|
+
import { isMdbaseError, mdbaseError } from "../errors.js";
|
|
21
|
+
import { clientPrologue } from "./noise.js";
|
|
22
|
+
import { noiseConnector } from "./noise-session.js";
|
|
23
|
+
import { pipeCloseError } from "./relay-pipe.js";
|
|
24
|
+
import { registerNextRelayFence } from "./read-fence-policy.js";
|
|
25
|
+
/** Max Noise message, and max relay chunk (`u32be` length + message). */
|
|
26
|
+
const MAX_MESSAGE = 65535;
|
|
27
|
+
const MAX_CHUNK = 4 + MAX_MESSAGE;
|
|
28
|
+
const MAX_EARLY = 16;
|
|
29
|
+
const MAX_EARLY_BYTES = 1 << 20;
|
|
30
|
+
const UUID = /^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
|
|
31
|
+
/**
|
|
32
|
+
* Whole Noise messages over an authenticated relay duplex: `u32be(len) ‖ message` out,
|
|
33
|
+
* reassembled from arbitrarily chunked input. Oversized lengths end the pipe.
|
|
34
|
+
*/
|
|
35
|
+
export function duplexCarrier(d) {
|
|
36
|
+
let buf = new Uint8Array(0);
|
|
37
|
+
let closed = false;
|
|
38
|
+
let terminal;
|
|
39
|
+
let onmessage = null;
|
|
40
|
+
let onclose = null;
|
|
41
|
+
// Messages that arrive before a consumer is attached (bounded), and the terminal
|
|
42
|
+
// state, are kept and delivered when it attaches.
|
|
43
|
+
const early = [];
|
|
44
|
+
let earlyBytes = 0;
|
|
45
|
+
const carrier = {
|
|
46
|
+
get onmessage() {
|
|
47
|
+
return onmessage;
|
|
48
|
+
},
|
|
49
|
+
set onmessage(f) {
|
|
50
|
+
onmessage = f;
|
|
51
|
+
while (f && !closed && early.length && onmessage === f) {
|
|
52
|
+
const m = early.shift();
|
|
53
|
+
earlyBytes -= m.length;
|
|
54
|
+
f(m);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
get onclose() {
|
|
58
|
+
return onclose;
|
|
59
|
+
},
|
|
60
|
+
set onclose(f) {
|
|
61
|
+
onclose = f;
|
|
62
|
+
if (f && closed && terminal)
|
|
63
|
+
f(terminal);
|
|
64
|
+
},
|
|
65
|
+
send(m) {
|
|
66
|
+
if (closed)
|
|
67
|
+
throw mdbaseError("unavailable", "relay pipe closed");
|
|
68
|
+
if (m.length > MAX_MESSAGE)
|
|
69
|
+
throw mdbaseError("too_large", "Noise message over 65535 bytes");
|
|
70
|
+
const f = new Uint8Array(4 + m.length);
|
|
71
|
+
new DataView(f.buffer).setUint32(0, m.length);
|
|
72
|
+
f.set(m, 4);
|
|
73
|
+
d.send(f);
|
|
74
|
+
},
|
|
75
|
+
close() {
|
|
76
|
+
if (closed)
|
|
77
|
+
return;
|
|
78
|
+
closed = true;
|
|
79
|
+
early.length = 0;
|
|
80
|
+
earlyBytes = 0;
|
|
81
|
+
d.close();
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
const fail = (code, reason) => {
|
|
85
|
+
if (closed)
|
|
86
|
+
return;
|
|
87
|
+
closed = true;
|
|
88
|
+
buf = new Uint8Array(0);
|
|
89
|
+
// Terminal purge: queued ciphertext is dropped; only the close event is kept.
|
|
90
|
+
early.length = 0;
|
|
91
|
+
earlyBytes = 0;
|
|
92
|
+
terminal = pipeCloseError(code, reason);
|
|
93
|
+
d.close();
|
|
94
|
+
onclose?.(terminal);
|
|
95
|
+
};
|
|
96
|
+
const deliver = (m) => {
|
|
97
|
+
if (closed)
|
|
98
|
+
return;
|
|
99
|
+
if (onmessage)
|
|
100
|
+
return onmessage(m);
|
|
101
|
+
if (early.length >= MAX_EARLY || earlyBytes + m.length > MAX_EARLY_BYTES)
|
|
102
|
+
return fail(4000, "invalid_frame");
|
|
103
|
+
early.push(m);
|
|
104
|
+
earlyBytes += m.length;
|
|
105
|
+
};
|
|
106
|
+
d.onmessage = (chunk) => {
|
|
107
|
+
if (closed)
|
|
108
|
+
return;
|
|
109
|
+
if (chunk.length > MAX_CHUNK)
|
|
110
|
+
return fail(4000, "invalid_frame");
|
|
111
|
+
const b = new Uint8Array(buf.length + chunk.length);
|
|
112
|
+
b.set(buf);
|
|
113
|
+
b.set(chunk, buf.length);
|
|
114
|
+
let off = 0;
|
|
115
|
+
while (b.length - off >= 4) {
|
|
116
|
+
const len = new DataView(b.buffer, b.byteOffset + off, 4).getUint32(0);
|
|
117
|
+
if (len > MAX_MESSAGE)
|
|
118
|
+
return fail(4000, "invalid_frame");
|
|
119
|
+
if (b.length - off - 4 < len)
|
|
120
|
+
break;
|
|
121
|
+
const m = b.slice(off + 4, off + 4 + len);
|
|
122
|
+
off += 4 + len;
|
|
123
|
+
deliver(m);
|
|
124
|
+
if (closed)
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
buf = b.slice(off);
|
|
128
|
+
if (buf.length > MAX_CHUNK)
|
|
129
|
+
fail(4000, "invalid_frame");
|
|
130
|
+
};
|
|
131
|
+
d.onclose = (ev) => fail(ev?.code, ev?.reason);
|
|
132
|
+
return carrier;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Connect client errors as SDK errors: a missing or revoked authorization stops the
|
|
136
|
+
* client (`unauthenticated`); anything else (refused or failed admission, timeouts,
|
|
137
|
+
* a route that no longer validates) is `unavailable` and retried with backoff.
|
|
138
|
+
*/
|
|
139
|
+
async function bridged(f) {
|
|
140
|
+
try {
|
|
141
|
+
return await f();
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
if (isMdbaseError(e))
|
|
145
|
+
throw e;
|
|
146
|
+
const code = e?.code;
|
|
147
|
+
if (code === "not_authorized")
|
|
148
|
+
throw mdbaseError("unauthenticated", "Connect authorization is missing", "not_authorized");
|
|
149
|
+
// Admission refused by the relay: the client passes its close code and known reason.
|
|
150
|
+
const cause = e?.cause;
|
|
151
|
+
if (typeof cause?.code === "number") {
|
|
152
|
+
throw pipeCloseError(cause.code, typeof cause.reason === "string" ? cause.reason : undefined);
|
|
153
|
+
}
|
|
154
|
+
throw mdbaseError("unavailable", "the relay pipe could not be opened", "relay_unavailable");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/** Valid relay targets, sticky device first, then those hinted online, in route order. */
|
|
158
|
+
export function orderTargets(route, sticky) {
|
|
159
|
+
const usable = route.targets.filter((t) => UUID.test(t.device) && /^[0-9a-f]{64}$/.test(t.noise_pk) && !!t.relay_collection && UUID.test(t.relay_collection));
|
|
160
|
+
const stuck = usable.filter((t) => t.device === sticky);
|
|
161
|
+
if (stuck.length)
|
|
162
|
+
return stuck;
|
|
163
|
+
return [...usable.filter((t) => t.online === true), ...usable.filter((t) => t.online !== true)];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* A connector for web apps reaching a device replica through the relay. Every
|
|
167
|
+
* (re)connect asks for a fresh route and pipe; the token never reaches this code.
|
|
168
|
+
*/
|
|
169
|
+
export function nextRelayConnector(o) {
|
|
170
|
+
// Pin original host references/scope before any route/pipe await.
|
|
171
|
+
const collection = o.collection, next = o.next, staticKey = o.staticKey;
|
|
172
|
+
if (!UUID.test(collection))
|
|
173
|
+
throw mdbaseError("invalid_request", "collection must be a UUID");
|
|
174
|
+
const routeCall = next.route.bind(next), pipeCall = next.openPipe.bind(next);
|
|
175
|
+
let sticky = null;
|
|
176
|
+
const connector = noiseConnector({
|
|
177
|
+
description: `next-relay:${collection}`,
|
|
178
|
+
staticKey,
|
|
179
|
+
target: async (signal) => {
|
|
180
|
+
const route = await bridged(() => routeCall(collection, signal ? { signal } : {}));
|
|
181
|
+
if (route.collection.toLowerCase() !== collection.toLowerCase() || !UUID.test(route.grant)) {
|
|
182
|
+
throw mdbaseError("unauthenticated", "the route does not match this collection's grant", "route_mismatch");
|
|
183
|
+
}
|
|
184
|
+
const availability = parseCollectionAvailability(route.availability);
|
|
185
|
+
if (availability?.state === "unavailable")
|
|
186
|
+
throw collectionUnavailableError(availability.reason);
|
|
187
|
+
const selected = orderTargets(route, sticky)[0];
|
|
188
|
+
if (!selected) {
|
|
189
|
+
throw mdbaseError("unavailable", route.reason === "no_device_registered"
|
|
190
|
+
? "this collection has no device set up to serve it"
|
|
191
|
+
: "no device of this collection is online", route.reason ?? "no_device_online");
|
|
192
|
+
}
|
|
193
|
+
const target = Object.freeze({ ...selected });
|
|
194
|
+
const hex = target.noise_pk;
|
|
195
|
+
const remoteStatic = new Uint8Array(32);
|
|
196
|
+
for (let i = 0; i < 32; i++)
|
|
197
|
+
remoteStatic[i] = parseInt(hex.slice(2 * i, 2 * i + 2), 16);
|
|
198
|
+
return {
|
|
199
|
+
// Must equal the daemon's pipe_open prologue: relay collection, grant, device.
|
|
200
|
+
prologue: clientPrologue(uuidToBytes(target.relay_collection), uuidToBytes(route.grant), uuidToBytes(target.device)),
|
|
201
|
+
remoteStatic,
|
|
202
|
+
device: target.device,
|
|
203
|
+
openCarrier: async (signal) => {
|
|
204
|
+
const pipe = await bridged(() => pipeCall(collection, target, signal ? { signal } : {}));
|
|
205
|
+
return duplexCarrier(pipe);
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
return registerNextRelayFence({
|
|
211
|
+
description: connector.description,
|
|
212
|
+
open: async (hello, signal) => {
|
|
213
|
+
const opened = await connector.open(hello, signal);
|
|
214
|
+
sticky = opened.device ?? null;
|
|
215
|
+
return opened;
|
|
216
|
+
},
|
|
217
|
+
get target() {
|
|
218
|
+
return sticky;
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=next-relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-relay.js","sourceRoot":"","sources":["../../src/transport/next-relay.ts"],"names":[],"mappings":"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"}
|