@geeqdev/geeq-sdk 0.1.0 → 0.2.0
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/.idea/geeq_sdk.iml +12 -0
- package/.idea/modules.xml +8 -0
- package/.idea/vcs.xml +6 -0
- package/.nvmrc +1 -0
- package/CONTRIBUTING.md +20 -0
- package/dist/src/address/record-type.d.ts +10 -0
- package/dist/src/address/record-type.js +59 -0
- package/dist/src/address/record-type.js.map +1 -0
- package/dist/src/address/wallet-address.d.ts +34 -0
- package/dist/src/address/wallet-address.js +90 -0
- package/dist/src/address/wallet-address.js.map +1 -0
- package/dist/src/amount.d.ts +43 -0
- package/dist/src/amount.js +105 -0
- package/dist/src/amount.js.map +1 -0
- package/dist/src/assert.d.ts +12 -0
- package/dist/src/assert.js +24 -0
- package/dist/src/assert.js.map +1 -0
- package/dist/src/capnp/adminNetTx.capnp.d.ts +75 -0
- package/dist/src/capnp/adminNetTx.capnp.js +66 -0
- package/dist/src/capnp/adminNetTx.capnp.js.map +1 -0
- package/dist/src/capnp/appLayBlock.capnp.d.ts +26 -0
- package/dist/src/capnp/appLayBlock.capnp.js +24 -0
- package/dist/src/capnp/appLayBlock.capnp.js.map +1 -0
- package/dist/src/capnp/appLayLedger.capnp.d.ts +34 -0
- package/dist/src/capnp/appLayLedger.capnp.js +32 -0
- package/dist/src/capnp/appLayLedger.capnp.js.map +1 -0
- package/dist/src/capnp/appLayRec.capnp.d.ts +129 -0
- package/dist/src/capnp/appLayRec.capnp.js +156 -0
- package/dist/src/capnp/appLayRec.capnp.js.map +1 -0
- package/dist/src/capnp/chainStateView.capnp.d.ts +50 -0
- package/dist/src/capnp/chainStateView.capnp.js +48 -0
- package/dist/src/capnp/chainStateView.capnp.js.map +1 -0
- package/dist/src/capnp/coinAcctRec.capnp.d.ts +178 -0
- package/dist/src/capnp/coinAcctRec.capnp.js +189 -0
- package/dist/src/capnp/coinAcctRec.capnp.js.map +1 -0
- package/dist/src/capnp/genesisBlock.capnp.d.ts +61 -0
- package/dist/src/capnp/genesisBlock.capnp.js +55 -0
- package/dist/src/capnp/genesisBlock.capnp.js.map +1 -0
- package/dist/src/capnp/hubContentStmt.capnp.d.ts +63 -0
- package/dist/src/capnp/hubContentStmt.capnp.js +57 -0
- package/dist/src/capnp/hubContentStmt.capnp.js.map +1 -0
- package/dist/src/capnp/misc.capnp.d.ts +20 -0
- package/dist/src/capnp/misc.capnp.js +18 -0
- package/dist/src/capnp/misc.capnp.js.map +1 -0
- package/dist/src/capnp/netActorRec.capnp.d.ts +65 -0
- package/dist/src/capnp/netActorRec.capnp.js +65 -0
- package/dist/src/capnp/netActorRec.capnp.js.map +1 -0
- package/dist/src/capnp/nodeContentStmt.capnp.d.ts +67 -0
- package/dist/src/capnp/nodeContentStmt.capnp.js +61 -0
- package/dist/src/capnp/nodeContentStmt.capnp.js.map +1 -0
- package/dist/src/capnp/nodePayloadList.capnp.d.ts +28 -0
- package/dist/src/capnp/nodePayloadList.capnp.js +26 -0
- package/dist/src/capnp/nodePayloadList.capnp.js.map +1 -0
- package/dist/src/capnp/nodeTxList.capnp.d.ts +36 -0
- package/dist/src/capnp/nodeTxList.capnp.js +34 -0
- package/dist/src/capnp/nodeTxList.capnp.js.map +1 -0
- package/dist/src/capnp/paramAcctRec.capnp.d.ts +338 -0
- package/dist/src/capnp/paramAcctRec.capnp.js +669 -0
- package/dist/src/capnp/paramAcctRec.capnp.js.map +1 -0
- package/dist/src/capnp/payload.capnp.d.ts +237 -0
- package/dist/src/capnp/payload.capnp.js +260 -0
- package/dist/src/capnp/payload.capnp.js.map +1 -0
- package/dist/src/capnp/proxyAcctRec.capnp.d.ts +223 -0
- package/dist/src/capnp/proxyAcctRec.capnp.js +255 -0
- package/dist/src/capnp/proxyAcctRec.capnp.js.map +1 -0
- package/dist/src/capnp/relayContentStmt.capnp.d.ts +82 -0
- package/dist/src/capnp/relayContentStmt.capnp.js +85 -0
- package/dist/src/capnp/relayContentStmt.capnp.js.map +1 -0
- package/dist/src/capnp/sysAcctRec.capnp.d.ts +48 -0
- package/dist/src/capnp/sysAcctRec.capnp.js +46 -0
- package/dist/src/capnp/sysAcctRec.capnp.js.map +1 -0
- package/dist/src/capnp/userAppTx.capnp.d.ts +230 -0
- package/dist/src/capnp/userAppTx.capnp.js +270 -0
- package/dist/src/capnp/userAppTx.capnp.js.map +1 -0
- package/dist/src/capnp/userValTx.capnp.d.ts +1575 -0
- package/dist/src/capnp/userValTx.capnp.js +2004 -0
- package/dist/src/capnp/userValTx.capnp.js.map +1 -0
- package/dist/src/capnp/valLayBlock.capnp.d.ts +88 -0
- package/dist/src/capnp/valLayBlock.capnp.js +86 -0
- package/dist/src/capnp/valLayBlock.capnp.js.map +1 -0
- package/dist/src/capnp/valLayLedger.capnp.d.ts +85 -0
- package/dist/src/capnp/valLayLedger.capnp.js +75 -0
- package/dist/src/capnp/valLayLedger.capnp.js.map +1 -0
- package/dist/src/chain/geeq-chain.d.ts +474 -0
- package/dist/src/chain/geeq-chain.js +721 -0
- package/dist/src/chain/geeq-chain.js.map +1 -0
- package/dist/src/chain/geeq-node.d.ts +57 -0
- package/dist/src/chain/geeq-node.js +62 -0
- package/dist/src/chain/geeq-node.js.map +1 -0
- package/dist/src/chain/nonce-guard.d.ts +42 -0
- package/dist/src/chain/nonce-guard.js +68 -0
- package/dist/src/chain/nonce-guard.js.map +1 -0
- package/dist/src/chain/select.d.ts +40 -0
- package/dist/src/chain/select.js +114 -0
- package/dist/src/chain/select.js.map +1 -0
- package/dist/src/crypto/account-id.d.ts +35 -0
- package/dist/src/crypto/account-id.js +58 -0
- package/dist/src/crypto/account-id.js.map +1 -0
- package/dist/src/crypto/keypair.d.ts +24 -0
- package/dist/src/crypto/keypair.js +158 -0
- package/dist/src/crypto/keypair.js.map +1 -0
- package/dist/src/crypto/mnemonic.d.ts +34 -0
- package/dist/src/crypto/mnemonic.js +57 -0
- package/dist/src/crypto/mnemonic.js.map +1 -0
- package/dist/src/encoding/base64.d.ts +8 -0
- package/dist/src/encoding/base64.js +53 -0
- package/dist/src/encoding/base64.js.map +1 -0
- package/dist/src/encoding/hex.d.ts +2 -0
- package/dist/src/encoding/hex.js +35 -0
- package/dist/src/encoding/hex.js.map +1 -0
- package/dist/src/errors.d.ts +83 -0
- package/dist/src/errors.js +49 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +59 -0
- package/dist/src/index.js +53 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/ledger/coin-accounts.d.ts +42 -0
- package/dist/src/ledger/coin-accounts.js +37 -0
- package/dist/src/ledger/coin-accounts.js.map +1 -0
- package/dist/src/ledger/decode.d.ts +18 -0
- package/dist/src/ledger/decode.js +113 -0
- package/dist/src/ledger/decode.js.map +1 -0
- package/dist/src/ledger/geeq-ledger.d.ts +99 -0
- package/dist/src/ledger/geeq-ledger.js +125 -0
- package/dist/src/ledger/geeq-ledger.js.map +1 -0
- package/dist/src/ledger/net-actors.d.ts +65 -0
- package/dist/src/ledger/net-actors.js +53 -0
- package/dist/src/ledger/net-actors.js.map +1 -0
- package/dist/src/ledger/nft-records.d.ts +13 -0
- package/dist/src/ledger/nft-records.js +41 -0
- package/dist/src/ledger/nft-records.js.map +1 -0
- package/dist/src/ledger/params.d.ts +34 -0
- package/dist/src/ledger/params.js +71 -0
- package/dist/src/ledger/params.js.map +1 -0
- package/dist/src/ledger/proxy-accounts.d.ts +26 -0
- package/dist/src/ledger/proxy-accounts.js +27 -0
- package/dist/src/ledger/proxy-accounts.js.map +1 -0
- package/dist/src/net/discovery.d.ts +62 -0
- package/dist/src/net/discovery.js +136 -0
- package/dist/src/net/discovery.js.map +1 -0
- package/dist/src/net/explorer.d.ts +57 -0
- package/dist/src/net/explorer.js +64 -0
- package/dist/src/net/explorer.js.map +1 -0
- package/dist/src/net/read-ledger.d.ts +7 -0
- package/dist/src/net/read-ledger.js +39 -0
- package/dist/src/net/read-ledger.js.map +1 -0
- package/dist/src/net/routes.d.ts +49 -0
- package/dist/src/net/routes.js +70 -0
- package/dist/src/net/routes.js.map +1 -0
- package/dist/src/net/transport.d.ts +55 -0
- package/dist/src/net/transport.js +168 -0
- package/dist/src/net/transport.js.map +1 -0
- package/dist/src/net/websocket.d.ts +49 -0
- package/dist/src/net/websocket.js +54 -0
- package/dist/src/net/websocket.js.map +1 -0
- package/dist/src/runtime/bindings.d.ts +9 -0
- package/dist/src/runtime/bindings.js +27 -0
- package/dist/src/runtime/bindings.js.map +1 -0
- package/dist/src/runtime/init.d.ts +13 -0
- package/dist/src/runtime/init.js +40 -0
- package/dist/src/runtime/init.js.map +1 -0
- package/dist/src/runtime/wasm-loader.browser.d.ts +14 -0
- package/dist/src/runtime/wasm-loader.browser.js +20 -0
- package/dist/src/runtime/wasm-loader.browser.js.map +1 -0
- package/dist/src/runtime/wasm-loader.node.d.ts +7 -0
- package/dist/src/runtime/wasm-loader.node.js +14 -0
- package/dist/src/runtime/wasm-loader.node.js.map +1 -0
- package/dist/src/socket/geeq-socket.d.ts +232 -0
- package/dist/src/socket/geeq-socket.js +634 -0
- package/dist/src/socket/geeq-socket.js.map +1 -0
- package/dist/src/socket/tracked-tx.d.ts +148 -0
- package/dist/src/socket/tracked-tx.js +212 -0
- package/dist/src/socket/tracked-tx.js.map +1 -0
- package/dist/src/socket/tx-status.d.ts +69 -0
- package/dist/src/socket/tx-status.js +72 -0
- package/dist/src/socket/tx-status.js.map +1 -0
- package/dist/src/tx/attestation.d.ts +60 -0
- package/dist/src/tx/attestation.js +163 -0
- package/dist/src/tx/attestation.js.map +1 -0
- package/dist/src/tx/content.d.ts +27 -0
- package/dist/src/tx/content.js +62 -0
- package/dist/src/tx/content.js.map +1 -0
- package/dist/src/tx/encode.d.ts +60 -0
- package/dist/src/tx/encode.js +82 -0
- package/dist/src/tx/encode.js.map +1 -0
- package/dist/src/tx/expiry.d.ts +11 -0
- package/dist/src/tx/expiry.js +12 -0
- package/dist/src/tx/expiry.js.map +1 -0
- package/dist/src/tx/fee.d.ts +16 -0
- package/dist/src/tx/fee.js +29 -0
- package/dist/src/tx/fee.js.map +1 -0
- package/dist/src/tx/metadata.d.ts +39 -0
- package/dist/src/tx/metadata.js +66 -0
- package/dist/src/tx/metadata.js.map +1 -0
- package/dist/src/tx/nft.d.ts +16 -0
- package/dist/src/tx/nft.js +98 -0
- package/dist/src/tx/nft.js.map +1 -0
- package/dist/src/tx/proxy.d.ts +37 -0
- package/dist/src/tx/proxy.js +134 -0
- package/dist/src/tx/proxy.js.map +1 -0
- package/dist/src/tx/transfer.d.ts +31 -0
- package/dist/src/tx/transfer.js +123 -0
- package/dist/src/tx/transfer.js.map +1 -0
- package/dist/src/types.d.ts +448 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tests/account-id.test.d.ts +1 -0
- package/dist/tests/account-id.test.js +27 -0
- package/dist/tests/account-id.test.js.map +1 -0
- package/dist/tests/amount.test.d.ts +1 -0
- package/dist/tests/amount.test.js +113 -0
- package/dist/tests/amount.test.js.map +1 -0
- package/dist/tests/attestation.test.d.ts +1 -0
- package/dist/tests/attestation.test.js +182 -0
- package/dist/tests/attestation.test.js.map +1 -0
- package/dist/tests/chain.test.d.ts +1 -0
- package/dist/tests/chain.test.js +647 -0
- package/dist/tests/chain.test.js.map +1 -0
- package/dist/tests/content.test.d.ts +1 -0
- package/dist/tests/content.test.js +90 -0
- package/dist/tests/content.test.js.map +1 -0
- package/dist/tests/documented-api.test.d.ts +1 -0
- package/dist/tests/documented-api.test.js +229 -0
- package/dist/tests/documented-api.test.js.map +1 -0
- package/dist/tests/explorer.test.d.ts +1 -0
- package/dist/tests/explorer.test.js +95 -0
- package/dist/tests/explorer.test.js.map +1 -0
- package/dist/tests/fee.test.d.ts +1 -0
- package/dist/tests/fee.test.js +179 -0
- package/dist/tests/fee.test.js.map +1 -0
- package/dist/tests/fixtures/build-vll.d.ts +71 -0
- package/dist/tests/fixtures/build-vll.js +141 -0
- package/dist/tests/fixtures/build-vll.js.map +1 -0
- package/dist/tests/fixtures/fake-socket.d.ts +44 -0
- package/dist/tests/fixtures/fake-socket.js +93 -0
- package/dist/tests/fixtures/fake-socket.js.map +1 -0
- package/dist/tests/fixtures/fake-transport.d.ts +24 -0
- package/dist/tests/fixtures/fake-transport.js +30 -0
- package/dist/tests/fixtures/fake-transport.js.map +1 -0
- package/dist/tests/keypair.test.d.ts +1 -0
- package/dist/tests/keypair.test.js +163 -0
- package/dist/tests/keypair.test.js.map +1 -0
- package/dist/tests/ledger.test.d.ts +1 -0
- package/dist/tests/ledger.test.js +234 -0
- package/dist/tests/ledger.test.js.map +1 -0
- package/dist/tests/mnemonic.test.d.ts +1 -0
- package/dist/tests/mnemonic.test.js +97 -0
- package/dist/tests/mnemonic.test.js.map +1 -0
- package/dist/tests/nft-transfer.test.d.ts +1 -0
- package/dist/tests/nft-transfer.test.js +170 -0
- package/dist/tests/nft-transfer.test.js.map +1 -0
- package/dist/tests/nft.test.d.ts +1 -0
- package/dist/tests/nft.test.js +180 -0
- package/dist/tests/nft.test.js.map +1 -0
- package/dist/tests/offline.test.d.ts +1 -0
- package/dist/tests/offline.test.js +95 -0
- package/dist/tests/offline.test.js.map +1 -0
- package/dist/tests/proxy.test.d.ts +1 -0
- package/dist/tests/proxy.test.js +183 -0
- package/dist/tests/proxy.test.js.map +1 -0
- package/dist/tests/select.test.d.ts +1 -0
- package/dist/tests/select.test.js +200 -0
- package/dist/tests/select.test.js.map +1 -0
- package/dist/tests/socket.test.d.ts +1 -0
- package/dist/tests/socket.test.js +607 -0
- package/dist/tests/socket.test.js.map +1 -0
- package/dist/tests/transfer.test.d.ts +1 -0
- package/dist/tests/transfer.test.js +225 -0
- package/dist/tests/transfer.test.js.map +1 -0
- package/dist/tests/wallet-address.test.d.ts +1 -0
- package/dist/tests/wallet-address.test.js +101 -0
- package/dist/tests/wallet-address.test.js.map +1 -0
- package/dist/tests/wasm-loader.jest.d.ts +13 -0
- package/dist/tests/wasm-loader.jest.js +15 -0
- package/dist/tests/wasm-loader.jest.js.map +1 -0
- package/example/.env.example +4 -0
- package/example/README.md +304 -0
- package/example/USAGE.md +74 -0
- package/example/index.html +12 -0
- package/example/package-lock.json +1557 -0
- package/example/package.json +25 -0
- package/example/scripts/browser-check.mjs +1421 -0
- package/example/scripts/match-derivation.mjs +65 -0
- package/example/src/App.vue +138 -0
- package/example/src/components/AuthorityPanel.vue +277 -0
- package/example/src/components/ChainPanel.vue +267 -0
- package/example/src/components/ChainState.vue +59 -0
- package/example/src/components/CopyButton.vue +25 -0
- package/example/src/components/CreateAssetPanel.vue +313 -0
- package/example/src/components/DigitalAssetsPanel.vue +68 -0
- package/example/src/components/EvidencePanel.vue +396 -0
- package/example/src/components/ExplorerPanel.vue +119 -0
- package/example/src/components/KeypairPanel.vue +182 -0
- package/example/src/components/PhrasePanel.vue +105 -0
- package/example/src/components/SocketWarning.vue +18 -0
- package/example/src/components/StepGate.vue +24 -0
- package/example/src/components/TransferPanel.vue +416 -0
- package/example/src/components/TxDeadline.vue +19 -0
- package/example/src/components/TxFee.vue +31 -0
- package/example/src/components/TxStatus.vue +105 -0
- package/example/src/composables/useSocketConnection.ts +80 -0
- package/example/src/env.d.ts +12 -0
- package/example/src/main.ts +5 -0
- package/example/src/pennies.ts +7 -0
- package/example/src/style.css +149 -0
- package/example/tsconfig.json +19 -0
- package/example/vite.config.ts +26 -0
- package/jest.config.js +18 -0
- package/package.json +2 -6
- package/scripts/copy-wasm.mjs +21 -0
- package/scripts/smoke.mjs +382 -0
- package/src/address/record-type.ts +77 -0
- package/src/address/wallet-address.ts +105 -0
- package/src/amount.ts +143 -0
- package/src/assert.ts +30 -0
- package/src/capnp/README.md +15 -0
- package/src/capnp/adminNetTx.capnp.ts +66 -0
- package/src/capnp/appLayBlock.capnp.ts +26 -0
- package/src/capnp/appLayLedger.capnp.ts +35 -0
- package/src/capnp/appLayRec.capnp.ts +159 -0
- package/src/capnp/chainStateView.capnp.ts +49 -0
- package/src/capnp/coinAcctRec.capnp.ts +193 -0
- package/src/capnp/genesisBlock.capnp.ts +56 -0
- package/src/capnp/hubContentStmt.capnp.ts +59 -0
- package/src/capnp/misc.capnp.ts +19 -0
- package/src/capnp/netActorRec.capnp.ts +64 -0
- package/src/capnp/nodeContentStmt.capnp.ts +62 -0
- package/src/capnp/nodePayloadList.capnp.ts +28 -0
- package/src/capnp/nodeTxList.capnp.ts +37 -0
- package/src/capnp/paramAcctRec.capnp.ts +669 -0
- package/src/capnp/payload.capnp.ts +261 -0
- package/src/capnp/proxyAcctRec.capnp.ts +259 -0
- package/src/capnp/relayContentStmt.capnp.ts +85 -0
- package/src/capnp/sysAcctRec.capnp.ts +47 -0
- package/src/capnp/userAppTx.capnp.ts +269 -0
- package/src/capnp/userValTx.capnp.ts +1999 -0
- package/src/capnp/valLayBlock.capnp.ts +93 -0
- package/src/capnp/valLayLedger.capnp.ts +80 -0
- package/src/chain/geeq-chain.ts +1094 -0
- package/src/chain/geeq-node.ts +105 -0
- package/src/chain/nonce-guard.ts +73 -0
- package/src/chain/select.ts +149 -0
- package/src/crypto/account-id.ts +83 -0
- package/src/crypto/keypair.ts +221 -0
- package/src/crypto/mnemonic.ts +69 -0
- package/src/encoding/base64.ts +58 -0
- package/src/encoding/hex.ts +42 -0
- package/src/errors.ts +122 -0
- package/src/index.ts +195 -0
- package/src/ledger/coin-accounts.ts +73 -0
- package/src/ledger/decode.ts +147 -0
- package/src/ledger/geeq-ledger.ts +184 -0
- package/src/ledger/net-actors.ts +129 -0
- package/src/ledger/nft-records.ts +49 -0
- package/src/ledger/params.ts +82 -0
- package/src/ledger/proxy-accounts.ts +51 -0
- package/src/net/discovery.ts +231 -0
- package/src/net/explorer.ts +123 -0
- package/src/net/read-ledger.ts +58 -0
- package/src/net/routes.ts +79 -0
- package/src/net/transport.ts +221 -0
- package/src/net/websocket.ts +94 -0
- package/src/runtime/bindings.ts +38 -0
- package/src/runtime/init.ts +49 -0
- package/src/runtime/wasm-loader.browser.ts +22 -0
- package/src/runtime/wasm-loader.node.ts +16 -0
- package/src/socket/geeq-socket.ts +827 -0
- package/src/socket/tracked-tx.ts +319 -0
- package/src/socket/tx-status.ts +131 -0
- package/src/tx/attestation.ts +222 -0
- package/src/tx/content.ts +82 -0
- package/src/tx/encode.ts +107 -0
- package/src/tx/expiry.ts +11 -0
- package/src/tx/fee.ts +31 -0
- package/src/tx/metadata.ts +100 -0
- package/src/tx/nft.ts +108 -0
- package/src/tx/proxy.ts +156 -0
- package/src/tx/transfer.ts +162 -0
- package/src/types.ts +503 -0
- package/src/wasm/README.md +22 -0
- package/src/wasm/browser/geeq_core.d.ts +1224 -0
- package/src/wasm/browser/geeq_core.js +6014 -0
- package/src/wasm/browser/geeq_core_bg.wasm +0 -0
- package/src/wasm/browser/geeq_core_bg.wasm.d.ts +447 -0
- package/src/wasm/nodejs/geeq_core.d.ts +753 -0
- package/src/wasm/nodejs/geeq_core.js +6016 -0
- package/src/wasm/nodejs/geeq_core_bg.wasm +0 -0
- package/src/wasm/nodejs/geeq_core_bg.wasm.d.ts +447 -0
- package/src/wasm/nodejs/package.json +3 -0
- package/tsconfig.build.json +8 -0
- package/tsconfig.json +21 -0
- package/tsup.config.ts +60 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import type { AccountRef } from '../crypto/account-id';
|
|
2
|
+
import type { GeeqWebSocketFactory } from '../net/websocket';
|
|
3
|
+
import { GeeqTrackedTx } from './tracked-tx';
|
|
4
|
+
import type { GeeqTxStatusEvent } from './tx-status';
|
|
5
|
+
/**
|
|
6
|
+
* - `connecting` — the first handshake, inside {@link GeeqSocket.connect}.
|
|
7
|
+
* - `open` — subscribed and receiving.
|
|
8
|
+
* - `reconnecting` — dropped after being open; retrying with backoff. Anything the node
|
|
9
|
+
* sends meanwhile is lost.
|
|
10
|
+
* - `closed` — disposed. Final.
|
|
11
|
+
*/
|
|
12
|
+
export type GeeqSocketState = 'connecting' | 'open' | 'reconnecting' | 'closed';
|
|
13
|
+
/** One JSON frame from the node, as `{ event, payload }`. */
|
|
14
|
+
export interface GeeqSocketMessage {
|
|
15
|
+
readonly event: string;
|
|
16
|
+
readonly payload: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface GeeqSocketOptions {
|
|
19
|
+
/**
|
|
20
|
+
* The node the socket belongs to — normally `chain.endpoint`, which is also where the
|
|
21
|
+
* transactions go. Its socket is derived: `https://ip:2082` becomes
|
|
22
|
+
* `wss://ip:2082/ws/`.
|
|
23
|
+
*
|
|
24
|
+
* Supply this or {@link url}, not both. Use the node you submit to: only that node
|
|
25
|
+
* reports a `nonsane` refusal, though every node reports the final verdicts.
|
|
26
|
+
*/
|
|
27
|
+
readonly endpoint?: string | URL;
|
|
28
|
+
/**
|
|
29
|
+
* The socket URL itself, when it is not the one derived from the node — a local
|
|
30
|
+
* harness reaching the socket server directly on its own port, for instance.
|
|
31
|
+
*/
|
|
32
|
+
readonly url?: string | URL;
|
|
33
|
+
/** Defaults to `new globalThis.WebSocket(url)`. Supply one on Node 20 — see README. */
|
|
34
|
+
readonly webSocket?: GeeqWebSocketFactory;
|
|
35
|
+
/**
|
|
36
|
+
* How long a handshake, or a send waiting on one, may take. Defaults to 15000. 0 waits
|
|
37
|
+
* for ever — including a first handshake that neither opens nor fails.
|
|
38
|
+
*/
|
|
39
|
+
readonly openTimeoutMs?: number;
|
|
40
|
+
/** How often to send the keepalive `'ping'`. Defaults to 25000; 0 disables it. */
|
|
41
|
+
readonly heartbeatMs?: number;
|
|
42
|
+
/** Reconnect after a drop. Defaults to true. */
|
|
43
|
+
readonly reconnect?: boolean;
|
|
44
|
+
/** The first reconnect delay, doubled on each failure. Defaults to 1000. */
|
|
45
|
+
readonly reconnectDelayMs?: number;
|
|
46
|
+
/** The ceiling on that delay. Defaults to 30000. */
|
|
47
|
+
readonly maxReconnectDelayMs?: number;
|
|
48
|
+
/** Abandons the first handshake. Once connected, use {@link GeeqSocket.dispose}. */
|
|
49
|
+
readonly signal?: AbortSignal;
|
|
50
|
+
}
|
|
51
|
+
export interface GeeqSendOptions {
|
|
52
|
+
/**
|
|
53
|
+
* Re-send the frame on every reconnect. A node forgets a connection's subscriptions
|
|
54
|
+
* when it drops, so anything that subscribes should set this. Only the latest frame for
|
|
55
|
+
* each event name is kept.
|
|
56
|
+
*/
|
|
57
|
+
readonly replay?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface GeeqListenOptions {
|
|
60
|
+
readonly blockNumber?: number;
|
|
61
|
+
/** Defaults to true. */
|
|
62
|
+
readonly now?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface GeeqTrackOptions {
|
|
65
|
+
/** How long to wait for a final status. Defaults to 300000. 0 waits for ever. */
|
|
66
|
+
readonly timeoutMs?: number;
|
|
67
|
+
/** How long a `nonsane` may be overturned by a real verdict. Defaults to 30000. */
|
|
68
|
+
readonly nonsaneGraceMs?: number;
|
|
69
|
+
/** More accounts to subscribe alongside the signer. */
|
|
70
|
+
readonly accounts?: readonly (AccountRef | string)[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Anything with the hash a status event names. Every transaction this SDK builds fits,
|
|
74
|
+
* and brings its signer's `publicKey` for the subscription.
|
|
75
|
+
*/
|
|
76
|
+
export interface GeeqTrackable {
|
|
77
|
+
readonly transactionHash: Uint8Array;
|
|
78
|
+
readonly publicKey?: Uint8Array;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A node's WebSocket: the channel through which it reports what happened to the
|
|
82
|
+
* transactions you sent, and pushes account and chain updates.
|
|
83
|
+
*
|
|
84
|
+
* One class for every use an application has for the socket:
|
|
85
|
+
*
|
|
86
|
+
* - {@link track} a transaction you are about to submit, and get its verdict;
|
|
87
|
+
* - {@link subscribe} to accounts and read their events with {@link on};
|
|
88
|
+
* - {@link send} any frame the node understands, and receive any it sends.
|
|
89
|
+
*
|
|
90
|
+
* The protocol's hazards are handled here, once: subscriptions replace rather than add,
|
|
91
|
+
* so the full set of keys is always sent; the node forgets a connection's subscriptions
|
|
92
|
+
* when it drops, so they are replayed on every reconnect before anything is announced;
|
|
93
|
+
* the edge proxy drops an idle socket, so it is kept alive; a transaction's first status
|
|
94
|
+
* is not always its last, so {@link GeeqTrackedTx} decides when it is final.
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* const socket = await GeeqSocket.connect({ endpoint: chain.endpoint })
|
|
98
|
+
* const tx = await chain.createTransfer({ from, to, amount })
|
|
99
|
+
* const tracked = await socket.track(tx) // before submitting — always
|
|
100
|
+
* const response = await fetch(submitRoute(tx.nodeUrl), { … })
|
|
101
|
+
* if (!response.ok) tracked.refused({ status: response.status })
|
|
102
|
+
* const outcome = await tracked.settled()
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* In a reactive framework, mark an instance raw (Vue's `markRaw`) rather than letting it
|
|
106
|
+
* be proxied — a proxied native WebSocket throws on every call.
|
|
107
|
+
*/
|
|
108
|
+
export declare class GeeqSocket {
|
|
109
|
+
/** The socket URL, normalised. */
|
|
110
|
+
readonly url: string;
|
|
111
|
+
private readonly factory;
|
|
112
|
+
private readonly openTimeoutMs;
|
|
113
|
+
private readonly heartbeatMs;
|
|
114
|
+
private readonly reconnects;
|
|
115
|
+
private readonly reconnectDelayMs;
|
|
116
|
+
private readonly maxReconnectDelayMs;
|
|
117
|
+
/** The frames in force, by event name, replayed on every connection. */
|
|
118
|
+
private readonly persisted;
|
|
119
|
+
/** What this connection has already been told, so a repeat is not sent twice. */
|
|
120
|
+
private readonly told;
|
|
121
|
+
private readonly keys;
|
|
122
|
+
private readonly tracked;
|
|
123
|
+
private readonly eventListeners;
|
|
124
|
+
private readonly messageListeners;
|
|
125
|
+
private readonly statusListeners;
|
|
126
|
+
private readonly stateListeners;
|
|
127
|
+
private readonly waiters;
|
|
128
|
+
private socket;
|
|
129
|
+
private current;
|
|
130
|
+
private everOpened;
|
|
131
|
+
private attempts;
|
|
132
|
+
private openTimer;
|
|
133
|
+
private reconnectTimer;
|
|
134
|
+
private heartbeatTimer;
|
|
135
|
+
/** @internal */
|
|
136
|
+
constructor(init: {
|
|
137
|
+
url: string;
|
|
138
|
+
factory: GeeqWebSocketFactory;
|
|
139
|
+
openTimeoutMs: number;
|
|
140
|
+
heartbeatMs: number;
|
|
141
|
+
reconnect: boolean;
|
|
142
|
+
reconnectDelayMs: number;
|
|
143
|
+
maxReconnectDelayMs: number;
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* Open a node's socket and resolve once it is open.
|
|
147
|
+
*
|
|
148
|
+
* Throws `socket-unreachable` if the first handshake fails, rather than retrying
|
|
149
|
+
* quietly: a socket that never opened is almost always a certificate, a mixed-content
|
|
150
|
+
* page or a wrong URL, and retrying hides which. After that first open, a drop is
|
|
151
|
+
* retried automatically and reported through {@link onConnectionChange}.
|
|
152
|
+
*/
|
|
153
|
+
static connect(options: GeeqSocketOptions): Promise<GeeqSocket>;
|
|
154
|
+
/** Where the connection stands. See {@link GeeqSocketState}. */
|
|
155
|
+
get state(): GeeqSocketState;
|
|
156
|
+
/** Every account key subscribed so far, base64. The set only grows. */
|
|
157
|
+
get subscriptions(): readonly string[];
|
|
158
|
+
/**
|
|
159
|
+
* Subscribe to accounts' events: their transactions' statuses and record updates.
|
|
160
|
+
*
|
|
161
|
+
* Takes a keypair, a `{ publicKey }`, a 32-byte account id, a base64 key, or a list of
|
|
162
|
+
* them. The node has no unsubscribe and treats every subscription as a replacement, so
|
|
163
|
+
* this adds to the set this socket holds and sends all of it — calling it for one
|
|
164
|
+
* account never silences another. Resolves once the node has been told.
|
|
165
|
+
*/
|
|
166
|
+
subscribe(accounts: AccountRef | string | readonly (AccountRef | string)[]): Promise<void>;
|
|
167
|
+
/** Ask for events from now, or from a block. Replayed on reconnect. */
|
|
168
|
+
listen(options?: GeeqListenOptions): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Subscribe to the whole chain's record feed — every account, fee and parameter update.
|
|
171
|
+
* What a block explorer or an indexer wants; an ordinary application does not.
|
|
172
|
+
*/
|
|
173
|
+
subscribeBlockExplorer(): Promise<void>;
|
|
174
|
+
/**
|
|
175
|
+
* Send a frame, `{ event, payload }`, waiting for the connection if it is down.
|
|
176
|
+
*
|
|
177
|
+
* The escape hatch for anything the node understands that this class has no method
|
|
178
|
+
* for. Rejects with `socket-unreachable` if the socket does not reopen within
|
|
179
|
+
* `openTimeoutMs` — a replayed frame is still kept, and goes out when it does.
|
|
180
|
+
*/
|
|
181
|
+
send(event: string, payload?: unknown, options?: GeeqSendOptions): Promise<void>;
|
|
182
|
+
/**
|
|
183
|
+
* Follow a transaction to its verdict. Call it **before** submitting.
|
|
184
|
+
*
|
|
185
|
+
* Subscribes the signer — the node pushes a transaction's statuses only to connections
|
|
186
|
+
* subscribed to its account — and resolves once the node has been told, so a status
|
|
187
|
+
* cannot arrive before anyone is listening for it. If this throws, do not submit: a
|
|
188
|
+
* transaction sent with no way to hear its verdict leaves the user guessing.
|
|
189
|
+
*
|
|
190
|
+
* Tracking the same transaction twice returns the same handle.
|
|
191
|
+
*/
|
|
192
|
+
track(tx: GeeqTrackable, options?: GeeqTrackOptions): Promise<GeeqTrackedTx>;
|
|
193
|
+
/**
|
|
194
|
+
* Call `listener` with the payload of every frame named `event`, whatever it is —
|
|
195
|
+
* `'uut_status'`, `'coin-account-update'`, `'fee-update'`, or one this SDK has never
|
|
196
|
+
* heard of. Returns the function that removes it.
|
|
197
|
+
*/
|
|
198
|
+
on(event: string, listener: (payload: unknown) => void): () => void;
|
|
199
|
+
/** Call `listener` with every JSON frame the node sends. */
|
|
200
|
+
onMessage(listener: (message: GeeqSocketMessage) => void): () => void;
|
|
201
|
+
/** Call `listener` with every transaction status, tracked or not, already parsed. */
|
|
202
|
+
onTxStatus(listener: (event: GeeqTxStatusEvent) => void): () => void;
|
|
203
|
+
/** Call `listener` whenever {@link state} changes. */
|
|
204
|
+
onConnectionChange(listener: (state: GeeqSocketState) => void): () => void;
|
|
205
|
+
/**
|
|
206
|
+
* Close for good. Pending sends reject with `socket-closed`, and every transaction still
|
|
207
|
+
* being tracked settles `unknown` with reason `closed` — it may yet be decided, just
|
|
208
|
+
* not heard about here.
|
|
209
|
+
*/
|
|
210
|
+
dispose(): void;
|
|
211
|
+
toJSON(): Record<string, unknown>;
|
|
212
|
+
toString(): string;
|
|
213
|
+
private assertOpenable;
|
|
214
|
+
private setState;
|
|
215
|
+
/** Resolves when the socket is open, or rejects after `openTimeoutMs` or on dispose. */
|
|
216
|
+
private whenOpen;
|
|
217
|
+
private dial;
|
|
218
|
+
private opened;
|
|
219
|
+
/** A handshake failed, or an open socket dropped. */
|
|
220
|
+
private attemptFailed;
|
|
221
|
+
/**
|
|
222
|
+
* Put one frame on the current connection. True once it is there — or already was.
|
|
223
|
+
*
|
|
224
|
+
* False means the connection is gone. If our books still said it was open, it is
|
|
225
|
+
* treated as the drop it is, here and now, so the caller waits for the next connection
|
|
226
|
+
* instead of spinning on this one.
|
|
227
|
+
*/
|
|
228
|
+
private transmit;
|
|
229
|
+
private receive;
|
|
230
|
+
private startHeartbeat;
|
|
231
|
+
private stopHeartbeat;
|
|
232
|
+
}
|