diff --git a/packages/ast/src/clients/rpc/scoped/__snapshots__/rpc.test.ts.snap b/packages/ast/src/clients/rpc/scoped/__snapshots__/rpc.test.ts.snap index bea30bde7..ce4d572e5 100644 --- a/packages/ast/src/clients/rpc/scoped/__snapshots__/rpc.test.ts.snap +++ b/packages/ast/src/clients/rpc/scoped/__snapshots__/rpc.test.ts.snap @@ -22,6 +22,30 @@ exports[`createScopedRpcFactory 1`] = ` });" `; +exports[`createScopedRpcFactoryWithComet 1`] = ` +"export const createRpcFactorizzleWithComet = async ({ + rpc +}: { + rpc: Rpc; +}) => { + return { + cosmos: { + bank: { + v1beta1: (await import("./proto/cosmos/bank/v1beta1/query.lcd")).createClientImpl(rpc) + }, + gov: { + v1beta1: (await import("./proto/cosmos/bank/v1beta1/query.lcd")).createClientImpl(rpc) + } + }, + osmosis: { + gamm: { + v1beta1: (await import("./proto/cosmos/bank/v1beta1/query.lcd")).createClientImpl(rpc) + } + } + }; +};" +`; + exports[`createScopedRpcFactoryWithoutTm 1`] = ` "export const createRpcFactorizzleWithoutTM = async ({ rpc diff --git a/packages/ast/src/clients/rpc/scoped/rpc.test.ts b/packages/ast/src/clients/rpc/scoped/rpc.test.ts index a91063a24..e2154e388 100644 --- a/packages/ast/src/clients/rpc/scoped/rpc.test.ts +++ b/packages/ast/src/clients/rpc/scoped/rpc.test.ts @@ -73,3 +73,25 @@ it('createScopedRpcFactoryWithoutTm', async () => { 'createRpcFactorizzleWithoutTM', )) }); + + it('createScopedRpcFactoryWithComet', async () => { + const context = getGenericParseContext(); + context.options!.rpcClients!.useConnectComet = true; + expectCode(createScopedRpcTmFactory(context, { + cosmos: { + bank: { + v1beta1: "./proto/cosmos/bank/v1beta1/query.lcd" + }, + gov: { + v1beta1: "./proto/cosmos/bank/v1beta1/query.lcd" + }, + }, + osmosis: { + gamm: { + v1beta1: "./proto/cosmos/bank/v1beta1/query.lcd" + } + } + }, + 'createRpcFactorizzleWithComet', + )) +}); \ No newline at end of file diff --git a/packages/ast/src/clients/rpc/scoped/rpc.ts b/packages/ast/src/clients/rpc/scoped/rpc.ts index 268a6730b..cd80fadfe 100644 --- a/packages/ast/src/clients/rpc/scoped/rpc.ts +++ b/packages/ast/src/clients/rpc/scoped/rpc.ts @@ -191,6 +191,7 @@ export const createScopedRpcTmFactory = ( obj: object, identifier: string ) => { + const newClientType = context.pluginValue('rpcClients.useConnectComet'); const extensions = context.pluginValue('rpcClients.extensions'); let functionParams; const returnStatement = t.returnStatement( @@ -200,10 +201,34 @@ export const createScopedRpcTmFactory = ( extensions ? 'client' : 'rpc', ) ); + let functionStatements; + let awaitClientCreation; + // TODO: remove tendermint34client and options if not needed + if (newClientType) { + // use connectComet for dynamic client + context.addUtil('connectComet'); + awaitClientCreation = t.callExpression( + t.identifier('connectComet'), + [ + t.identifier('rpcEndpoint') + ] + ) + } else { + // use tendermint34 client + context.addUtil('Tendermint34Client'); + awaitClientCreation = t.callExpression( + t.memberExpression( + t.identifier('Tendermint34Client'), + t.identifier('connect') + ), + [ + t.identifier('rpcEndpoint') + ] + ) + } if(extensions){ - context.addUtil('Tendermint34Client'); context.addUtil('HttpEndpoint'); context.addUtil('QueryClient'); @@ -239,15 +264,7 @@ export const createScopedRpcTmFactory = ( t.variableDeclarator( t.identifier('tmClient'), t.awaitExpression( - t.callExpression( - t.memberExpression( - t.identifier('Tendermint34Client'), - t.identifier('connect') - ), - [ - t.identifier('rpcEndpoint') - ] - ) + awaitClientCreation ) ) ]), diff --git a/packages/starship/package.json b/packages/starship/package.json index 53ce0bc24..218e453b0 100644 --- a/packages/starship/package.json +++ b/packages/starship/package.json @@ -97,10 +97,10 @@ "typescript": "^5.0.4" }, "dependencies": { - "@cosmjs/amino": "0.29.3", - "@cosmjs/proto-signing": "0.29.3", - "@cosmjs/stargate": "0.29.3", - "@cosmjs/tendermint-rpc": "^0.29.3", + "@cosmjs/amino": "^0.32.0", + "@cosmjs/proto-signing": "^0.32.0", + "@cosmjs/stargate": "^0.32.0", + "@cosmjs/tendermint-rpc": "^0.32.0", "@cosmology/core": "1.23.0", "@cosmology/lcd": "^0.13.3", "@keplr-wallet/unit": "0.11.56", diff --git a/packages/telescope/src/helpers/external.ts b/packages/telescope/src/helpers/external.ts index 5835e2b4c..96d05b70a 100644 --- a/packages/telescope/src/helpers/external.ts +++ b/packages/telescope/src/helpers/external.ts @@ -1,5 +1,5 @@ export const external = `import { QueryClient, createProtobufRpcClient, ProtobufRpcClient } from '@cosmjs/stargate' -import { Tendermint34Client, HttpEndpoint } from "@cosmjs/tendermint-rpc"; +import { connectComet, HttpEndpoint } from "@cosmjs/tendermint-rpc"; const _rpcClients: Record = {}; @@ -18,9 +18,9 @@ export const getRpcClient = async (rpcEndpoint: string | HttpEndpoint) => { if (_rpcClients.hasOwnProperty(key)) { return _rpcClients[key]; } - const tmClient = await Tendermint34Client.connect(rpcEndpoint); + const cometClient = await connectComet(rpcEndpoint); //@ts-ignore - const client = new QueryClient(tmClient); + const client = new QueryClient(cometClient); const rpc = createProtobufRpcClient(client); _rpcClients[key] = rpc; return rpc; diff --git a/packages/telescope/src/utils/index.ts b/packages/telescope/src/utils/index.ts index 5c617b5b4..ed92871d1 100644 --- a/packages/telescope/src/utils/index.ts +++ b/packages/telescope/src/utils/index.ts @@ -19,6 +19,7 @@ export const UTILS = { base64FromBytes: '__helpers__', bytesFromBase64: '__helpers__', BrowserHeaders: 'browser-headers', + connectComet: '@cosmjs/tendermint-rpc', Decimal: '@cosmjs/math', createProtobufRpcClient: '@cosmjs/stargate', Pubkey: '@cosmjs/amino', diff --git a/packages/telescope/types/helpers/external.d.ts b/packages/telescope/types/helpers/external.d.ts index 441941432..ba5bd9215 100644 --- a/packages/telescope/types/helpers/external.d.ts +++ b/packages/telescope/types/helpers/external.d.ts @@ -1 +1 @@ -export declare const external = "import { QueryClient, createProtobufRpcClient, ProtobufRpcClient } from '@cosmjs/stargate'\nimport { Tendermint34Client, HttpEndpoint } from \"@cosmjs/tendermint-rpc\";\n\nconst _rpcClients: Record = {};\n\nexport const getRpcEndpointKey = (rpcEndpoint: string | HttpEndpoint) => {\n if (typeof rpcEndpoint === 'string') {\n return rpcEndpoint;\n } else if (!!rpcEndpoint) {\n //@ts-ignore \n return rpcEndpoint.url;\n }\n}\n\nexport const getRpcClient = async (rpcEndpoint: string | HttpEndpoint) => {\n const key = getRpcEndpointKey(rpcEndpoint);\n if (!key) return;\n if (_rpcClients.hasOwnProperty(key)) {\n return _rpcClients[key];\n }\n const tmClient = await Tendermint34Client.connect(rpcEndpoint);\n //@ts-ignore\n const client = new QueryClient(tmClient);\n const rpc = createProtobufRpcClient(client);\n _rpcClients[key] = rpc;\n return rpc;\n}\n"; +export declare const external = "import { QueryClient, createProtobufRpcClient, ProtobufRpcClient } from '@cosmjs/stargate'\nimport { connectComet, HttpEndpoint } from \"@cosmjs/tendermint-rpc\";\n\nconst _rpcClients: Record = {};\n\nexport const getRpcEndpointKey = (rpcEndpoint: string | HttpEndpoint) => {\n if (typeof rpcEndpoint === 'string') {\n return rpcEndpoint;\n } else if (!!rpcEndpoint) {\n //@ts-ignore \n return rpcEndpoint.url;\n }\n}\n\nexport const getRpcClient = async (rpcEndpoint: string | HttpEndpoint) => {\n const key = getRpcEndpointKey(rpcEndpoint);\n if (!key) return;\n if (_rpcClients.hasOwnProperty(key)) {\n return _rpcClients[key];\n }\n const cometClient = await connectComet(rpcEndpoint);\n //@ts-ignore\n const client = new QueryClient(cometClient);\n const rpc = createProtobufRpcClient(client);\n _rpcClients[key] = rpc;\n return rpc;\n}\n"; diff --git a/packages/telescope/types/utils/index.d.ts b/packages/telescope/types/utils/index.d.ts index 60d4e1403..84c4ddf29 100644 --- a/packages/telescope/types/utils/index.d.ts +++ b/packages/telescope/types/utils/index.d.ts @@ -13,6 +13,7 @@ export declare const UTILS: { base64FromBytes: string; bytesFromBase64: string; BrowserHeaders: string; + connectComet: string; Decimal: string; createProtobufRpcClient: string; Pubkey: string; diff --git a/packages/types/src/telescope.ts b/packages/types/src/telescope.ts index ac2036adb..63f059815 100644 --- a/packages/types/src/telescope.ts +++ b/packages/types/src/telescope.ts @@ -219,6 +219,7 @@ interface TelescopeOpts { }; } }[]; + useConnectComet?: boolean; }; reactQuery?: { enabled: boolean; diff --git a/packages/types/types/telescope.d.ts b/packages/types/types/telescope.d.ts index 858d3a19b..d52ceef8d 100644 --- a/packages/types/types/telescope.d.ts +++ b/packages/types/types/telescope.d.ts @@ -176,6 +176,7 @@ interface TelescopeOpts { }; }; }[]; + useConnectComet?: boolean; }; reactQuery?: { enabled: boolean; diff --git a/yarn.lock b/yarn.lock index 8245091ab..9d57989e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1291,6 +1291,16 @@ "@cosmjs/math" "^0.29.5" "@cosmjs/utils" "^0.29.5" +"@cosmjs/amino@^0.32.0", "@cosmjs/amino@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.32.1.tgz#412ea151ee064757d8c8746f8a8975dc73ee175f" + integrity sha512-5l2xQ2XuAhV/B3kTIMPBcVZ/OQ+9Yyddzw/lIVs4qE5e/oBI0PVNWXw1oyR0wgfGHrMUxgKjsoOOqE2IbXVyCw== + dependencies: + "@cosmjs/crypto" "^0.32.1" + "@cosmjs/encoding" "^0.32.1" + "@cosmjs/math" "^0.32.1" + "@cosmjs/utils" "^0.32.1" + "@cosmjs/cosmwasm-stargate@0.29.4": version "0.29.4" resolved "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.29.4.tgz" @@ -1380,6 +1390,19 @@ elliptic "^6.5.4" libsodium-wrappers "^0.7.6" +"@cosmjs/crypto@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.32.1.tgz#81202a10cbd36394a390454d954d782482537a5b" + integrity sha512-AsKucEg5o8evU0wXF/lDwX+ZSwCKF4bbc57nFzraHywlp3sNu4dfPPURoMrT0r7kT7wQZAy4Pdnvmm9nnCCm/Q== + dependencies: + "@cosmjs/encoding" "^0.32.1" + "@cosmjs/math" "^0.32.1" + "@cosmjs/utils" "^0.32.1" + "@noble/hashes" "^1" + bn.js "^5.2.0" + elliptic "^6.5.4" + libsodium-wrappers-sumo "^0.7.11" + "@cosmjs/encoding@0.27.1": version "0.27.1" resolved "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.27.1.tgz" @@ -1407,6 +1430,15 @@ bech32 "^1.1.4" readonly-date "^1.0.0" +"@cosmjs/encoding@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.32.1.tgz#1755c96e063bebef07a3f2d32971e90fb9ea4e3a" + integrity sha512-x60Lfds+Eq42rVV29NaoIAson3kBhATBI3zPp7X3GJTryBc5HFHQ6L/976tE1WB2DrvkfUdWS3ayCMVOY/qm1g== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + "@cosmjs/faucet-client@^0.29.2": version "0.29.5" resolved "https://registry.npmjs.org/@cosmjs/faucet-client/-/faucet-client-0.29.5.tgz" @@ -1422,6 +1454,14 @@ "@cosmjs/stream" "^0.29.5" xstream "^11.14.0" +"@cosmjs/json-rpc@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.32.1.tgz#0f816943e36a8e8079587180ed099cacb361fd90" + integrity sha512-Hsj3Sg+m/JF8qfISp/G4TXQ0FAO01mzDKtNcgKufIHCrvJNDiE69xGyGgSm/qKwsXLBmzRTSxHWK0+yZef3LNQ== + dependencies: + "@cosmjs/stream" "^0.32.1" + xstream "^11.14.0" + "@cosmjs/launchpad@0.27.1": version "0.27.1" resolved "https://registry.npmjs.org/@cosmjs/launchpad/-/launchpad-0.27.1.tgz" @@ -1456,6 +1496,13 @@ dependencies: bn.js "^5.2.0" +"@cosmjs/math@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/math/-/math-0.32.1.tgz#e748b1f8bb20a927f5fe8311615911ed63c7334e" + integrity sha512-sqJgDjPh49rxe06apzwKYLxAw4LLFKmEd4yQtHqH16BxVVUrvK5UH9TEBpUrRErdjqENowekecDCDBZspGXHNA== + dependencies: + bn.js "^5.2.0" + "@cosmjs/proto-signing@0.29.0": version "0.29.0" resolved "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.29.0.tgz" @@ -1495,6 +1542,18 @@ cosmjs-types "^0.5.2" long "^4.0.0" +"@cosmjs/proto-signing@^0.32.0", "@cosmjs/proto-signing@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.32.1.tgz#39de3c1758b2e3ae862d77fe4cb80b1dd6bc229f" + integrity sha512-IHJMXQ8XnfzR5K1hWb8VV/jEfJof6BL2mgGIA7X4hSPegwoVfb9hnFKPEPgFjGCTTvGZ8SfnCdXxpsOjianVIA== + dependencies: + "@cosmjs/amino" "^0.32.1" + "@cosmjs/crypto" "^0.32.1" + "@cosmjs/encoding" "^0.32.1" + "@cosmjs/math" "^0.32.1" + "@cosmjs/utils" "^0.32.1" + cosmjs-types "^0.9.0" + "@cosmjs/socket@^0.29.5": version "0.29.5" resolved "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.29.5.tgz" @@ -1505,6 +1564,16 @@ ws "^7" xstream "^11.14.0" +"@cosmjs/socket@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.32.1.tgz#a8d45cde9944646f2da930d55e4269bc411b694e" + integrity sha512-thPCLCmnCuZvrsDW4YmsADI/MliOXWuMnflbzX+3OhoTuEav2I4/1aOXY0jdy0bbqL0l1opx+JfmwdWptMgKzg== + dependencies: + "@cosmjs/stream" "^0.32.1" + isomorphic-ws "^4.0.1" + ws "^7" + xstream "^11.14.0" + "@cosmjs/stargate@0.29.0": version "0.29.0" resolved "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.29.0.tgz" @@ -1559,6 +1628,22 @@ protobufjs "~6.11.3" xstream "^11.14.0" +"@cosmjs/stargate@^0.32.0": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.32.1.tgz#c4e3a4b6847ef45c26275e64f4668274cae01f9c" + integrity sha512-S0E1qKQ2CMJU79G8bQTquTyrbU03gFsvCkbo3RvK8v2OltVCByjFNh+0nGN5do+uDOzwwmDvnNLhR+SaIyNQoQ== + dependencies: + "@confio/ics23" "^0.6.8" + "@cosmjs/amino" "^0.32.1" + "@cosmjs/encoding" "^0.32.1" + "@cosmjs/math" "^0.32.1" + "@cosmjs/proto-signing" "^0.32.1" + "@cosmjs/stream" "^0.32.1" + "@cosmjs/tendermint-rpc" "^0.32.1" + "@cosmjs/utils" "^0.32.1" + cosmjs-types "^0.9.0" + xstream "^11.14.0" + "@cosmjs/stream@^0.29.0", "@cosmjs/stream@^0.29.2", "@cosmjs/stream@^0.29.3", "@cosmjs/stream@^0.29.5": version "0.29.5" resolved "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.29.5.tgz" @@ -1566,6 +1651,13 @@ dependencies: xstream "^11.14.0" +"@cosmjs/stream@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.32.1.tgz#bab72498a0a146ba172fb155fb7c38fb9bc16c6f" + integrity sha512-6RwHaGxWbIG0y++aCYP/doa4ex/Up8Q8G+ehwDzAq3aKl3zbDe9L0FmycclnMuwPm/baPIkEZ6+IVmJoNLX79Q== + dependencies: + xstream "^11.14.0" + "@cosmjs/tendermint-rpc@^0.29.0", "@cosmjs/tendermint-rpc@^0.29.2", "@cosmjs/tendermint-rpc@^0.29.3", "@cosmjs/tendermint-rpc@^0.29.4", "@cosmjs/tendermint-rpc@^0.29.5": version "0.29.5" resolved "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.29.5.tgz" @@ -1582,6 +1674,22 @@ readonly-date "^1.0.0" xstream "^11.14.0" +"@cosmjs/tendermint-rpc@^0.32.0", "@cosmjs/tendermint-rpc@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.1.tgz#f7f8929619648fb0520047c6d930dc65588345d2" + integrity sha512-4uGSxB2JejWhwBUgxca4GqcK/BGnCFMIP7ptwEledrC3AY/shPeIYcPXWEBwO7sfwCta8DhAOCLrc9zhVC+VAQ== + dependencies: + "@cosmjs/crypto" "^0.32.1" + "@cosmjs/encoding" "^0.32.1" + "@cosmjs/json-rpc" "^0.32.1" + "@cosmjs/math" "^0.32.1" + "@cosmjs/socket" "^0.32.1" + "@cosmjs/stream" "^0.32.1" + "@cosmjs/utils" "^0.32.1" + axios "^1.6.0" + readonly-date "^1.0.0" + xstream "^11.14.0" + "@cosmjs/utils@0.27.1": version "0.27.1" resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.27.1.tgz" @@ -1597,6 +1705,11 @@ resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.29.5.tgz" integrity sha512-m7h+RXDUxOzEOGt4P+3OVPX7PuakZT3GBmaM/Y2u+abN3xZkziykD/NvedYFvvCCdQo714XcGl33bwifS9FZPQ== +"@cosmjs/utils@^0.32.1": + version "0.32.1" + resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.32.1.tgz#0f7f7cbbe38c4a7fd852e698bad4d811fba5f80a" + integrity sha512-PV9pa0cVPFCNgfQKEOc6RcNFHr5wMQLcDqWoo/ekIoj1AfzAaqnojdnL80u1C9Qf+vOfRGIXubqiU7Tl7QZuig== + "@cosmology/core@1.23.0": version "1.23.0" resolved "https://registry.npmjs.org/@cosmology/core/-/core-1.23.0.tgz" @@ -3954,6 +4067,11 @@ cosmjs-types@0.5.2, cosmjs-types@^0.5.0, cosmjs-types@^0.5.1, cosmjs-types@^0.5. long "^4.0.0" protobufjs "~6.11.2" +cosmjs-types@^0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.9.0.tgz#c3bc482d28c7dfa25d1445093fdb2d9da1f6cfcc" + integrity sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ== + cosmjs-utils@0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/cosmjs-utils/-/cosmjs-utils-0.1.0.tgz" @@ -6300,6 +6418,18 @@ libnpmpublish@7.3.0: sigstore "^1.4.0" ssri "^10.0.1" +libsodium-sumo@^0.7.13: + version "0.7.13" + resolved "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.13.tgz#533b97d2be44b1277e59c1f9f60805978ac5542d" + integrity sha512-zTGdLu4b9zSNLfovImpBCbdAA4xkpkZbMnSQjP8HShyOutnGjRHmSOKlsylh1okao6QhLiz7nG98EGn+04cZjQ== + +libsodium-wrappers-sumo@^0.7.11: + version "0.7.13" + resolved "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.13.tgz#a33aea845a0bb56db067548f04feba28c730ab8e" + integrity sha512-lz4YdplzDRh6AhnLGF2Dj2IUj94xRN6Bh8T0HLNwzYGwPehQJX6c7iYVrFUPZ3QqxE0bqC+K0IIqqZJYWumwSQ== + dependencies: + libsodium-sumo "^0.7.13" + libsodium-wrappers@^0.7.6: version "0.7.11" resolved "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.11.tgz"