@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
package/dist/chain.d.ts
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain client — smoldot light client integration for the browser.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `smoldot` NPM package for the actual light client, with WASM-side
|
|
5
|
+
* state management via `ChainClientHandle` from `host-wasm`.
|
|
6
|
+
*
|
|
7
|
+
* ## Architecture
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* TypeScript (this module) Rust WASM (ChainClientHandle)
|
|
11
|
+
* ───────────────────────── ────────────────────────────
|
|
12
|
+
* SmoldotDriver ChainStateMachine
|
|
13
|
+
* creates smoldot Client processes JSON-RPC responses
|
|
14
|
+
* adds/removes chains tracks chain status
|
|
15
|
+
* drives event loops generates request payloads
|
|
16
|
+
* forwards responses → WASM persists DB to localStorage
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { start as startSmoldot } from "smoldot";
|
|
22
|
+
* import { SmoldotDriver } from "@polkadot-apps/host-sdk";
|
|
23
|
+
*
|
|
24
|
+
* const smoldotClient = startSmoldot();
|
|
25
|
+
* const driver = new SmoldotDriver(chainHandle, smoldotClient);
|
|
26
|
+
*
|
|
27
|
+
* await driver.connect("PaseoAssetHub");
|
|
28
|
+
* console.log(driver.status("PaseoAssetHub")); // { state: "Connecting", ... }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
/** Chain status as returned by the WASM handle. */
|
|
32
|
+
export interface ChainStatus {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
state: "Disconnected" | "Connecting" | "Syncing" | "Live" | "Error";
|
|
36
|
+
bestBlock: number;
|
|
37
|
+
finalizedBlock: number | null;
|
|
38
|
+
peers: number;
|
|
39
|
+
error?: string;
|
|
40
|
+
}
|
|
41
|
+
/** Supported chain names for smoldot on WASM. */
|
|
42
|
+
export type SmoldotChainName = "PolkadotAssetHub" | "PaseoAssetHub" | "PolkadotPeople" | "PaseoPeople" | "PaseoBulletin";
|
|
43
|
+
/**
|
|
44
|
+
* Minimal interface for the smoldot NPM package's `Client`.
|
|
45
|
+
* Matches the `smoldot` package's `Client` type without requiring the package as a dependency.
|
|
46
|
+
*/
|
|
47
|
+
export interface SmoldotClient {
|
|
48
|
+
addChain(options: {
|
|
49
|
+
chainSpec: string;
|
|
50
|
+
potentialRelayChains?: SmoldotChain[];
|
|
51
|
+
databaseContent?: string;
|
|
52
|
+
}): Promise<SmoldotChain>;
|
|
53
|
+
terminate(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/** Minimal interface for a smoldot chain handle. */
|
|
56
|
+
export interface SmoldotChain {
|
|
57
|
+
sendJsonRpc(rpc: string): void;
|
|
58
|
+
nextJsonRpcResponse(): Promise<string>;
|
|
59
|
+
remove(): void;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* JS-side chain store passed to `ChainClientHandle.fromStore()`.
|
|
63
|
+
* Implement this to provide a custom persistence backend (e.g. IndexedDB).
|
|
64
|
+
*
|
|
65
|
+
* Mirrors the `JsChainStore` extern type in `crates/host-wasm/src/chain.rs`.
|
|
66
|
+
*/
|
|
67
|
+
export interface JsChainStore {
|
|
68
|
+
/**
|
|
69
|
+
* Load persisted data for the given key.
|
|
70
|
+
* Return an empty string, null, or undefined if the key is not found.
|
|
71
|
+
* Returning null or undefined is safe — the Rust adapter treats both as
|
|
72
|
+
* an empty string to prevent smoldot from reading "null" as corrupt data.
|
|
73
|
+
*/
|
|
74
|
+
load(key: string): string | null | undefined;
|
|
75
|
+
/** Persist data for the given key. */
|
|
76
|
+
save(key: string, data: string): void;
|
|
77
|
+
}
|
|
78
|
+
/** WASM handle interface (matches ChainClientHandle from host-wasm). */
|
|
79
|
+
export interface WasmChainClientHandle {
|
|
80
|
+
registerChain(chainName: string): void;
|
|
81
|
+
unregisterChain(chainName: string): void;
|
|
82
|
+
processResponse(chainName: string, text: string): void;
|
|
83
|
+
processRelayResponse(chainName: string, text: string): void;
|
|
84
|
+
setError(chainName: string, msg: string): void;
|
|
85
|
+
status(chainName: string): ChainStatus;
|
|
86
|
+
allStatuses(): ChainStatus[];
|
|
87
|
+
subscribeNewHeadsRequest(): string;
|
|
88
|
+
subscribeFinalizedHeadsRequest(): string;
|
|
89
|
+
knownGenesisHash(chainName: string): string | null;
|
|
90
|
+
healthCheckRequest(chainName: string): string;
|
|
91
|
+
paraDbSaveRequest(): string;
|
|
92
|
+
relayDbSaveRequest(): string;
|
|
93
|
+
chainSpecs(chainName: string): [string, string] | null;
|
|
94
|
+
loadRelayDb(chainName: string): string;
|
|
95
|
+
loadParaDb(chainName: string): string;
|
|
96
|
+
statementSubmitRequest(encodedHex: string, requestId: number): string;
|
|
97
|
+
statementSubscribeRequest(requestId: number): string;
|
|
98
|
+
statementUnsubscribeRequest(subId: string, requestId: number): string;
|
|
99
|
+
statementBroadcastsRequest(topicHexes: string[], requestId: number): string;
|
|
100
|
+
parseStatementNotification(text: string): string[];
|
|
101
|
+
free(): void;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Boot stage event emitted during chain warmup.
|
|
105
|
+
*
|
|
106
|
+
* `"ready"` is emitted immediately after `"first-finalized-block"` today.
|
|
107
|
+
* It exists as a separate stage so that readiness criteria can be tightened
|
|
108
|
+
* in the future (e.g. require peer count > 0) without breaking consumers
|
|
109
|
+
* that listen for `"ready"`.
|
|
110
|
+
*/
|
|
111
|
+
export interface BootDiagnosticsEvent {
|
|
112
|
+
chainName: string;
|
|
113
|
+
stage: "connect-start" | "relay-added" | "para-added" | "first-best-block" | "first-finalized-block" | "ready";
|
|
114
|
+
elapsedMs: number;
|
|
115
|
+
}
|
|
116
|
+
/** Callback for boot-stage diagnostics. */
|
|
117
|
+
export type BootDiagnosticsCallback = (event: BootDiagnosticsEvent) => void;
|
|
118
|
+
/** Options for chain readiness waiting. */
|
|
119
|
+
export interface ChainReadinessOptions {
|
|
120
|
+
/** Milliseconds before waitUntilReady rejects. Default: 120_000. */
|
|
121
|
+
timeoutMs?: number;
|
|
122
|
+
/** Poll interval in milliseconds. Default: 500. */
|
|
123
|
+
pollIntervalMs?: number;
|
|
124
|
+
}
|
|
125
|
+
/** Thrown when waitUntilReady exceeds the timeout. */
|
|
126
|
+
export declare class ChainReadinessTimeoutError extends Error {
|
|
127
|
+
constructor(chainName: string, timeoutMs: number);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Drives a smoldot light client in the browser, wired to the WASM state machine.
|
|
131
|
+
*
|
|
132
|
+
* Manages the lifecycle of smoldot chains: adding/removing chains, forwarding
|
|
133
|
+
* responses to WASM for state tracking, and running periodic health checks
|
|
134
|
+
* and database saves.
|
|
135
|
+
*/
|
|
136
|
+
export declare class SmoldotDriver {
|
|
137
|
+
private handle;
|
|
138
|
+
private client;
|
|
139
|
+
private chains;
|
|
140
|
+
private responseInterceptors;
|
|
141
|
+
private relayResponseInterceptors;
|
|
142
|
+
private diagnosticsCallbacks;
|
|
143
|
+
constructor(handle: WasmChainClientHandle, client: SmoldotClient);
|
|
144
|
+
/** Get the WASM chain client handle. */
|
|
145
|
+
get chainHandle(): WasmChainClientHandle;
|
|
146
|
+
/**
|
|
147
|
+
* Get the raw para SmoldotChain handle for a chain.
|
|
148
|
+
* Used by StatementStoreDriver to send RPC on the same connection.
|
|
149
|
+
*/
|
|
150
|
+
getParaChain(chainName: string): SmoldotChain | null;
|
|
151
|
+
/** Get the raw relay SmoldotChain handle for a chain. */
|
|
152
|
+
getRelayChain(chainName: string): SmoldotChain | null;
|
|
153
|
+
/**
|
|
154
|
+
* Register a response interceptor for a chain. The interceptor is called
|
|
155
|
+
* with each JSON-RPC response text before it reaches the WASM state machine.
|
|
156
|
+
* Return `true` to consume the message (skip WASM processing), `false` to
|
|
157
|
+
* let it pass through.
|
|
158
|
+
*/
|
|
159
|
+
registerResponseInterceptor(chainName: string, handler: (text: string) => boolean): void;
|
|
160
|
+
/** Unregister a response interceptor. */
|
|
161
|
+
unregisterResponseInterceptor(chainName: string): void;
|
|
162
|
+
registerRelayResponseInterceptor(chainName: string, handler: (text: string) => boolean): void;
|
|
163
|
+
unregisterRelayResponseInterceptor(chainName: string): void;
|
|
164
|
+
/** Connect a smoldot-backed chain. Starts syncing in the background. */
|
|
165
|
+
connect(chainName: SmoldotChainName): Promise<void>;
|
|
166
|
+
/** Disconnect a chain. */
|
|
167
|
+
disconnect(chainName: string): void;
|
|
168
|
+
/** Get current status of a chain. */
|
|
169
|
+
status(chainName: string): ChainStatus;
|
|
170
|
+
/** Get all chain statuses. */
|
|
171
|
+
allStatuses(): ChainStatus[];
|
|
172
|
+
/** Disconnect all chains and terminate the smoldot client. */
|
|
173
|
+
destroy(): Promise<void>;
|
|
174
|
+
/**
|
|
175
|
+
* Persist the current relay/parachain databases for one or all connected chains.
|
|
176
|
+
*
|
|
177
|
+
* This is best-effort only: smoldot persists asynchronously after receiving the
|
|
178
|
+
* JSON-RPC save requests, so callers should treat this as a freshness hint rather
|
|
179
|
+
* than a durability barrier.
|
|
180
|
+
*/
|
|
181
|
+
persistState(chainName?: SmoldotChainName): void;
|
|
182
|
+
/**
|
|
183
|
+
* Wait until the chain has a finalized head, indicating it is query-ready.
|
|
184
|
+
* Resolves when status.finalizedBlock is non-null, or rejects after timeoutMs.
|
|
185
|
+
*/
|
|
186
|
+
waitUntilReady(chainName: SmoldotChainName, options?: ChainReadinessOptions): Promise<void>;
|
|
187
|
+
/**
|
|
188
|
+
* Register a diagnostics callback for a chain's boot process.
|
|
189
|
+
* The callback receives events at each boot stage transition.
|
|
190
|
+
* Pass null to remove an existing callback.
|
|
191
|
+
*/
|
|
192
|
+
setBootDiagnostics(chainName: string, callback: BootDiagnosticsCallback | null): void;
|
|
193
|
+
private runParaResponseLoop;
|
|
194
|
+
private runRelayResponseLoop;
|
|
195
|
+
private runMaintenanceLoop;
|
|
196
|
+
private persistEntryState;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
|
package/dist/chain.js
ADDED
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain client — smoldot light client integration for the browser.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `smoldot` NPM package for the actual light client, with WASM-side
|
|
5
|
+
* state management via `ChainClientHandle` from `host-wasm`.
|
|
6
|
+
*
|
|
7
|
+
* ## Architecture
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* TypeScript (this module) Rust WASM (ChainClientHandle)
|
|
11
|
+
* ───────────────────────── ────────────────────────────
|
|
12
|
+
* SmoldotDriver ChainStateMachine
|
|
13
|
+
* creates smoldot Client processes JSON-RPC responses
|
|
14
|
+
* adds/removes chains tracks chain status
|
|
15
|
+
* drives event loops generates request payloads
|
|
16
|
+
* forwards responses → WASM persists DB to localStorage
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { start as startSmoldot } from "smoldot";
|
|
22
|
+
* import { SmoldotDriver } from "@polkadot-apps/host-sdk";
|
|
23
|
+
*
|
|
24
|
+
* const smoldotClient = startSmoldot();
|
|
25
|
+
* const driver = new SmoldotDriver(chainHandle, smoldotClient);
|
|
26
|
+
*
|
|
27
|
+
* await driver.connect("PaseoAssetHub");
|
|
28
|
+
* console.log(driver.status("PaseoAssetHub")); // { state: "Connecting", ... }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
/** Thrown when waitUntilReady exceeds the timeout. */
|
|
32
|
+
export class ChainReadinessTimeoutError extends Error {
|
|
33
|
+
constructor(chainName, timeoutMs) {
|
|
34
|
+
super(`chain ${chainName} did not become ready within ${timeoutMs}ms`);
|
|
35
|
+
this.name = "ChainReadinessTimeoutError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const BLOCKED_BOOTNODE_HOST_FRAGMENTS = Object.freeze(["radiumblock.com"]);
|
|
39
|
+
/**
|
|
40
|
+
* Drives a smoldot light client in the browser, wired to the WASM state machine.
|
|
41
|
+
*
|
|
42
|
+
* Manages the lifecycle of smoldot chains: adding/removing chains, forwarding
|
|
43
|
+
* responses to WASM for state tracking, and running periodic health checks
|
|
44
|
+
* and database saves.
|
|
45
|
+
*/
|
|
46
|
+
export class SmoldotDriver {
|
|
47
|
+
constructor(handle, client) {
|
|
48
|
+
this.chains = new Map();
|
|
49
|
+
this.responseInterceptors = new Map();
|
|
50
|
+
this.relayResponseInterceptors = new Map();
|
|
51
|
+
this.diagnosticsCallbacks = new Map();
|
|
52
|
+
this.handle = handle;
|
|
53
|
+
this.client = client;
|
|
54
|
+
}
|
|
55
|
+
/** Get the WASM chain client handle. */
|
|
56
|
+
get chainHandle() {
|
|
57
|
+
return this.handle;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the raw para SmoldotChain handle for a chain.
|
|
61
|
+
* Used by StatementStoreDriver to send RPC on the same connection.
|
|
62
|
+
*/
|
|
63
|
+
getParaChain(chainName) {
|
|
64
|
+
return this.chains.get(chainName)?.para ?? null;
|
|
65
|
+
}
|
|
66
|
+
/** Get the raw relay SmoldotChain handle for a chain. */
|
|
67
|
+
getRelayChain(chainName) {
|
|
68
|
+
return this.chains.get(chainName)?.relay ?? null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Register a response interceptor for a chain. The interceptor is called
|
|
72
|
+
* with each JSON-RPC response text before it reaches the WASM state machine.
|
|
73
|
+
* Return `true` to consume the message (skip WASM processing), `false` to
|
|
74
|
+
* let it pass through.
|
|
75
|
+
*/
|
|
76
|
+
registerResponseInterceptor(chainName, handler) {
|
|
77
|
+
if (this.responseInterceptors.has(chainName)) {
|
|
78
|
+
throw new Error(`Response interceptor already registered for ${chainName}. Call unregisterResponseInterceptor first.`);
|
|
79
|
+
}
|
|
80
|
+
this.responseInterceptors.set(chainName, handler);
|
|
81
|
+
}
|
|
82
|
+
/** Unregister a response interceptor. */
|
|
83
|
+
unregisterResponseInterceptor(chainName) {
|
|
84
|
+
this.responseInterceptors.delete(chainName);
|
|
85
|
+
}
|
|
86
|
+
registerRelayResponseInterceptor(chainName, handler) {
|
|
87
|
+
if (this.relayResponseInterceptors.has(chainName)) {
|
|
88
|
+
throw new Error(`Relay response interceptor already registered for ${chainName}. Call unregisterRelayResponseInterceptor first.`);
|
|
89
|
+
}
|
|
90
|
+
this.relayResponseInterceptors.set(chainName, handler);
|
|
91
|
+
}
|
|
92
|
+
unregisterRelayResponseInterceptor(chainName) {
|
|
93
|
+
this.relayResponseInterceptors.delete(chainName);
|
|
94
|
+
}
|
|
95
|
+
/** Connect a smoldot-backed chain. Starts syncing in the background. */
|
|
96
|
+
async connect(chainName) {
|
|
97
|
+
// Disconnect existing connection for this chain.
|
|
98
|
+
this.disconnect(chainName);
|
|
99
|
+
const diagnostics = this.diagnosticsCallbacks.get(chainName);
|
|
100
|
+
const connectStart = Date.now();
|
|
101
|
+
const specs = this.handle.chainSpecs(chainName);
|
|
102
|
+
if (!specs) {
|
|
103
|
+
this.handle.setError(chainName, `no chain specs for ${chainName}`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const [relaySpec, paraSpec] = specs;
|
|
107
|
+
const sanitizedRelaySpec = sanitizeSmoldotChainSpec(relaySpec);
|
|
108
|
+
const sanitizedParaSpec = sanitizeSmoldotChainSpec(paraSpec);
|
|
109
|
+
const relayDb = this.handle.loadRelayDb(chainName);
|
|
110
|
+
const paraDb = this.handle.loadParaDb(chainName);
|
|
111
|
+
try {
|
|
112
|
+
diagnostics?.({ chainName, stage: "connect-start", elapsedMs: Date.now() - connectStart });
|
|
113
|
+
// Add relay chain.
|
|
114
|
+
const relay = await this.client.addChain({
|
|
115
|
+
chainSpec: sanitizedRelaySpec,
|
|
116
|
+
databaseContent: relayDb || undefined,
|
|
117
|
+
});
|
|
118
|
+
diagnostics?.({ chainName, stage: "relay-added", elapsedMs: Date.now() - connectStart });
|
|
119
|
+
// Add parachain with relay as potential relay chain.
|
|
120
|
+
const para = await this.client.addChain({
|
|
121
|
+
chainSpec: sanitizedParaSpec,
|
|
122
|
+
potentialRelayChains: [relay],
|
|
123
|
+
databaseContent: paraDb || undefined,
|
|
124
|
+
});
|
|
125
|
+
diagnostics?.({ chainName, stage: "para-added", elapsedMs: Date.now() - connectStart });
|
|
126
|
+
this.handle.registerChain(chainName);
|
|
127
|
+
const entry = {
|
|
128
|
+
relay,
|
|
129
|
+
para,
|
|
130
|
+
stop: false,
|
|
131
|
+
connectStart,
|
|
132
|
+
sawBestBlock: false,
|
|
133
|
+
sawFinalizedBlock: false,
|
|
134
|
+
};
|
|
135
|
+
this.chains.set(chainName, entry);
|
|
136
|
+
// Subscribe to new heads and finalized heads for readiness tracking.
|
|
137
|
+
para.sendJsonRpc(this.handle.subscribeNewHeadsRequest());
|
|
138
|
+
para.sendJsonRpc(this.handle.subscribeFinalizedHeadsRequest());
|
|
139
|
+
// Start the response processing loops.
|
|
140
|
+
this.runParaResponseLoop(chainName, entry);
|
|
141
|
+
this.runRelayResponseLoop(chainName, entry);
|
|
142
|
+
this.runMaintenanceLoop(chainName, entry);
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
this.handle.setError(chainName, String(err));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/** Disconnect a chain. */
|
|
149
|
+
disconnect(chainName) {
|
|
150
|
+
const entry = this.chains.get(chainName);
|
|
151
|
+
if (entry) {
|
|
152
|
+
entry.stop = true;
|
|
153
|
+
try {
|
|
154
|
+
entry.para.remove();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
/* already removed */
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
entry.relay.remove();
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
/* already removed */
|
|
164
|
+
}
|
|
165
|
+
this.chains.delete(chainName);
|
|
166
|
+
this.diagnosticsCallbacks.delete(chainName);
|
|
167
|
+
this.handle.unregisterChain(chainName);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/** Get current status of a chain. */
|
|
171
|
+
status(chainName) {
|
|
172
|
+
return this.handle.status(chainName);
|
|
173
|
+
}
|
|
174
|
+
/** Get all chain statuses. */
|
|
175
|
+
allStatuses() {
|
|
176
|
+
return this.handle.allStatuses();
|
|
177
|
+
}
|
|
178
|
+
/** Disconnect all chains and terminate the smoldot client. */
|
|
179
|
+
async destroy() {
|
|
180
|
+
for (const name of this.chains.keys()) {
|
|
181
|
+
this.disconnect(name);
|
|
182
|
+
}
|
|
183
|
+
await this.client.terminate();
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Persist the current relay/parachain databases for one or all connected chains.
|
|
187
|
+
*
|
|
188
|
+
* This is best-effort only: smoldot persists asynchronously after receiving the
|
|
189
|
+
* JSON-RPC save requests, so callers should treat this as a freshness hint rather
|
|
190
|
+
* than a durability barrier.
|
|
191
|
+
*/
|
|
192
|
+
persistState(chainName) {
|
|
193
|
+
if (chainName != null) {
|
|
194
|
+
const entry = this.chains.get(chainName);
|
|
195
|
+
if (entry != null) {
|
|
196
|
+
this.persistEntryState(entry);
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
for (const entry of this.chains.values()) {
|
|
201
|
+
this.persistEntryState(entry);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Wait until the chain has a finalized head, indicating it is query-ready.
|
|
206
|
+
* Resolves when status.finalizedBlock is non-null, or rejects after timeoutMs.
|
|
207
|
+
*/
|
|
208
|
+
async waitUntilReady(chainName, options) {
|
|
209
|
+
const timeoutMs = options?.timeoutMs ?? 120000;
|
|
210
|
+
const pollIntervalMs = options?.pollIntervalMs ?? 500;
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
const check = () => {
|
|
213
|
+
const s = this.handle.status(chainName);
|
|
214
|
+
if (s.state === "Error") {
|
|
215
|
+
cleanup();
|
|
216
|
+
reject(new Error(`chain ${chainName} entered error state: ${s.error ?? "unknown"}`));
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (s.finalizedBlock !== null && s.finalizedBlock !== undefined) {
|
|
220
|
+
cleanup();
|
|
221
|
+
resolve();
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (s.state === "Disconnected") {
|
|
225
|
+
cleanup();
|
|
226
|
+
reject(new Error(`chain ${chainName} is disconnected`));
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
const timer = setInterval(check, pollIntervalMs);
|
|
231
|
+
const timeout = setTimeout(() => {
|
|
232
|
+
cleanup();
|
|
233
|
+
reject(new ChainReadinessTimeoutError(chainName, timeoutMs));
|
|
234
|
+
}, timeoutMs);
|
|
235
|
+
const cleanup = () => {
|
|
236
|
+
clearInterval(timer);
|
|
237
|
+
clearTimeout(timeout);
|
|
238
|
+
};
|
|
239
|
+
// Check immediately in case already ready.
|
|
240
|
+
check();
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Register a diagnostics callback for a chain's boot process.
|
|
245
|
+
* The callback receives events at each boot stage transition.
|
|
246
|
+
* Pass null to remove an existing callback.
|
|
247
|
+
*/
|
|
248
|
+
setBootDiagnostics(chainName, callback) {
|
|
249
|
+
if (callback) {
|
|
250
|
+
this.diagnosticsCallbacks.set(chainName, callback);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
this.diagnosticsCallbacks.delete(chainName);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// -- Internal event loops --
|
|
257
|
+
async runParaResponseLoop(chainName, entry) {
|
|
258
|
+
try {
|
|
259
|
+
while (!entry.stop) {
|
|
260
|
+
const text = await entry.para.nextJsonRpcResponse();
|
|
261
|
+
if (entry.stop)
|
|
262
|
+
break;
|
|
263
|
+
// Let interceptors handle the response first.
|
|
264
|
+
const interceptor = this.responseInterceptors.get(chainName);
|
|
265
|
+
if (interceptor) {
|
|
266
|
+
try {
|
|
267
|
+
if (interceptor(text))
|
|
268
|
+
continue; // consumed
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
/* interceptor error — fall through to WASM */
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
this.handle.processResponse(chainName, text);
|
|
275
|
+
// Emit diagnostics for first-best-block and first-finalized-block transitions.
|
|
276
|
+
// Skip the WASM status() call once both flags are set to avoid per-response overhead.
|
|
277
|
+
if (!entry.sawBestBlock || !entry.sawFinalizedBlock) {
|
|
278
|
+
const diag = this.diagnosticsCallbacks.get(chainName);
|
|
279
|
+
if (diag) {
|
|
280
|
+
const s = this.handle.status(chainName);
|
|
281
|
+
if (!entry.sawBestBlock && s.bestBlock > 0) {
|
|
282
|
+
entry.sawBestBlock = true;
|
|
283
|
+
diag({
|
|
284
|
+
chainName,
|
|
285
|
+
stage: "first-best-block",
|
|
286
|
+
elapsedMs: Date.now() - entry.connectStart,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
if (!entry.sawFinalizedBlock &&
|
|
290
|
+
s.finalizedBlock !== null &&
|
|
291
|
+
s.finalizedBlock !== undefined) {
|
|
292
|
+
entry.sawFinalizedBlock = true;
|
|
293
|
+
this.persistEntryState(entry);
|
|
294
|
+
diag({
|
|
295
|
+
chainName,
|
|
296
|
+
stage: "first-finalized-block",
|
|
297
|
+
elapsedMs: Date.now() - entry.connectStart,
|
|
298
|
+
});
|
|
299
|
+
diag({ chainName, stage: "ready", elapsedMs: Date.now() - entry.connectStart });
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
if (!entry.stop) {
|
|
307
|
+
this.handle.setError(chainName, `para response loop: ${err}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
async runRelayResponseLoop(chainName, entry) {
|
|
312
|
+
try {
|
|
313
|
+
while (!entry.stop) {
|
|
314
|
+
const text = await entry.relay.nextJsonRpcResponse();
|
|
315
|
+
if (entry.stop)
|
|
316
|
+
break;
|
|
317
|
+
const interceptor = this.relayResponseInterceptors.get(chainName);
|
|
318
|
+
if (interceptor) {
|
|
319
|
+
try {
|
|
320
|
+
if (interceptor(text))
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
/* interceptor error — fall through to WASM */
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
this.handle.processRelayResponse(chainName, text);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (err) {
|
|
331
|
+
// Relay response errors are non-fatal (only DB saves).
|
|
332
|
+
if (!entry.stop) {
|
|
333
|
+
console.warn(`[chain] relay response error for ${chainName}:`, err);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
runMaintenanceLoop(chainName, entry) {
|
|
338
|
+
let lastHealthCheck = Date.now();
|
|
339
|
+
let lastParaDbSave = Date.now();
|
|
340
|
+
let lastRelayDbSave = Date.now() - 30000; // Offset from para save.
|
|
341
|
+
const tick = () => {
|
|
342
|
+
if (entry.stop)
|
|
343
|
+
return;
|
|
344
|
+
const now = Date.now();
|
|
345
|
+
// Health check every 2s.
|
|
346
|
+
if (now - lastHealthCheck > 2000) {
|
|
347
|
+
lastHealthCheck = now;
|
|
348
|
+
try {
|
|
349
|
+
entry.para.sendJsonRpc(this.handle.healthCheckRequest(chainName));
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
/* chain removed */
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// Parachain DB save every 60s.
|
|
356
|
+
if (now - lastParaDbSave > 60000) {
|
|
357
|
+
lastParaDbSave = now;
|
|
358
|
+
try {
|
|
359
|
+
entry.para.sendJsonRpc(this.handle.paraDbSaveRequest());
|
|
360
|
+
}
|
|
361
|
+
catch {
|
|
362
|
+
/* chain removed */
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
// Relay DB save every 60s (offset 30s from para).
|
|
366
|
+
if (now - lastRelayDbSave > 60000) {
|
|
367
|
+
lastRelayDbSave = now;
|
|
368
|
+
try {
|
|
369
|
+
entry.relay.sendJsonRpc(this.handle.relayDbSaveRequest());
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
/* chain removed */
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
setTimeout(tick, 2000);
|
|
376
|
+
};
|
|
377
|
+
setTimeout(tick, 2000);
|
|
378
|
+
}
|
|
379
|
+
persistEntryState(entry) {
|
|
380
|
+
try {
|
|
381
|
+
entry.para.sendJsonRpc(this.handle.paraDbSaveRequest());
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
/* chain removed */
|
|
385
|
+
}
|
|
386
|
+
try {
|
|
387
|
+
entry.relay.sendJsonRpc(this.handle.relayDbSaveRequest());
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
/* chain removed */
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
function sanitizeSmoldotChainSpec(chainSpec) {
|
|
395
|
+
const parsed = safeParseJson(chainSpec);
|
|
396
|
+
if (!isJsonRecord(parsed)) {
|
|
397
|
+
return chainSpec;
|
|
398
|
+
}
|
|
399
|
+
const bootNodes = parsed.bootNodes;
|
|
400
|
+
if (!Array.isArray(bootNodes) || bootNodes.length === 0) {
|
|
401
|
+
return chainSpec;
|
|
402
|
+
}
|
|
403
|
+
const filteredBootNodes = bootNodes.filter((bootNode) => typeof bootNode === "string" &&
|
|
404
|
+
!BLOCKED_BOOTNODE_HOST_FRAGMENTS.some((fragment) => bootNode.includes(fragment)));
|
|
405
|
+
if (filteredBootNodes.length === bootNodes.length) {
|
|
406
|
+
return chainSpec;
|
|
407
|
+
}
|
|
408
|
+
return JSON.stringify({
|
|
409
|
+
...parsed,
|
|
410
|
+
bootNodes: filteredBootNodes,
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
function safeParseJson(text) {
|
|
414
|
+
try {
|
|
415
|
+
return JSON.parse(text);
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
function isJsonRecord(value) {
|
|
422
|
+
return typeof value === "object" && value !== null;
|
|
423
|
+
}
|
|
424
|
+
//# sourceMappingURL=chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical JavaScript error codes for the product-facing host bridge.
|
|
3
|
+
*
|
|
4
|
+
* Public callers should prefer matching on `error.code` when present and
|
|
5
|
+
* continue treating `error.message` as the backward-compatible fallback.
|
|
6
|
+
*/
|
|
7
|
+
import type { BridgeErrorCode } from "./bridge/contract.js";
|
|
8
|
+
export type HostErrorCode = BridgeErrorCode;
|
|
9
|
+
export declare class HostError extends Error {
|
|
10
|
+
readonly code: HostErrorCode;
|
|
11
|
+
constructor(code: HostErrorCode, message: string);
|
|
12
|
+
}
|
|
13
|
+
export declare function isHostError(error: unknown): error is HostError;
|
|
14
|
+
export declare function bridgeDestroyedError(): HostError;
|
|
15
|
+
export declare function rateLimitError(operation: string, maxCalls: number, windowMs: number): HostError;
|
|
16
|
+
export declare function unsupportedCapabilityError(capability: string): HostError;
|
|
17
|
+
export declare function hostRuntimeUnavailableError(subject: string): HostError;
|
|
18
|
+
export declare function binaryBridgeUnavailableError(): HostError;
|
|
19
|
+
export declare function invalidArgumentError(message: string): HostError;
|
|
20
|
+
export declare function timeoutError(message: string): HostError;
|
|
21
|
+
export declare function hostRejectedError(message: string): HostError;
|
|
22
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC;AAE5C,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;gBAEjB,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAKjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED,wBAAgB,oBAAoB,IAAI,SAAS,CAEhD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,CAK/F;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAExE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAKtE;AAED,wBAAgB,4BAA4B,IAAI,SAAS,CAKxD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE/D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE5D"}
|