@useragent-kit/sdk 0.0.0 → 0.0.1
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 +661 -0
- package/README.md +61 -3
- package/dist/adapters.d.ts +94 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +188 -0
- package/dist/adapters.js.map +1 -0
- package/dist/api-protocol.d.ts +9 -0
- package/dist/api-protocol.d.ts.map +1 -0
- package/dist/api-protocol.js +9 -0
- package/dist/api-protocol.js.map +1 -0
- package/dist/bridge/contract.d.ts +66 -0
- package/dist/bridge/contract.d.ts.map +1 -0
- package/dist/bridge/contract.js +160 -0
- package/dist/bridge/contract.js.map +1 -0
- package/dist/bridge/index.d.ts +53 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +302 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/types.d.ts +93 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +9 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/chain.d.ts +198 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +424 -0
- package/dist/chain.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +41 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +252 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +54 -0
- package/dist/events.js.map +1 -0
- package/dist/experimental/file-transfer.d.ts +97 -0
- package/dist/experimental/file-transfer.d.ts.map +1 -0
- package/dist/experimental/file-transfer.js +1377 -0
- package/dist/experimental/file-transfer.js.map +1 -0
- package/dist/experimental/index.d.ts +7 -0
- package/dist/experimental/index.d.ts.map +1 -0
- package/dist/experimental/index.js +4 -0
- package/dist/experimental/index.js.map +1 -0
- package/dist/experimental/logger.d.ts +5 -0
- package/dist/experimental/logger.d.ts.map +1 -0
- package/dist/experimental/logger.js +74 -0
- package/dist/experimental/logger.js.map +1 -0
- package/dist/experimental/transport.d.ts +34 -0
- package/dist/experimental/transport.d.ts.map +1 -0
- package/dist/experimental/transport.js +43 -0
- package/dist/experimental/transport.js.map +1 -0
- package/dist/guest/claw.d.ts +10 -0
- package/dist/guest/claw.d.ts.map +1 -0
- package/dist/guest/claw.js +21 -0
- package/dist/guest/claw.js.map +1 -0
- package/dist/guest/crdt.d.ts +19 -0
- package/dist/guest/crdt.d.ts.map +1 -0
- package/dist/guest/crdt.js +64 -0
- package/dist/guest/crdt.js.map +1 -0
- package/dist/guest/data.d.ts +27 -0
- package/dist/guest/data.d.ts.map +1 -0
- package/dist/guest/data.js +61 -0
- package/dist/guest/data.js.map +1 -0
- package/dist/guest/files.d.ts +15 -0
- package/dist/guest/files.d.ts.map +1 -0
- package/dist/guest/files.js +24 -0
- package/dist/guest/files.js.map +1 -0
- package/dist/guest/index.d.ts +43 -0
- package/dist/guest/index.d.ts.map +1 -0
- package/dist/guest/index.js +44 -0
- package/dist/guest/index.js.map +1 -0
- package/dist/guest/media.d.ts +44 -0
- package/dist/guest/media.d.ts.map +1 -0
- package/dist/guest/media.js +97 -0
- package/dist/guest/media.js.map +1 -0
- package/dist/guest/mesh.d.ts +79 -0
- package/dist/guest/mesh.d.ts.map +1 -0
- package/dist/guest/mesh.js +153 -0
- package/dist/guest/mesh.js.map +1 -0
- package/dist/guest/navigate.d.ts +17 -0
- package/dist/guest/navigate.d.ts.map +1 -0
- package/dist/guest/navigate.js +169 -0
- package/dist/guest/navigate.js.map +1 -0
- package/dist/guest/statements.d.ts +18 -0
- package/dist/guest/statements.d.ts.map +1 -0
- package/dist/guest/statements.js +26 -0
- package/dist/guest/statements.js.map +1 -0
- package/dist/guest/telemetry.d.ts +88 -0
- package/dist/guest/telemetry.d.ts.map +1 -0
- package/dist/guest/telemetry.js +184 -0
- package/dist/guest/telemetry.js.map +1 -0
- package/dist/guest/types.d.ts +255 -0
- package/dist/guest/types.d.ts.map +1 -0
- package/dist/guest/types.js +9 -0
- package/dist/guest/types.js.map +1 -0
- package/dist/host-runtime-contract.d.ts +19 -0
- package/dist/host-runtime-contract.d.ts.map +1 -0
- package/dist/host-runtime-contract.js +80 -0
- package/dist/host-runtime-contract.js.map +1 -0
- package/dist/host-runtime-frame.d.ts +128 -0
- package/dist/host-runtime-frame.d.ts.map +1 -0
- package/dist/host-runtime-frame.js +881 -0
- package/dist/host-runtime-frame.js.map +1 -0
- package/dist/host-runtime-registry.d.ts +16 -0
- package/dist/host-runtime-registry.d.ts.map +1 -0
- package/dist/host-runtime-registry.js +53 -0
- package/dist/host-runtime-registry.js.map +1 -0
- package/dist/host-runtime.d.ts +106 -0
- package/dist/host-runtime.d.ts.map +1 -0
- package/dist/host-runtime.js +290 -0
- package/dist/host-runtime.js.map +1 -0
- package/dist/identity-adapter.d.ts +42 -0
- package/dist/identity-adapter.d.ts.map +1 -0
- package/dist/identity-adapter.js +43 -0
- package/dist/identity-adapter.js.map +1 -0
- package/dist/identity.d.ts +86 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +223 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +91 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +356 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/api-protocol/api/protocol.d.ts +1402 -0
- package/dist/internal/api-protocol/api/protocol.d.ts.map +1 -0
- package/dist/internal/api-protocol/api/protocol.js +311 -0
- package/dist/internal/api-protocol/api/protocol.js.map +1 -0
- package/dist/internal/api-protocol/api/types.d.ts +24 -0
- package/dist/internal/api-protocol/api/types.d.ts.map +1 -0
- package/dist/internal/api-protocol/api/types.js +9 -0
- package/dist/internal/api-protocol/api/types.js.map +1 -0
- package/dist/internal/api-protocol/host-facade/connectionManager.d.ts +44 -0
- package/dist/internal/api-protocol/host-facade/connectionManager.d.ts.map +1 -0
- package/dist/internal/api-protocol/host-facade/connectionManager.js +349 -0
- package/dist/internal/api-protocol/host-facade/connectionManager.js.map +1 -0
- package/dist/internal/api-protocol/host-facade/protocolHandler.d.ts +24 -0
- package/dist/internal/api-protocol/host-facade/protocolHandler.d.ts.map +1 -0
- package/dist/internal/api-protocol/host-facade/protocolHandler.js +505 -0
- package/dist/internal/api-protocol/host-facade/protocolHandler.js.map +1 -0
- package/dist/internal/api-protocol/host-facade/types.d.ts +82 -0
- package/dist/internal/api-protocol/host-facade/types.d.ts.map +1 -0
- package/dist/internal/api-protocol/host-facade/types.js +14 -0
- package/dist/internal/api-protocol/host-facade/types.js.map +1 -0
- package/dist/internal/api-protocol/index.d.ts +39 -0
- package/dist/internal/api-protocol/index.d.ts.map +1 -0
- package/dist/internal/api-protocol/index.js +41 -0
- package/dist/internal/api-protocol/index.js.map +1 -0
- package/dist/internal/api-protocol/product-facade/hostApi.d.ts +392 -0
- package/dist/internal/api-protocol/product-facade/hostApi.d.ts.map +1 -0
- package/dist/internal/api-protocol/product-facade/hostApi.js +241 -0
- package/dist/internal/api-protocol/product-facade/hostApi.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/adapter.d.ts +41 -0
- package/dist/internal/api-protocol/shared/codec/adapter.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/adapter.js +10 -0
- package/dist/internal/api-protocol/shared/codec/adapter.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/negotiation.d.ts +80 -0
- package/dist/internal/api-protocol/shared/codec/negotiation.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/negotiation.js +129 -0
- package/dist/internal/api-protocol/shared/codec/negotiation.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/adapter.d.ts +18 -0
- package/dist/internal/api-protocol/shared/codec/scale/adapter.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/adapter.js +23 -0
- package/dist/internal/api-protocol/shared/codec/scale/adapter.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/primitives.d.ts +35 -0
- package/dist/internal/api-protocol/shared/codec/scale/primitives.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/primitives.js +96 -0
- package/dist/internal/api-protocol/shared/codec/scale/primitives.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/accounts.d.ts +65 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/accounts.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/accounts.js +43 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/accounts.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chainInteraction.d.ts +162 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chainInteraction.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chainInteraction.js +81 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chainInteraction.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chat.d.ts +307 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chat.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chat.js +105 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/chat.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/commonCodecs.d.ts +5 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/commonCodecs.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/commonCodecs.js +6 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/commonCodecs.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/createTransaction.d.ts +71 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/createTransaction.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/createTransaction.js +34 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/createTransaction.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/customRenderer.d.ts +106 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/customRenderer.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/customRenderer.js +84 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/customRenderer.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/devicePermission.d.ts +4 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/devicePermission.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/devicePermission.js +4 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/devicePermission.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/feature.d.ts +7 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/feature.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/feature.js +7 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/feature.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/handshake.d.ts +13 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/handshake.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/handshake.js +10 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/handshake.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/localStorage.d.ts +15 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/localStorage.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/localStorage.js +12 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/localStorage.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/navigation.d.ts +10 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/navigation.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/navigation.js +10 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/navigation.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/notification.d.ts +7 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/notification.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/notification.js +7 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/notification.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/payment.d.ts +74 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/payment.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/payment.js +38 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/payment.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/preimage.d.ts +12 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/preimage.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/preimage.js +11 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/preimage.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/remotePermission.d.ts +10 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/remotePermission.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/remotePermission.js +8 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/remotePermission.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/sign.d.ts +61 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/sign.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/sign.js +42 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/sign.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/statementStore.d.ts +137 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/statementStore.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/statementStore.js +55 -0
- package/dist/internal/api-protocol/shared/codec/scale/v1/statementStore.js.map +1 -0
- package/dist/internal/api-protocol/shared/codec/structured/index.d.ts +10 -0
- package/dist/internal/api-protocol/shared/codec/structured/index.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/codec/structured/index.js +19 -0
- package/dist/internal/api-protocol/shared/codec/structured/index.js.map +1 -0
- package/dist/internal/api-protocol/shared/transport/messagePortProvider.d.ts +18 -0
- package/dist/internal/api-protocol/shared/transport/messagePortProvider.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/transport/messagePortProvider.js +98 -0
- package/dist/internal/api-protocol/shared/transport/messagePortProvider.js.map +1 -0
- package/dist/internal/api-protocol/shared/transport/provider.d.ts +42 -0
- package/dist/internal/api-protocol/shared/transport/provider.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/transport/provider.js +13 -0
- package/dist/internal/api-protocol/shared/transport/provider.js.map +1 -0
- package/dist/internal/api-protocol/shared/transport/transport.d.ts +72 -0
- package/dist/internal/api-protocol/shared/transport/transport.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/transport/transport.js +420 -0
- package/dist/internal/api-protocol/shared/transport/transport.js.map +1 -0
- package/dist/internal/api-protocol/shared/transport/windowProvider.d.ts +13 -0
- package/dist/internal/api-protocol/shared/transport/windowProvider.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/transport/windowProvider.js +85 -0
- package/dist/internal/api-protocol/shared/transport/windowProvider.js.map +1 -0
- package/dist/internal/api-protocol/shared/util/helpers.d.ts +27 -0
- package/dist/internal/api-protocol/shared/util/helpers.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/util/helpers.js +43 -0
- package/dist/internal/api-protocol/shared/util/helpers.js.map +1 -0
- package/dist/internal/api-protocol/shared/util/idFactory.d.ts +9 -0
- package/dist/internal/api-protocol/shared/util/idFactory.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/util/idFactory.js +12 -0
- package/dist/internal/api-protocol/shared/util/idFactory.js.map +1 -0
- package/dist/internal/api-protocol/shared/util/logger.d.ts +15 -0
- package/dist/internal/api-protocol/shared/util/logger.d.ts.map +1 -0
- package/dist/internal/api-protocol/shared/util/logger.js +20 -0
- package/dist/internal/api-protocol/shared/util/logger.js.map +1 -0
- package/dist/mesh-attachment.d.ts +19 -0
- package/dist/mesh-attachment.d.ts.map +1 -0
- package/dist/mesh-attachment.js +43 -0
- package/dist/mesh-attachment.js.map +1 -0
- package/dist/mesh-chat.d.ts +48 -0
- package/dist/mesh-chat.d.ts.map +1 -0
- package/dist/mesh-chat.js +84 -0
- package/dist/mesh-chat.js.map +1 -0
- package/dist/mesh-delivery-diagnostics.d.ts +12 -0
- package/dist/mesh-delivery-diagnostics.d.ts.map +1 -0
- package/dist/mesh-delivery-diagnostics.js +45 -0
- package/dist/mesh-delivery-diagnostics.js.map +1 -0
- package/dist/mesh-notification.d.ts +29 -0
- package/dist/mesh-notification.d.ts.map +1 -0
- package/dist/mesh-notification.js +52 -0
- package/dist/mesh-notification.js.map +1 -0
- package/dist/mesh-pairing.d.ts +40 -0
- package/dist/mesh-pairing.d.ts.map +1 -0
- package/dist/mesh-pairing.js +78 -0
- package/dist/mesh-pairing.js.map +1 -0
- package/dist/product-host-runtime.d.ts +59 -0
- package/dist/product-host-runtime.d.ts.map +1 -0
- package/dist/product-host-runtime.js +150 -0
- package/dist/product-host-runtime.js.map +1 -0
- package/dist/product-protocol.d.ts +49 -0
- package/dist/product-protocol.d.ts.map +1 -0
- package/dist/product-protocol.js +389 -0
- package/dist/product-protocol.js.map +1 -0
- package/dist/product-view-hosted.d.ts +63 -0
- package/dist/product-view-hosted.d.ts.map +1 -0
- package/dist/product-view-hosted.js +272 -0
- package/dist/product-view-hosted.js.map +1 -0
- package/dist/product-view-service-worker.d.ts +6 -0
- package/dist/product-view-service-worker.d.ts.map +1 -0
- package/dist/product-view-service-worker.js +57 -0
- package/dist/product-view-service-worker.js.map +1 -0
- package/dist/product-view.d.ts +459 -0
- package/dist/product-view.d.ts.map +1 -0
- package/dist/product-view.js +2671 -0
- package/dist/product-view.js.map +1 -0
- package/dist/protocol.d.ts +39 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +25 -0
- package/dist/protocol.js.map +1 -0
- package/dist/remote-runtime-provider.d.ts +9 -0
- package/dist/remote-runtime-provider.d.ts.map +1 -0
- package/dist/remote-runtime-provider.js +1002 -0
- package/dist/remote-runtime-provider.js.map +1 -0
- package/dist/runtime-chain-service.d.ts +109 -0
- package/dist/runtime-chain-service.d.ts.map +1 -0
- package/dist/runtime-chain-service.js +846 -0
- package/dist/runtime-chain-service.js.map +1 -0
- package/dist/runtime-chain.d.ts +8 -0
- package/dist/runtime-chain.d.ts.map +1 -0
- package/dist/runtime-chain.js +4 -0
- package/dist/runtime-chain.js.map +1 -0
- package/dist/runtime-storage-access.d.ts +39 -0
- package/dist/runtime-storage-access.d.ts.map +1 -0
- package/dist/runtime-storage-access.js +209 -0
- package/dist/runtime-storage-access.js.map +1 -0
- package/dist/scoped-frame.d.ts +55 -0
- package/dist/scoped-frame.d.ts.map +1 -0
- package/dist/scoped-frame.js +234 -0
- package/dist/scoped-frame.js.map +1 -0
- package/dist/sdk-interfaces.d.ts +159 -0
- package/dist/sdk-interfaces.d.ts.map +1 -0
- package/dist/sdk-interfaces.js +2 -0
- package/dist/sdk-interfaces.js.map +1 -0
- package/dist/statement-store.d.ts +166 -0
- package/dist/statement-store.d.ts.map +1 -0
- package/dist/statement-store.js +627 -0
- package/dist/statement-store.js.map +1 -0
- package/dist/telemetry.d.ts +218 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +162 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +255 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +77 -0
- package/dist/types.js.map +1 -0
- package/dist/wallet-session.d.ts +89 -0
- package/dist/wallet-session.d.ts.map +1 -0
- package/dist/wallet-session.js +135 -0
- package/dist/wallet-session.js.map +1 -0
- package/package.json +86 -5
- package/index.js +0 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product-side Host API facade.
|
|
3
|
+
*
|
|
4
|
+
* `createProductFacade` builds the full product-side communication stack:
|
|
5
|
+
* provider → transport (with handshake and codec upgrade) → typed facade.
|
|
6
|
+
*
|
|
7
|
+
* Every request method returns a `ResultAsync<Ok, Err>` from neverthrow
|
|
8
|
+
* so callers can chain with `.map()`, `.andThen()`, `.match()`, etc.
|
|
9
|
+
*
|
|
10
|
+
* Handler param/ok/err types are derived from the SCALE codec definitions
|
|
11
|
+
* in `hostApiProtocol` via `RequestParams`, `ResponseOk`, `ResponseErr`,
|
|
12
|
+
* `SubscriptionParams`, and `SubscriptionPayload`.
|
|
13
|
+
*/
|
|
14
|
+
import { scaleCodecAdapter } from "../shared/codec/scale/adapter.js";
|
|
15
|
+
import { structuredCloneCodecAdapter } from "../shared/codec/structured/index.js";
|
|
16
|
+
import { requestCodecUpgrade } from "../shared/codec/negotiation.js";
|
|
17
|
+
import { createTransport } from "../shared/transport/transport.js";
|
|
18
|
+
import { createWindowProvider } from "../shared/transport/windowProvider.js";
|
|
19
|
+
import { createMessagePortProvider } from "../shared/transport/messagePortProvider.js";
|
|
20
|
+
import { ResultAsync } from "neverthrow";
|
|
21
|
+
import { extractErrorMessage } from "../shared/util/helpers.js";
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Internal: generic request / subscribe wrappers
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
function makeRequest(transport, method, version, payload) {
|
|
26
|
+
const response = ResultAsync.fromPromise(transport.request(method, { tag: version, value: payload }), (e) => ({ tag: "Unknown", value: { reason: extractErrorMessage(e) } }));
|
|
27
|
+
return response.andThen((resp) => {
|
|
28
|
+
if (resp.value.success) {
|
|
29
|
+
return ResultAsync.fromSafePromise(Promise.resolve(resp.value.value));
|
|
30
|
+
}
|
|
31
|
+
return ResultAsync.fromPromise(Promise.reject(resp.value.value), (e) => e);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function makeSubscription(transport, method, version, payload, callback) {
|
|
35
|
+
return transport.subscribe(method, { tag: version, value: payload }, (data) => {
|
|
36
|
+
const tagged = data;
|
|
37
|
+
if (tagged.tag === version) {
|
|
38
|
+
callback(tagged.value);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Factory
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* Create a product-side ProductFacade.
|
|
47
|
+
*
|
|
48
|
+
* Builds the full stack internally: creates the appropriate provider from
|
|
49
|
+
* `messaging`, creates a transport with `handshake: 'initiate'`, and wraps
|
|
50
|
+
* it with automatic codec upgrade negotiation.
|
|
51
|
+
*/
|
|
52
|
+
export function createProductFacade(options) {
|
|
53
|
+
const { messaging, protocolVersionId } = options;
|
|
54
|
+
// Build provider from messaging option.
|
|
55
|
+
const provider = messaging.type === "window"
|
|
56
|
+
? createWindowProvider(messaging.target)
|
|
57
|
+
: createMessagePortProvider(messaging.port);
|
|
58
|
+
// Build transport with eager handshake.
|
|
59
|
+
const transport = createTransport({
|
|
60
|
+
provider,
|
|
61
|
+
handshake: "initiate",
|
|
62
|
+
idPrefix: "p:",
|
|
63
|
+
protocolVersionId,
|
|
64
|
+
});
|
|
65
|
+
// Auto-upgrade codec after handshake.
|
|
66
|
+
const readyPromise = transport.whenReady().then(async () => {
|
|
67
|
+
await requestCodecUpgrade(transport, {
|
|
68
|
+
scale: scaleCodecAdapter,
|
|
69
|
+
structured_clone: structuredCloneCodecAdapter,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
// Suppress unhandled rejection if no one awaits whenReady().
|
|
73
|
+
readyPromise.catch(() => { });
|
|
74
|
+
return {
|
|
75
|
+
// -- Transport proxies --------------------------------------------------
|
|
76
|
+
/** Resolves when the handshake and codec negotiation are complete. */
|
|
77
|
+
whenReady() {
|
|
78
|
+
return readyPromise;
|
|
79
|
+
},
|
|
80
|
+
/**
|
|
81
|
+
* Register a handler for a host-initiated subscription.
|
|
82
|
+
*
|
|
83
|
+
* This is the product-side counterpart to `transport.handleSubscription`.
|
|
84
|
+
* Used for the one protocol method where the product is the handler
|
|
85
|
+
* rather than the initiator (`product_chat_custom_message_render_subscribe`).
|
|
86
|
+
*/
|
|
87
|
+
handleHostSubscription(method, handler) {
|
|
88
|
+
return transport.handleSubscription(method, handler);
|
|
89
|
+
},
|
|
90
|
+
// -- Core / lifecycle ---------------------------------------------------
|
|
91
|
+
featureSupported(payload) {
|
|
92
|
+
return makeRequest(transport, "host_feature_supported", "v1", payload);
|
|
93
|
+
},
|
|
94
|
+
pushNotification(payload) {
|
|
95
|
+
return makeRequest(transport, "host_push_notification", "v1", payload);
|
|
96
|
+
},
|
|
97
|
+
navigateTo(payload) {
|
|
98
|
+
return makeRequest(transport, "host_navigate_to", "v1", payload);
|
|
99
|
+
},
|
|
100
|
+
// -- Permissions --------------------------------------------------------
|
|
101
|
+
devicePermission(payload) {
|
|
102
|
+
return makeRequest(transport, "host_device_permission", "v1", payload);
|
|
103
|
+
},
|
|
104
|
+
permission(payload) {
|
|
105
|
+
return makeRequest(transport, "remote_permission", "v1", payload);
|
|
106
|
+
},
|
|
107
|
+
// -- Local storage ------------------------------------------------------
|
|
108
|
+
localStorageRead(payload) {
|
|
109
|
+
return makeRequest(transport, "host_local_storage_read", "v1", payload);
|
|
110
|
+
},
|
|
111
|
+
localStorageWrite(payload) {
|
|
112
|
+
return makeRequest(transport, "host_local_storage_write", "v1", payload);
|
|
113
|
+
},
|
|
114
|
+
localStorageClear(payload) {
|
|
115
|
+
return makeRequest(transport, "host_local_storage_clear", "v1", payload);
|
|
116
|
+
},
|
|
117
|
+
// -- Accounts -----------------------------------------------------------
|
|
118
|
+
accountConnectionStatusSubscribe(args, callback) {
|
|
119
|
+
return makeSubscription(transport, "host_account_connection_status_subscribe", "v1", args, callback);
|
|
120
|
+
},
|
|
121
|
+
accountGet(payload) {
|
|
122
|
+
return makeRequest(transport, "host_account_get", "v1", payload);
|
|
123
|
+
},
|
|
124
|
+
accountGetAlias(payload) {
|
|
125
|
+
return makeRequest(transport, "host_account_get_alias", "v1", payload);
|
|
126
|
+
},
|
|
127
|
+
accountCreateProof(payload) {
|
|
128
|
+
return makeRequest(transport, "host_account_create_proof", "v1", payload);
|
|
129
|
+
},
|
|
130
|
+
getNonProductAccounts(payload) {
|
|
131
|
+
return makeRequest(transport, "host_get_non_product_accounts", "v1", payload);
|
|
132
|
+
},
|
|
133
|
+
paymentBalanceSubscribe(args, callback) {
|
|
134
|
+
return makeSubscription(transport, "host_payment_balance_subscribe", "v1", args, callback);
|
|
135
|
+
},
|
|
136
|
+
paymentTopUp(payload) {
|
|
137
|
+
return makeRequest(transport, "host_payment_top_up", "v1", payload);
|
|
138
|
+
},
|
|
139
|
+
paymentRequest(payload) {
|
|
140
|
+
return makeRequest(transport, "host_payment_request", "v1", payload);
|
|
141
|
+
},
|
|
142
|
+
paymentStatusSubscribe(args, callback) {
|
|
143
|
+
return makeSubscription(transport, "host_payment_status_subscribe", "v1", args, callback);
|
|
144
|
+
},
|
|
145
|
+
// -- Transactions -------------------------------------------------------
|
|
146
|
+
createTransaction(payload) {
|
|
147
|
+
return makeRequest(transport, "host_create_transaction", "v1", payload);
|
|
148
|
+
},
|
|
149
|
+
createTransactionWithNonProductAccount(payload) {
|
|
150
|
+
return makeRequest(transport, "host_create_transaction_with_non_product_account", "v1", payload);
|
|
151
|
+
},
|
|
152
|
+
// -- Signing ------------------------------------------------------------
|
|
153
|
+
signRaw(payload) {
|
|
154
|
+
return makeRequest(transport, "host_sign_raw", "v1", payload);
|
|
155
|
+
},
|
|
156
|
+
signPayload(payload) {
|
|
157
|
+
return makeRequest(transport, "host_sign_payload", "v1", payload);
|
|
158
|
+
},
|
|
159
|
+
// -- Chat ---------------------------------------------------------------
|
|
160
|
+
chatListSubscribe(args, callback) {
|
|
161
|
+
return makeSubscription(transport, "host_chat_list_subscribe", "v1", args, callback);
|
|
162
|
+
},
|
|
163
|
+
chatCreateRoom(payload) {
|
|
164
|
+
return makeRequest(transport, "host_chat_create_room", "v1", payload);
|
|
165
|
+
},
|
|
166
|
+
chatRegisterBot(payload) {
|
|
167
|
+
return makeRequest(transport, "host_chat_register_bot", "v1", payload);
|
|
168
|
+
},
|
|
169
|
+
chatPostMessage(payload) {
|
|
170
|
+
return makeRequest(transport, "host_chat_post_message", "v1", payload);
|
|
171
|
+
},
|
|
172
|
+
chatActionSubscribe(args, callback) {
|
|
173
|
+
return makeSubscription(transport, "host_chat_action_subscribe", "v1", args, callback);
|
|
174
|
+
},
|
|
175
|
+
// -- Statement store ----------------------------------------------------
|
|
176
|
+
statementStoreSubscribe(args, callback) {
|
|
177
|
+
return makeSubscription(transport, "remote_statement_store_subscribe", "v1", args, callback);
|
|
178
|
+
},
|
|
179
|
+
statementStoreCreateProof(payload) {
|
|
180
|
+
return makeRequest(transport, "remote_statement_store_create_proof", "v1", payload);
|
|
181
|
+
},
|
|
182
|
+
statementStoreSubmit(payload) {
|
|
183
|
+
return makeRequest(transport, "remote_statement_store_submit", "v1", payload);
|
|
184
|
+
},
|
|
185
|
+
// -- Preimage -----------------------------------------------------------
|
|
186
|
+
preimageLookupSubscribe(args, callback) {
|
|
187
|
+
return makeSubscription(transport, "remote_preimage_lookup_subscribe", "v1", args, callback);
|
|
188
|
+
},
|
|
189
|
+
preimageSubmit(payload) {
|
|
190
|
+
return makeRequest(transport, "remote_preimage_submit", "v1", payload);
|
|
191
|
+
},
|
|
192
|
+
// -- JSON-RPC bridge ----------------------------------------------------
|
|
193
|
+
jsonrpcMessageSend(payload) {
|
|
194
|
+
return makeRequest(transport, "host_jsonrpc_message_send", "v1", payload);
|
|
195
|
+
},
|
|
196
|
+
jsonrpcMessageSubscribe(args, callback) {
|
|
197
|
+
return makeSubscription(transport, "host_jsonrpc_message_subscribe", "v1", args, callback);
|
|
198
|
+
},
|
|
199
|
+
// -- Remote chain (new JSON-RPC spec) -----------------------------------
|
|
200
|
+
chainHeadFollow(args, callback) {
|
|
201
|
+
return makeSubscription(transport, "remote_chain_head_follow", "v1", args, callback);
|
|
202
|
+
},
|
|
203
|
+
chainHeadHeader(payload) {
|
|
204
|
+
return makeRequest(transport, "remote_chain_head_header", "v1", payload);
|
|
205
|
+
},
|
|
206
|
+
chainHeadBody(payload) {
|
|
207
|
+
return makeRequest(transport, "remote_chain_head_body", "v1", payload);
|
|
208
|
+
},
|
|
209
|
+
chainHeadStorage(payload) {
|
|
210
|
+
return makeRequest(transport, "remote_chain_head_storage", "v1", payload);
|
|
211
|
+
},
|
|
212
|
+
chainHeadCall(payload) {
|
|
213
|
+
return makeRequest(transport, "remote_chain_head_call", "v1", payload);
|
|
214
|
+
},
|
|
215
|
+
chainHeadUnpin(payload) {
|
|
216
|
+
return makeRequest(transport, "remote_chain_head_unpin", "v1", payload);
|
|
217
|
+
},
|
|
218
|
+
chainHeadContinue(payload) {
|
|
219
|
+
return makeRequest(transport, "remote_chain_head_continue", "v1", payload);
|
|
220
|
+
},
|
|
221
|
+
chainHeadStopOperation(payload) {
|
|
222
|
+
return makeRequest(transport, "remote_chain_head_stop_operation", "v1", payload);
|
|
223
|
+
},
|
|
224
|
+
chainSpecGenesisHash(payload) {
|
|
225
|
+
return makeRequest(transport, "remote_chain_spec_genesis_hash", "v1", payload);
|
|
226
|
+
},
|
|
227
|
+
chainSpecChainName(payload) {
|
|
228
|
+
return makeRequest(transport, "remote_chain_spec_chain_name", "v1", payload);
|
|
229
|
+
},
|
|
230
|
+
chainSpecProperties(payload) {
|
|
231
|
+
return makeRequest(transport, "remote_chain_spec_properties", "v1", payload);
|
|
232
|
+
},
|
|
233
|
+
chainTransactionBroadcast(payload) {
|
|
234
|
+
return makeRequest(transport, "remote_chain_transaction_broadcast", "v1", payload);
|
|
235
|
+
},
|
|
236
|
+
chainTransactionStop(payload) {
|
|
237
|
+
return makeRequest(transport, "remote_chain_transaction_stop", "v1", payload);
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=hostApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostApi.js","sourceRoot":"","sources":["../../../../src/internal/api-protocol/product-facade/hostApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodecAdapter interface.
|
|
3
|
+
*
|
|
4
|
+
* Abstracts the wire encoding so that the transport layer does not care
|
|
5
|
+
* whether messages travel as SCALE-encoded Uint8Arrays or as structured
|
|
6
|
+
* clone objects. During codec negotiation the adapter can be swapped at
|
|
7
|
+
* runtime.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The on-the-wire shape of every protocol message.
|
|
11
|
+
*
|
|
12
|
+
* `requestId` correlates requests with responses (and subscription
|
|
13
|
+
* frames with their originating start message).
|
|
14
|
+
* `payload` is a tagged union whose tag is the protocol action
|
|
15
|
+
* (e.g. `host_handshake_request`, `host_account_get_response`).
|
|
16
|
+
*/
|
|
17
|
+
export type ProtocolMessage = {
|
|
18
|
+
requestId: string;
|
|
19
|
+
payload: {
|
|
20
|
+
tag: string;
|
|
21
|
+
value: unknown;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The data that travels over `postMessage` / the provider channel.
|
|
26
|
+
*
|
|
27
|
+
* - `Uint8Array` when using a binary codec (SCALE).
|
|
28
|
+
* - `ProtocolMessage` when using structured clone (same-origin iframes).
|
|
29
|
+
*/
|
|
30
|
+
export type PostMessageData = Uint8Array | ProtocolMessage;
|
|
31
|
+
/**
|
|
32
|
+
* A codec adapter encodes ProtocolMessages into a wire format and
|
|
33
|
+
* decodes incoming wire data back into ProtocolMessages.
|
|
34
|
+
*/
|
|
35
|
+
export interface CodecAdapter {
|
|
36
|
+
/** Encode a protocol message for transmission. */
|
|
37
|
+
encode(message: ProtocolMessage): PostMessageData;
|
|
38
|
+
/** Decode incoming wire data into a protocol message. */
|
|
39
|
+
decode(data: PostMessageData): ProtocolMessage;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../src/internal/api-protocol/shared/codec/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,eAAe,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAAC;IAElD,yDAAyD;IACzD,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC;CAChD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodecAdapter interface.
|
|
3
|
+
*
|
|
4
|
+
* Abstracts the wire encoding so that the transport layer does not care
|
|
5
|
+
* whether messages travel as SCALE-encoded Uint8Arrays or as structured
|
|
6
|
+
* clone objects. During codec negotiation the adapter can be swapped at
|
|
7
|
+
* runtime.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../../src/internal/api-protocol/shared/codec/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec format negotiation.
|
|
3
|
+
*
|
|
4
|
+
* After the initial handshake (which always uses SCALE for backwards
|
|
5
|
+
* compatibility) the product may request a codec upgrade via the
|
|
6
|
+
* `host_codec_upgrade` protocol method. The host responds with the
|
|
7
|
+
* format it selected (intersection of what both sides support).
|
|
8
|
+
*
|
|
9
|
+
* If the upgrade times out or the host doesn't support it, the
|
|
10
|
+
* connection stays on the current codec (typically SCALE).
|
|
11
|
+
*
|
|
12
|
+
* ## Compatibility matrix
|
|
13
|
+
*
|
|
14
|
+
* | Product | Host | Wire format |
|
|
15
|
+
* |---------|------|----------------------------------------|
|
|
16
|
+
* | Old | Old | SCALE |
|
|
17
|
+
* | Old | New | SCALE (old product never sends upgrade) |
|
|
18
|
+
* | New | Old | SCALE (upgrade times out) |
|
|
19
|
+
* | New | New | Structured clone (upgrade succeeds) |
|
|
20
|
+
*/
|
|
21
|
+
import type { CodecAdapter } from "./adapter.js";
|
|
22
|
+
import type { Transport } from "../transport/transport.js";
|
|
23
|
+
/** Wire-format identifiers. */
|
|
24
|
+
export type CodecFormat = "scale" | "structured_clone";
|
|
25
|
+
/** Sent by the product after handshake. */
|
|
26
|
+
export type CodecUpgradeRequest = {
|
|
27
|
+
supportedFormats: CodecFormat[];
|
|
28
|
+
};
|
|
29
|
+
/** Returned by the host. */
|
|
30
|
+
export type CodecUpgradeResponse = {
|
|
31
|
+
selectedFormat: CodecFormat;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Maximum time (ms) to wait for the host to reply to a codec upgrade
|
|
35
|
+
* request before falling back to the current format.
|
|
36
|
+
*/
|
|
37
|
+
export declare const UPGRADE_TIMEOUT = 1000;
|
|
38
|
+
/**
|
|
39
|
+
* Map from format name to the CodecAdapter that implements it.
|
|
40
|
+
*/
|
|
41
|
+
export type CodecAdapterMap = Partial<Record<CodecFormat, CodecAdapter>>;
|
|
42
|
+
/**
|
|
43
|
+
* Request a codec upgrade from the product side.
|
|
44
|
+
*
|
|
45
|
+
* Call this AFTER the handshake has completed (`transport.whenReady()`
|
|
46
|
+
* resolved). Sends a `host_codec_upgrade` request with the
|
|
47
|
+
* list of formats the product supports. If the host responds with a
|
|
48
|
+
* format both sides support, both swap their codec adapters.
|
|
49
|
+
*
|
|
50
|
+
* If the request times out or the host returns an unknown format,
|
|
51
|
+
* the transport stays on its current codec. This is safe — the
|
|
52
|
+
* product just keeps using whatever it was using before.
|
|
53
|
+
*
|
|
54
|
+
* @param transport - The product-side transport (must be connected).
|
|
55
|
+
* @param adapters - Map of format → CodecAdapter the product supports.
|
|
56
|
+
* @returns The format that was selected, or `undefined` if the upgrade
|
|
57
|
+
* failed and the transport stays on the current codec.
|
|
58
|
+
*/
|
|
59
|
+
export declare function requestCodecUpgrade(transport: Transport, adapters: CodecAdapterMap): Promise<CodecFormat | undefined>;
|
|
60
|
+
/**
|
|
61
|
+
* Register a handler for codec upgrade requests on the host side.
|
|
62
|
+
*
|
|
63
|
+
* When the product sends `host_codec_upgrade`, this handler picks
|
|
64
|
+
* the best format from the intersection of what both sides support
|
|
65
|
+
* and responds with the selection.
|
|
66
|
+
*
|
|
67
|
+
* If structured clone is selected, the host swaps its outgoing codec
|
|
68
|
+
* BEFORE sending the response. This means the response itself arrives
|
|
69
|
+
* as a structured clone message, which forces the product's transport
|
|
70
|
+
* to auto-upgrade its outgoing codec via `decodeIncoming`. This
|
|
71
|
+
* eliminates the race condition: even if the product's timeout has
|
|
72
|
+
* already fired, the next message from the host (in structured clone)
|
|
73
|
+
* will trigger the product's auto-upgrade.
|
|
74
|
+
*
|
|
75
|
+
* @param transport - The host-side transport.
|
|
76
|
+
* @param adapters - Map of format → CodecAdapter the host supports.
|
|
77
|
+
* @returns An unsubscribe function that removes the handler.
|
|
78
|
+
*/
|
|
79
|
+
export declare function handleCodecUpgrade(transport: Transport, adapters: CodecAdapterMap): () => void;
|
|
80
|
+
//# sourceMappingURL=negotiation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiation.d.ts","sourceRoot":"","sources":["../../../../../src/internal/api-protocol/shared/codec/negotiation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAM3D,+BAA+B;AAC/B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,kBAAkB,CAAC;AAEvD,2CAA2C;AAC3C,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,WAAW,EAAE,CAAC;CACjC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,MAAM,oBAAoB,GAAG;IACjC,cAAc,EAAE,WAAW,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,OAAQ,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAMzE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA6BlC;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAG,MAAM,IAAI,CA6C9F"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codec format negotiation.
|
|
3
|
+
*
|
|
4
|
+
* After the initial handshake (which always uses SCALE for backwards
|
|
5
|
+
* compatibility) the product may request a codec upgrade via the
|
|
6
|
+
* `host_codec_upgrade` protocol method. The host responds with the
|
|
7
|
+
* format it selected (intersection of what both sides support).
|
|
8
|
+
*
|
|
9
|
+
* If the upgrade times out or the host doesn't support it, the
|
|
10
|
+
* connection stays on the current codec (typically SCALE).
|
|
11
|
+
*
|
|
12
|
+
* ## Compatibility matrix
|
|
13
|
+
*
|
|
14
|
+
* | Product | Host | Wire format |
|
|
15
|
+
* |---------|------|----------------------------------------|
|
|
16
|
+
* | Old | Old | SCALE |
|
|
17
|
+
* | Old | New | SCALE (old product never sends upgrade) |
|
|
18
|
+
* | New | Old | SCALE (upgrade times out) |
|
|
19
|
+
* | New | New | Structured clone (upgrade succeeds) |
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Maximum time (ms) to wait for the host to reply to a codec upgrade
|
|
23
|
+
* request before falling back to the current format.
|
|
24
|
+
*/
|
|
25
|
+
export const UPGRADE_TIMEOUT = 1000;
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Product side: request a codec upgrade
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Request a codec upgrade from the product side.
|
|
31
|
+
*
|
|
32
|
+
* Call this AFTER the handshake has completed (`transport.whenReady()`
|
|
33
|
+
* resolved). Sends a `host_codec_upgrade` request with the
|
|
34
|
+
* list of formats the product supports. If the host responds with a
|
|
35
|
+
* format both sides support, both swap their codec adapters.
|
|
36
|
+
*
|
|
37
|
+
* If the request times out or the host returns an unknown format,
|
|
38
|
+
* the transport stays on its current codec. This is safe — the
|
|
39
|
+
* product just keeps using whatever it was using before.
|
|
40
|
+
*
|
|
41
|
+
* @param transport - The product-side transport (must be connected).
|
|
42
|
+
* @param adapters - Map of format → CodecAdapter the product supports.
|
|
43
|
+
* @returns The format that was selected, or `undefined` if the upgrade
|
|
44
|
+
* failed and the transport stays on the current codec.
|
|
45
|
+
*/
|
|
46
|
+
export async function requestCodecUpgrade(transport, adapters) {
|
|
47
|
+
const supportedFormats = Object.keys(adapters);
|
|
48
|
+
if (supportedFormats.length === 0)
|
|
49
|
+
return undefined;
|
|
50
|
+
const request = { supportedFormats };
|
|
51
|
+
try {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timeout = setTimeout(() => controller.abort("Codec upgrade timeout"), UPGRADE_TIMEOUT);
|
|
54
|
+
const response = await transport.request("host_codec_upgrade", { tag: "v1", value: request }, controller.signal);
|
|
55
|
+
clearTimeout(timeout);
|
|
56
|
+
const selectedFormat = response.value.selectedFormat;
|
|
57
|
+
if (!selectedFormat || !adapters[selectedFormat])
|
|
58
|
+
return undefined;
|
|
59
|
+
// Swap the codec adapter on the product side.
|
|
60
|
+
transport.swapCodecAdapter(adapters[selectedFormat]);
|
|
61
|
+
return selectedFormat;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// MethodNotSupportedError, timeout, or abort — stay on current codec.
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Host side: handle a codec upgrade request
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/**
|
|
72
|
+
* Register a handler for codec upgrade requests on the host side.
|
|
73
|
+
*
|
|
74
|
+
* When the product sends `host_codec_upgrade`, this handler picks
|
|
75
|
+
* the best format from the intersection of what both sides support
|
|
76
|
+
* and responds with the selection.
|
|
77
|
+
*
|
|
78
|
+
* If structured clone is selected, the host swaps its outgoing codec
|
|
79
|
+
* BEFORE sending the response. This means the response itself arrives
|
|
80
|
+
* as a structured clone message, which forces the product's transport
|
|
81
|
+
* to auto-upgrade its outgoing codec via `decodeIncoming`. This
|
|
82
|
+
* eliminates the race condition: even if the product's timeout has
|
|
83
|
+
* already fired, the next message from the host (in structured clone)
|
|
84
|
+
* will trigger the product's auto-upgrade.
|
|
85
|
+
*
|
|
86
|
+
* @param transport - The host-side transport.
|
|
87
|
+
* @param adapters - Map of format → CodecAdapter the host supports.
|
|
88
|
+
* @returns An unsubscribe function that removes the handler.
|
|
89
|
+
*/
|
|
90
|
+
export function handleCodecUpgrade(transport, adapters) {
|
|
91
|
+
const preference = ["structured_clone", "scale"];
|
|
92
|
+
const fallbackResponse = { tag: "v1", value: { selectedFormat: "scale" } };
|
|
93
|
+
return transport.listenMessages("host_codec_upgrade_request", (requestId, value) => {
|
|
94
|
+
const envelope = value;
|
|
95
|
+
const request = envelope?.value;
|
|
96
|
+
if (!request?.supportedFormats) {
|
|
97
|
+
transport.postMessage(requestId, {
|
|
98
|
+
tag: "host_codec_upgrade_response",
|
|
99
|
+
value: fallbackResponse,
|
|
100
|
+
});
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const productFormats = new Set(request.supportedFormats);
|
|
104
|
+
// Pick the best format from the intersection (structured_clone preferred).
|
|
105
|
+
let selected;
|
|
106
|
+
for (const format of preference) {
|
|
107
|
+
if (productFormats.has(format) && adapters[format]) {
|
|
108
|
+
selected = format;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (!selected) {
|
|
113
|
+
transport.postMessage(requestId, {
|
|
114
|
+
tag: "host_codec_upgrade_response",
|
|
115
|
+
value: fallbackResponse,
|
|
116
|
+
});
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Swap BEFORE sending the response so the response itself is
|
|
120
|
+
// encoded with the new codec. The product's decodeIncoming will
|
|
121
|
+
// detect the format and auto-upgrade its outgoing codec too.
|
|
122
|
+
transport.swapCodecAdapter(adapters[selected]);
|
|
123
|
+
transport.postMessage(requestId, {
|
|
124
|
+
tag: "host_codec_upgrade_response",
|
|
125
|
+
value: { tag: "v1", value: { selectedFormat: selected } },
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=negotiation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiation.js","sourceRoot":"","sources":["../../../../../src/internal/api-protocol/shared/codec/negotiation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SCALE codec adapter.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the protocol's `Message` codec into a `CodecAdapter` for use by
|
|
5
|
+
* the transport layer.
|
|
6
|
+
*/
|
|
7
|
+
import type { Codec } from "scale-ts";
|
|
8
|
+
import type { CodecAdapter } from "../adapter.js";
|
|
9
|
+
export declare function createScaleCodecAdapter(messageCodec: Codec<{
|
|
10
|
+
requestId: string;
|
|
11
|
+
payload: {
|
|
12
|
+
tag: string;
|
|
13
|
+
value: unknown;
|
|
14
|
+
};
|
|
15
|
+
}>): CodecAdapter;
|
|
16
|
+
/** Ready-to-use SCALE codec adapter for the full protocol. */
|
|
17
|
+
export declare const scaleCodecAdapter: CodecAdapter;
|
|
18
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/api-protocol/shared/codec/scale/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAoC,MAAM,eAAe,CAAC;AAGpF,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC,GACnF,YAAY,CAYd;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,cAAmC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SCALE codec adapter.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the protocol's `Message` codec into a `CodecAdapter` for use by
|
|
5
|
+
* the transport layer.
|
|
6
|
+
*/
|
|
7
|
+
import { Message } from "../../../api/protocol.js";
|
|
8
|
+
export function createScaleCodecAdapter(messageCodec) {
|
|
9
|
+
return {
|
|
10
|
+
encode(message) {
|
|
11
|
+
return messageCodec.enc(message);
|
|
12
|
+
},
|
|
13
|
+
decode(data) {
|
|
14
|
+
if (!(data instanceof Uint8Array)) {
|
|
15
|
+
throw new Error("SCALE codec expects Uint8Array input");
|
|
16
|
+
}
|
|
17
|
+
return messageCodec.dec(data);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Ready-to-use SCALE codec adapter for the full protocol. */
|
|
22
|
+
export const scaleCodecAdapter = createScaleCodecAdapter(Message);
|
|
23
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../../../src/internal/api-protocol/shared/codec/scale/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,MAAM,UAAU,uBAAuB,CACrC,YAAoF;IAEpF,OAAO;QACL,MAAM,CAAC,OAAwB;YAC7B,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,CAAe,CAAC;QACjD,CAAC;QACD,MAAM,CAAC,IAAqB;YAC1B,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SCALE codec primitives.
|
|
3
|
+
*
|
|
4
|
+
* Thin wrappers over scale-ts that provide Polkadot-specific conveniences:
|
|
5
|
+
* Hex strings, nullable values, status enums, lazy codecs, and error enums.
|
|
6
|
+
*
|
|
7
|
+
* Previously provided by @novasamatech/scale — inlined here to remove
|
|
8
|
+
* the external dependency.
|
|
9
|
+
*/
|
|
10
|
+
import type { Codec } from "scale-ts";
|
|
11
|
+
import { Enum } from "scale-ts";
|
|
12
|
+
export { Enum };
|
|
13
|
+
/**
|
|
14
|
+
* Optimized version of `Option(bool)` — encodes as a single u8:
|
|
15
|
+
* 0 = undefined/null, 1 = false, 2 = true.
|
|
16
|
+
*/
|
|
17
|
+
export declare const OptionBool: Codec<boolean | void>;
|
|
18
|
+
export type HexString = `0x${string}`;
|
|
19
|
+
/**
|
|
20
|
+
* Assert that a string is a valid hex string (`0x...`).
|
|
21
|
+
*/
|
|
22
|
+
export declare function toHexString(value: string): HexString;
|
|
23
|
+
/**
|
|
24
|
+
* SCALE codec for hex-encoded byte strings (`0x...`).
|
|
25
|
+
*/
|
|
26
|
+
export declare function Hex(length?: number): Codec<HexString>;
|
|
27
|
+
/**
|
|
28
|
+
* Enum without values — maps string labels to u8 indices.
|
|
29
|
+
*/
|
|
30
|
+
export declare function Status<const T>(...list: T[]): Codec<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Deferred codec for recursive types.
|
|
33
|
+
*/
|
|
34
|
+
export declare function lazy<T>(fn: () => Codec<T>): Codec<T>;
|
|
35
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/api-protocol/shared/codec/scale/primitives.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAS,IAAI,EAAiC,MAAM,UAAU,CAAC;AAGtE,OAAO,EAAE,IAAI,EAAE,CAAC;AAMhB;;;GAGG;AACH,eAAO,MAAM,UAAU,uBAoBtB,CAAC;AAMF,MAAM,MAAM,SAAS,GAAG,KAAK,MAAM,EAAE,CAAC;AAEtC;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAKpD;AAoBD;;GAEG;AACH,wBAAgB,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAMrD;AAMD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CActD;AAMD;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAKpD"}
|