@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,169 @@
|
|
|
1
|
+
import { binaryBridgeUnavailableError, hostRejectedError, invalidArgumentError, timeoutError, } from "../errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Navigate the host to a `dot://` URL via the SCALE binary bridge.
|
|
4
|
+
*
|
|
5
|
+
* This uses `window.__HOST_API_PORT__` directly — the same binary bridge that
|
|
6
|
+
* the host-api WASM module uses — with a minimal SCALE encoder for the
|
|
7
|
+
* NavigateTo request (tag 6, per `host-api/src/protocol.rs`).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { navigateTo } from "@polkadot-apps/product-sdk";
|
|
12
|
+
*
|
|
13
|
+
* await navigateTo("dot://settings");
|
|
14
|
+
* await navigateTo("dot://chat.dot/room/general");
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
/** Timeout for host response before cleaning up the listener (ms). */
|
|
18
|
+
const NAVIGATE_TIMEOUT_MS = 10000;
|
|
19
|
+
/** Tag constants from host-api/src/protocol.rs lines 25-26. */
|
|
20
|
+
const TAG_NAVIGATE_TO_REQ = 6;
|
|
21
|
+
const TAG_NAVIGATE_TO_RESP = 7;
|
|
22
|
+
/** Wrapping request ID counter. Stays within safe compact encoding range. */
|
|
23
|
+
let nextRequestId = 1;
|
|
24
|
+
const MAX_REQUEST_ID = 2 ** 30;
|
|
25
|
+
// ── SCALE compact codec ───────────────────────────────────────────────
|
|
26
|
+
// Mirrors host-api/src/codec.rs encode_compact_u32 / decode_compact_u32.
|
|
27
|
+
/** @internal Decode a SCALE compact integer, returning value and bytes consumed. */
|
|
28
|
+
export function decodeCompact(bytes, offset) {
|
|
29
|
+
if (offset >= bytes.length) {
|
|
30
|
+
throw new RangeError("decodeCompact: unexpected end of input");
|
|
31
|
+
}
|
|
32
|
+
const first = bytes[offset];
|
|
33
|
+
const mode = first & 0x03;
|
|
34
|
+
if (mode === 0) {
|
|
35
|
+
return { value: first >>> 2, bytesRead: 1 };
|
|
36
|
+
}
|
|
37
|
+
else if (mode === 1) {
|
|
38
|
+
if (offset + 1 >= bytes.length) {
|
|
39
|
+
throw new RangeError("decodeCompact: unexpected end of input (mode 1)");
|
|
40
|
+
}
|
|
41
|
+
const value = (((bytes[offset + 1] << 8) | first) >>> 2) & 0x3fff;
|
|
42
|
+
return { value, bytesRead: 2 };
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (offset + 3 >= bytes.length) {
|
|
46
|
+
throw new RangeError("decodeCompact: unexpected end of input (mode 2)");
|
|
47
|
+
}
|
|
48
|
+
const v32 = ((bytes[offset + 3] << 24) | (bytes[offset + 2] << 16) | (bytes[offset + 1] << 8) | first) >>>
|
|
49
|
+
0;
|
|
50
|
+
const value = v32 >>> 2;
|
|
51
|
+
return { value, bytesRead: 4 };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** @internal Encode a u32 in SCALE compact form. */
|
|
55
|
+
export function encodeCompact(value) {
|
|
56
|
+
if (!Number.isInteger(value) || value < 0) {
|
|
57
|
+
throw new RangeError(`encodeCompact: invalid value ${value}`);
|
|
58
|
+
}
|
|
59
|
+
if (value < 64) {
|
|
60
|
+
return new Uint8Array([value << 2]);
|
|
61
|
+
}
|
|
62
|
+
else if (value < 16384) {
|
|
63
|
+
const v = (value << 2) | 1;
|
|
64
|
+
return new Uint8Array([v & 0xff, (v >> 8) & 0xff]);
|
|
65
|
+
}
|
|
66
|
+
else if (value < 0x40000000) {
|
|
67
|
+
const v = (value << 2) | 2;
|
|
68
|
+
return new Uint8Array([v & 0xff, (v >> 8) & 0xff, (v >> 16) & 0xff, (v >> 24) & 0xff]);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
throw new RangeError(`encodeCompact: value ${value} exceeds 30-bit compact range`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** @internal Encode a SCALE string (compact length + UTF-8 bytes). */
|
|
75
|
+
export function encodeString(s) {
|
|
76
|
+
const utf8 = new TextEncoder().encode(s);
|
|
77
|
+
const len = encodeCompact(utf8.length);
|
|
78
|
+
const out = new Uint8Array(len.length + utf8.length);
|
|
79
|
+
out.set(len);
|
|
80
|
+
out.set(utf8, len.length);
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
// ── navigateTo ────────────────────────────────────────────────────────
|
|
84
|
+
/**
|
|
85
|
+
* Navigate the host to a URL.
|
|
86
|
+
*
|
|
87
|
+
* Resolves when the host acknowledges the navigation. Rejects if the port is
|
|
88
|
+
* unavailable, the host returns an error, or the request times out.
|
|
89
|
+
*/
|
|
90
|
+
export function navigateTo(url) {
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
if (!url) {
|
|
93
|
+
reject(invalidArgumentError("navigateTo: url must not be empty"));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const port = window.__HOST_API_PORT__;
|
|
97
|
+
if (!port) {
|
|
98
|
+
reject(binaryBridgeUnavailableError());
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Wrapping request ID.
|
|
102
|
+
if (nextRequestId >= MAX_REQUEST_ID)
|
|
103
|
+
nextRequestId = 1;
|
|
104
|
+
const requestId = `nav-${nextRequestId++}`;
|
|
105
|
+
const reqIdBytes = encodeString(requestId);
|
|
106
|
+
const urlBytes = encodeString(url);
|
|
107
|
+
// Wire format: [requestId: SCALE String][tag: u8 = 6][version: u8 = 0][url: SCALE String]
|
|
108
|
+
const msg = new Uint8Array(reqIdBytes.length + 1 + 1 + urlBytes.length);
|
|
109
|
+
let offset = 0;
|
|
110
|
+
msg.set(reqIdBytes, offset);
|
|
111
|
+
offset += reqIdBytes.length;
|
|
112
|
+
msg[offset++] = TAG_NAVIGATE_TO_REQ;
|
|
113
|
+
msg[offset++] = 0; // version tag
|
|
114
|
+
msg.set(urlBytes, offset);
|
|
115
|
+
function cleanup() {
|
|
116
|
+
port.removeEventListener("message", handler);
|
|
117
|
+
clearTimeout(timer);
|
|
118
|
+
}
|
|
119
|
+
const timer = setTimeout(() => {
|
|
120
|
+
cleanup();
|
|
121
|
+
reject(timeoutError("navigateTo timed out"));
|
|
122
|
+
}, NAVIGATE_TIMEOUT_MS);
|
|
123
|
+
const handler = (event) => {
|
|
124
|
+
const data = event.data;
|
|
125
|
+
if (!(data instanceof ArrayBuffer))
|
|
126
|
+
return;
|
|
127
|
+
const bytes = new Uint8Array(data);
|
|
128
|
+
// Decode response requestId to match.
|
|
129
|
+
let pos = 0;
|
|
130
|
+
try {
|
|
131
|
+
const { value: respIdLen, bytesRead } = decodeCompact(bytes, pos);
|
|
132
|
+
pos += bytesRead;
|
|
133
|
+
if (pos + respIdLen > bytes.length)
|
|
134
|
+
return;
|
|
135
|
+
const respId = new TextDecoder().decode(bytes.slice(pos, pos + respIdLen));
|
|
136
|
+
pos += respIdLen;
|
|
137
|
+
if (respId !== requestId)
|
|
138
|
+
return;
|
|
139
|
+
if (pos >= bytes.length)
|
|
140
|
+
return;
|
|
141
|
+
const tag = bytes[pos++];
|
|
142
|
+
if (tag !== TAG_NAVIGATE_TO_RESP)
|
|
143
|
+
return;
|
|
144
|
+
// Need version byte + result byte.
|
|
145
|
+
if (pos + 2 > bytes.length) {
|
|
146
|
+
cleanup();
|
|
147
|
+
reject(hostRejectedError("navigateTo: truncated response"));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
pos++; // version byte
|
|
151
|
+
const result = bytes[pos];
|
|
152
|
+
cleanup();
|
|
153
|
+
if (result === 0) {
|
|
154
|
+
resolve();
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
reject(hostRejectedError("navigateTo rejected by host"));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Decode error on a non-matching message — skip it.
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
port.start();
|
|
165
|
+
port.addEventListener("message", handler);
|
|
166
|
+
port.postMessage(msg.buffer);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=navigate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigate.js","sourceRoot":"","sources":["../../src/guest/navigate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed wrapper for host statement push events.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { statements } from "@polkadot-apps/product-sdk";
|
|
7
|
+
*
|
|
8
|
+
* const unsub = statements.onStatement((payload) => {
|
|
9
|
+
* console.log("New statement:", payload);
|
|
10
|
+
* });
|
|
11
|
+
* // later: unsub();
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
import type { HostEventMap } from "./types.js";
|
|
15
|
+
type Unsub = () => void;
|
|
16
|
+
export declare function onStatement(cb: (payload: HostEventMap["statement"]) => void): Unsub;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=statements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statements.d.ts","sourceRoot":"","sources":["../../src/guest/statements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AAU3D,KAAK,KAAK,GAAG,MAAM,IAAI,CAAC;AAExB,wBAAgB,WAAW,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,GAAG,KAAK,CAInF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed wrapper for host statement push events.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { statements } from "@polkadot-apps/product-sdk";
|
|
7
|
+
*
|
|
8
|
+
* const unsub = statements.onStatement((payload) => {
|
|
9
|
+
* console.log("New statement:", payload);
|
|
10
|
+
* });
|
|
11
|
+
* // later: unsub();
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
import { hostRuntimeUnavailableError } from "../errors.js";
|
|
15
|
+
function getHost() {
|
|
16
|
+
if (!window.host) {
|
|
17
|
+
throw hostRuntimeUnavailableError("Host runtime");
|
|
18
|
+
}
|
|
19
|
+
return window.host;
|
|
20
|
+
}
|
|
21
|
+
export function onStatement(cb) {
|
|
22
|
+
const host = getHost();
|
|
23
|
+
host.on("statement", cb);
|
|
24
|
+
return () => host.off("statement", cb);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=statements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statements.js","sourceRoot":"","sources":["../../src/guest/statements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,SAAS,OAAO;IACd,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,2BAA2B,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAID,MAAM,UAAU,WAAW,CAAC,EAAgD;IAC1E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guest-side telemetry — runs inside sandboxed product iframes.
|
|
3
|
+
*
|
|
4
|
+
* Reads `window.__HOST_TRACE_CONTEXT__` (injected by the host at mount time)
|
|
5
|
+
* and posts Segment-shaped analytics events + performance timing events back
|
|
6
|
+
* to the host via postMessage. The host's analytics router then forwards
|
|
7
|
+
* events to per-product backend adapters.
|
|
8
|
+
*
|
|
9
|
+
* When `sampled` is false (or no trace context is present), all calls are
|
|
10
|
+
* no-ops — zero overhead for unsampled sessions.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { track, identify, recordSpan } from "@polkadot-apps/product-sdk/guest/telemetry";
|
|
15
|
+
*
|
|
16
|
+
* identify("5F3sa2TJ...");
|
|
17
|
+
* track("tx_submitted", { chain: "polkadot", amount: 10 });
|
|
18
|
+
*
|
|
19
|
+
* const start = performance.now();
|
|
20
|
+
* await doExpensiveWork();
|
|
21
|
+
* recordSpan("expensive_work", start, performance.now() - start);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
/** Shape of window.__HOST_TRACE_CONTEXT__ injected by the host. */
|
|
25
|
+
interface HostTraceContext {
|
|
26
|
+
readonly traceId: string;
|
|
27
|
+
readonly parentSpanId: string;
|
|
28
|
+
readonly sampled: boolean;
|
|
29
|
+
readonly productId?: string;
|
|
30
|
+
}
|
|
31
|
+
declare global {
|
|
32
|
+
interface Window {
|
|
33
|
+
__HOST_TRACE_CONTEXT__?: HostTraceContext;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Record a user action (Segment `track` call).
|
|
38
|
+
*
|
|
39
|
+
* No-op when the session is not sampled.
|
|
40
|
+
*
|
|
41
|
+
* @param event - Action name (e.g. "wallet_connected", "tx_submitted").
|
|
42
|
+
* @param properties - Arbitrary properties describing the action.
|
|
43
|
+
*/
|
|
44
|
+
export declare function track(event: string, properties?: Record<string, unknown>): void;
|
|
45
|
+
/**
|
|
46
|
+
* Associate a user identity (Segment `identify` call).
|
|
47
|
+
*
|
|
48
|
+
* Products should only pass the user's public wallet address or an
|
|
49
|
+
* anonymous ID — never PII like email or real name.
|
|
50
|
+
*
|
|
51
|
+
* No-op when the session is not sampled.
|
|
52
|
+
*
|
|
53
|
+
* @param userId - User identifier (wallet address or anonymous ID).
|
|
54
|
+
* @param traits - Traits describing the user.
|
|
55
|
+
*/
|
|
56
|
+
export declare function identify(userId: string, traits?: Record<string, unknown>): void;
|
|
57
|
+
/**
|
|
58
|
+
* Record a page/screen view (Segment `page` call).
|
|
59
|
+
*
|
|
60
|
+
* No-op when the session is not sampled.
|
|
61
|
+
*
|
|
62
|
+
* @param name - Page or screen name.
|
|
63
|
+
* @param properties - Additional page properties.
|
|
64
|
+
*/
|
|
65
|
+
export declare function page(name: string, properties?: Record<string, unknown>): void;
|
|
66
|
+
/**
|
|
67
|
+
* Record a performance timing span (bridges to the host's OTel trace tree).
|
|
68
|
+
*
|
|
69
|
+
* Use this to wrap expensive operations so they appear in the host's
|
|
70
|
+
* distributed traces alongside Rust-side spans.
|
|
71
|
+
*
|
|
72
|
+
* No-op when the session is not sampled.
|
|
73
|
+
*
|
|
74
|
+
* @param name - Span name (e.g. "product.rpc_call", "product.render").
|
|
75
|
+
* @param startMs - Start time from `performance.now()`.
|
|
76
|
+
* @param durationMs - Duration in milliseconds.
|
|
77
|
+
* @param attributes - Key-value attributes for the span.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```ts
|
|
81
|
+
* const t0 = performance.now();
|
|
82
|
+
* const result = await api.query();
|
|
83
|
+
* recordSpan("api_query", t0, performance.now() - t0, { endpoint: "/balance" });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function recordSpan(name: string, startMs: number, durationMs: number, attributes?: Record<string, string | number | boolean>): void;
|
|
87
|
+
export {};
|
|
88
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/guest/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,mEAAmE;AACnE,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,sBAAsB,CAAC,EAAE,gBAAgB,CAAC;KAC3C;CACF;AA0ED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU/E;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU7E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,IAAI,CAeN"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guest-side telemetry — runs inside sandboxed product iframes.
|
|
3
|
+
*
|
|
4
|
+
* Reads `window.__HOST_TRACE_CONTEXT__` (injected by the host at mount time)
|
|
5
|
+
* and posts Segment-shaped analytics events + performance timing events back
|
|
6
|
+
* to the host via postMessage. The host's analytics router then forwards
|
|
7
|
+
* events to per-product backend adapters.
|
|
8
|
+
*
|
|
9
|
+
* When `sampled` is false (or no trace context is present), all calls are
|
|
10
|
+
* no-ops — zero overhead for unsampled sessions.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { track, identify, recordSpan } from "@polkadot-apps/product-sdk/guest/telemetry";
|
|
15
|
+
*
|
|
16
|
+
* identify("5F3sa2TJ...");
|
|
17
|
+
* track("tx_submitted", { chain: "polkadot", amount: 10 });
|
|
18
|
+
*
|
|
19
|
+
* const start = performance.now();
|
|
20
|
+
* await doExpensiveWork();
|
|
21
|
+
* recordSpan("expensive_work", start, performance.now() - start);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
function getTraceContext() {
|
|
25
|
+
try {
|
|
26
|
+
const ctx = window.__HOST_TRACE_CONTEXT__;
|
|
27
|
+
if (ctx &&
|
|
28
|
+
typeof ctx.traceId === "string" &&
|
|
29
|
+
typeof ctx.parentSpanId === "string" &&
|
|
30
|
+
typeof ctx.sampled === "boolean") {
|
|
31
|
+
return ctx;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// window may not be available (SSR/test).
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function isSampled() {
|
|
40
|
+
return getTraceContext()?.sampled === true;
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Span ID generation
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/** Generate a random 16-char hex span ID. */
|
|
46
|
+
function randomSpanId() {
|
|
47
|
+
const bytes = new Uint8Array(8);
|
|
48
|
+
crypto.getRandomValues(bytes);
|
|
49
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// postMessage sender
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
function postAnalytics(event) {
|
|
55
|
+
try {
|
|
56
|
+
parent.postMessage({ type: "host-analytics", event }, "*");
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Silently swallow — postMessage may fail if parent is gone.
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function makeContext() {
|
|
63
|
+
const ctx = getTraceContext();
|
|
64
|
+
const base = {
|
|
65
|
+
app: { productId: getProductId() },
|
|
66
|
+
};
|
|
67
|
+
if (ctx) {
|
|
68
|
+
base["trace"] = { traceId: ctx.traceId, spanId: ctx.parentSpanId };
|
|
69
|
+
}
|
|
70
|
+
return base;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Best-effort product ID extraction.
|
|
74
|
+
* Reads from the host-injected trace context first; falls back to
|
|
75
|
+
* document.title, then "unknown".
|
|
76
|
+
*/
|
|
77
|
+
function getProductId() {
|
|
78
|
+
try {
|
|
79
|
+
return getTraceContext()?.productId || document.title || "unknown";
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return "unknown";
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Public API (Segment-shaped)
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
/**
|
|
89
|
+
* Record a user action (Segment `track` call).
|
|
90
|
+
*
|
|
91
|
+
* No-op when the session is not sampled.
|
|
92
|
+
*
|
|
93
|
+
* @param event - Action name (e.g. "wallet_connected", "tx_submitted").
|
|
94
|
+
* @param properties - Arbitrary properties describing the action.
|
|
95
|
+
*/
|
|
96
|
+
export function track(event, properties) {
|
|
97
|
+
if (!isSampled())
|
|
98
|
+
return;
|
|
99
|
+
postAnalytics({
|
|
100
|
+
type: "track",
|
|
101
|
+
event,
|
|
102
|
+
properties,
|
|
103
|
+
timestamp: new Date().toISOString(),
|
|
104
|
+
context: makeContext(),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Associate a user identity (Segment `identify` call).
|
|
109
|
+
*
|
|
110
|
+
* Products should only pass the user's public wallet address or an
|
|
111
|
+
* anonymous ID — never PII like email or real name.
|
|
112
|
+
*
|
|
113
|
+
* No-op when the session is not sampled.
|
|
114
|
+
*
|
|
115
|
+
* @param userId - User identifier (wallet address or anonymous ID).
|
|
116
|
+
* @param traits - Traits describing the user.
|
|
117
|
+
*/
|
|
118
|
+
export function identify(userId, traits) {
|
|
119
|
+
if (!isSampled())
|
|
120
|
+
return;
|
|
121
|
+
postAnalytics({
|
|
122
|
+
type: "identify",
|
|
123
|
+
userId,
|
|
124
|
+
traits,
|
|
125
|
+
timestamp: new Date().toISOString(),
|
|
126
|
+
context: makeContext(),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Record a page/screen view (Segment `page` call).
|
|
131
|
+
*
|
|
132
|
+
* No-op when the session is not sampled.
|
|
133
|
+
*
|
|
134
|
+
* @param name - Page or screen name.
|
|
135
|
+
* @param properties - Additional page properties.
|
|
136
|
+
*/
|
|
137
|
+
export function page(name, properties) {
|
|
138
|
+
if (!isSampled())
|
|
139
|
+
return;
|
|
140
|
+
postAnalytics({
|
|
141
|
+
type: "page",
|
|
142
|
+
name,
|
|
143
|
+
properties,
|
|
144
|
+
timestamp: new Date().toISOString(),
|
|
145
|
+
context: makeContext(),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Record a performance timing span (bridges to the host's OTel trace tree).
|
|
150
|
+
*
|
|
151
|
+
* Use this to wrap expensive operations so they appear in the host's
|
|
152
|
+
* distributed traces alongside Rust-side spans.
|
|
153
|
+
*
|
|
154
|
+
* No-op when the session is not sampled.
|
|
155
|
+
*
|
|
156
|
+
* @param name - Span name (e.g. "product.rpc_call", "product.render").
|
|
157
|
+
* @param startMs - Start time from `performance.now()`.
|
|
158
|
+
* @param durationMs - Duration in milliseconds.
|
|
159
|
+
* @param attributes - Key-value attributes for the span.
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```ts
|
|
163
|
+
* const t0 = performance.now();
|
|
164
|
+
* const result = await api.query();
|
|
165
|
+
* recordSpan("api_query", t0, performance.now() - t0, { endpoint: "/balance" });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export function recordSpan(name, startMs, durationMs, attributes) {
|
|
169
|
+
if (!isSampled())
|
|
170
|
+
return;
|
|
171
|
+
const ctx = getTraceContext();
|
|
172
|
+
postAnalytics({
|
|
173
|
+
type: "timing",
|
|
174
|
+
name,
|
|
175
|
+
startMs,
|
|
176
|
+
durationMs,
|
|
177
|
+
spanId: randomSpanId(),
|
|
178
|
+
parentSpanId: ctx?.parentSpanId ?? "0000000000000000",
|
|
179
|
+
attributes,
|
|
180
|
+
timestamp: new Date().toISOString(),
|
|
181
|
+
context: makeContext(),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/guest/telemetry.ts"],"names":[],"mappings":"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"}
|