diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..1bf410caa --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text=auto +*.js text eol=lf \ No newline at end of file diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml new file mode 100644 index 000000000..6ad5a7251 --- /dev/null +++ b/.github/workflows/run-tests.yml @@ -0,0 +1,34 @@ +name: Run Tests + +on: + push: + + pull_request: + types: [opened, reopened] + + workflow_dispatch: + +jobs: + run-tests: + runs-on: ubuntu-latest + steps: + - name: checkout 🛎️ + uses: actions/checkout@v4 + + - name: node + uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Deps + run: | + yarn + yarn build + + - name: Test + run: | + cd packages/core && yarn test + + - name: Test React Lite + run: | + cd packages/react-lite && yarn test diff --git a/.gitignore b/.gitignore index cb78b8395..dd9211393 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ **/.DS_Store **/dist **/yarn-error.log -lerna-debug.log \ No newline at end of file +lerna-debug.log diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000..525964b49 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,11 @@ +# This configuration file was automatically generated by Gitpod. +# Please adjust to your needs (see https://www.gitpod.io/docs/introduction/learn-gitpod/gitpod-yaml) +# and commit this file to your remote git repository to share the goodness with others. + +# Learn more from ready-to-use templates: https://www.gitpod.io/docs/introduction/getting-started/quickstart + +tasks: + - init: yarn install && yarn run build + command: yarn run watch + + diff --git a/.vscode/cosmos-kit.code-workspace b/.vscode/cosmos-kit.code-workspace new file mode 100644 index 000000000..3d29d530b --- /dev/null +++ b/.vscode/cosmos-kit.code-workspace @@ -0,0 +1,35 @@ +{ + "folders": [ + { + "path": "../packages/core/" + }, + { + "path": "../packages/docs/" + }, + { + "path": "../packages/example/" + }, + { + "path": "../packages/ins/" + }, + { + "path": "../packages/react/" + }, + { + "path": "../packages/react-lite/" + }, + { + "path": "../packages/walletconnect/" + }, + { + "path": "../public/" + }, + { + "path": "../wallets/" + }, + + ], + "settings": { + "jest.jestCommandLine": "yarn test" + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 23fd35f0e..f89ed5f1d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { "editor.formatOnSave": true -} \ No newline at end of file +} diff --git a/INTEGRATING-WALLETS.md b/INTEGRATING-WALLETS.md new file mode 100644 index 000000000..c7117fe84 --- /dev/null +++ b/INTEGRATING-WALLETS.md @@ -0,0 +1,5 @@ +# Integrating Wallets + +[supported wallets](https://docs.cosmology.zone/cosmos-kit/integrating-wallets#supported-wallets) + +[How to integrate new wallets into CosmosKit](https://docs.cosmology.zone/cosmos-kit/integrating-wallets/adding-new-wallets) diff --git a/README.md b/README.md index 7c1e4cda6..181be1420 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,6 @@ Checkout these related projects: 🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) - ## Disclaimer AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..005e4a82e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + projects: ['/packages/*/jest.config.js'], + coverageDirectory: '/coverage', + transform: { + '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest', + }, +} diff --git a/lerna.json b/lerna.json index 73dd3434e..3d4861006 100644 --- a/lerna.json +++ b/lerna.json @@ -24,4 +24,4 @@ } }, "useWorkspaces": true -} \ No newline at end of file +} diff --git a/packages/core/.editorconfig b/packages/core/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/packages/core/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/core/.eslintignore b/packages/core/.eslintignore new file mode 100644 index 000000000..8f0b997cd --- /dev/null +++ b/packages/core/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +./types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/packages/core/.eslintrc.json b/packages/core/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/packages/core/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/packages/core/.gitignore b/packages/core/.gitignore new file mode 100644 index 000000000..d93985ec4 --- /dev/null +++ b/packages/core/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store \ No newline at end of file diff --git a/packages/core/.npmignore b/packages/core/.npmignore new file mode 100644 index 000000000..3b1b560cf --- /dev/null +++ b/packages/core/.npmignore @@ -0,0 +1,33 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +test-utils +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test diff --git a/packages/core/.npmrc b/packages/core/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/packages/core/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/core/.prettierrc.json b/packages/core/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/packages/core/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/packages/core/LICENSE b/packages/core/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/packages/core/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/core/README.md b/packages/core/README.md index 38a7c56ee..c1e5eefd2 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -97,14 +97,14 @@ classDiagram } class KeplrMobileWallet { - + } class LeapExtensionWallet { } class LeapMobileWallet { - + } class CosmosSigner { @@ -118,4 +118,4 @@ classDiagram } -``` \ No newline at end of file +``` diff --git a/packages/core/__tests__/bases/chain-wallet.test.ts b/packages/core/__tests__/bases/chain-wallet.test.ts new file mode 100644 index 000000000..94199b327 --- /dev/null +++ b/packages/core/__tests__/bases/chain-wallet.test.ts @@ -0,0 +1,444 @@ +import { Decimal } from '@cosmjs/math'; +import { EncodeObject } from '@cosmjs/proto-signing'; +import { CosmWasmClient, SigningCosmWasmClientOptions } from '@cosmjs/cosmwasm-stargate'; +import { StargateClientOptions } from '@cosmjs/stargate'; +import { mockExtensionInfo as walletInfo } from '../../test-utils/mock-extension/extension/registry'; +import { chains, assets } from 'chain-registry' +import { AssetList, Chain } from "@chain-registry/types"; +import { ChainWalletBase } from '../../src/bases/chain-wallet'; +import { ChainRecord, Endpoints, State } from '../../src/types'; +import nock from 'nock' +import { nameServiceRegistries } from '../../src/config'; +import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + + + +function storageMock() { + let storage = {}; + + return { + setItem: function (key, value) { + storage[key] = value || ''; + }, + getItem: function (key) { + return key in storage ? storage[key] : null; + }, + removeItem: function (key) { + delete storage[key]; + }, + get length() { + return Object.keys(storage).length; + }, + key: function (i) { + const keys = Object.keys(storage); + return keys[i] || null; + } + }; +} + +const storageMockInstance = storageMock() + +// Mock global window object +global.window = { + // @ts-ignore + localStorage: storageMockInstance +} + +describe('ChainWalletBase', () => { + let chainWallet: ChainWalletBase; + let chainMock: Chain; + let assetListMock: AssetList; + let preferredEndpointsMock: Endpoints; + let chainRecordMock: ChainRecord; + let stargateMock: StargateClientOptions = expect.any(Object); + let signingCosmwasmMock: SigningCosmWasmClientOptions = expect.any(Object); + + const stargateClientConnectMock = jest.fn() + const stargateClientConnectWithSignerMock = jest.fn() + const stargateCalculateFeeMock = jest.fn() + jest.mock('@cosmjs/stargate', () => { + return { + StargateClient: { + connect: stargateClientConnectMock, + }, + SigningStargateClient: { + connectWithSigner: stargateClientConnectWithSignerMock + }, + calculateFee: stargateCalculateFeeMock + } + }) + const cosmwasmClientConnectMock = jest.fn() + const cosmwasmClientConnectWithSignerMock = jest.fn() + jest.mock('@cosmjs/cosmwasm-stargate', () => { + return { + CosmWasmClient: { + connect: cosmwasmClientConnectMock + }, + SigningCosmWasmClient: { + connectWithSigner: cosmwasmClientConnectWithSignerMock + } + } + }) + const NameServiceMock = jest.fn() + jest.mock('../../src/name-service.ts', () => { + return { + NameService: NameServiceMock + } + }) + + const slowRpcURL = 'http://fake-rpc-endpoint.slow' + const fastRpcURL = 'http://fake-rpc-endpoint.fast' + const slowRestURL = 'http://fake-rest-endpoint.slow' + const fastRestURL = 'http://fake-rest-endpoint.fast' + + beforeEach(() => { + nock(slowRestURL).get('/cosmos/base/tendermint/v1beta1/node_info').delayConnection(5).reply(200, 'ok') + nock(fastRestURL).get('/cosmos/base/tendermint/v1beta1/node_info').reply(200, 'ok') + nock(slowRpcURL).post('/').delayConnection(5).reply(200, 'ok') + nock(fastRpcURL).post('/').reply(200, 'ok') + }) + + afterAll(() => { + nock.restore() + }) + + beforeEach(() => { + chainMock = chains.find((c) => c.chain_name === 'osmosis') as Chain; + assetListMock = assets.find((a) => a.chain_name === 'osmosis') as AssetList; + preferredEndpointsMock = { + isLazy: false, + rpc: [slowRpcURL, fastRpcURL], + rest: [slowRestURL, fastRestURL] + } + chainRecordMock = { + name: 'osmosis', + chain: chainMock, + assetList: assetListMock, + preferredEndpoints: preferredEndpointsMock, + clientOptions: { + signingStargate: undefined, + stargate: stargateMock, + signingCosmwasm: signingCosmwasmMock + } + }; + chainWallet = new ChainWalletBase(walletInfo, chainRecordMock); + }); + + afterEach(() => { + storageMockInstance.removeItem('cosmos-kit@2:core//accounts'); + }) + + it('should have the correct assets', () => { + expect(chainWallet.assets).toBe(assetListMock.assets); + }); + + it('should have the correct isTestNet', () => { + expect(chainWallet.isTestNet).toBeFalsy(); + }) + + it('should have the correct preferred endpoints', () => { + expect(chainWallet.preferredEndpoints).toBe(preferredEndpointsMock); + }) + + it('should get right rpc endpoint', () => { + expect(chainWallet.rpcEndpoints).toBe(preferredEndpointsMock.rpc); + }) + + it('should get right rest endpoint', () => { + expect(chainWallet.restEndpoints).toBe(preferredEndpointsMock.rest); + }) + + it('should get right isLazy', () => { + expect(chainWallet.isLazy).toBe(preferredEndpointsMock.isLazy); + }) + + it('should have the correct addEndpoints function', () => { + const newEndpoints = { + isLazy: true, + rpc: ['http://rpc.testnet.osmosis.zone:26657'], + } + chainWallet.addEndpoints(newEndpoints); + expect(chainWallet.preferredEndpoints.rpc?.length).toEqual(3); + }) + + it('should have the correct chain name', () => { + expect(chainWallet.chainName).toBe(chainRecordMock.name); + }) + + it('should have the correct chain logo URL', () => { + expect(chainWallet.chainLogoUrl).toBe(assetListMock.assets[0]?.logo_URIs?.svg || assetListMock.assets[0].logo_URIs?.png || undefined); + }); + + it('should have the correct chain ID', () => { + expect(chainWallet.chainId).toBe(chainMock.chain_id); + }); + + it('should have the stargateOptions', () => { + expect(chainWallet.stargateOptions).toEqual(chainRecordMock.clientOptions?.stargate); + }) + + it('should have the correct signing options', () => { + expect(chainWallet.signingStargateOptions).toEqual(chainRecordMock.clientOptions?.stargate) + }); + + it('should have the correct signing cosmwasm options', () => { + expect(chainWallet.signingCosmwasmOptions).toEqual(chainRecordMock.clientOptions?.signingCosmwasm); + }) + + it('should have the correct assets', () => { + expect(chainWallet.assets).toEqual(assetListMock.assets); + }) + + it('should have the correct chainId', () => { + expect(chainWallet.chainId).toBe(chainMock.chain_id); + }) + + it('should have cosmwasm enabled', () => { + expect(chainWallet.cosmwasmEnabled).toBe(chainMock.codebase?.cosmwasm_enabled); + }); + + it('should have the correct address', () => { + const mockData = { + namespace: 'cosmos', + chainId: 'cosmoshub-4', + address: 'cosmos1...' + }; + chainWallet.setData(mockData) + expect(chainWallet.address).toBe(mockData.address); + }) + + it('should have the correct namespace', () => { + const mockData = { + namespace: 'cosmos', + chainId: 'cosmoshub-4', + address: 'cosmos1...' + }; + chainWallet.setData(mockData) + expect(chainWallet.namespace).toBe(mockData.namespace); + }) + + it('should set Data correctly', () => { + const data = { + namespace: 'cosmos', + chainId: 'cosmoshub-4', + address: 'cosmos1...' + }; + + const localStorageSetItemMock = jest.spyOn(window.localStorage, 'setItem'); + chainWallet.setData(data); + expect(chainWallet.mutable.data).toEqual(data); + expect(localStorageSetItemMock).toHaveBeenCalled() + expect(window.localStorage.getItem('cosmos-kit@2:core//accounts')).toEqual(JSON.stringify([data])); + }) + + it('should throw an error when calling initClient', () => { + expect(() => chainWallet.initClient()).toThrow('initClient not implemented'); + }); + + it('should update state and data correctly', async () => { + const mockData = { + namespace: 'cosmos', + chainId: 'cosmoshub-4', + address: 'cosmos1...' + }; + jest.spyOn(chainWallet, 'client', 'get').mockReturnValue({ + getSimpleAccount: jest.fn().mockResolvedValue(mockData), + }); + const setStateMock = jest.spyOn(chainWallet, 'setState') + await chainWallet.update(); + + expect(setStateMock.mock.calls[0][0]).toBe(State.Pending); + expect(setStateMock.mock.calls[1][0]).toBe(State.Done); + expect(chainWallet.data.namespace).toBe(mockData.namespace); + }); + + it('should set error state when update failed', async () => { + const errorMessageFromWalletInfo = (walletInfo.rejectMessage as { source: string }).source + const mockError = new Error(errorMessageFromWalletInfo); + jest.spyOn(chainWallet, 'client', 'get').mockReturnValue({ + getSimpleAccount: jest.fn().mockRejectedValue(mockError), + }) + expect(chainWallet.state).toBe(State.Init); + await chainWallet.update(); + expect(chainWallet.state).toBe(State.Error); + expect(chainWallet.rejectMessageSource).toBe(errorMessageFromWalletInfo); + expect(chainWallet.rejectMatched(mockError)).toBeTruthy() + }); + + it('should call connectChains when update passing connect: true', () => { + const connectChainsMockFn = jest.fn() + chainWallet.connectChains = connectChainsMockFn; + chainWallet.update({ connect: true }); + expect(connectChainsMockFn).toHaveBeenCalled() + }) + + it('should get rpc endpoint', async () => { + expect(await chainWallet.getRpcEndpoint(true)).toBe(slowRpcURL); + }) + + it('should get rest endpoint', async () => { + expect(await chainWallet.getRestEndpoint(true)).toBe(slowRestURL); + }) + + it('should get fastest rpc endpoint', async () => { + expect(await chainWallet.getRpcEndpoint()).toBe(fastRpcURL); + }) + + it('should get fastest rest endpoint', async () => { + expect(await chainWallet.getRestEndpoint()).toBe(fastRestURL); + }) + + it('should call getStargateClient correctly', async () => { + await chainWallet.getStargateClient() + expect(stargateClientConnectMock).toHaveBeenCalledWith(fastRpcURL, stargateMock) + }) + + it('should call getCosmWasmClient correctly', async () => { + await chainWallet.getCosmWasmClient() + expect(cosmwasmClientConnectMock).toHaveBeenCalledWith(fastRpcURL) + }) + + it('should call getNameService correctly', async () => { + const clientMock = expect.any(CosmWasmClient) + chainWallet.getCosmWasmClient = jest.fn().mockResolvedValue(clientMock) + await chainWallet.getNameService() + expect(NameServiceMock).toBeCalledWith(clientMock, nameServiceRegistries[0]) + }) + + it('should call initOfflineSigner correctly', async () => { + expect(() => chainWallet.initOfflineSigner()).rejects.toThrow('WalletClient is not initialized') + //mock initial client + const walletClient = { + getSimpleAccount: jest.fn(), + getOfflineSigner: jest.fn(), + } + jest.spyOn(chainWallet, 'client', 'get').mockReturnValue(walletClient); + await chainWallet.initOfflineSigner('amino') + expect(chainWallet.preferredSignType).toBe('amino') + expect(chainWallet.client.getOfflineSigner).toHaveBeenCalledWith(chainWallet.chainId, 'amino') + }) + + it('should call getSigningStargateClient correctly', async () => { + //mock initial client + const walletClient = { + getSimpleAccount: jest.fn(), + getOfflineSigner: jest.fn(), + } + chainWallet.offlineSigner = { getAccounts: jest.fn(), signAmino: jest.fn() } + jest.spyOn(chainWallet, 'client', 'get').mockReturnValue(walletClient); + await chainWallet.getSigningStargateClient() + expect(stargateClientConnectWithSignerMock).toBeCalledWith(fastRpcURL, chainWallet.offlineSigner, signingCosmwasmMock) + }) + + it('should call getSigningCosmWasmClient correctly', async () => { + //mock initial client + const walletClient = { + getSimpleAccount: jest.fn(), + getOfflineSigner: jest.fn(), + } + jest.spyOn(chainWallet, 'client', 'get').mockReturnValue(walletClient); + + //without offlineSigner + chainWallet.initOfflineSigner = jest.fn() + await chainWallet.getSigningCosmWasmClient() + expect(chainWallet.initOfflineSigner).toBeCalled() + + //with offlineSigner + chainWallet.offlineSigner = { getAccounts: jest.fn(), signAmino: jest.fn() } + await chainWallet.getSigningCosmWasmClient() + expect(cosmwasmClientConnectWithSignerMock).toBeCalledWith(fastRpcURL, chainWallet.offlineSigner, signingCosmwasmMock) + }) + + it('should call estimateFee correctly', async () => { + const encode: EncodeObject[] = [{ + typeUrl: 'typeUrl', + value: 'value' + }] + expect(() => chainWallet.estimateFee(encode)).rejects.toThrow('Address is required to estimate fee. Try connect to fetch address.') + + jest.spyOn(chainWallet, 'address', 'get').mockReturnValue('cosmos1...') + expect(() => chainWallet.estimateFee(encode)).rejects.toThrow("Gas price must be set in the client options when auto gas is used.") + + const stargateGasPrice = { + amount: expect.any(Decimal), + denom: 'uatom' + } + const simulateMock = jest.fn().mockResolvedValue(10000) + jest.spyOn(chainWallet, 'signingStargateOptions', 'get').mockReturnValue({ + gasPrice: stargateGasPrice + }) + jest.spyOn(chainWallet, 'getSigningStargateClient').mockResolvedValue({ + simulate: simulateMock + } as any) + await chainWallet.estimateFee(encode, 'stargate', 'memo', 5) + expect(simulateMock).toBeCalledWith("cosmos1...", encode, expect.any(String)) + expect(stargateCalculateFeeMock).toBeCalledWith(5 * 10000, stargateGasPrice) + }) + + it('should call sign correctly', async () => { + const encode: EncodeObject[] = [{ + typeUrl: 'typeUrl', + value: 'value' + }] + expect(() => chainWallet.sign(encode)).rejects.toThrow('Address is required to estimate fee. Try connect to fetch address.') + + const signMock = jest.fn() + const estimateFee = { amount: { denom: 'uatom', amount: 1000 } } as any + jest.spyOn(chainWallet, 'getSigningStargateClient').mockResolvedValue({ + sign: signMock + } as any) + jest.spyOn(chainWallet, 'address', 'get').mockReturnValue('cosmos1...') + jest.spyOn(chainWallet, 'estimateFee').mockResolvedValue(estimateFee) + + await chainWallet.sign(encode, 1000, 'memo', 'stargate') + expect(signMock).toBeCalledWith('cosmos1...', encode, estimateFee, 'memo') + + const fee = { amount: [{ denom: 'uatom', amount: '100000' }], gas: 'gas' } + await chainWallet.sign(encode, fee, 'memo', 'stargate') + expect(signMock).toBeCalledWith('cosmos1...', encode, fee, 'memo') + }) + + + it('should call broadcast correctly', async () => { + const broadcastTxMock = jest.fn() + const txRaw = { typeUrl: 'typeUrl' } as unknown as TxRaw + const signingStargateOptions = { + broadcastTimeoutMs: 1, + broadcastPollIntervalMs: 11 + } + + jest.spyOn(chainWallet, 'getSigningStargateClient').mockResolvedValue({ + broadcastTx: broadcastTxMock + } as any) + jest.mock('cosmjs-types/cosmos/tx/v1beta1/tx', () => ({ + TxRaw: { + encode: jest.fn().mockImplementation(() => ({ + finish: jest.fn().mockReturnValue('txRaw') + })) + } + })) + jest.spyOn(chainWallet, 'signingStargateOptions', 'get').mockReturnValue(signingStargateOptions) + + await chainWallet.broadcast(txRaw) + expect(broadcastTxMock).toBeCalledWith( + 'txRaw', + signingStargateOptions.broadcastTimeoutMs, + signingStargateOptions.broadcastPollIntervalMs + ) + }) + + it('should call signAndBroadcast correctly', async () => { + const encode: EncodeObject[] = [{ + typeUrl: 'typeUrl', + value: 'value' + }] + chainWallet.sign = jest.fn().mockResolvedValue('txRaw') + chainWallet.broadcast = jest.fn() + await chainWallet.signAndBroadcast(encode, 1000, 'memo', 'stargate') + + expect(chainWallet.sign).toBeCalledWith(encode, 1000, 'memo', 'stargate') + expect(chainWallet.broadcast).toBeCalledWith('txRaw', 'stargate') + }) + +}); + diff --git a/packages/core/__tests__/bases/main-wallet.test.ts b/packages/core/__tests__/bases/main-wallet.test.ts new file mode 100644 index 000000000..df38a5358 --- /dev/null +++ b/packages/core/__tests__/bases/main-wallet.test.ts @@ -0,0 +1,387 @@ + +import { AssetList, Chain } from '@chain-registry/types'; +import { ChainRecord, EndpointOptions, Endpoints, State, WalletStatus } from '../../src/types'; +import { mockExtensionInfo as walletInfo } from '../../test-utils/mock-extension/extension/registry'; +import { StargateClientOptions } from '@cosmjs/stargate'; +import { SigningCosmWasmClientOptions } from '@cosmjs/cosmwasm-stargate'; +import { ChainMockExtension } from '../../test-utils/mock-extension/extension/chain-wallet'; +import { MockExtensionWallet } from '../../test-utils/mock-extension/extension/main-wallet'; +import { ChainWalletBase } from '../../src/bases'; +import { COSMIFRAME_WALLET_ID } from '../../src/cosmiframe/constants'; + +function storageMock() { + let storage = {}; + + return { + setItem: function (key, value) { + storage[key] = value || ''; + }, + getItem: function (key) { + return key in storage ? storage[key] : null; + }, + removeItem: function (key) { + delete storage[key]; + }, + get length() { + return Object.keys(storage).length; + }, + key: function (i) { + const keys = Object.keys(storage); + return keys[i] || null; + } + }; +} + +const storageMockInstance = storageMock() + +// Mock global window object +global.window = { + // @ts-ignore + localStorage: storageMockInstance +} + + +describe('MainWalletBase', () => { + let mainWallet: MockExtensionWallet; + let chainWallet: ChainMockExtension; + let chainRecordMock: ChainRecord; + + + let chainMock: Chain; + let assetListMock: AssetList; + let preferredEndpointsMock: Endpoints; + let stargateMock: StargateClientOptions = expect.any(Object); + let signingCosmwasmMock: SigningCosmWasmClientOptions = expect.any(Object); + + + beforeEach(() => { + chainRecordMock = { + name: 'osmosis', + chain: chainMock, + assetList: assetListMock, + preferredEndpoints: preferredEndpointsMock, + clientOptions: { + signingStargate: undefined, + stargate: stargateMock, + signingCosmwasm: signingCosmwasmMock + } + }; + chainWallet = new ChainMockExtension(walletInfo, chainRecordMock); + mainWallet = new MockExtensionWallet(walletInfo); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should initialize MainWalletBase', () => { + expect(mainWallet).toBeDefined(); + expect(mainWallet.ChainWallet).toBe(ChainMockExtension); + expect(mainWallet.emitter).toBeDefined(); + expect(mainWallet.preferredEndpoints).toBeUndefined(); + }); + + it('should initialize the client when calling initingClient', () => { + const actionsMock = { + clientState: jest.fn(), + clientMessage: jest.fn(), + } + const initingClientMock1 = jest.fn() + const initingClientMock2 = jest.fn() + + jest.spyOn(mainWallet, 'chainWalletMap', 'get').mockReturnValue(new Map([ + ['osmosis1', { initingClient: initingClientMock1 } as any], + ['osmosis2', { initingClient: initingClientMock2 } as any] + ])) + mainWallet.setActions(actionsMock) + mainWallet.initingClient(); + expect(mainWallet.clientMutable.state).toBe(State.Pending) + expect(mainWallet.clientMutable.message).toBeUndefined(); + expect(mainWallet.clientMutable.data).toBeUndefined(); + expect(mainWallet.actions?.clientState).toHaveBeenCalledWith(State.Pending); + expect(mainWallet.actions?.clientMessage).toHaveBeenCalledWith(undefined); + expect(initingClientMock1).toHaveBeenCalled(); + expect(initingClientMock2).toHaveBeenCalled(); + }); + + it('should initialize the client when calling initingDone', () => { + const actionsMock = { + clientState: jest.fn(), + clientMessage: jest.fn(), + } + const initClientDoneMock1 = jest.fn() + const initClientDoneMock2 = jest.fn() + + jest.spyOn(mainWallet, 'chainWalletMap', 'get').mockReturnValue(new Map([ + ['osmosis1', { initClientDone: initClientDoneMock1 } as any], + ['osmosis2', { initClientDone: initClientDoneMock2 } as any] + ])) + + mainWallet.setActions(actionsMock) + const walletClient = {} as any + mainWallet.initClientDone(walletClient); + expect(mainWallet.clientMutable.state).toBe(State.Done) + expect(mainWallet.clientMutable.message).toBeUndefined(); + expect(mainWallet.clientMutable.data).toBe(walletClient); + expect(mainWallet.actions?.clientState).toHaveBeenCalledWith(State.Done); + expect(mainWallet.actions?.clientMessage).toHaveBeenCalledWith(undefined); + expect(initClientDoneMock1).toHaveBeenCalledWith(walletClient); + expect(initClientDoneMock2).toHaveBeenCalledWith(walletClient); + }); + + it('should initialize the client when calling initClientError', () => { + const actionsMock = { + clientState: jest.fn(), + clientMessage: jest.fn(), + } + const initClientErrorMock1 = jest.fn() + const initClientErrorMock2 = jest.fn() + + jest.spyOn(mainWallet, 'chainWalletMap', 'get').mockReturnValue(new Map([ + ['osmosis1', { initClientError: initClientErrorMock1 } as any], + ['osmosis2', { initClientError: initClientErrorMock2 } as any] + ])) + + mainWallet.setActions(actionsMock) + const error = new Error('error when initializing client') + mainWallet.initClientError(error); + expect(mainWallet.clientMutable.state).toBe(State.Error) + expect(mainWallet.clientMutable.message).toBe(error.message); + expect(mainWallet.actions?.clientState).toBeCalledWith(State.Error); + expect(mainWallet.actions?.clientMessage).toBeCalledWith(error.message); + expect(initClientErrorMock1).toHaveBeenCalledWith(error); + expect(initClientErrorMock2).toHaveBeenCalledWith(error); + }); + + it('should add endpoints to chain wallets', () => { + const endpoints: EndpointOptions['endpoints'] = { + 'chain1': { + rpc: ['https://rpc.chain1.com'], + rest: ['https://rest.chain1.com'], + }, + 'chain2': { + rpc: ['https://rpc.chain2.com'], + rest: ['https://rest.chain2.com'], + }, + } + const wallet1 = { chainName: 'chain1', addEndpoints: jest.fn() } + const wallet2 = { chainName: 'chain2', addEndpoints: jest.fn() } + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + wallet1, wallet2 + ] as any[]) + mainWallet.addEnpoints(endpoints); + expect(wallet1.addEndpoints).toHaveBeenCalledWith(endpoints[wallet1.chainName]); + expect(wallet2.addEndpoints).toHaveBeenCalledWith(endpoints[wallet2.chainName]); + }); + + it('should set chains', () => { + const chains = [ + { + name: 'chain1', + preferredEndpoints: { + rpc: ['https://rpc.chain1.com'], + rest: ['https://rest.chain1.com'], + }, + isLazy: true + }, + { + name: 'chain2', + preferredEndpoints: { + rpc: ['https://rpc.chain2.com'], + rest: ['https://rest.chain2.com'], + }, + }, + ]; + mainWallet.setChains(chains); + expect(mainWallet.chainWalletMap).toBeDefined(); + expect(mainWallet.chainWalletMap?.size).toBe(2); + const chainWallet1 = mainWallet.getChainWallet('chain1'); + const chainWallet2 = mainWallet.getChainWallet('chain2'); + expect(chainWallet1).toBeDefined(); + expect(chainWallet2).toBeDefined(); + expect(chainWallet1?.chainName).toBe('chain1'); + expect(chainWallet2?.chainName).toBe('chain2'); + expect(chainWallet1?.preferredEndpoints).toEqual({ + rpc: ['https://rpc.chain1.com', 'https://rpc.cosmos.directory/chain1'], + rest: ['https://rest.chain1.com', 'https://rest.cosmos.directory/chain1'], + }); + expect(chainWallet2?.preferredEndpoints).toEqual({ + rpc: ['https://rpc.chain2.com', 'https://rpc.cosmos.directory/chain2'], + rest: ['https://rest.chain2.com', 'https://rest.cosmos.directory/chain2'], + }); + }); + + + it('should get chain wallet', () => { + const chainWallet1: ChainWalletBase = { chainName: 'chain1' } as any; + const chainWallet2: ChainWalletBase = { chainName: 'chain2' } as any; + jest.spyOn(mainWallet, 'chainWalletMap', 'get').mockReturnValue( + new Map([ + ['chain1', chainWallet1], + ['chain2', chainWallet2], + ]) + ); + + const result1 = mainWallet.getChainWallet('chain1'); + const result2 = mainWallet.getChainWallet('chain2'); + const result3 = mainWallet.getChainWallet('chain3'); + + expect(result1).toBe(chainWallet1); + expect(result2).toBe(chainWallet2); + expect(result3).toBeUndefined(); + }); + + it('should get chain wallet list', () => { + const chainWallet1: ChainWalletBase = { chainName: 'chain1', isActive: true } as any; + const chainWallet2: ChainWalletBase = { chainName: 'chain2', isActive: false } as any; + const chainWallet3: ChainWalletBase = { chainName: 'chain3', isActive: true } as any; + chainWallet1.isActive = true; + chainWallet2.isActive = false; + chainWallet3.isActive = true; + jest.spyOn(mainWallet, 'chainWalletMap', 'get').mockReturnValue( + new Map([ + ['chain1', chainWallet1], + ['chain2', chainWallet2], + ['chain3', chainWallet3], + ]) + ) + const activeChainWallets = mainWallet.getChainWalletList(true); + const allChainWallets = mainWallet.getChainWalletList(false); + expect(activeChainWallets).toHaveLength(2); + expect(activeChainWallets).toContain(chainWallet1); + expect(activeChainWallets).toContain(chainWallet3); + expect(allChainWallets).toHaveLength(3); + expect(allChainWallets).toContain(chainWallet1); + expect(allChainWallets).toContain(chainWallet2); + expect(allChainWallets).toContain(chainWallet3); + }); + + it('should get global status and message', () => { + let status, message + const chainWalletConnected: ChainWalletBase = { walletStatus: WalletStatus.Connected, isWalletNotExist: false, message: 'Chain 1 connected' } as any; + const chainWalletNotExist: ChainWalletBase = { walletStatus: WalletStatus.NotExist, isWalletNotExist: true, message: 'Chain 2 not exist' } as any; + const chainWalletConnecting: ChainWalletBase = { walletStatus: WalletStatus.Connecting, isWalletConnecting: true } as any; + const chainWalletDisconnected: ChainWalletBase = { walletStatus: WalletStatus.Disconnected, isWalletDisconnected: true } as any; + const chainWalletReject: ChainWalletBase = { walletStatus: WalletStatus.Rejected, isWalletRejected: true, message: 'Chain 5 rejected' } as any; + const chainWalletError: ChainWalletBase = { walletStatus: WalletStatus.Error, isError: true, message: 'Chain 6 error' } as any; + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWalletConnected + ]); + [status, message] = mainWallet.getGlobalStatusAndMessage(); + expect(status).toBe(WalletStatus.Connected); + expect(message).toBeUndefined(); + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWalletConnected, + chainWalletNotExist + ]); + [status, message] = mainWallet.getGlobalStatusAndMessage(); + expect(status).toBe(chainWalletNotExist.walletStatus); + expect(message).toBe(chainWalletNotExist.message); + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWalletConnected, + chainWalletConnecting + ]); + [status, message] = mainWallet.getGlobalStatusAndMessage(); + expect(status).toBe(chainWalletConnecting.walletStatus); + expect(message).toBeUndefined(); + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWalletConnected, + chainWalletDisconnected + ]); + [status, message] = mainWallet.getGlobalStatusAndMessage(); + expect(status).toBe(chainWalletDisconnected.walletStatus); + expect(message).toBe('Exist disconnected wallets') + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWalletConnected, + chainWalletReject + ]); + [status, message] = mainWallet.getGlobalStatusAndMessage(); + expect(status).toBe(chainWalletReject.walletStatus); + expect(message).toBe(chainWalletReject.message); + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWalletConnected, + chainWalletError + ]); + [status, message] = mainWallet.getGlobalStatusAndMessage(); + expect(status).toBe(chainWalletError.walletStatus); + expect(message).toBe(chainWalletError.message); + + }); + + it('should update main wallet', async () => { + jest.spyOn(mainWallet, 'setData') + jest.spyOn(mainWallet, 'setMessage') + jest.spyOn(mainWallet, 'setState') + jest.spyOn(mainWallet, 'activate') + jest.spyOn(window.localStorage, 'setItem'); + await mainWallet.update(); + expect(mainWallet.setData).toBeCalledWith(undefined); + expect(mainWallet.setMessage).toBeCalledWith(undefined); + expect(mainWallet.setState).toBeCalledWith('Done'); + expect(mainWallet.activate).toBeCalledWith(); + expect(window.localStorage.setItem).toBeCalledWith('cosmos-kit@2:core//current-wallet', 'mock-extension'); + + jest.spyOn(mainWallet, 'walletStatus', 'get').mockReturnValue(WalletStatus.NotExist); + jest.spyOn(window.localStorage, 'removeItem'); + await mainWallet.update(); + expect(window.localStorage.removeItem).toBeCalledWith('cosmos-kit@2:core//current-wallet'); + }); + + it('should reset main wallet', () => { + jest.spyOn(mainWallet, 'setData') + jest.spyOn(mainWallet, 'setMessage') + jest.spyOn(mainWallet, 'setState') + jest.spyOn(mainWallet, 'inactivate') + mainWallet.reset(); + expect(mainWallet.setData).toBeCalledWith(undefined); + expect(mainWallet.setMessage).toBeCalledWith(undefined); + expect(mainWallet.setState).toBeCalledWith('Init'); + expect(mainWallet.inactivate).toBeCalled(); + }); + + it('should connect all chain wallets', async () => { + const mobileChainWallet1: ChainWalletBase = { isModeWalletConnect: true, connectChains: () => { } } as any; + const mobileChainWallet2: ChainWalletBase = { isModeWalletConnect: true, connectChains: () => { } } as any; + + const chainWallet1: ChainWalletBase = { chainName: 'chain1', connect: jest.fn() } as any; + const chainWallet2: ChainWalletBase = { chainName: 'chain1', connect: jest.fn() } as any; + const chainWalletExclude: ChainWalletBase = { chainName: 'excludeChainName', connect: jest.fn() } as any; + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + mobileChainWallet1, mobileChainWallet2 + ]) + + expect(await mainWallet.connectAll()).toBeUndefined() + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWallet1, chainWallet2, chainWalletExclude + ]) + await mainWallet.connectAll(true, 'excludeChainName') + expect(chainWallet1.connect).toBeCalled() + expect(chainWallet2.connect).toBeCalled() + expect(chainWalletExclude.connect).not.toBeCalled() + }); + + + it('should disconnect all chain wallets', async () => { + const chainWallet1: ChainWalletBase = { chainName: 'chain1', disconnect: jest.fn() } as any; + const chainWallet2: ChainWalletBase = { chainName: 'chain2', disconnect: jest.fn() } as any; + const chainWallet3: ChainWalletBase = { chainName: 'excludeChainName', disconnect: jest.fn() } as any; + + jest.spyOn(mainWallet, 'getChainWalletList').mockReturnValue([ + chainWallet1, chainWallet2, chainWallet3 + ]) + const disconnectOption = { walletconnect: { removeAllPairings: true } } + await mainWallet.disconnectAll(true, 'excludeChainName', disconnectOption); + expect(chainWallet1.disconnect).toBeCalledWith(false, disconnectOption); + expect(chainWallet1.disconnect).toBeCalledWith(false, disconnectOption); + expect(chainWallet3.disconnect).not.toBeCalled(); + }); + +}); diff --git a/packages/core/__tests__/bases/state.test.ts b/packages/core/__tests__/bases/state.test.ts new file mode 100644 index 000000000..b3fb9d575 --- /dev/null +++ b/packages/core/__tests__/bases/state.test.ts @@ -0,0 +1,135 @@ +import { StateBase } from '../../src/bases/state'; +import { DappEnv, State, WalletStatus } from '../../src/types'; + +describe('StateBase', () => { + let stateBase: StateBase; + beforeEach(() => { + stateBase = new StateBase(); + }); + + it('should initialize with state "Init"', () => { + expect(stateBase.state).toBe('Init'); + }); + + it('should set the state', () => { + stateBase.setState(State.Done); + expect(stateBase.state).toBe('Done'); + }); + + it('should set the data', () => { + const data = { foo: 'bar' }; + stateBase.setData(data); + expect(stateBase.data).toBe(data); + }); + + it('should set the message', () => { + const message = 'Hello, world!'; + stateBase.setMessage(message); + expect(stateBase.message).toBe(message); + }); + + it('should reset the state, data, and message', () => { + stateBase.setState(State.Done); + stateBase.setData({ foo: 'bar' }); + stateBase.setMessage('Hello, world!'); + stateBase.reset(); + expect(stateBase.state).toBe('Init'); + expect(stateBase.data).toBeUndefined(); + expect(stateBase.message).toBeUndefined(); + }); + + it('should set the environment', () => { + const env = { + device: 'desktop', + os: 'macos', + browser: 'chrome', + }; + stateBase.setEnv(env as DappEnv); + expect(stateBase.env).toBe(env); + }); + + it('should set the actions', () => { + const actions = { action1: jest.fn(), action2: jest.fn() }; + stateBase.setActions(actions); + expect(stateBase.actions).toBe(actions); + }); + + it('should check if it is mobile', () => { + // Mock the isMobile function + jest.spyOn(stateBase, 'env', 'get').mockReturnValue({ device: 'mobile' }); + expect(stateBase.isMobile).toBe(true); + }); + + it('should check if it is initialized', () => { + // Mock the isInit function + jest.spyOn(stateBase, 'state', 'get').mockReturnValue(State.Init); + expect(stateBase.isInit).toBe(true); + }); + + it('should check if it is done', () => { + // Mock the isDone function + jest.spyOn(stateBase, 'state', 'get').mockReturnValue(State.Done); + expect(stateBase.isDone).toBe(true); + }); + + it('should check if there is an error', () => { + // Mock the isError function + jest.spyOn(stateBase, 'state', 'get').mockReturnValue(State.Error); + expect(stateBase.isError).toBe(true); + }); + + it('should check if it is pending', () => { + // Mock the isPending function + jest.spyOn(stateBase, 'state', 'get').mockReturnValue(State.Pending); + expect(stateBase.isPending).toBe(true); + }); + + it('should get the wallet status', async () => { + let walletStatus: WalletStatus = WalletStatus.Disconnected; + // Mock the walletStatus function + expect(stateBase.walletStatus).toBe(walletStatus); + }); + + it('should check if the wallet is once connected', () => { + // Mock the isWalletOnceConnect function + jest.spyOn(stateBase, 'isWalletOnceConnect', 'get').mockReturnValue(true); + expect(stateBase.isWalletOnceConnect).toBe(true); + }); + + it('should check if the wallet is connecting', () => { + // Mock the isWalletConnecting function + jest.spyOn(stateBase, 'walletStatus', 'get').mockReturnValue(WalletStatus.Connecting); + expect(stateBase.isWalletConnecting).toBe(true); + }); + + it('should check if the wallet is connected', () => { + // Mock the isWalletConnected function + jest.spyOn(stateBase, 'walletStatus', 'get').mockReturnValue(WalletStatus.Connected); + expect(stateBase.isWalletConnected).toBe(true); + }); + + it('should check if the wallet is disconnected', () => { + // Mock the isWalletDisconnected function + jest.spyOn(stateBase, 'walletStatus', 'get').mockReturnValue(WalletStatus.Disconnected); + expect(stateBase.isWalletDisconnected).toBe(true); + }); + + it('should check if the wallet is rejected', () => { + // Mock the isWalletRejected function + jest.spyOn(stateBase, 'walletStatus', 'get').mockReturnValue(WalletStatus.Rejected); + expect(stateBase.isWalletRejected).toBe(true); + }); + + it('should check if the wallet does not exist', () => { + // Mock the isWalletNotExist function + jest.spyOn(stateBase, 'walletStatus', 'get').mockReturnValue(WalletStatus.NotExist); + expect(stateBase.isWalletNotExist).toBe(true); + }); + + it('should check if there is a wallet error', () => { + // Mock the isWalletError function + jest.spyOn(stateBase, 'walletStatus', 'get').mockReturnValue(WalletStatus.Error); + expect(stateBase.isWalletError).toBe(true); + }); + +}); diff --git a/packages/core/__tests__/bases/wallet.test.ts b/packages/core/__tests__/bases/wallet.test.ts new file mode 100644 index 000000000..d92eba2ad --- /dev/null +++ b/packages/core/__tests__/bases/wallet.test.ts @@ -0,0 +1,302 @@ +import { WalletBase } from '../../src/bases' +import { mockExtensionInfo as walletInfo } from '../../test-utils/mock-extension/extension/registry'; +import { Callbacks, DisconnectOptions, State, WalletClient } from '../../src/types'; // Replace 'path/to/callbacks' with the actual path to the Callbacks type +import { EventEmitter } from 'stream'; +import { ClientNotExistError, ConnectError, RejectedError } from '../../src/utils'; + +class WalletBaseImplement extends WalletBase { + chainName: string; + initClient(options?: any): void | Promise { + throw new Error('Method not implemented.'); + } + update(): void | Promise { + throw new Error('Method not implemented.'); + } +} + +function storageMock() { + let storage = {}; + + return { + setItem: function (key, value) { + storage[key] = value || ''; + }, + getItem: function (key) { + return key in storage ? storage[key] : null; + }, + removeItem: function (key) { + delete storage[key]; + }, + get length() { + return Object.keys(storage).length; + }, + key: function (i) { + const keys = Object.keys(storage); + return keys[i] || null; + } + }; +} + +const storageMockInstance = storageMock() + +// Mock global window object +global.window = { + // @ts-ignore + localStorage: storageMockInstance +} + +describe('WalletBase', () => { + let wallet: WalletBaseImplement; + + beforeEach(() => { + wallet = new WalletBaseImplement(walletInfo); + wallet.chainName = 'cosmoshub-4' + }); + + afterEach(() => { + // Clean up + }); + + it('should initialize with the correct wallet info', () => { + expect(wallet.walletInfo.name).toBe('mock-extension'); + expect(wallet.walletInfo.prettyName).toBe('Mock'); + }); + + it('should get appUrl', () => { + const client: WalletClient = { + getSimpleAccount: jest.fn(), + appUrl: { + state: State.Done, + data: { + native: 'http://native.com' + } + } + }; + jest.spyOn(wallet, 'client', 'get').mockReturnValue(client); + expect(wallet.appUrl).toMatchObject({ state: 'Done', data: { native: 'http://native.com' } }) + }) + + it('should get qrUrl', () => { + const client: WalletClient = { + getSimpleAccount: jest.fn(), + qrUrl: { + state: State.Done, + data: 'http://qrl.com' + } + }; + jest.spyOn(wallet, 'client', 'get').mockReturnValue(client); + expect(wallet.qrUrl).toMatchObject({ state: 'Done', data: 'http://qrl.com' }) + }) + + it('should activate the wallet', () => { + wallet.activate(); + expect(wallet.isActive).toBe(true); + }); + + it('should inactivate the wallet', () => { + wallet.inactivate(); + expect(wallet.isActive).toBe(false); + }); + + it('should set walletInfo when constructor', () => { + expect(wallet.walletInfo).toBe(walletInfo); + }) + + it('should get client data', () => { + const client: WalletClient = { getSimpleAccount: jest.fn() }; + jest.spyOn(wallet, 'client', 'get').mockReturnValue(client); + expect(wallet.client).toBe(client) + }) + + it('should initialize the client', () => { + wallet.initingClient(); + expect(wallet.clientMutable.state).toBe(State.Pending); + expect(wallet.clientMutable.message).toBeUndefined(); + expect(wallet.clientMutable.data).toBeUndefined(); + }); + + it('should set the client after initialization', () => { + const client: WalletClient = { getSimpleAccount: jest.fn() }; + wallet.initClientDone(client); + expect(wallet.clientMutable.data).toBe(client); + expect(wallet.clientMutable.state).toBe(State.Done); + expect(wallet.clientMutable.message).toBeUndefined(); + }); + + it('should set the error message after client initialization error', () => { + const error = new Error('Client initialization error'); + wallet.initClientError(error); + expect(wallet.clientMutable.message).toBe('Client initialization error'); + expect(wallet.clientMutable.state).toBe(State.Error); + }); + + it('should get the wallet name', () => { + expect(wallet.walletName).toBe('mock-extension'); + }); + + it('should get the wallet pretty name', () => { + expect(wallet.walletPrettyName).toBe('Mock'); + }); + + it('should return true for isModeExtension when wallet mode is extension', () => { + expect(wallet.isModeExtension).toBe(true); + }); + + it('should return false for isModeWalletConnect when wallet mode is not WalletConnect', () => { + expect(wallet.isModeWalletConnect).toBe(false); + }); + + it('should get right download info', async () => { + jest.spyOn(wallet, 'env', 'get').mockReturnValue({ device: 'desktop', browser: 'chrome', os: 'ios' }); + expect(wallet.downloadInfo).toMatchObject({ + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/mock-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }); + + jest.spyOn(wallet, 'env', 'get').mockReturnValue({}); + expect(wallet.downloadInfo).toMatchObject({ + link: 'https://chrome.google.com/webstore/detail/mock-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + },); + }); + + it('should get the reject message source', () => { + expect(wallet.rejectMessageSource).toBe('Request rejected'); + + jest.spyOn(wallet, 'walletInfo', 'get').mockReturnValue({ + rejectMessage: 'reject Message define as string' + } as any); + expect(wallet.rejectMessageSource).toBe('reject Message define as string'); + }); + + + it('should get the reject message target', () => { + jest.spyOn(wallet, 'walletInfo', 'get').mockReturnValue({ + rejectMessage: { + target: 'Target reject Message define as target' + } + } as any); + expect(wallet.rejectMessageTarget).toBe('Target reject Message define as target'); + + jest.spyOn(wallet, 'walletInfo', 'get').mockReturnValue({ + rejectMessage: 'Target reject Message define as string' + } as any); + expect(wallet.rejectMessageTarget).toBe(undefined); + }); + + it('should get the reject code', () => { + expect(wallet.rejectCode).toBe(404); + }); + + it('should register and call update callbacks', () => { + const callback1: Callbacks = { + beforeConnect: jest.fn(), + } + + const callback2 = { + beforeConnect: jest.fn(), + beforeDisconnect: jest.fn(), + afterConnect: jest.fn(), + } + wallet.updateCallbacks(callback1); + expect(wallet.callbacks).toMatchObject(callback1) + wallet.updateCallbacks(callback2); + expect(wallet.callbacks).toMatchObject(callback2) + }); + + it('should call disconnect method with sync and options parameters', async () => { + const sync = true; + const options: DisconnectOptions = { + walletconnect: { + removeAllPairings: true + } + }; + const callbacks: Callbacks = { + beforeDisconnect: jest.fn(), + afterDisconnect: jest.fn() + } + const walletClient = { + getSimpleAccount: jest.fn(), + disconnect: jest.fn() + } + + wallet.emitter = new EventEmitter(); + const emitMock = jest.spyOn(wallet.emitter, 'emit').mockImplementation((event, chainName) => true) + const resetMock = jest.spyOn(wallet, 'reset').mockImplementation(() => true) + + const localStorageRemoveItemMock = jest.spyOn(window.localStorage, 'removeItem'); + + wallet.updateCallbacks(callbacks) + wallet.initClientDone(walletClient) + + await wallet.disconnect(sync, options); + + expect(callbacks.beforeDisconnect).toHaveBeenCalled() + expect(callbacks.afterDisconnect).toHaveBeenCalled() + expect(walletClient.disconnect).toHaveBeenCalledWith(options) + expect(emitMock).toHaveBeenCalledWith('sync_disconnect', 'cosmoshub-4') + expect(resetMock).toHaveBeenCalled() + expect(localStorageRemoveItemMock).toBeCalledWith("cosmos-kit@2:core//current-wallet") + }); + + + it('should set the client as not exist', () => { + wallet.setClientNotExist(); + expect(wallet.mutable).toMatchObject({ message: ClientNotExistError.message, state: State.Error }) + + const error = new Error('what ever error message'); + wallet.setClientNotExist(error); + expect(wallet.mutable).toMatchObject({ message: ClientNotExistError.message, state: State.Error }) + }); + + it('should set the wallet as rejected', () => { + wallet.setRejected(); + expect(wallet.mutable).toMatchObject({ message: RejectedError.message, state: State.Error }); + + const error = new Error('what ever error message'); + wallet.setRejected(error); + expect(wallet.mutable).toMatchObject({ message: RejectedError.message, state: State.Error }); + }); + + it('should set the error message', () => { + const errorMessage = 'Test error message'; + wallet.setError(errorMessage); + expect(wallet.mutable).toMatchObject({ message: errorMessage, state: State.Error }); + + wallet.throwErrors = true; + expect(() => wallet.setError(errorMessage)).toThrowError(errorMessage) + + wallet.throwErrors = 'connect_only' + expect(() => wallet.setError(new ConnectError('connect error'))).toThrowError('connect error') + }); + + it('should connect to the wallet', async () => { + const sync = true; + const callbacks: Callbacks = { + beforeConnect: jest.fn(), + afterConnect: jest.fn() + } + const walletClient = { + getSimpleAccount: jest.fn(), + connect: jest.fn() + } + wallet.emitter = new EventEmitter(); + const emitMock = jest.spyOn(wallet.emitter, 'emit').mockImplementation((event, chainName) => true) + const updateMock = jest.spyOn(wallet, 'update').mockImplementation(() => { }) + + wallet.updateCallbacks(callbacks) + wallet.initClientDone(walletClient) + await wallet.connect(sync); + expect(callbacks.beforeConnect).toHaveBeenCalled() + expect(callbacks.afterConnect).toHaveBeenCalled() + expect(emitMock).toHaveBeenCalledWith('sync_connect', 'cosmoshub-4') + expect(updateMock).toHaveBeenCalled() + + jest.spyOn(wallet, 'isMobile', 'get').mockReturnValue(true); + jest.spyOn(wallet, 'walletInfo', 'get').mockReturnValue({ mobileDisabled: true } as any); + const setErrorMock = jest.spyOn(wallet, 'setError').mockImplementation(() => { }) + await wallet.connect(sync); + expect(setErrorMock).toBeCalledWith(new ConnectError('This wallet is not supported on mobile, please use desktop browsers.')) + }); + +}); diff --git a/packages/core/__tests__/manager.test.ts b/packages/core/__tests__/manager.test.ts new file mode 100644 index 000000000..a2a1732b6 --- /dev/null +++ b/packages/core/__tests__/manager.test.ts @@ -0,0 +1,349 @@ +import { WalletConnectOptions } from './../src/types/wallet'; +import { EndpointOptions, SessionOptions, SignerOptions } from './../src/types/manager'; +import { assets } from 'chain-registry'; +import { MainWalletBase } from '../src/bases'; +import { WalletManager } from '../src/manager'; +import { convertChain, Logger, WalletNotProvidedError } from '../src/utils'; +import { EventEmitter } from 'stream'; +import { wallets } from '../test-utils/mock-extension'; +import { WalletRepo } from '../src/repository'; + +const getLogo = (chainName: string) => { + const asset = assets.find(a => a.chain_name === chainName); + return asset?.assets[0].logo_URIs?.svg || asset?.assets[0].logo_URIs?.png || undefined +} + +function storageMock() { + let storage = {}; + + return { + setItem: function (key, value) { + storage[key] = value || ''; + }, + getItem: function (key) { + return key in storage ? storage[key] : null; + }, + removeItem: function (key) { + delete storage[key]; + }, + get length() { + return Object.keys(storage).length; + }, + key: function (i) { + const keys = Object.keys(storage); + return keys[i] || null; + } + }; +} + +const storageMockInstance = storageMock() + +// Mock global window object +global.window = { + // @ts-ignore + localStorage: storageMockInstance, + dispatchEvent: jest.fn(), + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + navigator: { + userAgent: 'jest' + } as any +} + + +jest.mock('bowser', () => { + const originalModule = jest.requireActual('bowser') + return { + ...originalModule, + getParser: jest.fn().mockReturnValue({ + getBrowserName: jest.fn().mockReturnValue('firefox'), + getOSName: jest.fn().mockReturnValue('windows'), + getPlatform: jest.fn().mockReturnValue({ type: 'mobile' }), + }) + } +}) + +describe('WalletManager', () => { + + let chainNames = ['osmosis', 'juno'] + let walletManager: WalletManager; + let throwErrors = true + let subscribeConnectEvents = true + let allowedCosmiframeParentOrigins: string[] = [] + let logger = new Logger() + let sessionOptions: SessionOptions = { duration: 100 } + let NameServiceName = 'testNameServiceName' + let walletConnectOptions: WalletConnectOptions = { + signClient: { projectId: 'testProjectId' } + } + let signerOptions: SignerOptions = {} + let endpointOptions: EndpointOptions = { + isLazy: true, + } + + const walletMock = wallets[0] + const mainWallets: MainWalletBase[] = [walletMock] + const getNameServiceRegistryFromNameMock = jest.fn() + beforeEach(() => { + + jest.mock('../src/utils', () => ({ + getNameServiceRegistryFromName: getNameServiceRegistryFromNameMock + })) + + + walletManager = new WalletManager( + chainNames, + mainWallets, + logger, + throwErrors, + subscribeConnectEvents, + allowedCosmiframeParentOrigins, + assets, + NameServiceName, + walletConnectOptions, + signerOptions, + endpointOptions, + sessionOptions + ) + }) + + afterEach(() => { + jest.clearAllMocks() + }) + + it('should have right instance', () => { + expect(walletManager.throwErrors).toBeTruthy() + expect(walletManager.logger).toBe(logger) + expect(walletManager.coreEmitter).toBeInstanceOf(EventEmitter) + expect(walletManager.defaultNameService).toBe(NameServiceName) + expect(walletManager.walletConnectOptions).toBe(walletConnectOptions) + }) + + it('should initialize wallet manager', () => { + + jest.spyOn(walletMock, 'setChains') + + walletManager.init( + chainNames, + assets, + mainWallets, + walletConnectOptions, + signerOptions, + endpointOptions + ); + + expect(walletManager.isLazy).toBe(endpointOptions.isLazy) + expect(walletManager.chainRecords).toMatchObject(chainNames.map(c => convertChain(c, assets, {}, {}, endpointOptions.isLazy))) + walletManager.mainWallets.forEach(w => { + expect(w.logger).toBe(walletManager.logger) + expect(w.throwErrors).toBe(walletManager.throwErrors) + expect(w.session).toBe(walletManager.session) + expect(w.walletConnectOptions).toBe(walletManager.walletConnectOptions) + expect(w.setChains).toBeCalledWith(walletManager.chainRecords) + }) + }); + + it('should set wallet repel value', () => { + const value = false; + + jest.spyOn(window.localStorage, 'setItem') + + walletManager.setWalletRepel(value); + expect(walletManager.repelWallet).toBe(value); + walletManager.walletRepos.forEach((repo) => { + expect(repo.repelWallet).toBe(value); + }) + + expect(window.localStorage.setItem).toBeCalledWith("cosmos-kit@2:core//repel-wallet", value.toString()) + }); + + it('should add endpoints', () => { + jest.spyOn(walletMock, 'addEnpoints') + + const endpoints: EndpointOptions['endpoints'] = { + 'chain1': { + rest: ['http://rest.localhost:1317'], + rpc: ['http://rpc.localhost:26657'] + }, + 'chain2': { + rest: ['http://rest.localhost:1317'], + rpc: ['http://rpc.localhost:26657'] + } + }; + + walletManager.addEndpoints(endpoints); + + walletManager.mainWallets.forEach(mw => { + expect(mw.addEnpoints).toBeCalledWith(endpoints) + }) + }); + + it('should addChains functional', () => { + walletManager.addChains(['osmosis'], assets); + expect(walletManager.chainRecords).toHaveLength(2) + expect(walletManager.walletRepos).toHaveLength(2) + walletManager.addChains(['stargaze'], assets); + expect(walletManager.chainRecords).toHaveLength(3) + expect(walletManager.walletRepos).toHaveLength(3) + }); + + it('should register event handlers with on()', () => { + const event = 'refresh_connection'; + const handler = jest.fn(); + walletManager.on(event, handler); + expect(walletManager.coreEmitter.listenerCount(event)).toBe(1); + expect(walletManager.coreEmitter.listeners(event)).toContain(handler); + }); + + it('should unregister event handlers with off()', () => { + const event = 'refresh_connection'; + const handler = jest.fn(); + walletManager.on(event, handler); + walletManager.off(event, handler); + expect(walletManager.coreEmitter.listenerCount(event)).toBe(0); + expect(walletManager.coreEmitter.listeners(event)).not.toContain(handler); + }); + + it('should activeRepos return right active wallet repose', () => { + const walletRepos: WalletRepo[] = [{ isActive: true }, { isActive: false }, { isActive: true }] as any + walletManager.walletRepos = walletRepos; + expect(walletManager.activeRepos).toHaveLength(2) + }); + + it('should getMainWallet return right wallet', () => { + const chainName1 = 'mock-extension'; + const mainWallet1 = walletManager.getMainWallet(chainName1); + expect(mainWallet1).toBe(walletMock); + + const chainName2 = 'mock-extension-non-existent'; + expect(() => walletManager.getMainWallet(chainName2)).toThrowError(new WalletNotProvidedError('mock-extension-non-existent')) + }); + + it('should getWalletRepo return right wallet repo', () => { + const chainName1 = 'osmosis'; + const walletRepo1 = walletManager.getWalletRepo(chainName1); + expect(walletRepo1).toBeInstanceOf(WalletRepo); + expect(walletRepo1.chainName).toBe(chainName1); + const chainName2 = 'juno'; + const walletRepo2 = walletManager.getWalletRepo(chainName2); + expect(walletRepo2).toBeInstanceOf(WalletRepo); + expect(walletRepo2.chainName).toBe(chainName2); + const chainName3 = 'non-existent-chain'; + expect(() => walletManager.getWalletRepo(chainName3)).toThrowError(new Error(`Chain ${chainName3} is not provided.`)); + }); + + it('should getChainWallet return right chain wallet', () => { + const chainName1 = 'osmosis'; + const walletName1 = 'mock-extension'; + const chainWallet1 = walletManager.getChainWallet(chainName1, walletName1); + expect(chainWallet1.chainName).toBe(chainName1); + expect(chainWallet1.walletName).toBe(walletName1); + + const chainName2 = 'juno'; + const walletName2 = 'mock-extension'; + const chainWallet2 = walletManager.getChainWallet(chainName2, walletName2); + expect(chainWallet2.chainName).toBe(chainName2); + expect(chainWallet2.walletName).toBe(walletName2); + + const chainName3 = 'non-existent-chain'; + const walletName3 = 'mock-extension'; + expect(() => walletManager.getChainWallet(chainName3, walletName3)).toThrowError(new Error(`${chainName3} is not provided!`)); + const chainName4 = 'osmosis'; + const walletName4 = 'non-existent-wallet'; + expect(() => walletManager.getChainWallet(chainName4, walletName4)).toThrowError(new WalletNotProvidedError('non-existent-wallet')); + }); + + it('should getChainRecord return right chain record', () => { + const chainName1 = 'osmosis'; + const chainRecord1 = walletManager.getChainRecord(chainName1); + expect(chainRecord1.name).toBe(chainName1); + const chainName2 = 'juno'; + const chainRecord2 = walletManager.getChainRecord(chainName2); + expect(chainRecord2.name).toBe(chainName2); + const chainName3 = 'non-existent-chain'; + expect(() => walletManager.getChainRecord(chainName3)).toThrowError(new Error(`${chainName3} is not provided!`)); + }); + + it('should getChainLog return right logo url', () => { + const chainName1 = 'osmosis'; + const logo1 = getLogo(chainName1) as string + const chainLogo1 = walletManager.getChainLogo(chainName1); + expect(chainLogo1).toBe(logo1); + + const chainName2 = 'juno'; + const logo2 = getLogo(chainName2) as string + const chainLogo2 = walletManager.getChainLogo(chainName2); + expect(chainLogo2).toBe(logo2); + }); + + it('should getNameService return the error for unknown NameService', async () => { + getNameServiceRegistryFromNameMock.mockReturnValue(undefined) + await expect(walletManager.getNameService()).rejects.toThrowError(new Error('Unknown defaultNameService testNameServiceName')) + + getNameServiceRegistryFromNameMock.mockReturnValue({ chainName: 'osmosis' }) + jest.spyOn(walletManager, 'getWalletRepo').mockImplementation(() => { + return { + getNameService: jest.fn() + } as any + }) + await walletManager.getNameService() + expect(walletManager.getWalletRepo).toBeCalledWith('osmosis') + + await walletManager.getNameService('test') + expect(walletManager.getWalletRepo).toBeCalledWith('test') + }); + + // it('should handle Cosmiframe Keystore Change Event', () => { + // const event = new MessageEvent(COSMIFRAME_KEYSTORECHANGE_EVENT); + // console.log("a", event) + // walletManager._handleCosmiframeKeystoreChangeEvent(event); + // expect(window.dispatchEvent).toBeCalledWith(new Event(COSMIFRAME_KEYSTORECHANGE_EVENT)) + // }); + + it('should call onMounted function', async () => { + jest.spyOn(walletManager, 'setEnv') + const env = { "browser": "firefox", "device": "mobile", "os": "windows" } + walletManager.cosmiframeEnabled = true + walletManager.walletRepos = [{ setEnv: jest.fn() }, { setEnv: jest.fn() }, { setEnv: jest.fn() }] as any + walletManager.mainWallets = [ + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event1', 'event2'] }, initClient: jest.fn() }, + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event1', 'event2'] }, initClient: jest.fn() }, + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event1', 'event2'] }, initClient: jest.fn() }] as any + await walletManager.onMounted() + expect(window.addEventListener).toBeCalledWith('message', walletManager._handleCosmiframeKeystoreChangeEvent) + expect(walletManager.setEnv).toBeCalledWith(env) + walletManager.walletRepos.forEach(wr => { + expect(wr.setEnv).toBeCalledWith(env) + }) + }); + + it('should binding events when call onMounted function', async () => { + const env = { "browser": "firefox", "device": "mobile", "os": "windows" } + walletManager.mainWallets = [ + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event11', 'event12'] }, initClient: jest.fn() }, + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event21', 'event22'] }, initClient: jest.fn() }, + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event31', 'event32'] }, initClient: jest.fn() }] as any + await walletManager.onMounted() + walletManager.mainWallets.forEach(w => { + expect(w.setEnv).toBeCalledWith(env) + }) + expect(window.addEventListener).toBeCalledTimes(6) + }) + + it('should call onUnmounted function', () => { + walletManager.cosmiframeEnabled = true + walletManager.onUnmounted(); + expect(window.removeEventListener).toBeCalledWith('message', walletManager._handleCosmiframeKeystoreChangeEvent); + }); + + it('should binding events when call onUnmounted function', async () => { + walletManager.mainWallets = [ + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event11', 'event12'] }, initClient: jest.fn() }, + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event21', 'event22'] }, initClient: jest.fn() }, + { setEnv: jest.fn(), walletInfo: { connectEventNamesOnWindow: ['event31', 'event32'] }, initClient: jest.fn() }] as any + await walletManager.onUnmounted() + + expect(window.removeEventListener).toBeCalledTimes(6) + }) + +}); diff --git a/packages/core/__tests__/name-serveice-class.test.ts b/packages/core/__tests__/name-serveice-class.test.ts new file mode 100644 index 000000000..ca8ad5de1 --- /dev/null +++ b/packages/core/__tests__/name-serveice-class.test.ts @@ -0,0 +1,55 @@ +import type { CosmWasmClient } from '@cosmjs/cosmwasm-stargate'; +import { NameServiceRegistry } from '../src/types'; +import { NameService } from '../src/name-service'; + + +describe('NameService', () => { + const mockClient: CosmWasmClient = {} as CosmWasmClient; + const mockRegistry: NameServiceRegistry = {} as NameServiceRegistry; + + it('Instantiates correctly', () => { + const nameService = new NameService(mockClient, mockRegistry); + expect(nameService.client).toEqual(mockClient); + expect(nameService.registry).toEqual(mockRegistry); + }); + + it('Resolves a name for a given address', async () => { + const mockAddress = 'cosmos1abcdefg'; + const mockResult = { name: 'Alice' }; + + mockRegistry.contract = 'registryContract'; + mockRegistry.getQueryMsg = jest.fn().mockReturnValue('queryMsg'); + + mockClient.queryContractSmart = jest.fn().mockResolvedValue(mockResult); + + const nameService = new NameService(mockClient, mockRegistry); + const result = await nameService.resolveName(mockAddress); + + expect(mockRegistry.getQueryMsg).toHaveBeenCalledWith(mockAddress); + expect(mockClient.queryContractSmart).toHaveBeenCalledWith( + mockRegistry.contract, + 'queryMsg' + ); + expect(result).toEqual(mockResult); + }); + + it('Returns undefined if an error occurs during name resolution', async () => { + jest.spyOn(console, 'error').mockImplementation(() => { }); + const mockAddress = 'cosmos1abcdefg'; + + mockRegistry.contract = 'registryContract'; + mockRegistry.getQueryMsg = jest.fn().mockReturnValue('queryMsg'); + + mockClient.queryContractSmart = jest.fn().mockRejectedValue(new Error('Query failed')); + + const nameService = new NameService(mockClient, mockRegistry); + const result = await nameService.resolveName(mockAddress); + + expect(mockRegistry.getQueryMsg).toHaveBeenCalledWith(mockAddress); + expect(mockClient.queryContractSmart).toHaveBeenCalledWith( + mockRegistry.contract, + 'queryMsg' + ); + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/core/__tests__/repository.test.ts b/packages/core/__tests__/repository.test.ts new file mode 100644 index 000000000..6345fde66 --- /dev/null +++ b/packages/core/__tests__/repository.test.ts @@ -0,0 +1,286 @@ +import { ChainWalletBase } from '../src/bases'; +import { WalletRepo } from '../src/repository'; +import { ChainRecord, DappEnv } from '../src/types'; +import { chains, assets } from 'chain-registry'; +import { StargateClient } from '@cosmjs/stargate'; +import { CosmWasmClient } from '@cosmjs/cosmwasm-stargate'; +import { NameService } from '../src/name-service'; + +describe('WalletRepo', () => { + let walletRepo: WalletRepo; + let chainRecord: ChainRecord; + let wallets: ChainWalletBase[] + beforeEach(() => { + // Create a new instance of WalletRepo before each test + chainRecord = { + name: 'test-chain', + chain: chains.find(c => c.chain_name === 'osmosis'), + assetList: assets.find(a => a.chain_name === 'osmosis') + } + wallets = [ + { + walletName: 'test-wallet-1', + updateCallbacks: jest.fn(), + walletInfo: { mobileDisabled: true } + } as any, + { + walletName: 'test-wallet-2', + updateCallbacks: jest.fn(), + walletInfo: { mobileDisabled: true } + } as any, + { + walletName: 'test-wallet-mobile1', + updateCallbacks: jest.fn(), + walletInfo: { mobileDisabled: false } + } as any, + { + walletName: 'test-wallet-mobile2', + updateCallbacks: jest.fn(), + walletInfo: { mobileDisabled: () => false } + } + ] + walletRepo = new WalletRepo(chainRecord, wallets); + }); + + afterEach(() => { + jest.clearAllMocks(); + }) + + it('should initialize with default values', () => { + expect(walletRepo.isActive).toBe(false); + expect(walletRepo.chainRecord).toEqual(chainRecord); + expect(walletRepo.namespace).toBe('cosmos'); + expect(walletRepo.repelWallet).toBe(true); + expect(walletRepo.fetchInfo).toBe(false); + }); + + it('should set environment', () => { + const wallets = Array.from({ length: 3 }).map(() => { + return { setEnv: jest.fn() } as unknown as ChainWalletBase; + }) + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue(wallets); + const env: DappEnv = { + device: 'desktop', + os: 'windows', + browser: 'chrome', + }; + + walletRepo.setEnv(env); + expect(walletRepo.env).toEqual(env); + walletRepo.wallets.forEach((wallet) => { + expect(wallet.setEnv).toBeCalledWith(env); + }); + }); + + it('should activate', () => { + const wallets = Array.from({ length: 3 }).map(() => { + return { activate: jest.fn() } as unknown as ChainWalletBase; + }) + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue(wallets); + walletRepo.activate(); + expect(walletRepo.isActive).toEqual(true); + walletRepo.wallets.forEach((wallet) => { + expect(wallet.activate).toBeCalledWith(); + }); + }) + + it('should get chain name', () => { + const chainName = walletRepo.chainName; + expect(chainName).toBe('test-chain'); + }); + + it('should get chain logo', () => { + const chainLogo = walletRepo.chainLogo; + const uri = chainRecord.assetList?.assets[0]?.logo_URIs?.svg || chainRecord.assetList?.assets[0]?.logo_URIs?.png || undefined; + expect(chainLogo).toBe(uri) + }); + + it('should get wallets', () => { + expect(walletRepo.wallets).toEqual(wallets); + }); + + it('should get platform enabled wallets', () => { + expect(walletRepo.platformEnabledWallets).toBe(wallets); + + jest.spyOn(walletRepo, 'isMobile', 'get').mockReturnValue(true); + + expect(walletRepo.platformEnabledWallets).toHaveLength(2) + + }); + + it('should check if it is a single wallet', () => { + expect(walletRepo.isSingleWallet).toBe(false); + const multipleWallets = [ + { + walletName: 'test-wallet-1', + } as any + ]; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue(multipleWallets); + expect(walletRepo.isSingleWallet).toBe(true); + }); + + it('should get current wallet', async () => { + const currentWallet = { + walletName: 'test-wallet-1', + } as any; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([currentWallet]); + expect(walletRepo.current).toBe(currentWallet); + + + walletRepo.logger = { warn: jest.fn() } as any + walletRepo.repelWallet = false; + expect(walletRepo.current).toBeUndefined(); + }); + + it('should get wallet by name', () => { + expect(walletRepo.getWallet('test-wallet-1')).toBe(wallets[0]); + expect(walletRepo.getWallet('non-existent-wallet')).toBeUndefined(); + }); + + it('should open view', () => { + const actions = { + viewWalletRepo: jest.fn(), + viewOpen: jest.fn(), + }; + walletRepo.actions = actions; + walletRepo.openView(); + expect(actions.viewWalletRepo).toHaveBeenCalledWith(walletRepo); + expect(actions.viewOpen).toHaveBeenCalledWith(true); + }); + + it('should close view', () => { + const actions = { + viewOpen: jest.fn(), + }; + walletRepo.actions = actions; + walletRepo.closeView(); + expect(actions.viewOpen).toHaveBeenCalledWith(false); + }); + + it('should connect wallet', async () => { + const wallet = { connect: jest.fn() }; + walletRepo.getWallet = jest.fn().mockReturnValue(wallet); + jest.spyOn(walletRepo, 'openView'); + await walletRepo.connect('test-wallet-1'); + expect(wallet.connect).toHaveBeenCalledWith(true); + + await walletRepo.connect(); + expect(walletRepo.openView).toHaveBeenCalled(); + }); + + it('should disconnect wallet', async () => { + const options = { + walletconnect: { + removeAllPairings: true + } + } + + const walletToGet = { disconnect: jest.fn() }; + const currentWallet = { disconnect: jest.fn() } + jest.spyOn(walletRepo, 'getWallet').mockReturnValue(walletToGet as any); + jest.spyOn(walletRepo, 'current', 'get').mockReturnValue(currentWallet as any); + + await walletRepo.disconnect('test-wallet-1', true, options); + expect(walletToGet.disconnect).toHaveBeenCalledWith(true, options); + + await walletRepo.disconnect(); + expect(currentWallet.disconnect).toHaveBeenCalledWith(true, undefined) + }); + + it('should get RPC endpoint', async () => { + const wallet1 = { getRpcEndpoint: jest.fn().mockRejectedValue('error1') }; + const wallet2 = { getRpcEndpoint: jest.fn().mockResolvedValue('endpoint') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([wallet1, wallet2] as any); + const result = await walletRepo.getRpcEndpoint(); + expect(result).toBe('endpoint'); + expect(wallet1.getRpcEndpoint).toHaveBeenCalled(); + expect(wallet2.getRpcEndpoint).toHaveBeenCalled(); + + const walletRpcEndpointError1 = { getRpcEndpoint: jest.fn().mockRejectedValue('error1') }; + const walletRpcEndpointError2 = { getRpcEndpoint: jest.fn().mockRejectedValue('error2') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([walletRpcEndpointError1, walletRpcEndpointError2] as any); + await expect(walletRepo.getRpcEndpoint()).rejects.toEqual(`No valid RPC endpoint for chain ${walletRepo.chainName}!`); + expect(walletRpcEndpointError1.getRpcEndpoint).toHaveBeenCalled(); + expect(walletRpcEndpointError2.getRpcEndpoint).toHaveBeenCalled(); + }); + + it('should get REST endpoint', async () => { + const wallet1 = { getRestEndpoint: jest.fn().mockRejectedValue('error1') }; + const wallet2 = { getRestEndpoint: jest.fn().mockResolvedValue('endpoint') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([wallet1, wallet2] as any); + const result = await walletRepo.getRestEndpoint(); + expect(result).toBe('endpoint'); + expect(wallet1.getRestEndpoint).toHaveBeenCalled(); + expect(wallet2.getRestEndpoint).toHaveBeenCalled(); + + const walletRestEndpointError1 = { getRestEndpoint: jest.fn().mockRejectedValue('error1') }; + const walletRestEndpointError2 = { getRestEndpoint: jest.fn().mockRejectedValue('error2') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([walletRestEndpointError1, walletRestEndpointError2] as any); + await expect(walletRepo.getRestEndpoint()).rejects.toEqual(`No valid REST endpoint for chain ${walletRepo.chainName}!`); + expect(walletRestEndpointError1.getRestEndpoint).toHaveBeenCalled(); + expect(walletRestEndpointError2.getRestEndpoint).toHaveBeenCalled(); + }); + + it('should get Stargate client', async () => { + const walletStargate1: StargateClient = { chainId: 'stargate1' } as any + const walletStargate2: StargateClient = { chainId: 'stargate2' } as any + const wallet1 = { getStargateClient: jest.fn().mockRejectedValue(walletStargate1) }; + const wallet2 = { getStargateClient: jest.fn().mockResolvedValue(walletStargate2) }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([wallet1, wallet2] as any); + const result = await walletRepo.getStargateClient(); + expect(result).toBe(walletStargate2); + expect(wallet1.getStargateClient).toHaveBeenCalled(); + expect(wallet2.getStargateClient).toHaveBeenCalled(); + + const walletStargateClientError1 = { getStargateClient: jest.fn().mockRejectedValue('error1') }; + const walletStargateClientError2 = { getStargateClient: jest.fn().mockRejectedValue('error2') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([walletStargateClientError1, walletStargateClientError2] as any); + await expect(walletRepo.getStargateClient()).rejects.toEqual(`Something wrong! Probably no valid RPC endpoint for chain ${walletRepo.chainName}.`); + expect(walletStargateClientError1.getStargateClient).toHaveBeenCalled(); + expect(walletStargateClientError2.getStargateClient).toHaveBeenCalled(); + }); + + it('should get CosmWasm client', async () => { + const walletCosmWasm1: CosmWasmClient = { chainId: 'cosmwasm1' } as any; + const walletCosmWasm2: CosmWasmClient = { chainId: 'cosmwasm2' } as any; + const wallet1 = { getCosmWasmClient: jest.fn().mockRejectedValue(walletCosmWasm1) }; + const wallet2 = { getCosmWasmClient: jest.fn().mockResolvedValue(walletCosmWasm2) }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([wallet1, wallet2] as any); + const result = await walletRepo.getCosmWasmClient(); + expect(result).toBe(walletCosmWasm2); + expect(wallet1.getCosmWasmClient).toHaveBeenCalled(); + expect(wallet2.getCosmWasmClient).toHaveBeenCalled(); + + const walletCosmWasmClientError1 = { getCosmWasmClient: jest.fn().mockRejectedValue('error1') }; + const walletCosmWasmClientError2 = { getCosmWasmClient: jest.fn().mockRejectedValue('error2') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([walletCosmWasmClientError1, walletCosmWasmClientError2] as any); + await expect(walletRepo.getCosmWasmClient()).rejects.toEqual(`Something wrong! Probably no valid RPC endpoint for chain ${walletRepo.chainName}.`); + expect(walletCosmWasmClientError1.getCosmWasmClient).toHaveBeenCalled(); + expect(walletCosmWasmClientError2.getCosmWasmClient).toHaveBeenCalled(); + }); + + it('should get NameService', async () => { + const walletNameService1: NameService = { + client: { chainId: 'nameservice1' }, + registry: { name: 'icns1' } + } as any; + const walletNameService2: NameService = { + client: { chainId: 'nameservice2' }, + registry: { name: 'icns2' } + } as any; + const wallet1 = { getNameService: jest.fn().mockRejectedValue(walletNameService1) }; + const wallet2 = { getNameService: jest.fn().mockResolvedValue(walletNameService2) }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([wallet1, wallet2] as any); + const result = await walletRepo.getNameService(); + expect(result).toBe(walletNameService2); + expect(wallet1.getNameService).toHaveBeenCalled(); + expect(wallet2.getNameService).toHaveBeenCalled(); + const walletNameServiceError1 = { getNameService: jest.fn().mockRejectedValue('error1') }; + const walletNameServiceError2 = { getNameService: jest.fn().mockRejectedValue('error2') }; + jest.spyOn(walletRepo, 'wallets', 'get').mockReturnValue([walletNameServiceError1, walletNameServiceError2] as any); + await expect(walletRepo.getNameService()).rejects.toEqual(`Something wrong! Probably no valid RPC endpoint or name service is not registered for chain ${walletRepo.chainName}.`); + expect(walletNameServiceError1.getNameService).toHaveBeenCalled(); + expect(walletNameServiceError2.getNameService).toHaveBeenCalled(); + }); + +}); diff --git a/packages/core/__tests__/utils/check.test.ts b/packages/core/__tests__/utils/check.test.ts new file mode 100644 index 000000000..0d59d83f3 --- /dev/null +++ b/packages/core/__tests__/utils/check.test.ts @@ -0,0 +1,37 @@ +import { checkInit, checkKey } from '../../src/utils/check'; + +describe('checkInit', () => { + it('should throw an error if target is undefined', () => { + expect(() => { + checkInit(undefined); + }).toThrowError('Variable is not inited!'); + }); + + it('should throw an error if target is null', () => { + expect(() => { + checkInit(null); + }).toThrowError('Variable is not inited!'); + }); + + it('should throw a custom error message if provided', () => { + expect(() => { + checkInit(undefined, 'myTarget', 'Custom error message'); + }).toThrowError('Custom error message'); + }); +}); + +describe('checkKey', () => { + it('should throw an error if key does not exist in the target Map', () => { + const target = new Map(); + expect(() => { + checkKey(target, 'myKey', 'myMap'); + }).toThrowError('myKey not existed in Map myMap!'); + }); + + it('should throw a custom error message if provided', () => { + const target = new Map(); + expect(() => { + checkKey(target, 'myKey', 'myMap', 'Custom error message'); + }).toThrowError('Custom error message'); + }); +}); diff --git a/packages/core/__tests__/utils/convert.test.ts b/packages/core/__tests__/utils/convert.test.ts new file mode 100644 index 000000000..51c08c1c7 --- /dev/null +++ b/packages/core/__tests__/utils/convert.test.ts @@ -0,0 +1,38 @@ +import { convertChain } from '../../src/utils/convert'; +import { chains, assets } from 'chain-registry' + +describe('convertChain', () => { + + it('should get converted result correctly', () => { + const chainName = 'osmosis' + const assetList = assets.find(a => a.chain_name === chainName); + const signerOptions = { + stargate: jest.fn().mockReturnValue('stargate'), + signingStargate: jest.fn().mockReturnValue('signingStargate'), + signingCosmwasm: jest.fn().mockReturnValue('signingCosmwasm'), + preferredSignType: jest.fn().mockReturnValue('preferredSignType'), + }; + const preferredEndpoints = { isLazy: true, rpc: ['http://test.rpc.com'], reset: ['http://test.rest.com'] }; + const isLazy = false; + const logger = undefined; + + const result = { + name: chainName, + chain: void 0, + assetList, + clientOptions: { + stargate: 'stargate', + signingStargate: 'signingStargate', + signingCosmwasm: 'signingCosmwasm', + preferredSignType: 'preferredSignType', + }, + preferredEndpoints: preferredEndpoints + } + + expect(convertChain(chainName, assets, signerOptions, preferredEndpoints, isLazy, logger)).toEqual(result); + expect(signerOptions.stargate).toBeCalledWith(chainName) + expect(signerOptions.signingStargate).toBeCalledWith(chainName) + expect(signerOptions.signingCosmwasm).toBeCalledWith(chainName) + expect(signerOptions.preferredSignType).toBeCalledWith(chainName) + }); +}); diff --git a/packages/core/__tests__/utils/endpoint.test.ts b/packages/core/__tests__/utils/endpoint.test.ts new file mode 100644 index 000000000..54ba2d15f --- /dev/null +++ b/packages/core/__tests__/utils/endpoint.test.ts @@ -0,0 +1,155 @@ +import { ExtendedHttpEndpoint } from '../../src/types'; +import { getFastestEndpoint, isValidEndpoint, getIsLazy } from '../../src/utils/endpoint'; +import nock from 'nock' + +describe('Endpoint Utils', () => { + const fastUrl = 'http://fast.com'; + const slowUrl = 'http://slow.com'; + + beforeEach(() => { + nock(fastUrl).get('/cosmos/base/tendermint/v1beta1/node_info').reply(200, 'ok'); + nock(slowUrl).get('/cosmos/base/tendermint/v1beta1/node_info').delayConnection(50).reply(200, 'ok'); + nock(fastUrl).post('/').reply(200, 'ok'); + nock(slowUrl).post('/').delayConnection(50).reply(200, 'ok'); + }) + + afterEach(() => { + nock.cleanAll(); + }) + + describe('getFastestEndpoint', () => { + it('should return the fastest valid endpoint', async () => { + const endpoints = [fastUrl, slowUrl]; + const nodeType = 'rpc'; + const logger = undefined; + + const result = await getFastestEndpoint(endpoints, nodeType, logger); + + expect(result).toBe(fastUrl) + }); + + it('should reject if no valid endpoint is found', async () => { + const endpoints = ['http://invalid1.com', 'http://invalid2.com', 'http://invalid3.com']; + const nodeType = 'rpc'; + const logger = undefined; + + await expect(() => getFastestEndpoint(endpoints, nodeType, logger)).rejects.toThrow() + }); + }); + + describe('isValidEndpoint', () => { + it('should return true for a valid endpoint', async () => { + const endpoint = fastUrl; + const nodeType = 'rest'; + const isLazy = false; + const logger = undefined; + + const result = await isValidEndpoint(endpoint, nodeType, isLazy, logger); + + expect(result).toBe(true); + }); + + it('should return true for a valid ExtendedHttpEndpoint with rest node type', async () => { + const extendedEndpoint: ExtendedHttpEndpoint = { + url: fastUrl, + isLazy: false, + headers: { 'Content-Type': 'application/json' }, + }; + const nodeType = 'rest'; + const isLazy = false; + const logger = undefined; + + const result = await isValidEndpoint(extendedEndpoint, nodeType, isLazy, logger); + + expect(result).toBe(true); + }); + + it('should return true for a valid ExtendedHttpEndpoint with rpc node type', async () => { + const extendedEndpoint: ExtendedHttpEndpoint = { + url: fastUrl, + isLazy: false, + headers: { 'Content-Type': 'application/json' }, + }; + const nodeType = 'rpc'; + const isLazy = false; + const logger = undefined; + + const result = await isValidEndpoint(extendedEndpoint, nodeType, isLazy, logger); + + expect(result).toBe(true); + }); + + it('should return false for an invalid endpoint', async () => { + const endpoint = 'http://invalid-endpoint.com'; + const nodeType = 'rpc'; + const isLazy = false; + const logger = undefined; + + const result = await isValidEndpoint(endpoint, nodeType, isLazy, logger); + + expect(result).toBe(false); + }); + }); + + describe('getIsLazy', () => { + it('should return the value of parameterIsLazy if defined', () => { + const globalIsLazy = undefined; + const chainIsLazy = undefined; + const endpointIsLazy = undefined; + const parameterIsLazy = true; + const logger = undefined; + + const result = getIsLazy(globalIsLazy, chainIsLazy, endpointIsLazy, parameterIsLazy, logger); + + expect(result).toBe(true); + }); + + it('should return the value of endpointIsLazy if defined', () => { + const globalIsLazy = undefined; + const chainIsLazy = undefined; + const endpointIsLazy = true; + const parameterIsLazy = undefined; + const logger = undefined; + + const result = getIsLazy(globalIsLazy, chainIsLazy, endpointIsLazy, parameterIsLazy, logger); + + expect(result).toBe(true); + }); + + it('should return the value of chainIsLazy if defined', () => { + const globalIsLazy = undefined; + const chainIsLazy = true; + const endpointIsLazy = undefined; + const parameterIsLazy = undefined; + const logger = undefined; + + const result = getIsLazy(globalIsLazy, chainIsLazy, endpointIsLazy, parameterIsLazy, logger); + + expect(result).toBe(true); + }); + + it('should return the value of globalIsLazy if defined', () => { + const globalIsLazy = true; + const chainIsLazy = undefined; + const endpointIsLazy = undefined; + const parameterIsLazy = undefined; + const logger = undefined; + + const result = getIsLazy(globalIsLazy, chainIsLazy, endpointIsLazy, parameterIsLazy, logger); + + expect(result).toBe(true); + }); + + it('should return false if no lazy flag is defined', () => { + const globalIsLazy = undefined; + const chainIsLazy = undefined; + const endpointIsLazy = undefined; + const parameterIsLazy = undefined; + const logger = undefined; + + const result = getIsLazy(globalIsLazy, chainIsLazy, endpointIsLazy, parameterIsLazy, logger); + + expect(result).toBe(false); + }); + }); +}); diff --git a/packages/core/__tests__/utils/error.test.ts b/packages/core/__tests__/utils/error.test.ts new file mode 100644 index 000000000..fd4d8bcfd --- /dev/null +++ b/packages/core/__tests__/utils/error.test.ts @@ -0,0 +1,25 @@ +import { ConnectError, WalletNotProvidedError } from "../../src/utils"; + +describe('ConnectError', () => { + it('should create an instance with the provided message', () => { + const errorMessage = 'Test error message'; + const error = new ConnectError(errorMessage); + expect(error).toBeInstanceOf(ConnectError); + expect(error.message).toBe(errorMessage); + }); + + it('should create an instance with an empty message if no message is provided', () => { + const error = new ConnectError(); + expect(error).toBeInstanceOf(ConnectError); + expect(error.message).toBe(''); + }); +}); + +describe('WalletNotProvidedError', () => { + it('should create an instance with the provided message', () => { + const walletName = 'Test wallet name'; + const error = new WalletNotProvidedError(walletName); + expect(error).toBeInstanceOf(WalletNotProvidedError); + expect(error.walletName).toBe(walletName); + }); +}); diff --git a/packages/core/__tests__/utils/logger.test.ts b/packages/core/__tests__/utils/logger.test.ts new file mode 100644 index 000000000..3db7751b6 --- /dev/null +++ b/packages/core/__tests__/utils/logger.test.ts @@ -0,0 +1,68 @@ +import { Logger } from '../../src/utils'; + +describe('Logger Tests', () => { + let consoleLogSpy; + let logger; + + beforeEach(() => { + // Mock console methods + consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(); + console.trace = console.debug = console.info = console.warn = console.error = jest.fn(); + // Create a new instance of Logger with INFO level + logger = new Logger('INFO'); + }); + + afterEach(() => { + // Restore original console methods + consoleLogSpy.mockRestore(); + }); + + it('Logger should be initialized with the correct log level', () => { + expect(logger.level).toBe('INFO'); + }); + + it('trace() should log only when level is TRACE or higher', () => { + logger.trace('Trace message'); + expect(console.trace).not.toHaveBeenCalled(); + + logger = new Logger('TRACE'); + logger.trace('Trace message'); + expect(console.trace).toHaveBeenCalled(); + }); + + it('debug() should log only when level is DEBUG or higher', () => { + logger.debug('Debug message'); + expect(console.debug).not.toHaveBeenCalled(); + + logger = new Logger('DEBUG'); + logger.debug('Debug message'); + expect(console.debug).toHaveBeenCalled(); + }); + + it('info() should log only when level is INFO or higher', () => { + logger.info('Info message'); + expect(console.info).toHaveBeenCalled(); + + logger = new Logger('WARN'); + logger.info('Info message'); + expect(console.info).toHaveBeenCalled(); + }); + + it('warn() should log only when level is WARN or higher', () => { + logger.warn('Warn message'); + expect(console.warn).toHaveBeenCalled(); + + logger = new Logger('ERROR'); + logger.warn('Warn message'); + expect(console.warn).toHaveBeenCalled(); + }); + + it('error() should log only when level is ERROR or higher', () => { + logger.error('Error message'); + expect(console.error).toHaveBeenCalled(); + + logger = new Logger('NONE'); + logger.error('Error message'); + expect(console.error).toHaveBeenCalled(); + }); +}); diff --git a/packages/core/__tests__/utils/map.test.ts b/packages/core/__tests__/utils/map.test.ts new file mode 100644 index 000000000..439eadb1c --- /dev/null +++ b/packages/core/__tests__/utils/map.test.ts @@ -0,0 +1,44 @@ +import { valuesApply } from '../../src/utils'; + +describe('valuesApply Tests', () => { + it('valuesApply should apply callback function to all values in the map', () => { + const originalMap = new Map([ + ['a', 1], + ['b', 2], + ['c', 3] + ]); + + const callbackFn = (value) => value * 2; + + const resultMap = valuesApply(originalMap, callbackFn); + + expect(resultMap.get('a')).toBe(2); + expect(resultMap.get('b')).toBe(4); + expect(resultMap.get('c')).toBe(6); + }); + + it('valuesApply should return a new map', () => { + const originalMap = new Map([ + ['a', 1], + ['b', 2], + ['c', 3] + ]); + + const callbackFn = (value) => value * 2; + + const resultMap = valuesApply(originalMap, callbackFn); + + expect(resultMap).not.toBe(originalMap); + expect(resultMap.size).toBe(originalMap.size); + }); + + it('valuesApply should handle empty map', () => { + const originalMap = new Map(); + + const callbackFn = (value) => value * 2; + + const resultMap = valuesApply(originalMap, callbackFn); + + expect(resultMap.size).toBe(0); + }); +}); diff --git a/packages/core/__tests__/utils/math.test.ts b/packages/core/__tests__/utils/math.test.ts new file mode 100644 index 000000000..feb837ef0 --- /dev/null +++ b/packages/core/__tests__/utils/math.test.ts @@ -0,0 +1,30 @@ +import { sum } from '../../src/utils'; + +describe('sum Tests', () => { + it('sum should return the correct sum of numbers', () => { + const numbers = [1, 2, 3, 4, 5]; + const callbackFn = (previousValue, currentValue) => previousValue + currentValue; + + const result = sum(numbers, callbackFn, 0); // Initial value of 0 + + expect(result).toBe(15); + }); + + it('sum should return initialValue for an empty iterable', () => { + const emptyArray: number[] = []; + const callbackFn = (previousValue, currentValue) => previousValue + currentValue; + + const result = sum(emptyArray, callbackFn, 10); // Initial value of 10 + + expect(result).toBe(10); + }); + + it('sum should handle callback function with initial value', () => { + const numbers = [1, 2, 3, 4, 5]; + const callbackFn = (previousValue, currentValue) => previousValue + currentValue; + + const result = sum(numbers, callbackFn, 10); // Initial value of 10 + + expect(result).toBe(25); // Sum of numbers (1 + 2 + 3 + 4 + 5) + initial value (10) + }); +}); diff --git a/packages/core/__tests__/utils/name-service.test.ts b/packages/core/__tests__/utils/name-service.test.ts new file mode 100644 index 000000000..a92bd0bf0 --- /dev/null +++ b/packages/core/__tests__/utils/name-service.test.ts @@ -0,0 +1,61 @@ +import { + getNameServiceRegistryFromChainName, + getNameServiceRegistryFromName, + getNameServiceNameFromChainName, + getChainNameFromNameServiceName, +} from '../../src/utils'; // Replace 'yourFile' with the actual path to your file +import { nameServiceRegistries } from '../../src/config'; // Assuming 'nameServiceRegistries' contains real data + +describe('Name Service Utility Functions Tests', () => { + test.each(nameServiceRegistries)( + 'getNameServiceRegistryFromChainName should return the correct registry for chain %p', + (chain) => { + const registry = getNameServiceRegistryFromChainName(chain.chainName); + expect(registry).toEqual(chain); + expect(registry.getQueryMsg('address')).toEqual(chain.getQueryMsg('address')); + } + ); + + test.each(nameServiceRegistries)( + 'getNameServiceRegistryFromName should return the correct registry for name %p', + (chain) => { + const registry = getNameServiceRegistryFromName(chain.name); + expect(registry).toEqual(chain); + } + ); + + test.each(nameServiceRegistries)( + 'getNameServiceNameFromChainName should return the correct name for chain %p', + (chain) => { + const name = getNameServiceNameFromChainName(chain.chainName); + expect(name).toBe(chain.name); + } + ); + + test.each(nameServiceRegistries)( + 'getChainNameFromNameServiceName should return the correct chain name for name %p', + (chain) => { + const chainName = getChainNameFromNameServiceName(chain.name); + expect(chainName).toBe(chain.chainName); + } + ); + + test('getNameServiceRegistryFromChainName should throw an error if no registry found', () => { + const nonExistentChainName = 'nonExistentChain'; + expect(() => getNameServiceRegistryFromChainName(nonExistentChainName)).toThrowError( + `No such name service registered with chain ${nonExistentChainName}` + ); + }); + + test('getNameServiceNameFromChainName should return undefined for non-existent chain', () => { + const nonExistentChainName = 'nonExistentChain'; + const result = getNameServiceNameFromChainName(nonExistentChainName); + expect(result).toBeUndefined(); + }); + + test('getChainNameFromNameServiceName should return undefined for non-existent name service', () => { + const nonExistentNameService = 'nonExistentNameService'; + const result = getChainNameFromNameServiceName(nonExistentNameService); + expect(result).toBeUndefined(); + }); +}); diff --git a/packages/core/__tests__/utils/session.test.ts b/packages/core/__tests__/utils/session.test.ts new file mode 100644 index 000000000..b9ae78379 --- /dev/null +++ b/packages/core/__tests__/utils/session.test.ts @@ -0,0 +1,45 @@ +import { Session } from '../../src/utils'; + +jest.useFakeTimers(); // 使用 Jest 提供的虚拟定时器 +jest.spyOn(global, 'setTimeout'); +jest.spyOn(global, 'clearTimeout'); + + +describe('Session', () => { + + beforeEach(() => { + jest.clearAllMocks() + jest.clearAllTimers() + }) + + it('should call callback after specified duration', () => { + const callback = jest.fn(); + const sessionOptions = { duration: 1000, callback }; + + const session = new Session(sessionOptions); + + session.update(); + + expect(setTimeout).toHaveBeenCalledTimes(1); + expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 1000); + + jest.advanceTimersByTime(1000); + + expect(callback).toHaveBeenCalledTimes(1); + }); + + it('should clear previous timeout before setting new one', () => { + const callback = jest.fn(); + const sessionOptions = { duration: 1000, callback }; + + const session = new Session(sessionOptions); + + session.update(); + + session.update(); + + expect(clearTimeout).toHaveBeenCalledTimes(1); + + expect(setTimeout).toHaveBeenCalledTimes(2); + }); +}); diff --git a/packages/core/__tests__/utils/status.test.ts b/packages/core/__tests__/utils/status.test.ts new file mode 100644 index 000000000..ab33b3902 --- /dev/null +++ b/packages/core/__tests__/utils/status.test.ts @@ -0,0 +1,49 @@ +import { State, WalletStatus } from '../../src/types'; +import { ClientNotExistError, getWalletStatusFromState, RejectedError } from "../../src/utils"; + +describe('getWalletStatusFromState', () => { + it('should return Connecting when state is Pending', () => { + const state = State.Pending + const walletStatus = getWalletStatusFromState(state); + expect(walletStatus).toBe(WalletStatus.Connecting); + }); + + it('should return Connected when state is Done', () => { + const state = State.Done + const walletStatus = getWalletStatusFromState(state); + expect(walletStatus).toBe(WalletStatus.Connected); + }); + + it('should return NotExist when state is Error and message is ClientNotExistError', () => { + const state = State.Error + const message = ClientNotExistError.message; + const walletStatus = getWalletStatusFromState(state, message); + expect(walletStatus).toBe(WalletStatus.NotExist); + }); + + it('should return Rejected when state is Error and message is RejectedError', () => { + const state = State.Error + const message = RejectedError.message; + const walletStatus = getWalletStatusFromState(state, message); + expect(walletStatus).toBe(WalletStatus.Rejected); + }); + + it('should return Error when state is Error and message is not recognized', () => { + const state = State.Error + const message = 'Some other error message'; + const walletStatus = getWalletStatusFromState(state, message); + expect(walletStatus).toBe(WalletStatus.Error); + }); + + it('should return Disconnected when state is Init', () => { + const state = State.Init + const walletStatus = getWalletStatusFromState(state); + expect(walletStatus).toBe(WalletStatus.Disconnected); + }); + + it('should return Disconnected when state is unknown', () => { + const state = 'UnknownState'; + const walletStatus = getWalletStatusFromState(state as State); + expect(walletStatus).toBe(WalletStatus.Disconnected); + }); +}); diff --git a/packages/core/index.ts b/packages/core/index.ts new file mode 100644 index 000000000..f9f79b4a1 --- /dev/null +++ b/packages/core/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; diff --git a/packages/core/src/bases/chain-wallet.ts b/packages/core/src/bases/chain-wallet.ts new file mode 100644 index 000000000..7aa29e2b9 --- /dev/null +++ b/packages/core/src/bases/chain-wallet.ts @@ -0,0 +1,467 @@ +/* eslint-disable no-unused-expressions */ +import { SigningCosmWasmClientOptions } from '@cosmjs/cosmwasm-stargate'; +import { EncodeObject, OfflineSigner } from '@cosmjs/proto-signing'; +import { + GasPrice, + SigningStargateClientOptions, + StargateClientOptions, + StdFee, +} from '@cosmjs/stargate'; +import type { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +import { COSMIFRAME_WALLET_ID } from '../cosmiframe/constants'; +import { + ChainRecord, + CosmosClientType, + Endpoints, + ExtendedHttpEndpoint, + SignType, + SimpleAccount, + State, + Wallet, +} from '../types'; +import { ConnectError } from '../utils'; +import type { MainWalletBase } from './main-wallet'; +import { WalletBase } from './wallet'; + +export class ChainWalletBase extends WalletBase { + mainWallet: MainWalletBase; + chainRecord: ChainRecord; + protected _rpcEndpoint?: string | ExtendedHttpEndpoint; + protected _restEndpoint?: string | ExtendedHttpEndpoint; + connectChains?: () => Promise; + offlineSigner?: OfflineSigner; + namespace = 'cosmos'; + preferredSignType: SignType; + + constructor(walletInfo: Wallet, chainRecord: ChainRecord) { + super(walletInfo); + this.chainRecord = chainRecord; + this.preferredSignType = + chainRecord.clientOptions?.preferredSignType || 'amino'; + } + + get chain() { + return this.chainRecord.chain; + } + + get assetList() { + return this.chainRecord.assetList; + } + + get isTestNet() { + return this.chainName.includes('testnet'); + } + + get preferredEndpoints() { + return this.chainRecord.preferredEndpoints; + } + + get rpcEndpoints() { + return this.preferredEndpoints?.rpc || []; + } + + get restEndpoints() { + return this.preferredEndpoints?.rest || []; + } + + /** + * stands for real `chainIsLazy` considered both `globalIsLazy` and `chainIsLazy` settings + */ + get isLazy() { + return this.preferredEndpoints.isLazy; + } + + addEndpoints(endpoints?: Endpoints) { + this.chainRecord.preferredEndpoints = { + isLazy: endpoints?.isLazy ?? this.preferredEndpoints?.isLazy, + rpc: [...(endpoints?.rpc || []), ...(this.preferredEndpoints?.rpc || [])], + rest: [ + ...(endpoints?.rest || []), + ...(this.preferredEndpoints?.rest || []), + ], + }; + } + + get chainName() { + return this.chainRecord.name; + } + + get chainLogoUrl(): string | undefined { + return ( + // until chain_registry fix this + // this.chainInfo.chain.logo_URIs?.svg || + // this.chainInfo.chain.logo_URIs?.png || + // this.chainInfo.chain.logo_URIs?.jpeg || + this.assetList?.assets[0]?.logo_URIs?.svg || + this.assetList?.assets[0]?.logo_URIs?.png || + undefined + ); + } + + get stargateOptions(): StargateClientOptions | undefined { + return this.chainRecord.clientOptions?.stargate; + } + + get signingStargateOptions(): SigningStargateClientOptions | undefined { + return ( + this.chainRecord.clientOptions?.signingStargate || + this.chainRecord.clientOptions?.stargate + ); + } + + get signingCosmwasmOptions(): SigningCosmWasmClientOptions | undefined { + return this.chainRecord.clientOptions?.signingCosmwasm; + } + + get assets() { + return this.assetList?.assets; + } + + get chainId() { + return this.chain?.chain_id; + } + + get cosmwasmEnabled() { + return this.chain?.codebase?.cosmwasm_enabled; + } + + get username(): string | undefined { + return this.data?.username; + } + + get address(): string | undefined { + return this.data?.address; + } + + setData(data: SimpleAccount | undefined) { + this.logger?.debug( + `[Data Change] ${JSON.stringify(this.data)} -> ${JSON.stringify(data)} (${ + (this as any).chainName + }/${(this as any).walletName})` + ); + this._mutable.data = data; + this.actions?.data?.(data); + const accountsStr = window.localStorage.getItem( + 'cosmos-kit@2:core//accounts' + ); + let accounts: SimpleAccount[] = accountsStr ? JSON.parse(accountsStr) : []; + if (typeof data === 'undefined') { + accounts = accounts.filter( + (a) => a.chainId !== this.chainId || a.namespace !== this.namespace + ); + } else { + accounts = accounts.filter( + (a) => a.chainId !== this.chainId || a.namespace !== this.namespace + ); + accounts.push(data); + } + + window?.localStorage.setItem( + 'cosmos-kit@2:core//accounts', + JSON.stringify(accounts) + ); + this.session?.update(); + } + + initClient(_options?: any): void | Promise { + throw new Error('initClient not implemented'); + } + + async update(options = { connect: true }) { + this.setState(State.Pending); + this.setMessage(void 0); + + try { + if (options.connect) { + this.connectChains + ? await this.connectChains() + : await this?.client?.connect?.(this.chainId); + } + + let account: SimpleAccount; + try { + this.logger?.debug( + `Fetching ${this.walletName} ${this.chainId} account.` + ); + account = await this?.client?.getSimpleAccount(this.chainId); + } catch (error) { + if (this.rejectMatched(error as Error)) { + this.logger?.debug(`Fetching rejected.`); + this.setRejected(new ConnectError()); + return; + } + if (this.client && this?.client?.addChain) { + this.logger?.debug(`Going to add chain ${this.chainId}`); + await this.client.addChain(this.chainRecord); + account = await this.client.getSimpleAccount(this.chainId); + } else { + throw error; + } + } + + this.setData(account); + this.setState(State.Done); + this.setMessage(void 0); + } catch (e) { + // this.logger?.error(e); + if (e && this.rejectMatched(e as Error)) { + this.setRejected(new ConnectError()); + } else { + this.setError(new ConnectError((e as Error).message)); + } + } + if (!this.isWalletRejected && this.walletName !== COSMIFRAME_WALLET_ID) { + window?.localStorage.setItem( + 'cosmos-kit@2:core//current-wallet', + this.walletName + ); + } + } + + getRpcEndpoint = async ( + isLazy?: boolean + ): Promise => { + const { getIsLazy } = await import('../utils'); + const lazy = getIsLazy( + void 0, + this.isLazy, + (this._rpcEndpoint as any)?.isLazy, + isLazy, + this.logger + ); + + if (lazy) { + const endpoint = this._rpcEndpoint || this.rpcEndpoints[0]; + if (!endpoint) { + return Promise.reject('No endpoint available.'); + } + return endpoint; + } + + const nodeType = 'rpc'; + + const { isValidEndpoint } = await import('../utils'); + if ( + this._rpcEndpoint && + (await isValidEndpoint(this._rpcEndpoint, nodeType, lazy, this.logger)) + ) { + return this._rpcEndpoint; + } + + const { getFastestEndpoint } = await import('../utils'); + this._rpcEndpoint = await getFastestEndpoint( + this.rpcEndpoints, + nodeType, + this.logger + ); + return this._rpcEndpoint; + }; + + getRestEndpoint = async ( + isLazy?: boolean + ): Promise => { + const { getIsLazy } = await import('../utils'); + const lazy = getIsLazy( + void 0, + this.isLazy, + (this._restEndpoint as any)?.isLazy, + isLazy, + this.logger + ); + + if (lazy) { + const endpoint = this._restEndpoint || this.restEndpoints[0]; + if (!endpoint) { + return Promise.reject('No endpoint available.'); + } + return endpoint; + } + + const nodeType = 'rest'; + + const { isValidEndpoint } = await import('../utils'); + if ( + this._restEndpoint && + (await isValidEndpoint(this._restEndpoint, nodeType, lazy, this.logger)) + ) { + return this._restEndpoint; + } + + const { getFastestEndpoint } = await import('../utils'); + this._restEndpoint = await getFastestEndpoint( + this.restEndpoints, + nodeType, + this.logger + ); + return this._restEndpoint; + }; + + getStargateClient = async () => { + const rpcEndpoint = await this.getRpcEndpoint(); + const { StargateClient } = await import('@cosmjs/stargate'); + return StargateClient.connect(rpcEndpoint, this.stargateOptions); + }; + + getCosmWasmClient = async () => { + const rpcEndpoint = await this.getRpcEndpoint(); + const { CosmWasmClient } = await import('@cosmjs/cosmwasm-stargate'); + return CosmWasmClient.connect(rpcEndpoint); + }; + + getNameService = async () => { + const client = await this.getCosmWasmClient(); + const { getNameServiceRegistryFromChainName } = await import('../utils'); + const registry = getNameServiceRegistryFromChainName(this.chainName); + const { NameService } = await import('../name-service'); + return new NameService(client, registry); + }; + + async initOfflineSigner(preferredSignType?: SignType) { + if (typeof this.client === 'undefined') { + throw new Error('WalletClient is not initialized'); + } + if (preferredSignType) this.preferredSignType = preferredSignType; + this.offlineSigner = await this.client.getOfflineSigner( + this.chainId, + this.preferredSignType + ); + } + + getSigningStargateClient = async () => { + const rpcEndpoint = await this.getRpcEndpoint(); + + if (!this.offlineSigner) { + await this.initOfflineSigner(); + } + + const { SigningStargateClient } = await import('@cosmjs/stargate'); + + return SigningStargateClient.connectWithSigner( + rpcEndpoint, + this.offlineSigner, + this.signingStargateOptions + ); + }; + + getSigningCosmWasmClient = async () => { + const rpcEndpoint = await this.getRpcEndpoint(); + + if (!this.offlineSigner) { + await this.initOfflineSigner(); + } + + const { SigningCosmWasmClient } = await import('@cosmjs/cosmwasm-stargate'); + return SigningCosmWasmClient.connectWithSigner( + rpcEndpoint, + this.offlineSigner, + this.signingCosmwasmOptions + ); + }; + + protected getSigningClient = async (type?: CosmosClientType) => { + switch (type) { + case 'stargate': + return await this.getSigningStargateClient(); + case 'cosmwasm': + return await this.getSigningCosmWasmClient(); + default: + return this.getSigningStargateClient(); + } + }; + + estimateFee = async ( + messages: EncodeObject[], + type?: CosmosClientType, + memo?: string, + multiplier?: number + ) => { + if (!this.address) { + throw new Error( + 'Address is required to estimate fee. Try connect to fetch address.' + ); + } + + let gasPrice: GasPrice | undefined; + switch (type) { + case 'stargate': + gasPrice = this.signingStargateOptions?.gasPrice; + break; + case 'cosmwasm': + gasPrice = this.signingCosmwasmOptions?.gasPrice; + break; + default: + gasPrice = this.signingStargateOptions?.gasPrice; + break; + } + + if (!gasPrice) { + throw new Error( + 'Gas price must be set in the client options when auto gas is used.' + ); + } + const client = await this.getSigningClient(type); + const gasEstimation = await client.simulate(this.address, messages, memo); + const { calculateFee } = await import('@cosmjs/stargate'); + return calculateFee( + Math.round(gasEstimation * (multiplier || 1.4)), + gasPrice + ); + }; + + sign = async ( + messages: EncodeObject[], + fee?: StdFee | number, + memo?: string, + type?: CosmosClientType + ): Promise => { + if (!this.address) { + throw new Error( + 'Address is required to estimate fee. Try connect to fetch address.' + ); + } + const client = await this.getSigningClient(type); + let usedFee: StdFee; + if (typeof fee === 'undefined' || typeof fee === 'number') { + usedFee = await this.estimateFee(messages, type, memo, fee); + } else { + usedFee = fee; + } + + return await client.sign(this.address, messages, usedFee, memo || ''); + }; + + broadcast = async (signedMessages: TxRaw, type?: CosmosClientType) => { + const client = await this.getSigningClient(type); + const { TxRaw } = await import('cosmjs-types/cosmos/tx/v1beta1/tx'); + const txBytes = TxRaw.encode(signedMessages).finish(); + + let timeoutMs: number | undefined, pollIntervalMs: number | undefined; + switch (type) { + case 'stargate': + timeoutMs = this.signingStargateOptions?.broadcastTimeoutMs; + pollIntervalMs = this.signingStargateOptions?.broadcastPollIntervalMs; + break; + case 'cosmwasm': + timeoutMs = this.signingCosmwasmOptions?.broadcastTimeoutMs; + pollIntervalMs = this.signingCosmwasmOptions?.broadcastPollIntervalMs; + break; + default: + timeoutMs = this.signingStargateOptions?.broadcastTimeoutMs; + pollIntervalMs = this.signingStargateOptions?.broadcastPollIntervalMs; + break; + } + + return client.broadcastTx(txBytes, timeoutMs, pollIntervalMs); + }; + + signAndBroadcast = async ( + messages: EncodeObject[], + fee?: StdFee | number, + memo?: string, + type?: CosmosClientType + ) => { + const signedMessages = await this.sign(messages, fee, memo, type); + return this.broadcast(signedMessages, type); + }; +} diff --git a/packages/core/src/bases/index.ts b/packages/core/src/bases/index.ts new file mode 100644 index 000000000..722b303f4 --- /dev/null +++ b/packages/core/src/bases/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './state'; +export * from './wallet'; diff --git a/packages/core/src/bases/main-wallet.ts b/packages/core/src/bases/main-wallet.ts new file mode 100644 index 000000000..689a02d06 --- /dev/null +++ b/packages/core/src/bases/main-wallet.ts @@ -0,0 +1,252 @@ +/* eslint-disable @typescript-eslint/no-empty-function */ +import EventEmitter from 'events'; + +import { COSMIFRAME_WALLET_ID } from '../cosmiframe/constants'; +import { + ChainName, + ChainRecord, + DappEnv, + DisconnectOptions, + EndpointOptions, + IChainWallet, + State, + Wallet, + WalletClient, + WalletStatus, +} from '../types'; +import type { ChainWalletBase } from './chain-wallet'; +import { WalletBase } from './wallet'; + +export abstract class MainWalletBase extends WalletBase { + protected _chainWalletMap?: Map; + preferredEndpoints?: EndpointOptions['endpoints']; + ChainWallet: IChainWallet; + + constructor(walletInfo: Wallet, ChainWallet: IChainWallet) { + super(walletInfo); + this.ChainWallet = ChainWallet; + this.emitter = new EventEmitter(); + this.emitter.on('broadcast_client', (client: WalletClient) => { + this.logger?.debug( + `[Event Fired] \`broadcast_client\` (${this.walletName})` + ); + this.chainWalletMap?.forEach((chainWallet) => { + chainWallet.initClientDone(client); + }); + }); + this.emitter.on('broadcast_env', (env: DappEnv) => { + this.logger?.debug( + `[Event Fired] \`broadcast_env\` (${this.walletName})` + ); + this.chainWalletMap?.forEach((chainWallet) => { + chainWallet.setEnv(env); + }); + }); + this.emitter.on('sync_connect', async (chainName?: ChainName) => { + this.logger?.debug(`[Event Fired] \`sync_connect\` (${this.walletName})`); + await this.connectAll(true, chainName); + this.update(); + }); + this.emitter.on('sync_disconnect', async (chainName?: ChainName) => { + this.logger?.debug( + `[Event Fired] \`sync_disconnect\` (${this.walletName})` + ); + await this.disconnectAll(true, chainName); + this.reset(); + }); + this.emitter.on('reset', (chainIds: string[]) => { + this.logger?.debug(`[Event Fired] \`reset\` (${this.walletName})`); + chainIds.forEach((chainId) => + Array.from(this.chainWalletMap.values()) + .find((cw) => cw.chainId === chainId) + ?.reset() + ); + }); + } + + initingClient() { + this.clientMutable.state = State.Pending; + this.clientMutable.message = void 0; + this.clientMutable.data = void 0; + this.actions?.clientState?.(State.Pending); + this.actions?.clientMessage?.(void 0); + this.chainWalletMap?.forEach((chainWallet) => { + chainWallet.initingClient(); + }); + } + + initClientDone(client: WalletClient | undefined) { + this.clientMutable.data = client; + this.clientMutable.state = State.Done; + this.clientMutable.message = void 0; + this.actions?.clientState?.(State.Done); + this.actions?.clientMessage?.(void 0); + this.chainWalletMap?.forEach((chainWallet) => { + chainWallet.initClientDone(client); + }); + } + + initClientError(error: Error | undefined) { + this.clientMutable.message = error?.message; + this.clientMutable.state = State.Error; + this.actions?.clientState?.(State.Error); + this.actions?.clientMessage?.(error?.message); + this.chainWalletMap?.forEach((chainWallet) => { + chainWallet.initClientError(error); + }); + if (this.throwErrors === true) { + throw new Error(this.clientMutable.message); + } + } + + protected onSetChainsDone(): void { } + + private makeFinalEndpoints(chain: ChainRecord) { + const isTestNet = chain.name.includes('testnet'); + const preferredEndpoints = { + isLazy: chain.preferredEndpoints?.isLazy, + rpc: [ + ...(chain.preferredEndpoints?.rpc || []), + ...(this.preferredEndpoints?.[chain.name]?.rpc || []), + ...(chain.chain?.apis?.rpc?.map((e) => e.address) || []), + isTestNet + ? `https://rpc.testcosmos.directory/${chain.name}` + : `https://rpc.cosmos.directory/${chain.name}`, + ], + rest: [ + ...(chain.preferredEndpoints?.rest || []), + ...(this.preferredEndpoints?.[chain.name]?.rest || []), + ...(chain.chain?.apis?.rest?.map((e) => e.address) || []), + isTestNet + ? `https://rest.testcosmos.directory/${chain.name}` + : `https://rest.cosmos.directory/${chain.name}`, + ], + }; + return preferredEndpoints; + } + + addEnpoints(endpoints?: EndpointOptions['endpoints']) { + this.getChainWalletList(false).forEach((wallet) => { + wallet.addEndpoints(endpoints[wallet.chainName]); + }); + } + + setChains(chains: ChainRecord[], overwrite = true): void { + if (overwrite || !this._chainWalletMap) { + this._chainWalletMap = new Map(); + } + chains.forEach((chain) => { + const chainWallet = new this.ChainWallet(this.walletInfo, { + ...chain, + preferredEndpoints: this.makeFinalEndpoints(chain), + }); + + chainWallet.mainWallet = this; + chainWallet.emitter = this.emitter; + chainWallet.logger = this.logger; + chainWallet.throwErrors = this.throwErrors; + chainWallet.session = this.session; + chainWallet.walletConnectOptions = this.walletConnectOptions; + chainWallet.initClient = this.initClient; + + this._chainWalletMap!.set(chain.name, chainWallet); + }); + + this.onSetChainsDone(); + } + + get chainWalletMap() { + return this._chainWalletMap; + } + + getChainWallet = (chainName: string): ChainWalletBase | undefined => { + return this.chainWalletMap?.get(chainName); + }; + + getChainWalletList = (activeOnly = true) => { + const allChainWallets = Array.from(this.chainWalletMap.values()); + return activeOnly + ? allChainWallets.filter((w) => w.isActive) + : allChainWallets; + }; + + getGlobalStatusAndMessage = ( + activeOnly = true + ): [WalletStatus, string | undefined] => { + const chainWalletList = this.getChainWalletList(activeOnly); + + let wallet = chainWalletList.find((w) => w.isWalletNotExist); + if (wallet) return [wallet.walletStatus, wallet.message]; + + wallet = chainWalletList.find((w) => w.isWalletConnecting); + if (wallet) return [WalletStatus.Connecting, void 0]; + + wallet = chainWalletList.find((w) => w.isWalletDisconnected); + if (wallet) { + return [WalletStatus.Disconnected, 'Exist disconnected wallets']; + } + + wallet = chainWalletList.find((w) => w.isError || w.isWalletRejected); + if (wallet) return [wallet.walletStatus, wallet.message]; + + return [WalletStatus.Connected, void 0]; + }; + + async update() { + // in case nonexist wallet is set as current wallet + if (this.walletStatus === 'NotExist') { + return window.localStorage.removeItem('cosmos-kit@2:core//current-wallet'); + } + + this.setData(void 0); + this.setMessage(void 0); + this.setState(State.Done); + this.activate(); + if (this.walletName !== COSMIFRAME_WALLET_ID) { + window?.localStorage.setItem( + 'cosmos-kit@2:core//current-wallet', + this.walletName + ); + } + } + + reset() { + this.setData(void 0); + this.setMessage(void 0); + this.setState(State.Init); + this.inactivate(); + } + + async connectAll(activeOnly = true, exclude?: ChainName) { + const chainWalletList = this.getChainWalletList(activeOnly); + + // Avoid duplicate connect popups in wallet mobile Apps when using useChains + if ( + chainWalletList.length > 0 && + chainWalletList.every( + (wallet) => wallet.isModeWalletConnect && wallet.connectChains + ) + ) { + return; + } + + for (const w of chainWalletList) { + if (w.chainName !== exclude) { + await w.connect(); + } + } + } + + async disconnectAll( + activeOnly = true, + exclude?: ChainName, + options?: DisconnectOptions + ) { + const chainWalletList = this.getChainWalletList(activeOnly); + for (const w of chainWalletList) { + if (w.chainName !== exclude) { + await w.disconnect(false, options); + } + } + } +} diff --git a/packages/core/src/bases/state.ts b/packages/core/src/bases/state.ts new file mode 100644 index 000000000..9370c169d --- /dev/null +++ b/packages/core/src/bases/state.ts @@ -0,0 +1,125 @@ +import { Actions, DappEnv, Data, Mutable, State, StateActions, WalletStatus } from '../types'; +import { getWalletStatusFromState } from '../utils'; +import type { Logger } from '../utils'; + +export class StateBase { + protected _mutable: Mutable; + actions?: StateActions; + protected _env?: DappEnv; + logger?: Logger; + + constructor() { + this._mutable = { state: State.Init }; + } + + get env() { + return this._env; + } + + setEnv(env?: DappEnv) { + this._env = env; + } + + setActions = (actions: Actions) => { + this.actions = actions; + }; + + get isMobile() { + return this.env?.device === 'mobile'; + } + + get mutable() { + return this._mutable; + } + + get state() { + return this.mutable.state; + } + + get isInit() { + return this.state === 'Init'; + } + + get isDone() { + return this.state === 'Done'; + } + + get isError() { + return this.state === 'Error'; + } + + get isPending() { + return this.state === 'Pending'; + } + + get data() { + return this.mutable.data; + } + + get message() { + return this.mutable.message; + } + + setState(state: State) { + this.logger?.debug( + `[State Change] ${this.state} (${ + (this as any).walletStatus + }) -> ${state} (${(this as any).chainName}/${(this as any).walletName})` + ); + this._mutable.state = state; + this.actions?.state?.(state); + } + + setData(data: Data | undefined) { + this._mutable.data = data; + this.actions?.data?.(data); + } + + setMessage(message: string | undefined) { + this.logger?.debug( + `[Message Set] ${message} (${(this as any).chainName}/${ + (this as any).walletName + })` + ); + this._mutable.message = message; + this.actions?.message?.(message); + } + + reset() { + this.setData(undefined); + this.setMessage(undefined); + this.setState(State.Init); + } + + get walletStatus(): WalletStatus { + return getWalletStatusFromState(this.state, this.message); + } + + get isWalletOnceConnect() { + return this.isWalletConnected || this.isWalletError; + } + + get isWalletConnecting() { + return this.walletStatus === 'Connecting'; + } + + get isWalletConnected() { + return this.walletStatus === 'Connected'; + } + + get isWalletDisconnected() { + return this.walletStatus === 'Disconnected'; + } + + get isWalletRejected() { + return this.walletStatus === 'Rejected'; + } + + get isWalletNotExist() { + return this.walletStatus === 'NotExist'; + } + + get isWalletError() { + return this.walletStatus === 'Error'; + } +} diff --git a/packages/core/src/bases/wallet.ts b/packages/core/src/bases/wallet.ts new file mode 100644 index 000000000..3b1a4b150 --- /dev/null +++ b/packages/core/src/bases/wallet.ts @@ -0,0 +1,260 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable no-console */ +import type EventEmitter from 'events'; + +import { COSMIFRAME_WALLET_ID } from '../cosmiframe/constants'; +import { + Callbacks, + DisconnectOptions, + DownloadInfo, + Mutable, + State, + Wallet, + WalletClient, + WalletConnectOptions, +} from '../types'; +import type { Session } from '../utils'; +import { ClientNotExistError, ConnectError, RejectedError } from '../utils'; +import { StateBase } from './state'; + +export abstract class WalletBase extends StateBase { + clientMutable: Mutable = { state: State.Init }; + emitter?: EventEmitter; + protected _walletInfo: Wallet; + callbacks?: Callbacks; + session?: Session; + walletConnectOptions?: WalletConnectOptions; + /** + * isActive in mainWallet is not like chainWallet + * - mainWallet: activated when connected + * - chainWallet: activated when called by hooks (useChain, useChainWallet etc) + */ + isActive = false; + throwErrors: boolean | 'connect_only' = false; + + constructor(walletInfo: Wallet) { + super(); + this._walletInfo = walletInfo; + } + + get appUrl() { + return this.client?.appUrl; + } + + get qrUrl() { + return this.client?.qrUrl; + } + + activate() { + this.isActive = true; + } + + inactivate() { + this.isActive = false; + } + + get client() { + return this.clientMutable?.data; + } + + initingClient() { + this.clientMutable.state = State.Pending; + this.clientMutable.message = void 0; + this.clientMutable.data = void 0; + } + + initClientDone(client: WalletClient | undefined) { + this.clientMutable.data = client; + this.clientMutable.state = State.Done; + this.clientMutable.message = void 0; + } + + initClientError(error: Error | undefined) { + this.logger?.error( + `${this.walletPrettyName} initClientError: ${error?.message}` + ); + this.clientMutable.message = error?.message; + this.clientMutable.state = State.Error; + if (this.isModeExtension) { + this.setClientNotExist(); + } else { + this.setError(`InitClientError: ${error.message}`); + } + } + + get walletInfo(): Wallet { + return this._walletInfo; + } + + get isModeExtension() { + return this.walletInfo.mode === 'extension'; + } + + get isModeWalletConnect() { + return this.walletInfo.mode === 'wallet-connect'; + } + + get downloadInfo(): DownloadInfo | undefined { + let downloads: DownloadInfo[] = this.walletInfo.downloads || []; + + downloads = downloads.filter( + (d) => d.device === this.env?.device || !d.device + ); + + if (downloads.length === 1) { + return downloads[0]; + } + + downloads = downloads.filter((d) => d.os === this.env?.os || !d.os); + + if (downloads.length === 1) { + return downloads[0]; + } + + downloads = downloads.filter( + (d) => d.browser === this.env?.browser || !d.browser + ); + + return downloads[0]; + } + + get walletName() { + return this.walletInfo.name; + } + + get walletPrettyName() { + return this.walletInfo.prettyName; + } + + get rejectMessageSource() { + if (typeof this.walletInfo.rejectMessage === 'string') { + return this.walletInfo.rejectMessage; + } else { + return this.walletInfo.rejectMessage?.source; + } + } + + get rejectMessageTarget() { + if (typeof this.walletInfo.rejectMessage === 'string') { + return void 0; + } else { + return this.walletInfo.rejectMessage?.target; + } + } + + get rejectCode() { + return this.walletInfo.rejectCode; + } + + rejectMatched(e: Error) { + return ( + (this.rejectMessageSource && e.message === this.rejectMessageSource) || + (this.rejectCode && (e as any).code === this.rejectCode) + ); + } + + updateCallbacks(callbacks: Callbacks) { + this.callbacks = { ...this.callbacks, ...callbacks }; + } + + protected _disconnect = async ( + sync?: boolean, + options?: DisconnectOptions + ) => { + await this.callbacks?.beforeDisconnect?.(); + await this.client?.disconnect?.(options); + if (this.clientMutable.state !== State.Error) { + this.reset(); + } + if (this.walletName !== COSMIFRAME_WALLET_ID) { + window.localStorage.removeItem('cosmos-kit@2:core//current-wallet'); + } + if (sync) { + this.emitter?.emit('sync_disconnect', (this as any).chainName); + this.logger?.debug('[WALLET EVENT] Emit `sync_disconnect`'); + } + await this.callbacks?.afterDisconnect?.(); + }; + + disconnect = async (sync?: boolean, options?: DisconnectOptions) => { + await this._disconnect(sync, options); + }; + + setClientNotExist(e?: Error) { + const error = typeof e === 'undefined' ? new Error() : e; + error.message = ClientNotExistError.message; + this.setError(error); + } + + setRejected(e?: Error) { + const error = typeof e === 'undefined' ? new Error() : e; + error.message = RejectedError.message; + this.setError(error); + } + + setError(e?: Error | string) { + const error = + typeof e === 'string' || typeof e === 'undefined' ? new Error(e) : e; + this.setState(State.Error); + this.setMessage(error.message); + if (this.throwErrors === true) { + throw error; + } + if (this.throwErrors === 'connect_only' && error.name === 'ConnectError') { + throw error; + } + } + + connect = async (sync?: boolean) => { + await this.callbacks?.beforeConnect?.(); + + const mobileDisabled = + typeof this.walletInfo.mobileDisabled === 'boolean' + ? this.walletInfo.mobileDisabled + : this.walletInfo.mobileDisabled(); + + if (this.isMobile && mobileDisabled) { + this.setError( + new ConnectError( + 'This wallet is not supported on mobile, please use desktop browsers.' + ) + ); + return; + } + + if (sync) { + this.emitter?.emit('sync_connect', (this as any).chainName); + this.logger?.debug( + `[Event Emit] \`sync_connect\` (${(this as any).chainName}/${ + this.walletName + })` + ); + } + + try { + if (!this.client) { + this.setState(State.Pending); + this.setMessage('InitClient'); + await this.initClient( + this.walletInfo.mode === 'wallet-connect' + ? this.walletConnectOptions + : void 0 + ); + this.emitter?.emit('broadcast_client', this.client); + this.logger?.debug('[WALLET EVENT] Emit `broadcast_client`'); + if (!this.client) { + this.setClientNotExist(new ConnectError()); + return; + } + } + await this.update(); + } catch (error) { + this.setError(new ConnectError((error as Error).message)); + } + await this.callbacks?.afterConnect?.(); + }; + + abstract initClient(options?: any): void | Promise; + + abstract update(): void | Promise; +} diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts new file mode 100644 index 000000000..167f061c7 --- /dev/null +++ b/packages/core/src/config.ts @@ -0,0 +1,27 @@ +import { Bech32Address, NameServiceRegistry } from './types'; + +export const nameServiceRegistries: NameServiceRegistry[] = [ + { + name: 'icns', + contract: 'osmo1xk0s8xgktn9x5vwcgtjdxqzadg88fgn33p8u9cnpdxwemvxscvast52cdd', + chainName: 'osmosis', + getQueryMsg: (address: Bech32Address) => { + return { + icns_names: { address }, + }; + }, + slip173: 'osmo', + }, + { + name: 'stargaze', + contract: + 'stars1fx74nkqkw2748av8j7ew7r3xt9cgjqduwn8m0ur5lhe49uhlsasszc5fhr', + chainName: 'stargaze', + getQueryMsg: (address: Bech32Address) => { + return { + name: { address }, + }; + }, + slip173: 'stars', + }, +]; diff --git a/packages/core/src/cosmiframe/constants.ts b/packages/core/src/cosmiframe/constants.ts new file mode 100644 index 000000000..860971b21 --- /dev/null +++ b/packages/core/src/cosmiframe/constants.ts @@ -0,0 +1,3 @@ +export const COSMIFRAME_WALLET_ID = 'cosmiframe'; +export const COSMIFRAME_KEYSTORECHANGE_EVENT = 'cosmiframe_keystorechange'; +export const COSMIFRAME_NOT_CONNECTED_MESSAGE = 'Cosmiframe not connected.'; diff --git a/packages/core/src/cosmiframe/cosmiframe.ts b/packages/core/src/cosmiframe/cosmiframe.ts new file mode 100644 index 000000000..4c36ebc9f --- /dev/null +++ b/packages/core/src/cosmiframe/cosmiframe.ts @@ -0,0 +1,7 @@ +import { cosmiframeExtensionInfo, CosmiframeWallet } from './extension'; + +export const makeCosmiframeWallet = (allowedParentOrigins: string[]) => + new CosmiframeWallet({ + ...cosmiframeExtensionInfo, + allowedParentOrigins, + }); diff --git a/packages/core/src/cosmiframe/extension/chain-wallet.ts b/packages/core/src/cosmiframe/extension/chain-wallet.ts new file mode 100644 index 000000000..a2bddc801 --- /dev/null +++ b/packages/core/src/cosmiframe/extension/chain-wallet.ts @@ -0,0 +1,8 @@ +import { ChainWalletBase } from '../../bases'; +import { ChainRecord, Wallet } from '../../types'; + +export class ChainWalletCosmiframe extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/packages/core/src/cosmiframe/extension/client.ts b/packages/core/src/cosmiframe/extension/client.ts new file mode 100644 index 000000000..69e6bef4e --- /dev/null +++ b/packages/core/src/cosmiframe/extension/client.ts @@ -0,0 +1,116 @@ +import { StdSignature } from '@cosmjs/amino'; +import { Cosmiframe } from '@dao-dao/cosmiframe'; + +import { + ChainRecord, + SignType, + WalletAccount, + WalletClient, +} from '../../types'; + +export class CosmiframeClient implements WalletClient { + constructor(private cosmiframe: Cosmiframe) {} + + async getSimpleAccount(...params) { + return await this.cosmiframe.p.getSimpleAccount(...params); + } + + async connect(...params) { + return await this.cosmiframe.p.connect(...params); + } + + // Cannot implement because the event only makes sense in the context of the + // DOM where it happened, and references to the iframe's window are not + // available in the parent. + + // on(_type: string, _listener: EventListenerOrEventListenerObject) { + // throw new Error('Not implemented'); + // } + + // off(_type: string, _listener: EventListenerOrEventListenerObject) { + // throw new Error('Not implemented'); + // } + + async enable(...params) { + await this.cosmiframe.p.enable(...params); + } + + async suggestToken(...params) { + await this.cosmiframe.p.suggestToken(...params); + } + + async addChain(...params) { + // `clientOptions` in the chain record may contain + // `SigningStargateClientOptions` or `SigningCosmWasmClientOptions`, which + // may contain a types registry that cannot be cloned when using + // window.postMessage. `addChain` functions typically do not care about + // `clientOptions` as they are just used for adding chain metadata to a + // wallet, so we remove the `clientOptions` from the chain record here. + let chainRecord: ChainRecord = params[0]; + if (chainRecord && 'clientOptions' in chainRecord) { + chainRecord = { + ...chainRecord, + clientOptions: {}, + }; + params[0] = chainRecord; + } + + await this.cosmiframe.p.addChain(...params); + } + + async getAccount(...params) { + return await this.cosmiframe.p.getAccount(...params); + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + if (preferredSignType === 'direct') { + return this.getOfflineSignerDirect(chainId); + } else { + return this.getOfflineSignerAmino(chainId); + } + } + + getOfflineSignerAmino(chainId: string) { + return this.cosmiframe.getOfflineSignerAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.cosmiframe.getOfflineSignerDirect(chainId); + } + + async sign(...params) { + return await this.cosmiframe.p.sign(...params); + } + + async signAmino(...params) { + return await this.cosmiframe.p.signAmino(...params); + } + + async signDirect(...params) { + return await this.cosmiframe.p.signDirect(...params); + } + + async signArbitrary(...params): Promise { + return await this.cosmiframe.p.signArbitrary(...params); + } + + async getEnigmaPubKey(...params) { + return await this.cosmiframe.p.getEnigmaPubKey(...params); + } + + async getEnigmaTxEncryptionKey(...params) { + return await this.cosmiframe.p.getEnigmaTxEncryptionKey(...params); + } + + async enigmaEncrypt(...params) { + return await this.cosmiframe.p.enigmaEncrypt(...params); + } + + async enigmaDecrypt(...params) { + return await this.cosmiframe.p.enigmaDecrypt(...params); + } + + async sendTx(...params) { + return await this.cosmiframe.p.sendTx(...params); + } +} diff --git a/packages/core/src/cosmiframe/extension/index.ts b/packages/core/src/cosmiframe/extension/index.ts new file mode 100644 index 000000000..11bb61b90 --- /dev/null +++ b/packages/core/src/cosmiframe/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './client'; +export * from './main-wallet'; +export * from './registry'; diff --git a/packages/core/src/cosmiframe/extension/main-wallet.ts b/packages/core/src/cosmiframe/extension/main-wallet.ts new file mode 100644 index 000000000..b8a8f39c3 --- /dev/null +++ b/packages/core/src/cosmiframe/extension/main-wallet.ts @@ -0,0 +1,43 @@ +import { Cosmiframe } from '@dao-dao/cosmiframe'; + +import { MainWalletBase } from '../../bases'; +import { ChainWalletCosmiframe } from './chain-wallet'; +import { CosmiframeClient } from './client'; +import { CosmiframeWalletInfo } from './types'; + +export class CosmiframeWallet extends MainWalletBase { + constructor(walletInfo: CosmiframeWalletInfo) { + super(walletInfo, ChainWalletCosmiframe); + } + + get walletInfo(): CosmiframeWalletInfo { + return this._walletInfo as CosmiframeWalletInfo; + } + + async initClient() { + this.initingClient(); + + const cosmiframe = new Cosmiframe(this.walletInfo.allowedParentOrigins); + const ready = await cosmiframe.isReady(); + + if (!ready) { + this.initClientError( + new Error( + 'Failed to detect Cosmiframe parent of allowed origin wrapping this app in an iframe.' + ) + ); + return; + } + + // Get metadata from parent. + const metadata = await cosmiframe.getMetadata(); + if (metadata?.name && typeof metadata.name === 'string') { + this.walletInfo.prettyName = metadata.name; + } + if (metadata?.imageUrl && typeof metadata.imageUrl === 'string') { + this.walletInfo.logo = metadata.imageUrl; + } + + this.initClientDone(new CosmiframeClient(cosmiframe)); + } +} diff --git a/packages/core/src/cosmiframe/extension/registry.ts b/packages/core/src/cosmiframe/extension/registry.ts new file mode 100644 index 000000000..ccf88136c --- /dev/null +++ b/packages/core/src/cosmiframe/extension/registry.ts @@ -0,0 +1,20 @@ +import { + COSMIFRAME_KEYSTORECHANGE_EVENT, + COSMIFRAME_WALLET_ID, +} from '../constants'; +import { CosmiframeWalletInfo } from './types'; + +export const cosmiframeExtensionInfo: CosmiframeWalletInfo = { + name: COSMIFRAME_WALLET_ID, + prettyName: 'Cosmiframe', + // A disconnected icon, since this should be overridden by the parent. + logo: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGgKICAgIGZpbGw9IiM5MzkzOTMiCiAgICBkPSJNOC4xNCAxMC45NmMtLjA5LjMzLS4xNC42OC0uMTQgMS4wNCAwIDEuMS40NSAyLjEgMS4xNyAyLjgzbC0xLjQyIDEuNDJDNi42NyAxNS4xNiA2IDEzLjY2IDYgMTJjMC0uOTMuMjEtMS44LjU4LTIuNTlMNS4xMSA3Ljk0QzQuNCA5LjEzIDQgMTAuNTIgNCAxMmMwIDIuMjEuOSA0LjIxIDIuMzUgNS42NWwtMS40MiAxLjQyQzMuMTIgMTcuMjYgMiAxNC43NiAyIDEyYzAtMi4wNC42MS0zLjkzIDEuNjYtNS41MUwxLjM5IDQuMjIgMi44IDIuODFsMTguMzggMTguMzgtMS40MSAxLjQxTDguMTQgMTAuOTZ6bTkuMjggMy42M2MuMzctLjc5LjU4LTEuNjYuNTgtMi41OSAwLTEuNjYtLjY3LTMuMTYtMS43Ni00LjI0bC0xLjQyIDEuNDJDMTUuNTUgOS45IDE2IDEwLjkgMTYgMTJjMCAuMzYtLjA1LjcxLS4xNCAxLjA0bDEuNTYgMS41NXpNMjAgMTJjMCAxLjQ4LS40IDIuODctMS4xMSA0LjA2bDEuNDUgMS40NUMyMS4zOSAxNS45MyAyMiAxNC4wNCAyMiAxMmMwLTIuNzYtMS4xMi01LjI2LTIuOTMtNy4wN2wtMS40MiAxLjQyQzE5LjEgNy43OSAyMCA5Ljc5IDIwIDEyeiI+PC9wYXRoPgo8L3N2Zz4=', + mode: 'extension', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: [COSMIFRAME_KEYSTORECHANGE_EVENT], + // This will be overridden by the `makeCosmiframeWallet` function. + allowedParentOrigins: [], +}; diff --git a/packages/core/src/cosmiframe/extension/types.ts b/packages/core/src/cosmiframe/extension/types.ts new file mode 100644 index 000000000..f5b8dd304 --- /dev/null +++ b/packages/core/src/cosmiframe/extension/types.ts @@ -0,0 +1,5 @@ +import { Wallet } from '../../types'; + +export type CosmiframeWalletInfo = Wallet & { + allowedParentOrigins: string[]; +}; diff --git a/packages/core/src/cosmiframe/index.ts b/packages/core/src/cosmiframe/index.ts new file mode 100644 index 000000000..e96459256 --- /dev/null +++ b/packages/core/src/cosmiframe/index.ts @@ -0,0 +1,3 @@ +export * from './constants'; +export * from './cosmiframe'; +export * from './extension'; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 5cc28edfd..dfc002d17 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -5,4 +5,4 @@ export * from './types' export * from './utils' export * from './wallet-manager' export * from './ledger-wallet' -export * from './client' \ No newline at end of file +export * from './client' diff --git a/packages/core/src/manager.ts b/packages/core/src/manager.ts new file mode 100644 index 000000000..5bd804f2d --- /dev/null +++ b/packages/core/src/manager.ts @@ -0,0 +1,513 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import type { AssetList, Chain } from '@chain-registry/types'; +import { isInIframe } from '@dao-dao/cosmiframe'; +import Bowser from 'bowser'; +import EventEmitter from 'events'; + +import type { ChainWalletBase, MainWalletBase } from './bases'; +import { StateBase } from './bases'; +import { makeCosmiframeWallet } from './cosmiframe'; +import { + COSMIFRAME_KEYSTORECHANGE_EVENT, + COSMIFRAME_WALLET_ID, +} from './cosmiframe/constants'; +import type { NameService } from './name-service'; +import { WalletRepo } from './repository'; +import { + ChainName, + ChainRecord, + DeviceType, + EndpointOptions, + EventName, + NameServiceName, + OS, + SessionOptions, + SignerOptions, + SimpleAccount, + State, + WalletConnectOptions, + WalletName, +} from './types'; +import type { Logger } from './utils'; +import { convertChain, Session, WalletNotProvidedError } from './utils'; + +export class WalletManager extends StateBase { + chainRecords: ChainRecord[] = []; + walletRepos: WalletRepo[] = []; + defaultNameService: NameServiceName = 'icns'; + mainWallets: MainWalletBase[] = []; + coreEmitter: EventEmitter; + walletConnectOptions?: WalletConnectOptions; + readonly session: Session; + repelWallet = true; // only allow one wallet type to connect at one time. i.e. you cannot connect keplr and cosmostation at the same time + isLazy?: boolean; // stands for `globalIsLazy` setting + throwErrors: boolean | 'connect_only'; + subscribeConnectEvents: boolean; + cosmiframeEnabled: boolean; + private _reconnectMap = {}; + + constructor( + chains: (Chain | ChainName)[], + wallets: MainWalletBase[], + logger: Logger, + throwErrors: boolean | 'connect_only', + subscribeConnectEvents = true, + allowedCosmiframeParentOrigins?: string[], + assetLists?: AssetList[], + defaultNameService?: NameServiceName, + walletConnectOptions?: WalletConnectOptions, + signerOptions?: SignerOptions, + endpointOptions?: EndpointOptions, + sessionOptions?: SessionOptions + ) { + super(); + this.throwErrors = throwErrors; + this.subscribeConnectEvents = subscribeConnectEvents; + this.coreEmitter = new EventEmitter(); + this.logger = logger; + if (defaultNameService) this.defaultNameService = defaultNameService; + this.session = new Session({ + duration: 1800000, + callback: () => { + this.mainWallets.forEach((w) => w.disconnectAll(false)); + window?.localStorage.removeItem('cosmos-kit@2:core//accounts'); + window?.localStorage.removeItem('cosmos-kit@2:core//current-wallet'); + }, + ...sessionOptions, + }); + this.walletConnectOptions = walletConnectOptions; + this.cosmiframeEnabled = + isInIframe() && !!allowedCosmiframeParentOrigins?.length; + // Add Cosmiframe wallet to beginning of list if enabled. + wallets = [ + ...(this.cosmiframeEnabled + ? [makeCosmiframeWallet(allowedCosmiframeParentOrigins)] + : []), + ...wallets, + ]; + wallets.forEach( + ({ walletName }) => + (this._reconnectMap[walletName] = () => + this._reconnect(walletName, true)) + ); + this.init( + chains, + assetLists, + wallets, + walletConnectOptions, + signerOptions, + endpointOptions + ); + } + + init( + chains: (Chain | ChainName)[], + assetLists: AssetList[], + wallets: MainWalletBase[], + walletConnectOptions?: WalletConnectOptions, + signerOptions?: SignerOptions, + endpointOptions?: EndpointOptions + ) { + this.logger.info( + `${chains.length} chains and ${wallets.length} wallets are provided!` + ); + this.isLazy = endpointOptions?.isLazy; + + this.chainRecords = chains.map((chain) => { + const chainName = typeof chain === 'string' ? chain : chain.chain_name; + const converted = convertChain( + chain, + assetLists, + signerOptions, + endpointOptions?.endpoints?.[chainName], + this.isLazy, + this.logger + ); + return converted; + }); + + this.mainWallets = wallets.map((wallet) => { + wallet.logger = this.logger; + wallet.throwErrors = this.throwErrors; + wallet.session = this.session; + wallet.walletConnectOptions = this.walletConnectOptions; + wallet?.setChains(this.chainRecords); + return wallet; + }); + + this.chainRecords.forEach((chainRecord, index) => { + const repo = new WalletRepo( + chainRecord, + wallets.map(({ getChainWallet }) => getChainWallet(chainRecord.name)!) + ); + repo.logger = this.logger; + repo.repelWallet = this.repelWallet; + repo.session = this.session; + this.walletRepos.push(repo); + if (repo.fetchInfo) { + this.chainRecords[index] = repo.chainRecord; + } + }); + this.checkEndpoints(endpointOptions?.endpoints); + } + + private checkEndpoints(endpoints?: EndpointOptions['endpoints']) { + Object.keys(endpoints || {}).map((key) => { + if (this.chainRecords.findIndex((c) => c.name === key) === -1) { + this.logger?.warn( + `You are providing endpointOptions with unrecognized chain NAME ${key} (NOT found such chain in ChainProvider property "chains")` + ); + } + }); + } + + setWalletRepel(value: boolean) { + this.repelWallet = value; + this.walletRepos.forEach((repo) => (repo.repelWallet = value)); + window?.localStorage.setItem( + 'cosmos-kit@2:core//repel-wallet', + value.toString() + ); + } + + addEndpoints = (endpoints: EndpointOptions['endpoints']) => { + this.mainWallets.forEach((mainWallet) => { + mainWallet.addEnpoints(endpoints); + }); + }; + + addChains = ( + chains: (Chain | ChainName)[], + assetLists: AssetList[], + signerOptions?: SignerOptions, + endpoints?: EndpointOptions['endpoints'] + ) => { + const newChainRecords = chains.map((chain) => { + const chainName = typeof chain === 'string' ? chain : chain.chain_name; + return convertChain( + chain, + assetLists, + signerOptions, + endpoints?.[chainName], + this.isLazy, + this.logger + ); + }); + newChainRecords.forEach((chainRecord) => { + const index = this.chainRecords.findIndex( + (chainRecord2) => chainRecord2.name === chainRecord.name + ); + if (index == -1) { + this.chainRecords.push(chainRecord); + } else { + this.chainRecords[index] = chainRecord; + } + }); + + this.checkEndpoints(endpoints); + + this.mainWallets.forEach((wallet) => { + wallet.setChains(newChainRecords, false); + }); + + newChainRecords.forEach((chainRecord, i) => { + const repo = new WalletRepo( + chainRecord, + this.mainWallets.map( + ({ getChainWallet }) => getChainWallet(chainRecord.name)! + ) + ); + repo.setActions({ + viewOpen: this.actions?.viewOpen, + viewWalletRepo: this.actions?.viewWalletRepo, + }); + repo.wallets.forEach((w) => { + w.setActions({ + data: this.actions?.data, + state: this.actions?.state, + message: this.actions?.message, + }); + }); + repo.logger = this.logger; + repo.repelWallet = this.repelWallet; + repo.session = this.session; + + if (repo.fetchInfo) { + this.chainRecords[i] = repo.chainRecord; + } + + const index = this.walletRepos.findIndex( + (repo2) => repo2.chainName === repo.chainName + ); + if (index == -1) { + this.walletRepos.push(repo); + } else { + this.walletRepos[index] = repo; + } + }); + }; + + on = (event: EventName, handler: (params: any) => void) => { + this.coreEmitter.on(event, handler); + }; + + off = (event: EventName, handler: (params: any) => void) => { + this.coreEmitter.off(event, handler); + }; + + get activeRepos(): WalletRepo[] { + return this.walletRepos.filter((repo) => repo.isActive === true); + } + + getMainWallet = (walletName: WalletName): MainWalletBase => { + const wallet = this.mainWallets.find((w) => w.walletName === walletName); + + if (!wallet) { + throw new WalletNotProvidedError(walletName); + } + + return wallet; + }; + + getWalletRepo = (chainName: ChainName): WalletRepo => { + const walletRepo = this.walletRepos.find( + (wr) => wr.chainName === chainName + ); + + if (!walletRepo) { + throw new Error(`Chain ${chainName} is not provided.`); + } + + return walletRepo; + }; + + getChainWallet = ( + chainName: ChainName, + walletName: WalletName + ): ChainWalletBase => { + const chainWallet: ChainWalletBase | undefined = + this.getMainWallet(walletName).getChainWallet(chainName); + + if (!chainWallet) { + throw new Error(`${chainName} is not provided!`); + } + return chainWallet; + }; + + getChainRecord = (chainName: ChainName): ChainRecord => { + const chainRecord: ChainRecord | undefined = this.chainRecords.find( + (c) => c.name === chainName + ); + + if (!chainRecord) { + throw new Error(`${chainName} is not provided!`); + } + return chainRecord; + }; + + // get chain logo + getChainLogo = (chainName: ChainName): string | undefined => { + const chainRecord = this.getChainRecord(chainName); + return ( + // until chain_registry fix this + // chainRecord?.chain.logo_URIs?.svg || + // chainRecord?.chain.logo_URIs?.png || + // chainRecord?.chain.logo_URIs?.jpeg || + chainRecord?.assetList?.assets[0]?.logo_URIs?.svg || + chainRecord?.assetList?.assets[0]?.logo_URIs?.png || + undefined + ); + }; + + getNameService = async (chainName?: ChainName): Promise => { + let _chainName: ChainName; + if (!chainName) { + if (!this.defaultNameService) { + throw new Error('defaultNameService is undefined'); + } + const { getNameServiceRegistryFromName } = await import('./utils'); + const registry = getNameServiceRegistryFromName(this.defaultNameService); + if (!registry) { + throw new Error( + 'Unknown defaultNameService ' + this.defaultNameService + ); + } + _chainName = registry.chainName; + } else { + _chainName = chainName; + } + + return await this.getWalletRepo(_chainName).getNameService(); + }; + + private _reconnect = async ( + walletName: WalletName, + checkConnection = false + ) => { + if ( + checkConnection && + this.getMainWallet(walletName)?.isWalletDisconnected + ) { + return; + } + this.logger?.debug('[Event Emit] `refresh_connection` (manager)'); + this.coreEmitter.emit('refresh_connection'); + await this.getMainWallet(walletName).connect(); + await this.getMainWallet(walletName) + .getChainWalletList(true)[0] + ?.connect(true); + }; + + private _restoreAccounts = async () => { + const walletName = + // If Cosmiframe enabled, use it by default instead of stored wallet. + this.cosmiframeEnabled + ? COSMIFRAME_WALLET_ID + : window.localStorage.getItem('cosmos-kit@2:core//current-wallet'); + if (walletName) { + try { + const mainWallet = this.getMainWallet(walletName); + mainWallet.activate(); + + if (mainWallet.clientMutable.state === State.Done) { + const accountsStr = window.localStorage.getItem( + 'cosmos-kit@2:core//accounts' + ); + if (accountsStr && accountsStr !== '[]') { + const accounts: SimpleAccount[] = JSON.parse(accountsStr); + accounts.forEach((data) => { + const chainWallet = mainWallet + .getChainWalletList(false) + .find( + (w) => + w.chainRecord.chain?.chain_id === data.chainId && + w.namespace === data.namespace + ); + chainWallet?.activate(); + if (mainWallet.walletInfo.mode === 'wallet-connect') { + chainWallet?.setData(data); + chainWallet?.setState(State.Done); + } + }); + mainWallet.setState(State.Done); + } + } + + if (mainWallet.walletInfo.mode !== 'wallet-connect') { + await this._reconnect(walletName); + } + } catch (error) { + if (error instanceof WalletNotProvidedError) { + this.logger?.warn(error.message); + } else { + throw error; + } + } + } + }; + + _handleCosmiframeKeystoreChangeEvent = (event: MessageEvent) => { + if ( + typeof event.data === 'object' && + 'event' in event.data && + event.data.event === COSMIFRAME_KEYSTORECHANGE_EVENT + ) { + // Dispatch event to our window. + window.dispatchEvent(new Event(COSMIFRAME_KEYSTORECHANGE_EVENT)); + + // Reconnect if the parent updates. + this._reconnect(COSMIFRAME_WALLET_ID); + } + }; + + onMounted = async () => { + if (typeof window === 'undefined') return; + + // If Cosmiframe enabled, rebroadcast keystore change event messages as + // events and reconnect if the parent changes. Since the outer window can be + // a different origin (and it most likely is), it cannot dispatch events on + // our (the iframe's) window. Thus, it posts a message with the event name + // to our window and we broadcast it. + if (this.cosmiframeEnabled) { + window.addEventListener( + 'message', + this._handleCosmiframeKeystoreChangeEvent + ); + } + + const parser = Bowser.getParser(window.navigator.userAgent); + const env = { + browser: parser.getBrowserName(true), + device: (parser.getPlatform().type || 'desktop') as DeviceType, + os: parser.getOSName(true) as OS, + }; + this.setEnv(env); + this.walletRepos.forEach((repo) => repo.setEnv(env)); + + await Promise.all( + this.mainWallets.map(async (wallet) => { + wallet.setEnv(env); + wallet.emitter?.emit('broadcast_env', env); + if (this.subscribeConnectEvents) { + wallet.walletInfo.connectEventNamesOnWindow?.forEach((eventName) => { + window.addEventListener( + eventName, + this._reconnectMap[wallet.walletName]! + ); + this.logger?.debug(`Add "${eventName}" event listener to window`); + }); + wallet.walletInfo.connectEventNamesOnClient?.forEach( + async (eventName) => { + wallet.client?.on?.( + eventName, + this._reconnectMap[wallet.walletName]! + ); + this.logger?.debug( + `Add "${eventName}" event listener to wallet client ${wallet.walletPrettyName}` + ); + } + ); + } + + if (wallet.walletInfo.mode === 'wallet-connect') { + await wallet.initClient(this.walletConnectOptions); + } else { + await wallet.initClient(); + } + }) + ); + + await this._restoreAccounts(); + }; + + onUnmounted = () => { + if (typeof window === 'undefined') { + return; + } + + // If using Cosmiframe, stop listening for keystore change event. + if (this.cosmiframeEnabled) { + window.removeEventListener( + 'message', + this._handleCosmiframeKeystoreChangeEvent + ); + } + + this.mainWallets.forEach((wallet) => { + wallet.walletInfo.connectEventNamesOnWindow?.forEach((eventName) => { + window.removeEventListener( + eventName, + this._reconnectMap[wallet.walletName]! + ); + }); + wallet.walletInfo.connectEventNamesOnClient?.forEach( + async (eventName) => { + wallet.client?.off?.( + eventName, + this._reconnectMap[wallet.walletName]! + ); + } + ); + }); + }; +} diff --git a/packages/core/src/name-service.ts b/packages/core/src/name-service.ts new file mode 100644 index 000000000..4fa2b6d6f --- /dev/null +++ b/packages/core/src/name-service.ts @@ -0,0 +1,26 @@ +import type { CosmWasmClient } from '@cosmjs/cosmwasm-stargate'; +import { Bech32Address, NameServiceRegistry } from './types'; + +export class NameService { + client: CosmWasmClient; + registry: NameServiceRegistry; + + constructor(client: CosmWasmClient, registry: NameServiceRegistry) { + this.client = client; + this.registry = registry; + } + + async resolveName(address: Bech32Address): Promise { + try { + const { contract, getQueryMsg } = this.registry; + const result = await this.client.queryContractSmart( + contract, + getQueryMsg(address) + ); + return result; + } catch (e) { + console?.error(e); + return undefined; + } + } +} diff --git a/packages/core/src/repository.ts b/packages/core/src/repository.ts new file mode 100644 index 000000000..892c5a964 --- /dev/null +++ b/packages/core/src/repository.ts @@ -0,0 +1,276 @@ +/* eslint-disable no-empty */ +/* eslint-disable no-console */ +import { ChainRegistryFetcher } from '@chain-registry/client'; +import type { CosmWasmClient } from '@cosmjs/cosmwasm-stargate'; +import type { StargateClient } from '@cosmjs/stargate'; + +import type { ChainWalletBase } from './bases/chain-wallet'; +import { StateBase } from './bases/state'; +import type { NameService } from './name-service'; +import { + CallbackOptions, + ChainRecord, + DappEnv, + DisconnectOptions, + ExtendedHttpEndpoint, + WalletName, +} from './types'; +import type { Session } from './utils'; + +/** + * Store all ChainWallets for a particular Chain. + */ +export class WalletRepo extends StateBase { + isActive = false; + chainRecord: ChainRecord; + private _wallets: ChainWalletBase[]; + namespace = 'cosmos'; + session: Session; + repelWallet = true; + private callbackOptions?: CallbackOptions; + readonly fetchInfo: boolean = false; + + constructor(chainRecord: ChainRecord, wallets: ChainWalletBase[] = []) { + super(); + this.chainRecord = chainRecord; + this._wallets = wallets; + + if (this.repelWallet) { + this.wallets.forEach((w) => { + w.updateCallbacks({ + ...w.callbacks, + beforeConnect: async () => { + this.wallets.forEach(async (w2) => { + if (!w2.isWalletDisconnected && w2 !== w) { + await w2.disconnect( + false, + this.callbackOptions?.beforeConnect?.disconnect + ); + } + }); + }, + }); + }); + } + + if (!this.chainRecord.chain) { + this.fetchInfo = true; + const registry = new ChainRegistryFetcher({ + urls: [ + `https://raw.githubusercontent.com/cosmos/chain-registry/master/${chainRecord.name}/chain.json`, + ], + }); + registry + .fetchUrls() + .then(() => { + this.chainRecord.chain = registry.getChain(chainRecord.name); + this.actions?.render?.((i) => i + 1); + }) + .catch((e: Error) => { + this.chainRecord.chain = null; + this.logger?.warn( + `Failed to fetch chain info for chain ${chainRecord.name}: [${e.name}] ${e.message}` + ); + }); + } + if (!this.chainRecord.assetList) { + this.fetchInfo = true; + const registry = new ChainRegistryFetcher({ + urls: [ + `https://raw.githubusercontent.com/cosmos/chain-registry/master/${chainRecord.name}/assetlist.json`, + ], + }); + registry + .fetchUrls() + .then(() => { + this.chainRecord.assetList = registry.getChainAssetList( + chainRecord.name + ); + // this.actions?.render?.((i) => i + 1); + }) + .catch((e: Error) => { + this.chainRecord.assetList = null; + this.logger?.warn( + `Failed to fetch assetList info for chain ${chainRecord.name}: [${e.name}] ${e.message}` + ); + }); + } + if (this.fetchInfo) { + this._wallets.forEach( + (wallet) => (wallet.chainRecord = this.chainRecord) + ); + } + } + + setCallbackOptions(options?: CallbackOptions) { + this.callbackOptions = options; + } + + setEnv(env?: DappEnv): void { + this._env = env; + this.wallets.forEach((w) => w.setEnv(env)); + } + + activate() { + this.isActive = true; + this.wallets.forEach((w) => w.activate()); + } + + get chainName() { + return this.chainRecord.name; + } + + get chainLogo(): string | undefined { + return ( + // until chain_registry fix this + // this.chainInfo.chain.logo_URIs?.svg || + // this.chainInfo.chain.logo_URIs?.png || + // this.chainInfo.chain.logo_URIs?.jpeg || + this.chainRecord.assetList?.assets[0]?.logo_URIs?.svg || + this.chainRecord.assetList?.assets[0]?.logo_URIs?.png || + undefined + ); + } + + get wallets(): ChainWalletBase[] { + return this._wallets; + } + + get platformEnabledWallets(): ChainWalletBase[] { + return this.isMobile + ? this._wallets.filter((w) => + typeof w.walletInfo.mobileDisabled === 'boolean' + ? !w.walletInfo.mobileDisabled + : !w.walletInfo.mobileDisabled() + ) + : this._wallets; + } + + get isSingleWallet() { + return this.wallets.length === 1; + } + + get current(): ChainWalletBase | undefined { + if (!this.repelWallet) { + this.logger.warn( + 'when `repelWallet` is set false, `current` is always undefined.' + ); + return void 0; + } + + return this.wallets.find( + (w) => !w.isWalletNotExist && !w.isWalletDisconnected + ); + } + + getWallet = (walletName: WalletName): ChainWalletBase | undefined => { + return this.wallets.find((w) => w.walletName === walletName); + }; + + openView = () => { + this.actions?.viewWalletRepo?.(this); + this.actions?.viewOpen?.(true); + }; + + closeView = () => { + this.actions?.viewOpen?.(false); + }; + + connect = async (walletName?: WalletName, sync = true) => { + if (walletName) { + const wallet = this.getWallet(walletName); + await wallet?.connect(sync); + } else { + this.openView(); + } + }; + + disconnect = async ( + walletName?: WalletName, + sync = true, + options?: DisconnectOptions + ) => { + if (walletName) { + await this.getWallet(walletName)?.disconnect(sync, options); + } else { + await this.current.disconnect(sync, options); + } + }; + + getRpcEndpoint = async ( + isLazy?: boolean + ): Promise => { + for (const wallet of this.wallets) { + try { + return await wallet.getRpcEndpoint(isLazy); + } catch (error) { + this.logger?.debug( + `${(error as Error).name}: ${(error as Error).message}` + ); + } + } + return Promise.reject(`No valid RPC endpoint for chain ${this.chainName}!`); + }; + + getRestEndpoint = async ( + isLazy?: boolean + ): Promise => { + for (const wallet of this.wallets) { + try { + return await wallet.getRestEndpoint(isLazy); + } catch (error) { + this.logger?.debug( + `${(error as Error).name}: ${(error as Error).message}` + ); + } + } + return Promise.reject( + `No valid REST endpoint for chain ${this.chainName}!` + ); + }; + + getStargateClient = async (): Promise => { + for (const wallet of this.wallets) { + try { + return await wallet.getStargateClient(); + } catch (error) { + this.logger?.debug( + `${(error as Error).name}: ${(error as Error).message}` + ); + } + } + return Promise.reject( + `Something wrong! Probably no valid RPC endpoint for chain ${this.chainName}.` + ); + }; + + getCosmWasmClient = async (): Promise => { + for (const wallet of this.wallets) { + try { + return await wallet.getCosmWasmClient(); + } catch (error) { + this.logger?.debug( + `${(error as Error).name}: ${(error as Error).message}` + ); + } + } + return Promise.reject( + `Something wrong! Probably no valid RPC endpoint for chain ${this.chainName}.` + ); + }; + + getNameService = async (): Promise => { + for (const wallet of this.wallets) { + try { + return await wallet.getNameService(); + } catch (error) { + this.logger?.debug( + `${(error as Error).name}: ${(error as Error).message}` + ); + } + } + return Promise.reject( + `Something wrong! Probably no valid RPC endpoint or name service is not registered for chain ${this.chainName}.` + ); + }; +} diff --git a/packages/core/src/types/chain.ts b/packages/core/src/types/chain.ts index 5aad83aa0..32d8ccc3d 100644 --- a/packages/core/src/types/chain.ts +++ b/packages/core/src/types/chain.ts @@ -1 +1 @@ -export type ChainName = string \ No newline at end of file +export type ChainName = string diff --git a/packages/core/src/types/hook.ts b/packages/core/src/types/hook.ts new file mode 100644 index 000000000..490b51250 --- /dev/null +++ b/packages/core/src/types/hook.ts @@ -0,0 +1,176 @@ +import { AssetList, Chain } from '@chain-registry/types'; +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { + CosmWasmClient, + SigningCosmWasmClient, +} from '@cosmjs/cosmwasm-stargate'; +import { + DirectSignResponse, + EncodeObject, + OfflineDirectSigner, + OfflineSigner, +} from '@cosmjs/proto-signing'; +import { + DeliverTxResponse, + SigningStargateClient, + StargateClient, + StdFee, +} from '@cosmjs/stargate'; +import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +import { ChainWalletBase, MainWalletBase } from '../bases'; +import { NameService } from '../name-service'; +import { WalletRepo } from '../repository'; +import { ChainName, ChainRecord } from './chain'; +import { CosmosClientType, ModalTheme, Mutable, State } from './common'; +import { + EndpointOptions, + EventName, + ExtendedHttpEndpoint, + SignerOptions, +} from './manager'; +import { + AppUrl, + BroadcastMode, + DirectSignDoc, + DisconnectOptions, + NameServiceName, + SignOptions, + SuggestToken, + Wallet, + WalletAccount, + WalletClient, + WalletStatus, +} from './wallet'; + +export interface ChainWalletContext { + chainWallet: ChainWalletBase | undefined; + + chain: Chain; + assets: AssetList | undefined; + wallet: Wallet; + logoUrl: string | undefined; + address: string | undefined; + username: string | undefined; + message: string | undefined; + status: WalletStatus; + + isWalletDisconnected: boolean; + isWalletConnecting: boolean; + isWalletConnected: boolean; + isWalletRejected: boolean; + isWalletNotExist: boolean; + isWalletError: boolean; + + connect: () => Promise; + disconnect: (options?: DisconnectOptions) => Promise; + getRpcEndpoint: (isLazy?: boolean) => Promise; + getRestEndpoint: (isLazy?: boolean) => Promise; + getStargateClient: () => Promise; + getCosmWasmClient: () => Promise; + getSigningStargateClient: () => Promise; + getSigningCosmWasmClient: () => Promise; + getNameService: () => Promise; + + estimateFee: ( + messages: EncodeObject[], + type?: CosmosClientType, + memo?: string, + multiplier?: number + ) => Promise; + sign: ( + messages: EncodeObject[], + fee?: StdFee, + memo?: string, + type?: CosmosClientType + ) => Promise; + broadcast: ( + signedMessages: TxRaw, + type?: CosmosClientType + ) => Promise; + signAndBroadcast: ( + messages: EncodeObject[], + fee?: StdFee, + memo?: string, + type?: CosmosClientType + ) => Promise; + + // from wallet client + qrUrl: Mutable | undefined; + appUrl: Mutable | undefined; + defaultSignOptions: SignOptions; + + setDefaultSignOptions: (options: SignOptions) => void; + enable: () => Promise; + suggestToken: (data: SuggestToken) => Promise; + getAccount: () => Promise; + getOfflineSigner: () => OfflineSigner; + getOfflineSignerAmino: () => OfflineAminoSigner; + getOfflineSignerDirect: () => OfflineDirectSigner; + signAmino: ( + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) => Promise; + signDirect: ( + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) => Promise; + signArbitrary: ( + signer: string, + data: string | Uint8Array + ) => Promise; + sendTx(tx: Uint8Array, mode: BroadcastMode): Promise; +} + +export interface ChainContext extends ChainWalletContext { + wallet: Wallet | undefined; + walletRepo: WalletRepo; + openView: () => void; + closeView: () => void; +} + +export interface ManagerContext { + chainRecords: ChainRecord[]; + walletRepos: WalletRepo[]; + mainWallets: MainWalletBase[]; + defaultNameService: NameServiceName; + getChainRecord: (chainName: ChainName) => ChainRecord; + getWalletRepo: (chainName: ChainName) => WalletRepo; + addChains: ( + chains: Chain[], + assetLists: AssetList[], + signerOptions?: SignerOptions, + endpoints?: EndpointOptions['endpoints'] + ) => void; + addEndpoints: (endpoints?: EndpointOptions['endpoints']) => void; + getChainLogo: (chainName: ChainName) => string | undefined; + getNameService: (chainName?: ChainName) => Promise; + on: (event: EventName, handler: (params: any) => void) => void; + off: (event: EventName, handler: (params: any) => void) => void; +} + +export interface ModalThemeContext { + modalTheme: ModalTheme; + setModalTheme: (theme: ModalTheme) => void; +} + +export interface WalletContext { + mainWallet: MainWalletBase | undefined; + chainWallets: ChainWalletBase[]; + wallet: Wallet | undefined; + status: WalletStatus; + message: string | undefined; +} + +export interface WalletClientContext { + client: WalletClient | undefined; + status: State; + message: string | undefined; +} diff --git a/packages/core/src/types/index.ts b/packages/core/src/types/index.ts index 6ddf8fafc..befae6040 100644 --- a/packages/core/src/types/index.ts +++ b/packages/core/src/types/index.ts @@ -1,4 +1,4 @@ export * from './wallet' export * from './common' export * from './manager' -export * from './chain' \ No newline at end of file +export * from './chain' diff --git a/packages/core/src/types/manager.ts b/packages/core/src/types/manager.ts index fdf5e108b..be0664377 100644 --- a/packages/core/src/types/manager.ts +++ b/packages/core/src/types/manager.ts @@ -25,4 +25,4 @@ export interface Config { assetLists: AssetList[]; signerOptions: SignerOptions; endpointOptions: EndpointOptions -} \ No newline at end of file +} diff --git a/packages/core/src/types/view.ts b/packages/core/src/types/view.ts new file mode 100644 index 000000000..bda350716 --- /dev/null +++ b/packages/core/src/types/view.ts @@ -0,0 +1,45 @@ +import { ChainWalletBase } from '../bases'; +import { WalletRepo } from '../repository'; +import { Dispatch } from './common'; +import { ModalOptions } from './wallet'; + +export enum ModalView { + WalletList = 'WalletList', + Connecting = 'Connecting', + Connected = 'Connected', + Error = 'Error', + NotExist = 'NotExist', + Rejected = 'Rejected', + QRCode = 'QRCode', +} + +export interface WalletModalProps { + isOpen: boolean; + setOpen: Dispatch; + walletRepo?: WalletRepo; +} + +export interface WalletViewProps { + onClose: () => void; + onReturn: () => void; + wallet: ChainWalletBase; + options?: ModalOptions; +} + +interface RefObject { + readonly current: T | null; +} + +export interface WalletListViewProps { + onClose: () => void; + wallets: ChainWalletBase[]; + initialFocus?: RefObject; +} + +type SingleWalletView = `${Exclude}`; + +export type ModalViews = { + [p in SingleWalletView]?: (props: WalletViewProps) => JSX.Element; +} & { + WalletList?: (props: WalletListViewProps) => JSX.Element; +}; diff --git a/packages/core/src/types/wallet.ts b/packages/core/src/types/wallet.ts index 49a641f3e..3ac546598 100644 --- a/packages/core/src/types/wallet.ts +++ b/packages/core/src/types/wallet.ts @@ -158,4 +158,4 @@ export const WcEventTypes = { proposal_expire: ( payload: SignClientTypes.EventArguments['proposal_expire'], ) => { }, -} as const; \ No newline at end of file +} as const; diff --git a/packages/core/src/utils/check.ts b/packages/core/src/utils/check.ts new file mode 100644 index 000000000..b9efd6137 --- /dev/null +++ b/packages/core/src/utils/check.ts @@ -0,0 +1,16 @@ +export function checkInit(target: unknown, targetName?: string, msg?: string) { + if (target === undefined || target === null) { + throw new Error(msg || `${targetName || 'Variable'} is not inited!`); + } +} + +export function checkKey( + target: Map, + key: string, + targetName?: string, + msg?: string +) { + if (!target.has(key)) { + throw new Error(msg || `${key} not existed in Map ${targetName}!`); + } +} diff --git a/packages/core/src/utils/convert.ts b/packages/core/src/utils/convert.ts new file mode 100644 index 000000000..d92f8dff9 --- /dev/null +++ b/packages/core/src/utils/convert.ts @@ -0,0 +1,41 @@ +import { AssetList, Chain } from '@chain-registry/types'; + +import { ChainName, ChainRecord, Endpoints, SignerOptions } from '../types'; +import { getIsLazy } from './endpoint'; +import { Logger } from './logger'; + +export function convertChain( + chain: Chain | ChainName, + assetLists: AssetList[], + signerOptions?: SignerOptions, + preferredEndpoints?: Endpoints, + isLazy?: boolean, + logger?: Logger +): ChainRecord { + const chainName = typeof chain === 'string' ? chain : chain.chain_name; + const assetList = assetLists.find((list) => list.chain_name === chainName); + const _preferredEndpoints = { + ...preferredEndpoints, + isLazy: getIsLazy( + isLazy, + preferredEndpoints?.isLazy, + void 0, + void 0, + logger + ), + }; + const converted = { + name: chainName, + chain: typeof chain === 'string' ? void 0 : chain, + assetList, + clientOptions: { + stargate: signerOptions?.stargate?.(chain), + signingStargate: signerOptions?.signingStargate?.(chain), + signingCosmwasm: signerOptions?.signingCosmwasm?.(chain), + preferredSignType: signerOptions?.preferredSignType?.(chain) || 'amino', + }, + preferredEndpoints: _preferredEndpoints, + }; + + return converted; +} diff --git a/packages/core/src/utils/endpoint.ts b/packages/core/src/utils/endpoint.ts index 72c64804f..ec804747c 100644 --- a/packages/core/src/utils/endpoint.ts +++ b/packages/core/src/utils/endpoint.ts @@ -66,4 +66,4 @@ export const getValidRestEndpoint = async (endpoints: (string | HttpEndpoint)[]) } } return rest -} \ No newline at end of file +} diff --git a/packages/core/src/utils/error.ts b/packages/core/src/utils/error.ts new file mode 100644 index 000000000..4a16e948f --- /dev/null +++ b/packages/core/src/utils/error.ts @@ -0,0 +1,23 @@ +// Wallet +export const ClientNotExistError = new Error('Client Not Exist!'); +export const RejectedError = new Error('Request Rejected!'); + +// QRCode +export const ExpiredError = new Error('Expired!'); + +export class WalletNotProvidedError extends Error { + readonly walletName: string; + + constructor(walletName: string) { + super(`Wallet ${walletName} is not provided.`); + this.walletName = walletName; + } +} + +export class ConnectError extends Error { + readonly name = 'ConnectError'; + + constructor(message?: string) { + super(message); + } +} diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index f613a434e..92de1cda5 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -1,4 +1,4 @@ export * from './extension' export * from './errors' export * from './observe' -export * from './endpoint' \ No newline at end of file +export * from './endpoint' diff --git a/packages/core/src/utils/logger.ts b/packages/core/src/utils/logger.ts new file mode 100644 index 000000000..167fd6c92 --- /dev/null +++ b/packages/core/src/utils/logger.ts @@ -0,0 +1,76 @@ +import { LogLevel } from '../types'; + +function wrap(logLevel: LogLevel, message?: any) { + switch (logLevel) { + case 'ERROR': + return [`%c${logLevel} -`, 'color: Red;', message]; + case 'WARN': + return [`%c${logLevel} -`, 'color: Orange;', message]; + case 'INFO': + return [`%c${logLevel} -`, 'color: Blue;', message]; + case 'DEBUG': + return [`%c${logLevel} -`, 'color: Purple;', message]; + case 'TRACE': + return [`%c${logLevel} -`, 'color: Brown;', message]; + } +} + +export class Logger { + private readonly logger: Console; + public readonly level: LogLevel; + public readonly levelOrder: LogLevel[] = [ + 'TRACE', + 'DEBUG', + 'INFO', + 'WARN', + 'ERROR', + 'NONE', + ]; + + public constructor(level: LogLevel = 'INFO') { + this.logger = console; + this.level = level; + } + + private compare(a: LogLevel, b: LogLevel) { + const aindex = this.levelOrder.indexOf(a); + const bindex = this.levelOrder.indexOf(b); + if (aindex > bindex) { + return 1; + } else if (aindex < bindex) { + return -1; + } else { + return 0; + } + } + + public trace(message?: any, ...optionalParams: any[]): void { + if (this.compare('TRACE', this.level) >= 0) { + this.logger.trace(...wrap('TRACE', message), ...optionalParams); + } + } + + public debug(message?: any, ...optionalParams: any[]): void { + if (this.compare('DEBUG', this.level) >= 0) { + this.logger.debug(...wrap('DEBUG', message), ...optionalParams); + } + } + + public info(message?: any, ...optionalParams: any[]): void { + if (this.compare('INFO', this.level) >= 0) { + this.logger.info(...wrap('INFO', message), ...optionalParams); + } + } + + public warn(message?: any, ...optionalParams: any[]): void { + if (this.compare('WARN', this.level) >= 0) { + this.logger.warn(...wrap('WARN', message), ...optionalParams); + } + } + + public error(message?: any, ...optionalParams: any[]): void { + if (this.compare('ERROR', this.level) >= 0) { + this.logger.error(...wrap('ERROR', message), ...optionalParams); + } + } +} diff --git a/packages/core/src/utils/map.ts b/packages/core/src/utils/map.ts new file mode 100644 index 000000000..a0962892c --- /dev/null +++ b/packages/core/src/utils/map.ts @@ -0,0 +1,8 @@ +export function valuesApply( + target: Map, + callbackfn: (value: V) => R +) { + return new Map( + Array.from(target).map(([key, value]) => [key, callbackfn(value)]) + ); +} diff --git a/packages/core/src/utils/math.ts b/packages/core/src/utils/math.ts new file mode 100644 index 000000000..0e99af4f4 --- /dev/null +++ b/packages/core/src/utils/math.ts @@ -0,0 +1,12 @@ +export function sum( + iterable: Iterable, + callbackfn: ( + previousValue: T, + currentValue: T, + currentIndex: number, + array: T[] + ) => T, + initialValue: T +) { + return Array.from(iterable).reduce(callbackfn, initialValue); +} diff --git a/packages/core/src/utils/name-service.ts b/packages/core/src/utils/name-service.ts new file mode 100644 index 000000000..38a4b1bcd --- /dev/null +++ b/packages/core/src/utils/name-service.ts @@ -0,0 +1,30 @@ +import { nameServiceRegistries } from '../config'; +import { ChainName, NameServiceName, NameServiceRegistry } from '../types'; + +export const getNameServiceRegistryFromChainName = ( + chainName: ChainName +): NameServiceRegistry => { + const registry = nameServiceRegistries.find((r) => r.chainName === chainName); + if (!registry) { + throw new Error('No such name service registered with chain ' + chainName); + } + return registry; +}; + +export const getNameServiceRegistryFromName = ( + name: NameServiceName +): NameServiceRegistry | undefined => { + return nameServiceRegistries.find((r) => r.name === name); +}; + +export const getNameServiceNameFromChainName = ( + chainName: ChainName +): NameServiceName | undefined => { + return nameServiceRegistries.find((r) => r.chainName === chainName)?.name; +}; + +export const getChainNameFromNameServiceName = ( + name: NameServiceName +): ChainName | undefined => { + return nameServiceRegistries.find((r) => r.name === name)?.chainName; +}; diff --git a/packages/core/src/utils/session.ts b/packages/core/src/utils/session.ts new file mode 100644 index 000000000..c1fb4d79a --- /dev/null +++ b/packages/core/src/utils/session.ts @@ -0,0 +1,19 @@ +import { SessionOptions } from '../types'; + +export class Session { + sessionOptions: SessionOptions; + timeoutId?: string | number | NodeJS.Timeout; + + constructor(sessionOptions: SessionOptions) { + this.sessionOptions = sessionOptions; + } + + update() { + if (typeof this.timeoutId !== 'undefined') { + clearTimeout(this.timeoutId); + } + this.timeoutId = setTimeout(() => { + this.sessionOptions.callback?.(); + }, this.sessionOptions.duration); + } +} diff --git a/packages/core/src/utils/status.ts b/packages/core/src/utils/status.ts new file mode 100644 index 000000000..1b02d7b27 --- /dev/null +++ b/packages/core/src/utils/status.ts @@ -0,0 +1,27 @@ +import { State, WalletStatus } from '../types'; +import { ClientNotExistError, RejectedError } from './error'; + +export const getWalletStatusFromState = ( + state: State, + message?: string +): WalletStatus => { + switch (state) { + case 'Pending': + return WalletStatus.Connecting; + case 'Done': + return WalletStatus.Connected; + case 'Error': + switch (message) { + case ClientNotExistError.message: + return WalletStatus.NotExist; + case RejectedError.message: + return WalletStatus.Rejected; + default: + return WalletStatus.Error; + } + case 'Init': + return WalletStatus.Disconnected; + default: + return WalletStatus.Disconnected; + } +}; diff --git a/packages/core/test-utils/mock-extension/constant.ts b/packages/core/test-utils/mock-extension/constant.ts new file mode 100644 index 000000000..88427e385 --- /dev/null +++ b/packages/core/test-utils/mock-extension/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTY2IiBoZWlnaHQ9IjE2NiIgdmlld0JveD0iMCAwIDE2NiAxNjYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF83ODBfNjEwKSI+CjxyZWN0IHdpZHRoPSIxNjYiIGhlaWdodD0iMTY2IiBmaWxsPSIjQzVGRkNFIi8+CjxwYXRoIGQ9Ik0xMzguNjE0IDEwMC40NDVDMTM4LjYxNCAxMjAuMjE3IDExNC40ODMgMTI4LjI1MiA4NC41MjE2IDEyOC4yNTJDNTQuNTYwMyAxMjguMjUyIDMwLjA3ODQgMTIwLjIxNyAzMC4wNzg0IDEwMC40NDVDMzAuMDc4NCA4MC42NzI0IDU0LjM4NDYgNjQuNjczIDg0LjM0NiA2NC42NzNDMTE0LjMwNyA2NC42NzMgMTM4LjYxNCA4MC43MDc0IDEzOC42MTQgMTAwLjQ0NVoiIGZpbGw9IiMyNEE5NUEiLz4KPHBhdGggZD0iTTEzMy4xMDMgNTcuMzQ3MkMxMzMuMTAzIDQ2LjkzNyAxMjQuNjAzIDM4LjQ4MzIgMTE0LjEzNiAzOC40ODMyQzEwOC42OTMgMzguNDgzMiAxMDMuNzg3IDQwLjc3MTkgMTAwLjMzIDQ0LjQxNzFDOTkuNzk0NCA0NC45ODE4IDk5LjAxMTggNDUuMjU2OSA5OC4yNDkgNDUuMTAyOUM5My44NjkgNDQuMjE4NSA4OS4yMzU1IDQzLjcyMzIgODQuNDU1NSA0My43MjMyQzc5LjY3NiA0My43MjMyIDc1LjA0MyA0NC4xODkzIDcwLjY2MzQgNDUuMDk1QzY5Ljg5OTggNDUuMjUyOSA2OS4xMTM4IDQ0Ljk4MjMgNjguNTc1IDQ0LjQxODZDNjUuMDkgNDAuNzcyNSA2MC4xODY3IDM4LjQ4MzIgNTQuNzc1MiAzOC40ODMyQzQ0LjMwOCAzOC40ODMyIDM1LjgwNzkgNDYuOTM3IDM1LjgwNzkgNTcuMzQ3MkMzNS44MDc5IDYwLjM4MzQgMzYuNTI2MiA2My4yMjczIDM3Ljc5MTMgNjUuNzU3QzM4LjA5NDMgNjYuMzYyOCAzOC4xMjQ4IDY3LjA3MjEgMzcuODYyNyA2Ny42OTY2QzM2LjYzNTMgNzAuNjIxMiAzNS45ODM1IDczLjcwOTEgMzUuOTgzNSA3Ni45MDk4QzM1Ljk4MzUgOTUuMjQ5OCA1Ny42OTA1IDExMC4wOTYgODQuNDU1NSAxMTAuMDk2QzExMS4yMjEgMTEwLjA5NiAxMzIuOTI4IDk1LjI0OTggMTMyLjkyOCA3Ni45MDk4QzEzMi45MjggNzMuNzA5MSAxMzIuMjc2IDcwLjYyMTIgMTMxLjA0OCA2Ny42OTY2QzEzMC43ODYgNjcuMDcyMSAxMzAuODE3IDY2LjM2MjggMTMxLjEyIDY1Ljc1N0MxMzIuMzg1IDYzLjIyNzMgMTMzLjEwMyA2MC4zODM0IDEzMy4xMDMgNTcuMzQ3MloiIGZpbGw9IiMzMkRBNkQiLz4KPHBhdGggZD0iTTUzLjIyNzEgNjcuODExOUM1OS42Mjg3IDY3LjgxMTkgNjQuODE4MyA2Mi42NTA2IDY0LjgxODMgNTYuMjgzOUM2NC44MTgzIDQ5LjkxNzEgNTkuNjI4NyA0NC43NTU5IDUzLjIyNzEgNDQuNzU1OUM0Ni44MjU1IDQ0Ljc1NTkgNDEuNjM2IDQ5LjkxNzEgNDEuNjM2IDU2LjI4MzlDNDEuNjM2IDYyLjY1MDYgNDYuODI1NSA2Ny44MTE5IDUzLjIyNzEgNjcuODExOVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMTUuMDY1IDY3LjgxMTlDMTIxLjQ2NiA2Ny44MTE5IDEyNi42NTYgNjIuNjUwNiAxMjYuNjU2IDU2LjI4MzlDMTI2LjY1NiA0OS45MTcxIDEyMS40NjYgNDQuNzU1OSAxMTUuMDY1IDQ0Ljc1NTlDMTA4LjY2MyA0NC43NTU5IDEwMy40NzQgNDkuOTE3MSAxMDMuNDc0IDU2LjI4MzlDMTAzLjQ3NCA2Mi42NTA2IDEwOC42NjMgNjcuODExOSAxMTUuMDY1IDY3LjgxMTlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDcuMDc1OSAxMjYuODI5QzQ5LjU2OTggMTI2LjgyOSA1MS41MzY4IDEyNC42NjMgNTEuMjU1OCAxMjIuMjE4QzUwLjIzNzIgMTEzLjU1NCA0NS45MTY4IDk0Ljc5NSAyNi45MTQ0IDgzLjUxMTVDNi4wODM2OCA3MS4xMzg3IDE1Ljk5NDEgMTA0LjAzNCAyMC4xMzY1IDExNi4wMTlDMjAuOTc0NCAxMTguNDQzIDIwLjAwMjcgMTIxLjEzNSAxNy43NzgzIDEyMi40MTFMMTYuNDEyMSAxMjMuMTk2QzE0LjY1NTkgMTI0LjIwOSAxNS4zOTM1IDEyNi44MjkgMTcuMzk1NiAxMjYuODI5SDQ3LjA3NTlaIiBmaWxsPSIjMzJEQTZEIi8+CjxwYXRoIGQ9Ik0xMjIuNTY2IDEyNi44MjlDMTIwLjMxOCAxMjYuODI5IDExOC41NjIgMTI0LjY2MyAxMTguODA4IDEyMi4yMThDMTE5LjY4NiAxMTMuNTg5IDEyMy42MiA5NC43OTUgMTQwLjc2MSA4My41MTE1QzE1OS43NDEgNzEuMDQyNiAxNTAuNTAzIDEwNC41NDcgMTQ2LjgxNSAxMTYuMjk0QzE0Ni4wOTIgMTE4LjU5OCAxNDYuOTgyIDEyMS4xMDYgMTQ5LjAyMiAxMjIuMzk5TDE1MC4yOCAxMjMuMTk2QzE1MS44NiAxMjQuMjA5IDE1MS4xOTMgMTI2LjgyOSAxNDkuNDAyIDEyNi44MjlIMTIyLjU2NloiIGZpbGw9IiMzMkRBNkQiLz4KPHBhdGggZD0iTTUzLjI0MjggNjMuMTc4N0M1Ny4wNjE3IDYzLjE3ODcgNjAuMTU3NiA2MC4wODI4IDYwLjE1NzYgNTYuMjYzOUM2MC4xNTc2IDUyLjQ0NSA1Ny4wNjE3IDQ5LjM0OTEgNTMuMjQyOCA0OS4zNDkxQzQ5LjQyMzkgNDkuMzQ5MSA0Ni4zMjggNTIuNDQ1IDQ2LjMyOCA1Ni4yNjM5QzQ2LjMyOCA2MC4wODI4IDQ5LjQyMzkgNjMuMTc4NyA1My4yNDI4IDYzLjE3ODdaIiBmaWxsPSIjMDkyNTExIi8+CjxwYXRoIGQ9Ik0xMTUuMDgxIDYzLjE3ODdDMTE4LjkgNjMuMTc4NyAxMjEuOTk1IDYwLjA4MjggMTIxLjk5NSA1Ni4yNjM5QzEyMS45OTUgNTIuNDQ1IDExOC45IDQ5LjM0OTEgMTE1LjA4MSA0OS4zNDkxQzExMS4yNjIgNDkuMzQ5MSAxMDguMTY2IDUyLjQ0NSAxMDguMTY2IDU2LjI2MzlDMTA4LjE2NiA2MC4wODI4IDExMS4yNjIgNjMuMTc4NyAxMTUuMDgxIDYzLjE3ODdaIiBmaWxsPSIjMDkyNTExIi8+CjxwYXRoIGQ9Ik05OS43OTk1IDgzLjAxNzZDMTAxLjUxNCA4My4xNjUxIDEwMi44MSA4NC42ODYyIDEwMi4zNzggODYuMzUxOEMxMDIuMDI5IDg3LjY5NzkgMTAxLjUyOSA4OS4wMDM5IDEwMC44ODYgOTAuMjQ0MkM5OS43NjMgOTIuNDA5IDk4LjIyNDYgOTQuMzMxNSA5Ni4zNTg2IDk1LjkwMThDOTQuNDkyNyA5Ny40NzIyIDkyLjMzNTcgOTguNjU5NiA5MC4wMTA4IDk5LjM5NjNDODcuNjg2IDEwMC4xMzMgODUuMjM4OCAxMDAuNDA1IDgyLjgwOSAxMDAuMTk2QzgwLjM3OTEgOTkuOTg2NiA3OC4wMTQzIDk5LjMwMSA3NS44NDk0IDk4LjE3OEM3My42ODQ2IDk3LjA1NTEgNzEuNzYyMSA5NS41MTY3IDcwLjE5MTcgOTMuNjUwN0M2OC42MjE0IDkxLjc4NDggNjcuNDM0IDg5LjYyNzggNjYuNjk3MiA4Ny4zMDI5QzY2LjE3MDEgODUuNjM5NiA2NS44ODExIDgzLjkxMzUgNjUuODM1OSA4Mi4xNzYxQzY1LjgwNiA4MS4wMjk0IDY2LjgyNDQgODAuMTgwOCA2Ny45NjczIDgwLjI3OTFMODQuNDAwNyA4MS42OTI4TDk5Ljc5OTUgODMuMDE3NloiIGZpbGw9IiMwOTI1MTEiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF83ODBfNjEwIj4KPHJlY3Qgd2lkdGg9IjE2NiIgaGVpZ2h0PSIxNjYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=='; diff --git a/packages/core/test-utils/mock-extension/extension/chain-wallet.ts b/packages/core/test-utils/mock-extension/extension/chain-wallet.ts new file mode 100644 index 000000000..812a7a594 --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/chain-wallet.ts @@ -0,0 +1,8 @@ +import { ChainWalletBase } from "../../../src/bases"; +import { ChainRecord, Wallet } from "../../../src/types"; + +export class ChainMockExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/packages/core/test-utils/mock-extension/extension/client.ts b/packages/core/test-utils/mock-extension/extension/client.ts new file mode 100644 index 000000000..5892b757b --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/client.ts @@ -0,0 +1,155 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + ExtendedHttpEndpoint, + SignOptions, + SignType, + SuggestToken, +} from '@cosmos-kit/core'; +import Long from 'long'; + +import { DirectSignDoc, WalletClient } from '../../../src/types'; +import { Mock } from './types'; + +export class MockClient implements WalletClient { + readonly client: Mock; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Mock) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress } of tokens) { + await this.client.suggestCW20Token(chainId, contractAddress); + } + } + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async disconnect() { + await this.client.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/packages/core/test-utils/mock-extension/extension/index.ts b/packages/core/test-utils/mock-extension/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/packages/core/test-utils/mock-extension/extension/main-wallet.ts b/packages/core/test-utils/mock-extension/extension/main-wallet.ts new file mode 100644 index 000000000..7896b67a1 --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/main-wallet.ts @@ -0,0 +1,22 @@ + +import { MainWalletBase } from '../../../src/bases'; +import { Wallet } from '../../../src/types'; +import { ChainMockExtension } from './chain-wallet'; +import { MockClient } from './client'; +import { getMockFromExtension } from './utils'; + +export class MockExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainMockExtension); + } + + async initClient() { + this.initingClient(); + try { + const mock = await getMockFromExtension(); + this.initClientDone(mock ? new MockClient(mock) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/packages/core/test-utils/mock-extension/extension/registry.ts b/packages/core/test-utils/mock-extension/extension/registry.ts new file mode 100644 index 000000000..81e5254a3 --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/registry.ts @@ -0,0 +1,27 @@ + + +import { Wallet } from '../../../src/types'; +import { ICON } from '../constant'; + +export const mockExtensionInfo: Wallet = { + name: 'mock-extension', + prettyName: 'Mock', + logo: ICON, + mode: 'extension', + mobileDisabled: () => true, + rejectMessage: { + source: 'Request rejected', + }, + rejectCode: 404, + connectEventNamesOnWindow: ['mock_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/mock-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }, + { + link: 'https://chrome.google.com/webstore/detail/mock-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }, + ], +}; diff --git a/packages/core/test-utils/mock-extension/extension/types.ts b/packages/core/test-utils/mock-extension/extension/types.ts new file mode 100644 index 000000000..32644b7dc --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/types.ts @@ -0,0 +1,87 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; + +import type { ChainInfo } from '@keplr-wallet/types'; +import { BroadcastMode } from '../../../src/types'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export interface MockSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Mock { + defaultOptions: { + sign?: MockSignOptions; + }; + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + suggestToken(chainId: string, contractAddress: string): Promise; + suggestCW20Token(chainId: string, contractAddress: string): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: MockSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: MockSignOptions + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + getEnigmaPubKey(chainId: string): Promise; + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/packages/core/test-utils/mock-extension/extension/utils.ts b/packages/core/test-utils/mock-extension/extension/utils.ts new file mode 100644 index 000000000..ac541902d --- /dev/null +++ b/packages/core/test-utils/mock-extension/extension/utils.ts @@ -0,0 +1,12 @@ +import { MockWallet } from '../../mocker'; // Ensure this path is correct +import { Mock } from './types'; + +interface MockWindow { + mock?: Mock; +} + +export const getMockFromExtension: ( + mockWindow?: MockWindow +) => Promise = async (_window: any) => { + return new MockWallet(); +}; diff --git a/packages/core/test-utils/mock-extension/index.ts b/packages/core/test-utils/mock-extension/index.ts new file mode 100644 index 000000000..478131c10 --- /dev/null +++ b/packages/core/test-utils/mock-extension/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './mock'; diff --git a/packages/core/test-utils/mock-extension/mock.ts b/packages/core/test-utils/mock-extension/mock.ts new file mode 100644 index 000000000..ba15321a6 --- /dev/null +++ b/packages/core/test-utils/mock-extension/mock.ts @@ -0,0 +1,5 @@ +import { mockExtensionInfo, MockExtensionWallet } from './extension'; + +const mockExtension = new MockExtensionWallet(mockExtensionInfo); + +export const wallets = [mockExtension]; diff --git a/packages/core/test-utils/mocker/index.ts b/packages/core/test-utils/mocker/index.ts new file mode 100644 index 000000000..2e7334d58 --- /dev/null +++ b/packages/core/test-utils/mocker/index.ts @@ -0,0 +1,163 @@ +// @ts-nocheck +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; + +import Long from 'long'; + +import { Key, Mock, MockSignOptions } from '../mock-extension/extension/types'; +import { BroadcastMode } from '../../src/types'; + +export class MockWallet implements Mock { + defaultOptions = { + sign: { + preferNoSetFee: false, + preferNoSetMemo: false, + disableBalanceCheck: false, + }, + }; + + mode = 'extension' as const; + + async disconnect(): Promise { + // Simulate disconnect logic + } + + async enable(chainIds: string | string[]): Promise { + // Simulate enabling logic + } + + async suggestToken(chainId: string, contractAddress: string): Promise { + // Simulate suggesting a token + } + + async suggestCW20Token( + chainId: string, + contractAddress: string + ): Promise { + // Simulate suggesting a CW20 token + } + + async getKey(chainId: string): Promise { + return { + name: 'Test Key', + algo: 'secp256k1', + pubKey: new Uint8Array(), + address: new Uint8Array(), + bech32Address: 'cosmos1...', + isNanoLedger: false, + }; + } + + async getOfflineSigner( + chainId: string + ): OfflineAminoSigner & OfflineDirectSigner { + return { + // Implement Offline Signer logic as needed + getAccounts: jest.fn(), + signAmino: jest.fn(), + } as OfflineAminoSigner & OfflineDirectSigner; + } + + async getOfflineSignerOnlyAmino( + chainId: string + ): OfflineAminoSigner { + return { + // Implement Offline Amino Signer logic as needed + getAccounts: jest.fn(), + signAmino: jest.fn(), + } as OfflineAminoSigner; + } + + async getOfflineSignerAuto(chainId: string): Promise { + return { + // Implement Auto Signer logic as needed + getAccounts: jest.fn(), + signAmino: jest.fn(), + } as OfflineSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: MockSignOptions + ): Promise { + return { + signed: signDoc, + signature: new Uint8Array(), + }; + } + + async signDirect( + chainId: string, + signer: string, + signDoc: { + bodyBytes?: Uint8Array | null; + authInfoBytes?: Uint8Array | null; + chainId?: string | null; + accountNumber?: Long | null; + }, + signOptions?: MockSignOptions + ): Promise { + return { + signed: signDoc, + signature: new Uint8Array(), + }; + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return { + pubKey: new Uint8Array(), + signature: new Uint8Array(), + }; + } + + async getEnigmaPubKey(chainId: string): Promise { + return new Uint8Array(); + } + + async getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise { + return new Uint8Array(); + } + + async enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise { + return new Uint8Array(); + } + + async enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise { + return new Uint8Array(); + } + + async sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise { + return new Uint8Array(); + } + + async experimentalSuggestChain(chainInfo: ChainInfo): Promise { + // Simulate suggesting a chain + } +} diff --git a/packages/core/test-utils/mocker/setup.ts b/packages/core/test-utils/mocker/setup.ts new file mode 100644 index 000000000..cdfcdd70b --- /dev/null +++ b/packages/core/test-utils/mocker/setup.ts @@ -0,0 +1,12 @@ +import { getMockFromExtension } from '../mock-extension/extension/utils'; + +// Example of using getMockFromExtension in an application setting +export async function setupWallet() { + try { + const wallet = await getMockFromExtension(); + // Proceed with using the wallet + console.log('Wallet enabled:', wallet.mode); + } catch (error) { + console.error('Failed to get wallet:', error); + } +} diff --git a/packages/cosmos-kit/.editorconfig b/packages/cosmos-kit/.editorconfig new file mode 100644 index 000000000..fac40a5f5 --- /dev/null +++ b/packages/cosmos-kit/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/packages/cosmos-kit/.eslintignore b/packages/cosmos-kit/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/packages/cosmos-kit/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/packages/cosmos-kit/.gitignore b/packages/cosmos-kit/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/packages/cosmos-kit/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/packages/cosmos-kit/.npmrc b/packages/cosmos-kit/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/packages/cosmos-kit/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/cosmos-kit/.prettierrc.json b/packages/cosmos-kit/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/packages/cosmos-kit/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/packages/cosmos-kit/CHANGELOG.md b/packages/cosmos-kit/CHANGELOG.md new file mode 100644 index 000000000..37d852248 --- /dev/null +++ b/packages/cosmos-kit/CHANGELOG.md @@ -0,0 +1,488 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.18.4...cosmos-kit@2.19.0) (2024-08-01) + +**Note:** Version bump only for package cosmos-kit + + + + + +## [2.18.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.18.3...cosmos-kit@2.18.4) (2024-06-28) + +**Note:** Version bump only for package cosmos-kit + + + + + +## [2.18.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.18.2...cosmos-kit@2.18.3) (2024-06-28) + +**Note:** Version bump only for package cosmos-kit + + + + + +## [2.18.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.18.1...cosmos-kit@2.18.2) (2024-06-26) + +**Note:** Version bump only for package cosmos-kit + + + + + +## [2.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.18.0...cosmos-kit@2.18.1) (2024-06-26) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.17.0...cosmos-kit@2.18.0) (2024-06-18) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.16.0...cosmos-kit@2.17.0) (2024-06-12) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.15.1...cosmos-kit@2.16.0) (2024-06-05) + + +### Features + +* add cdc wallet to all wallets list ([d3ad047](https://github.com/cosmology-tech/cosmos-kit/commit/d3ad047d281b751b1f5c51f0c91b45c4703bb338)) +* add cdc wallet to package deps ([f1ab3e0](https://github.com/cosmology-tech/cosmos-kit/commit/f1ab3e029bddcf59d20926709fcd784c6ba3e24b)) + + + + + +## [2.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.15.0...cosmos-kit@2.15.1) (2024-05-29) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.14.0...cosmos-kit@2.15.0) (2024-05-28) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.13.0...cosmos-kit@2.14.0) (2024-05-23) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.12.0...cosmos-kit@2.13.0) (2024-05-22) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.11.0...cosmos-kit@2.12.0) (2024-05-08) + +**Note:** Version bump only for package cosmos-kit + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.10.3...cosmos-kit@2.11.0) (2024-05-08) + +**Note:** Version bump only for package cosmos-kit + + + + + +## [2.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.10.2...cosmos-kit@2.10.3) (2024-05-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.10.1...cosmos-kit@2.10.2) (2024-04-28) + +**Note:** Version bump only for package cosmos-kit + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.10.0...cosmos-kit@2.10.1) (2024-04-27) + +**Note:** Version bump only for package cosmos-kit + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.9.4...cosmos-kit@2.10.0) (2024-04-20) + +**Note:** Version bump only for package cosmos-kit + +## [2.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.9.3...cosmos-kit@2.9.4) (2024-04-02) + +**Note:** Version bump only for package cosmos-kit + +## [2.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.9.2...cosmos-kit@2.9.3) (2024-03-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.9.1...cosmos-kit@2.9.2) (2024-02-29) + +**Note:** Version bump only for package cosmos-kit + +## [2.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.9.0...cosmos-kit@2.9.1) (2024-02-28) + +**Note:** Version bump only for package cosmos-kit + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.6...cosmos-kit@2.9.0) (2024-02-02) + +### Features + +- Add support for Trust Extension ([38b3653](https://github.com/cosmology-tech/cosmos-kit/commit/38b365326457e592f739dd5bb94dbbed5405f21d)) + +## [2.8.6](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.5...cosmos-kit@2.8.6) (2024-01-31) + +**Note:** Version bump only for package cosmos-kit + +## [2.8.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.4...cosmos-kit@2.8.5) (2024-01-31) + +**Note:** Version bump only for package cosmos-kit + +## [2.8.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.3...cosmos-kit@2.8.4) (2024-01-25) + +**Note:** Version bump only for package cosmos-kit + +## [2.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.2...cosmos-kit@2.8.3) (2024-01-23) + +**Note:** Version bump only for package cosmos-kit + +## [2.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.1...cosmos-kit@2.8.2) (2024-01-22) + +**Note:** Version bump only for package cosmos-kit + +## [2.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.8.0...cosmos-kit@2.8.1) (2024-01-22) + +**Note:** Version bump only for package cosmos-kit + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.12...cosmos-kit@2.8.0) (2024-01-21) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.12](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.11...cosmos-kit@2.7.12) (2024-01-21) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.11](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.10...cosmos-kit@2.7.11) (2024-01-21) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.10](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.9...cosmos-kit@2.7.10) (2024-01-21) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.8...cosmos-kit@2.7.9) (2024-01-20) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.7...cosmos-kit@2.7.8) (2024-01-20) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.6...cosmos-kit@2.7.7) (2024-01-20) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.5...cosmos-kit@2.7.6) (2024-01-20) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.4...cosmos-kit@2.7.5) (2024-01-19) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.3...cosmos-kit@2.7.4) (2024-01-19) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.2...cosmos-kit@2.7.3) (2024-01-19) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.1...cosmos-kit@2.7.2) (2024-01-15) + +**Note:** Version bump only for package cosmos-kit + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.7.0...cosmos-kit@2.7.1) (2024-01-08) + +**Note:** Version bump only for package cosmos-kit + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.6.4...cosmos-kit@2.7.0) (2024-01-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.6.3...cosmos-kit@2.6.4) (2023-12-26) + +**Note:** Version bump only for package cosmos-kit + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.6.2...cosmos-kit@2.6.3) (2023-12-25) + +**Note:** Version bump only for package cosmos-kit + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.6.1...cosmos-kit@2.6.2) (2023-12-22) + +### Bug Fixes + +- client and wallet state wrongly changed ([6a26281](https://github.com/cosmology-tech/cosmos-kit/commit/6a262816879b10d2ffb38f03149374822e0ad635)) + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.6.0...cosmos-kit@2.6.1) (2023-12-18) + +**Note:** Version bump only for package cosmos-kit + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.17...cosmos-kit@2.6.0) (2023-12-15) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.17](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.16...cosmos-kit@2.5.17) (2023-12-14) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.16](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.15...cosmos-kit@2.5.16) (2023-12-14) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.15](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.14...cosmos-kit@2.5.15) (2023-12-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.14](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.13...cosmos-kit@2.5.14) (2023-11-27) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.12...cosmos-kit@2.5.13) (2023-11-24) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.11...cosmos-kit@2.5.12) (2023-11-23) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.10...cosmos-kit@2.5.11) (2023-11-08) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.9...cosmos-kit@2.5.10) (2023-11-06) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.8...cosmos-kit@2.5.9) (2023-11-06) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.7...cosmos-kit@2.5.8) (2023-11-06) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.6...cosmos-kit@2.5.7) (2023-11-02) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.5...cosmos-kit@2.5.6) (2023-10-31) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.4...cosmos-kit@2.5.5) (2023-10-31) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.3...cosmos-kit@2.5.4) (2023-10-19) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.2...cosmos-kit@2.5.3) (2023-10-19) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.1...cosmos-kit@2.5.2) (2023-10-18) + +**Note:** Version bump only for package cosmos-kit + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.5.0...cosmos-kit@2.5.1) (2023-10-17) + +**Note:** Version bump only for package cosmos-kit + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.12...cosmos-kit@2.5.0) (2023-10-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.11...cosmos-kit@2.4.12) (2023-10-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.10...cosmos-kit@2.4.11) (2023-10-05) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.9...cosmos-kit@2.4.10) (2023-10-04) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.8...cosmos-kit@2.4.9) (2023-09-26) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.7...cosmos-kit@2.4.8) (2023-09-22) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.6...cosmos-kit@2.4.7) (2023-09-18) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.5...cosmos-kit@2.4.6) (2023-09-15) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.4...cosmos-kit@2.4.5) (2023-09-13) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.3...cosmos-kit@2.4.4) (2023-09-13) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.2...cosmos-kit@2.4.3) (2023-09-12) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.1...cosmos-kit@2.4.2) (2023-09-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.4.0...cosmos-kit@2.4.1) (2023-09-07) + +**Note:** Version bump only for package cosmos-kit + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.3.5...cosmos-kit@2.4.0) (2023-09-05) + +**Note:** Version bump only for package cosmos-kit + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.3.4...cosmos-kit@2.3.5) (2023-09-02) + +**Note:** Version bump only for package cosmos-kit + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.3.3...cosmos-kit@2.3.4) (2023-08-24) + +**Note:** Version bump only for package cosmos-kit + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.3.2...cosmos-kit@2.3.3) (2023-08-24) + +**Note:** Version bump only for package cosmos-kit + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.3.1...cosmos-kit@2.3.2) (2023-08-23) + +**Note:** Version bump only for package cosmos-kit + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.3.0...cosmos-kit@2.3.1) (2023-08-21) + +**Note:** Version bump only for package cosmos-kit + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.2.1...cosmos-kit@2.3.0) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.2.0...cosmos-kit@2.2.1) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.12...cosmos-kit@2.2.0) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.11...cosmos-kit@2.1.12) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.10...cosmos-kit@2.1.11) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.9...cosmos-kit@2.1.10) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.8...cosmos-kit@2.1.9) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.7...cosmos-kit@2.1.8) (2023-08-17) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.6...cosmos-kit@2.1.7) (2023-08-09) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.5...cosmos-kit@2.1.6) (2023-08-07) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.4...cosmos-kit@2.1.5) (2023-08-03) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.3...cosmos-kit@2.1.4) (2023-08-03) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.2...cosmos-kit@2.1.3) (2023-08-01) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.1...cosmos-kit@2.1.2) (2023-07-31) + +**Note:** Version bump only for package cosmos-kit + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.1.0...cosmos-kit@2.1.1) (2023-07-30) + +**Note:** Version bump only for package cosmos-kit + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.0.5...cosmos-kit@2.1.0) (2023-07-28) + +**Note:** Version bump only for package cosmos-kit + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@2.0.4...cosmos-kit@2.0.5) (2023-07-28) + +**Note:** Version bump only for package cosmos-kit + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@0.12.3...cosmos-kit@2.0.4) (2023-07-27) + +**Note:** Version bump only for package cosmos-kit + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@0.12.2...cosmos-kit@0.12.3) (2023-07-24) + +**Note:** Version bump only for package cosmos-kit + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/cosmos-kit@0.12.1...cosmos-kit@0.12.2) (2023-07-21) + +**Note:** Version bump only for package cosmos-kit + +## 0.12.1 (2023-07-21) + +**Note:** Version bump only for package cosmos-kit diff --git a/packages/cosmos-kit/LICENSE b/packages/cosmos-kit/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/packages/cosmos-kit/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/cosmos-kit/README.md b/packages/cosmos-kit/README.md new file mode 100644 index 000000000..36db13d5a --- /dev/null +++ b/packages/cosmos-kit/README.md @@ -0,0 +1,181 @@ +# cosmos-kit + +

+ +

+ +

+ + + + + + + + + +
+ + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +## 🏁 Quickstart + +Get started quickly by using [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) to help you build high-quality Cosmos apps fast! + +## ⚙️ Configuration + +Check out [our docs here](https://docs.cosmology.zone/cosmos-kit/get-started) to configure CosmosKit. + +## ⚛️ CosmJS Signers + +If you want to get a cosmjs stargate or cosmwasm signer, [here are docs for our hooks](https://docs.cosmology.zone/cosmos-kit/hooks) + +## 📦 Packages + +| Name | Description | +| --- | --- | +| [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/cosmos-kit) | Single package for React developers to install Cosmos Kit | +| [@cosmos-kit/core](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/core) | Core Cosmos Kit functionality | +| [@cosmos-kit/walletconnect](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/walletconnect) | Mobile WalletConnect support for the Cosmos ecosystem | +| [@cosmos-kit/react](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/react) | React integration with Interchain UI Modal for simple usage | +| [@cosmos-kit/react-lite](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/react-lite) | A lightweight version of React integration without UI for customization | + +## 📦 Wallets + +Explore the range of wallet adapters available in our [wallets directory](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets). + +

+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +

+ + +## 🔌 Integrating Wallets + +See our docs on [integrating your wallet](https://docs.cosmology.zone/cosmos-kit/integrating-wallets) + +### 🚀 Running Example + +For high-level examples suitable for most developers, explore our [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app). For a deeper, more technical understanding, this repository contains an example, which is also useful when integrating new wallets. + +```sh +yarn build +cd packages/example +yarn dev +``` + +#### [Basic Next.js Example](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/example) + +This example demonstrates a Next.js project that integrates the `@cosmos-kit/react` wallet adapter. Note that this example has historically been used by multiple teams to test PRs. + +#### ["vanilla" example showing how `WalletManager` works](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/example/pages/wallet-manager) + +This example is ideal for developers looking to create integrations for Vue.js, Svelte, or other frameworks. It uses a basic Next.js setup without relying on React-specific hooks, providing a clear model for building custom integrations. + +- `/wallet-manager` - Index page for wallet functionality +- `/wallet-manager/wallet-operate` - Operate Wallet Directly +- `/wallet-manager/main-wallets` - Show All Main Wallets +- `/wallet-manager/wallet-manager` - Wallet Manager Without Hook +- `/wallet-manager/wallet-repos` - Show All Wallet Repos +- `/wallet-manager/wallet-repo` - Show One Wallet Repo + +## 🛠 Developing + +Checkout the repository and bootstrap the yarn workspace: + +```sh +# Clone the repo. +git clone https://github.com/cosmology-tech/cosmos-kit +cd cosmos-kit +yarn +``` + +### Building + +```sh +yarn build +``` + +### Publishing + +``` +lerna publish +# lerna publish minor +# lerna publish major +``` + +## Related + +Checkout these related projects: + +- [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +- [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +- [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +- [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +- [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +- [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/packages/cosmos-kit/jest.config.js b/packages/cosmos-kit/jest.config.js new file mode 100644 index 000000000..2a3ce45e8 --- /dev/null +++ b/packages/cosmos-kit/jest.config.js @@ -0,0 +1,195 @@ +/* + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/2l/2cvqj9hx2cx2srtmbw7hhmzh0000gn/T/jest_dx", + + // Automatically clear mock calls, instances, contexts and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: true, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + // coverageDirectory: "coverage", + + // An array of regexp pattern strings used to skip coverage collection + coveragePathIgnorePatterns: [ + "/node_modules/" + ], + + // Indicates which provider should be used to instrument code for coverage + // coverageProvider: "babel", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // The default configuration for fake timers + // fakeTimers: { + // "enableGlobally": false + // }, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + moduleFileExtensions: [ + "js", + "mjs", + "cjs", + "jsx", + "ts", + "tsx", + "json", + "node" + ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: undefined, + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + // testEnvironment: "jsdom", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + testMatch: [ + "**/__tests__/**/*.[jt]s?(x)", + "**/?(*.)+(spec|test).[tj]s?(x)" + ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // A map from regular expressions to paths to transformers + // transform: undefined, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; diff --git a/packages/cosmos-kit/package.json b/packages/cosmos-kit/package.json new file mode 100644 index 000000000..ed607343b --- /dev/null +++ b/packages/cosmos-kit/package.json @@ -0,0 +1,96 @@ +{ + "name": "cosmos-kit", + "version": "2.19.0", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Tom Wang" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "test" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "keplr", + "leap", + "cosmostation", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/cdcwallet": "^2.13.2", + "@cosmos-kit/coin98": "^2.11.2", + "@cosmos-kit/compass": "^2.11.2", + "@cosmos-kit/cosmostation": "^2.12.0", + "@cosmos-kit/exodus": "^2.10.2", + "@cosmos-kit/fin": "^2.11.2", + "@cosmos-kit/frontier": "^2.10.2", + "@cosmos-kit/galaxy-station": "^2.10.2", + "@cosmos-kit/keplr": "^2.12.2", + "@cosmos-kit/leap": "^2.12.2", + "@cosmos-kit/ledger": "^2.11.2", + "@cosmos-kit/okxwallet-extension": "^2.11.2", + "@cosmos-kit/omni": "^2.10.2", + "@cosmos-kit/owallet": "^2.11.2", + "@cosmos-kit/shell": "^2.11.2", + "@cosmos-kit/station": "^2.10.2", + "@cosmos-kit/tailwind": "^1.5.2", + "@cosmos-kit/trust": "^2.11.2", + "@cosmos-kit/vectis": "^2.11.2", + "@cosmos-kit/xdefi": "^2.10.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/packages/cosmos-kit/src/index.ts b/packages/cosmos-kit/src/index.ts new file mode 100644 index 000000000..5b9d7b14c --- /dev/null +++ b/packages/cosmos-kit/src/index.ts @@ -0,0 +1,20 @@ +export { wallets } from './wallets'; + +import { + ChainName, + ChainWalletBase, + SignerOptions, + WalletModalProps, + WalletStatus, +} from '@cosmos-kit/core'; + +export { + WalletStatus, + ChainWalletBase +}; + +export type { + ChainName, + SignerOptions, + WalletModalProps, +}; diff --git a/packages/cosmos-kit/src/wallets.ts b/packages/cosmos-kit/src/wallets.ts new file mode 100644 index 000000000..cd026269e --- /dev/null +++ b/packages/cosmos-kit/src/wallets.ts @@ -0,0 +1,229 @@ +import { MainWalletBase } from '@cosmos-kit/core'; +import { wallets as coin98Extension } from '@cosmos-kit/coin98-extension'; +import { wallets as compassExtension } from '@cosmos-kit/compass-extension'; +import { wallets as okxwalletExtension } from '@cosmos-kit/okxwallet-extension'; +import { wallets as cosmostationExtension } from '@cosmos-kit/cosmostation-extension'; +import { wallets as cosmostationMobile } from '@cosmos-kit/cosmostation-mobile'; +import { wallets as frontierExtension } from '@cosmos-kit/frontier-extension'; +import { wallets as keplrExtension } from '@cosmos-kit/keplr-extension'; +import { wallets as keplrMobile } from '@cosmos-kit/keplr-mobile'; +import { wallets as owalletExtension } from '@cosmos-kit/owallet-extension'; +import { wallets as leapExtension } from '@cosmos-kit/leap-extension'; +import { wallets as leapMobile } from '@cosmos-kit/leap-mobile'; +import { wallets as leapMetamaskCosmosSnap } from '@cosmos-kit/leap-metamask-cosmos-snap'; +import { wallets as ledgerUSB } from '@cosmos-kit/ledger'; +import { wallets as omniMobile } from '@cosmos-kit/omni-mobile'; +import { wallets as finExtension } from '@cosmos-kit/fin-extension'; +import { wallets as stationExtension } from '@cosmos-kit/station-extension'; +import { wallets as trustExtension } from '@cosmos-kit/trust-extension'; +import { wallets as trustMobile } from '@cosmos-kit/trust-mobile'; +import { wallets as shellExtension } from '@cosmos-kit/shell-extension'; +import { wallets as vectisExtension } from '@cosmos-kit/vectis-extension'; +import { wallets as xdefiExtension } from '@cosmos-kit/xdefi-extension'; +import { wallets as exodusExtension } from '@cosmos-kit/exodus-extension'; +import { wallets as tailwindWallet } from '@cosmos-kit/tailwind'; +import { wallets as galaxyStationExtension } from '@cosmos-kit/galaxy-station-extension'; +import { wallets as cdcwalletExtension } from '@cosmos-kit/cdcwallet-extension'; + +export type WalletName = + | 'keplr' + | 'cosmostation' + | 'ledger' + | 'okxwallet' + | 'station' + | 'leap' + | 'trust' + | 'xdefi' + | 'vectis' + | 'frontier' + | 'fin' + | 'omni' + | 'coin98' + | 'shell' + | 'compass' + | 'tailwind' + | 'owallet' + | 'exodus' + | 'galaxystation' + | 'cdcwallet'; + +export type WalletList< + E extends MainWalletBase | null, + M extends MainWalletBase | null +> = (E extends MainWalletBase + ? M extends MainWalletBase + ? [E, M] + : [E] + : M extends MainWalletBase + ? [M] + : []) & { + mobile: M | null; + extension: E | null; +}; + +export function createWalletList< + ExtensionWallet extends MainWalletBase | null, + MobileWallet extends MainWalletBase | null, + MetaMaskSnap extends MainWalletBase | null +>( + extension: ExtensionWallet | null, + mobile: MobileWallet | null, + snap?: MetaMaskSnap +) { + const list = [extension, mobile, snap].filter((wallet) => + Boolean(wallet) + ) as WalletList; + list.mobile = mobile; + list.extension = extension; + return list; +} + +export const keplr = createWalletList(keplrExtension[0], keplrMobile[0]); + +export const cosmostation = createWalletList( + cosmostationExtension[0], + cosmostationMobile[0] +); +export const ledger = ledgerUSB; +export const leap = createWalletList( + leapExtension[0], + leapMobile[0], + leapMetamaskCosmosSnap[0] +); +export const station = createWalletList(stationExtension[0], null); +export const okxwallet = createWalletList(okxwalletExtension[0], null); +export const trust = createWalletList(trustExtension[0], trustMobile[0]); +export const xdefi = createWalletList(xdefiExtension[0], null); +export const vectis = createWalletList(vectisExtension[0], null); +export const frontier = createWalletList(frontierExtension[0], null); +export const fin = createWalletList(finExtension[0], null); +export const omni = createWalletList(null, omniMobile[0]); +export const shell = createWalletList(shellExtension[0], null); +export const coin98 = createWalletList(coin98Extension[0], null); +export const compass = createWalletList(compassExtension[0], null); +export const exodus = createWalletList(exodusExtension[0], null); +export const tailwind = createWalletList(tailwindWallet[0], null); +export const owallet = createWalletList(owalletExtension[0], null); +export const galaxystation = createWalletList(galaxyStationExtension[0], null); +export const cdcwallet = createWalletList(cdcwalletExtension[0], null); + +export type SubWalletList = MainWalletBase[] & { + get mobile(): MainWalletBase[]; + get extension(): MainWalletBase[]; +}; + +export type AllWalletList = SubWalletList & { + keplr: typeof keplr; + cosmostation: typeof cosmostation; + ledger: typeof ledger; + okxwallet: typeof okxwallet; + station: typeof station; + leap: typeof leap; + trust: typeof trust; + xdefi: typeof xdefi; + vectis: typeof vectis; + frontier: typeof frontier; + fin: typeof fin; + omni: typeof omni; + coin98: typeof coin98; + compass: typeof compass; + exodus: typeof exodus; + tailwind: typeof tailwind; + owallet: typeof owallet; + galaxystation: typeof owallet; + cdcwallet: typeof cdcwallet; + for: (...names: WalletName[]) => SubWalletList; + not: (...names: WalletName[]) => SubWalletList; +}; + +export function defineGetters(wallets: MainWalletBase[]) { + return Object.defineProperties(wallets, { + mobile: { + get() { + return this.filter( + (wallet: MainWalletBase) => wallet.isModeWalletConnect + ); + }, + }, + extension: { + get() { + return this.filter((wallet: MainWalletBase) => wallet.isModeExtension); + }, + }, + }) as SubWalletList; +} + +export function createAllWalletList(ws: MainWalletBase[]) { + const wallets = ws.slice() as AllWalletList; + + wallets.keplr = keplr; + wallets.cosmostation = cosmostation; + wallets.ledger = ledger; + wallets.okxwallet = okxwallet; + wallets.station = station; + wallets.leap = leap; + wallets.trust = trust; + wallets.xdefi = xdefi; + wallets.vectis = vectis; + wallets.frontier = frontier; + wallets.fin = fin; + wallets.omni = omni; + wallets.coin98 = coin98; + wallets.compass = compass; + wallets.exodus = exodus; + wallets.tailwind = tailwind; + wallets.owallet = owallet; + wallets.galaxystation = galaxystation; + wallets.cdcwallet = cdcwallet; + + defineGetters(wallets); + + wallets.for = function (...ns: WalletName[]) { + const names = Array.from(new Set(ns)); + return defineGetters( + names + .map((name: WalletName) => + wallets.filter((wallet: MainWalletBase) => + wallet.walletInfo.name.startsWith(name) + ) + ) + .flat() + ); + }; + + wallets.not = function (...ns: WalletName[]) { + const names = Array.from(new Set(ns)); + return defineGetters( + wallets.filter( + (wallet: MainWalletBase) => + !names.some((name: WalletName) => + wallet.walletInfo.name.startsWith(name) + ) + ) + ); + }; + + return wallets; +} + +export const wallets = createAllWalletList([ + ...keplr, + ...leap, + ...ledger, + ...okxwallet, + ...station, + ...trust, + ...cosmostation, + ...xdefi, + ...vectis, + ...frontier, + ...fin, + ...omni, + ...coin98, + ...compass, + ...exodus, + ...tailwind, + ...owallet, + ...galaxystation, + ...cdcwallet, +]); diff --git a/packages/cosmos-kit/test/wallets.test.ts b/packages/cosmos-kit/test/wallets.test.ts new file mode 100644 index 000000000..d8baa4dd3 --- /dev/null +++ b/packages/cosmos-kit/test/wallets.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, test } from '@jest/globals'; +import { wallets, keplr } from '../src/wallets'; + +describe('wallets', () => { + test('wallets has at least one wallet', () => { + expect(wallets.length).toBeGreaterThanOrEqual(1); + }); + + test('wallets.keplr', () => { + expect(wallets.keplr).toBeDefined(); + expect(wallets.keplr.length).toBe(2); + expect(wallets.keplr.length).toBe(keplr.length); + expect(wallets.keplr.mobile).toBe(keplr.mobile); + expect(wallets.keplr.extension).toBe(keplr.extension); + }); + + test('wallets.for()', () => { + const ws = wallets.for('keplr', 'cosmostation'); + expect(ws.length).toBe(4); + expect(ws.mobile.length).toBe(2); + expect(ws.extension.length).toBe(2); + }); + + test('wallets.not()', () => { + const ws = wallets.not('coin98', 'compass'); + expect(ws.length).toBe(wallets.length - 2); + }); + + test('wallets.mobile', () => { + expect(wallets.mobile.every((w) => w.isModeWalletConnect)).toBe(true); + }); + + test('wallets.extension', () => { + expect(wallets.extension.every((w) => w.isModeExtension)).toBe(true); + }); +}); diff --git a/packages/cosmos-kit/tsconfig.json b/packages/cosmos-kit/tsconfig.json new file mode 100644 index 000000000..d83288931 --- /dev/null +++ b/packages/cosmos-kit/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/packages/docs/.gitignore b/packages/docs/.gitignore new file mode 100644 index 000000000..a206e8411 --- /dev/null +++ b/packages/docs/.gitignore @@ -0,0 +1,3 @@ +.vercel +.next +/out \ No newline at end of file diff --git a/packages/docs/.markdownlint.json b/packages/docs/.markdownlint.json new file mode 100644 index 000000000..afa3a11a6 --- /dev/null +++ b/packages/docs/.markdownlint.json @@ -0,0 +1,3 @@ +{ + "MD051": false +} \ No newline at end of file diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md new file mode 100644 index 000000000..dcf1f74a0 --- /dev/null +++ b/packages/docs/CHANGELOG.md @@ -0,0 +1,1055 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.21.0...docs@2.22.0) (2024-08-01) + +**Note:** Version bump only for package docs + + + + + +# [2.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.20.0...docs@2.21.0) (2024-07-25) + +**Note:** Version bump only for package docs + + + + + +# [2.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.19.4...docs@2.20.0) (2024-07-11) + +**Note:** Version bump only for package docs + + + + + +## [2.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.19.3...docs@2.19.4) (2024-06-28) + +**Note:** Version bump only for package docs + + + + + +## [2.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.19.2...docs@2.19.3) (2024-06-28) + +**Note:** Version bump only for package docs + + + + + +## [2.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.19.1...docs@2.19.2) (2024-06-26) + +**Note:** Version bump only for package docs + + + + + +## [2.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.19.0...docs@2.19.1) (2024-06-26) + +**Note:** Version bump only for package docs + + + + + +# [2.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.18.0...docs@2.19.0) (2024-06-21) + +**Note:** Version bump only for package docs + + + + + +# [2.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.17.0...docs@2.18.0) (2024-06-18) + +**Note:** Version bump only for package docs + + + + + +# [2.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.16.0...docs@2.17.0) (2024-06-12) + +**Note:** Version bump only for package docs + + + + + +# [2.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.15.1...docs@2.16.0) (2024-06-05) + + +### Features + +* add cdc wallet integration doc ([43b3f68](https://github.com/cosmology-tech/cosmos-kit/commit/43b3f6878998f33ad5e14ea393541e43d269b445)) +* add cdc wallet to package deps ([f1ab3e0](https://github.com/cosmology-tech/cosmos-kit/commit/f1ab3e029bddcf59d20926709fcd784c6ba3e24b)) + + + + + +## [2.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.15.0...docs@2.15.1) (2024-05-29) + +**Note:** Version bump only for package docs + + + + + +# [2.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.14.0...docs@2.15.0) (2024-05-28) + +**Note:** Version bump only for package docs + + + + + +# [2.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.13.0...docs@2.14.0) (2024-05-23) + +**Note:** Version bump only for package docs + + + + + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.12.0...docs@2.13.0) (2024-05-22) + +**Note:** Version bump only for package docs + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.11.0...docs@2.12.0) (2024-05-08) + +**Note:** Version bump only for package docs + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.10.1...docs@2.11.0) (2024-05-08) + +**Note:** Version bump only for package docs + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.10.0...docs@2.10.1) (2024-04-27) + +### Bug Fixes + +- uninstalled wallet extensions never transition into NotExist state ([f52b5a7](https://github.com/cosmology-tech/cosmos-kit/commit/f52b5a7a64b1a6021b517baf06de6400e6719092)) + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.11...docs@2.10.0) (2024-04-20) + +**Note:** Version bump only for package docs + +## [2.9.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.10...docs@2.9.11) (2024-04-02) + +**Note:** Version bump only for package docs + +## [2.9.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.9...docs@2.9.10) (2024-03-07) + +**Note:** Version bump only for package docs + +## [2.9.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.8...docs@2.9.9) (2024-02-29) + +**Note:** Version bump only for package docs + +## [2.9.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.7...docs@2.9.8) (2024-02-28) + +### Bug Fixes + +- **docs:** remove chakra ([02b0830](https://github.com/cosmology-tech/cosmos-kit/commit/02b0830889782e6c4ce1c1125d6635ed73f6fcea)) +- sync nextra theme with interchain ui theme ([160a0e9](https://github.com/cosmology-tech/cosmos-kit/commit/160a0e90f03de090e67db1403ee93c3ac60163e4)) + +## [2.9.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.6...docs@2.9.7) (2024-02-02) + +### Bug Fixes + +- replace docs dropdown with a new combobox and upgrade dependency version ([5c87bbf](https://github.com/cosmology-tech/cosmos-kit/commit/5c87bbf016e6770c0577891028e789c1d4fce390)) + +## [2.9.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.5...docs@2.9.6) (2024-01-31) + +**Note:** Version bump only for package docs + +## [2.9.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.4...docs@2.9.5) (2024-01-31) + +**Note:** Version bump only for package docs + +## [2.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.3...docs@2.9.4) (2024-01-25) + +**Note:** Version bump only for package docs + +## [2.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.2...docs@2.9.3) (2024-01-23) + +**Note:** Version bump only for package docs + +## [2.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.1...docs@2.9.2) (2024-01-22) + +### Bug Fixes + +- broken docs ([25b3bf5](https://github.com/cosmology-tech/cosmos-kit/commit/25b3bf55932c57f30c8687ad486a020eccebd646)) + +## [2.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.9.0...docs@2.9.1) (2024-01-22) + +**Note:** Version bump only for package docs + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.12...docs@2.9.0) (2024-01-21) + +**Note:** Version bump only for package docs + +## [2.8.12](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.11...docs@2.8.12) (2024-01-21) + +**Note:** Version bump only for package docs + +## [2.8.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.10...docs@2.8.11) (2024-01-21) + +**Note:** Version bump only for package docs + +## [2.8.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.9...docs@2.8.10) (2024-01-21) + +**Note:** Version bump only for package docs + +## [2.8.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.8...docs@2.8.9) (2024-01-20) + +**Note:** Version bump only for package docs + +## [2.8.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.7...docs@2.8.8) (2024-01-20) + +**Note:** Version bump only for package docs + +## [2.8.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.6...docs@2.8.7) (2024-01-20) + +**Note:** Version bump only for package docs + +## [2.8.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.5...docs@2.8.6) (2024-01-20) + +**Note:** Version bump only for package docs + +## [2.8.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.4...docs@2.8.5) (2024-01-19) + +**Note:** Version bump only for package docs + +## [2.8.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.3...docs@2.8.4) (2024-01-19) + +**Note:** Version bump only for package docs + +## [2.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.2...docs@2.8.3) (2024-01-19) + +**Note:** Version bump only for package docs + +## [2.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.1...docs@2.8.2) (2024-01-15) + +**Note:** Version bump only for package docs + +## [2.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.8.0...docs@2.8.1) (2024-01-08) + +**Note:** Version bump only for package docs + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.7.4...docs@2.8.0) (2024-01-07) + +**Note:** Version bump only for package docs + +## [2.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.7.3...docs@2.7.4) (2023-12-26) + +**Note:** Version bump only for package docs + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.7.2...docs@2.7.3) (2023-12-25) + +**Note:** Version bump only for package docs + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.7.1...docs@2.7.2) (2023-12-22) + +### Bug Fixes + +- client and wallet state wrongly changed ([6a26281](https://github.com/cosmology-tech/cosmos-kit/commit/6a262816879b10d2ffb38f03149374822e0ad635)) + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.7.0...docs@2.7.1) (2023-12-18) + +### Bug Fixes + +- bump dependency ([ad6ac8f](https://github.com/cosmology-tech/cosmos-kit/commit/ad6ac8f2a42a8f018bd62f91b1124f6bf0590287)) + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.18...docs@2.7.0) (2023-12-15) + +**Note:** Version bump only for package docs + +## [2.6.18](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.17...docs@2.6.18) (2023-12-14) + +**Note:** Version bump only for package docs + +## [2.6.17](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.16...docs@2.6.17) (2023-12-14) + +**Note:** Version bump only for package docs + +## [2.6.16](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.15...docs@2.6.16) (2023-12-07) + +**Note:** Version bump only for package docs + +## [2.6.15](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.14...docs@2.6.15) (2023-11-27) + +### Bug Fixes + +- **docs:** zIndex issue in chain dropdown ([5802cbc](https://github.com/cosmology-tech/cosmos-kit/commit/5802cbcb6cf2b2dd815995c2b0ee9567d93ec0c7)) + +## [2.6.14](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.13...docs@2.6.14) (2023-11-24) + +### Bug Fixes + +- **react:** move interchain ui to peerDependency to avoid css conflicts ([581c976](https://github.com/cosmology-tech/cosmos-kit/commit/581c9760f83765945d39385a5ef9e579df29d2db)) + +## [2.6.13](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.12...docs@2.6.13) (2023-11-23) + +**Note:** Version bump only for package docs + +## [2.6.12](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.11...docs@2.6.12) (2023-11-15) + +### Bug Fixes + +- add docs ([2c6ed55](https://github.com/cosmology-tech/cosmos-kit/commit/2c6ed552d30edabae4a9a6a5c86973d008dd62b8)) +- **react:** allow pass through custom classes to base modal ([cde4b7e](https://github.com/cosmology-tech/cosmos-kit/commit/cde4b7e2fcfbfd8e106eba4153e34d02a5c85887)) + +## [2.6.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.10...docs@2.6.11) (2023-11-08) + +**Note:** Version bump only for package docs + +## [2.6.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.9...docs@2.6.10) (2023-11-06) + +**Note:** Version bump only for package docs + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.8...docs@2.6.9) (2023-11-06) + +**Note:** Version bump only for package docs + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.7...docs@2.6.8) (2023-11-06) + +**Note:** Version bump only for package docs + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.6...docs@2.6.7) (2023-11-02) + +### Bug Fixes + +- **react:** upgrade deps and fix small type issues ([2bedc28](https://github.com/cosmology-tech/cosmos-kit/commit/2bedc28023fc5cf73b90c21c9eed07e6c386e4d5)) +- stuff ([d8d8f00](https://github.com/cosmology-tech/cosmos-kit/commit/d8d8f003739c0402962e2250ff18fc21caad4ab6)) + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.5...docs@2.6.6) (2023-10-31) + +**Note:** Version bump only for package docs + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.4...docs@2.6.5) (2023-10-31) + +**Note:** Version bump only for package docs + +## [2.6.4](https://github.com/NoahSaso/cosmos-kit/compare/docs@2.6.3...docs@2.6.4) (2023-10-19) + +**Note:** Version bump only for package docs + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.2...docs@2.6.3) (2023-10-19) + +**Note:** Version bump only for package docs + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.1...docs@2.6.2) (2023-10-18) + +**Note:** Version bump only for package docs + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.6.0...docs@2.6.1) (2023-10-17) + +**Note:** Version bump only for package docs + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.13...docs@2.6.0) (2023-10-07) + +**Note:** Version bump only for package docs + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.12...docs@2.5.13) (2023-10-07) + +**Note:** Version bump only for package docs + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.11...docs@2.5.12) (2023-10-05) + +**Note:** Version bump only for package docs + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.10...docs@2.5.11) (2023-10-04) + +**Note:** Version bump only for package docs + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.9...docs@2.5.10) (2023-09-26) + +**Note:** Version bump only for package docs + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.8...docs@2.5.9) (2023-09-22) + +**Note:** Version bump only for package docs + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.7...docs@2.5.8) (2023-09-18) + +**Note:** Version bump only for package docs + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.6...docs@2.5.7) (2023-09-15) + +**Note:** Version bump only for package docs + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.5...docs@2.5.6) (2023-09-13) + +**Note:** Version bump only for package docs + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.4...docs@2.5.5) (2023-09-13) + +**Note:** Version bump only for package docs + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.3...docs@2.5.4) (2023-09-13) + +**Note:** Version bump only for package docs + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.2...docs@2.5.3) (2023-09-12) + +**Note:** Version bump only for package docs + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.1...docs@2.5.2) (2023-09-07) + +**Note:** Version bump only for package docs + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.5.0...docs@2.5.1) (2023-09-07) + +**Note:** Version bump only for package docs + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.6...docs@2.5.0) (2023-09-05) + +**Note:** Version bump only for package docs + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.5...docs@2.4.6) (2023-09-02) + +### Bug Fixes + +- useChains bug when one chain has connected ([694c02c](https://github.com/cosmology-tech/cosmos-kit/commit/694c02c46c67fb70ff959134d81de6c0ee879f10)) + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.4...docs@2.4.5) (2023-08-28) + +**Note:** Version bump only for package docs + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.3...docs@2.4.4) (2023-08-24) + +**Note:** Version bump only for package docs + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.2...docs@2.4.3) (2023-08-24) + +**Note:** Version bump only for package docs + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.1...docs@2.4.2) (2023-08-23) + +**Note:** Version bump only for package docs + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.4.0...docs@2.4.1) (2023-08-21) + +**Note:** Version bump only for package docs + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.3.1...docs@2.4.0) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.3.0...docs@2.3.1) (2023-08-17) + +### Bug Fixes + +- rename prop ([85f97d6](https://github.com/cosmology-tech/cosmos-kit/commit/85f97d687f58ad9c4769fcc35f7767235c0e8955)) +- s ([f27484b](https://github.com/cosmology-tech/cosmos-kit/commit/f27484b9e464c4bec76ab5fbd5370ba06072b0d8)) + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.7...docs@2.3.0) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.6...docs@2.2.7) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.5...docs@2.2.6) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.4...docs@2.2.5) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.3...docs@2.2.4) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.2...docs@2.2.3) (2023-08-17) + +**Note:** Version bump only for package docs + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.1...docs@2.2.2) (2023-08-09) + +**Note:** Version bump only for package docs + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.2.0...docs@2.2.1) (2023-08-07) + +**Note:** Version bump only for package docs + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.6...docs@2.2.0) (2023-08-03) + +### Features + +- add platformEnabledWallets ([a48ffab](https://github.com/cosmology-tech/cosmos-kit/commit/a48ffabd6108363b24b5bdecb6a156a669758e4a)) + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.5...docs@2.1.6) (2023-08-03) + +**Note:** Version bump only for package docs + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.4...docs@2.1.5) (2023-08-01) + +**Note:** Version bump only for package docs + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.3...docs@2.1.4) (2023-07-31) + +**Note:** Version bump only for package docs + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.2...docs@2.1.3) (2023-07-31) + +**Note:** Version bump only for package docs + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.1...docs@2.1.2) (2023-07-30) + +**Note:** Version bump only for package docs + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.1.0...docs@2.1.1) (2023-07-28) + +**Note:** Version bump only for package docs + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.5...docs@2.1.0) (2023-07-28) + +**Note:** Version bump only for package docs + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.4...docs@2.0.5) (2023-07-28) + +**Note:** Version bump only for package docs + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.3...docs@2.0.4) (2023-07-27) + +**Note:** Version bump only for package docs + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.2...docs@2.0.3) (2023-07-24) + +**Note:** Version bump only for package docs + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1...docs@2.0.2) (2023-07-21) + +**Note:** Version bump only for package docs + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.9...docs@2.0.1) (2023-07-21) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.8...docs@2.0.1-beta.9) (2023-07-21) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.7...docs@2.0.1-beta.8) (2023-07-19) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.6...docs@2.0.1-beta.7) (2023-07-18) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.5...docs@2.0.1-beta.6) (2023-07-18) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.4...docs@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.3...docs@2.0.1-beta.4) (2023-07-13) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.2...docs@2.0.1-beta.3) (2023-07-13) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.1...docs@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package docs + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.1-beta.0...docs@2.0.1-beta.1) (2023-07-12) + +### Bug Fixes + +- react-icons bundle size ([549e7ed](https://github.com/cosmology-tech/cosmos-kit/commit/549e7ed135c12dc85d7aea556f645ba2b24c5ce8)) + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@2.0.0...docs@2.0.1-beta.0) (2023-07-11) + +### Bug Fixes + +- feedback from june ([c8cec87](https://github.com/cosmology-tech/cosmos-kit/commit/c8cec878b05196e66b7b539bb9290bbbbc52e328)) +- use interchain-ui package ([a63ff36](https://github.com/cosmology-tech/cosmos-kit/commit/a63ff3601b6143637e3f670d957f33561cc4968e)) + +# [2.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.11.1...docs@2.0.0) (2023-07-05) + +### Bug Fixes + +- bundle ([a3dc1c2](https://github.com/cosmology-tech/cosmos-kit/commit/a3dc1c21de2cf6dba0ea75fad4265d8a080b4a50)) +- docs and merge conflicts ([090bdf1](https://github.com/cosmology-tech/cosmos-kit/commit/090bdf1d98249d50bbded69af7d4689bce674af3)) +- mismatch version ([fcdf7ab](https://github.com/cosmology-tech/cosmos-kit/commit/fcdf7abdeee579ff6bff72af5fa88f175f75f470)) +- use tsup and prettify the index example ([cb4196a](https://github.com/cosmology-tech/cosmos-kit/commit/cb4196a1e34f708c355897274afbb80c1f46d1de)) + +## [1.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.11.0...docs@1.11.1) (2023-06-30) + +**Note:** Version bump only for package docs + +# [1.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.10.0...docs@1.11.0) (2023-06-27) + +### Features + +- connect to Ledger via Web USB / HID ([70c222d](https://github.com/cosmology-tech/cosmos-kit/commit/70c222d150e06955d765f8f521b0f74d79a66081)) + +# [1.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.42...docs@1.10.0) (2023-06-13) + +### Features + +- add signArbitrary to ChainWalletContext ([6f9a38a](https://github.com/cosmology-tech/cosmos-kit/commit/6f9a38a77d5d02d516f6f2482130a203ea2eee99)) +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [1.9.42](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.41...docs@1.9.42) (2023-06-09) + +**Note:** Version bump only for package docs + +## [1.9.41](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.40...docs@1.9.41) (2023-06-09) + +**Note:** Version bump only for package docs + +## [1.9.40](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.39...docs@1.9.40) (2023-06-08) + +**Note:** Version bump only for package docs + +## [1.9.39](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.38...docs@1.9.39) (2023-06-08) + +**Note:** Version bump only for package docs + +## [1.9.38](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.37...docs@1.9.38) (2023-06-05) + +**Note:** Version bump only for package docs + +## [1.9.37](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.36...docs@1.9.37) (2023-06-02) + +**Note:** Version bump only for package docs + +## [1.9.36](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.35...docs@1.9.36) (2023-06-01) + +**Note:** Version bump only for package docs + +## [1.9.35](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.34...docs@1.9.35) (2023-05-30) + +**Note:** Version bump only for package docs + +## [1.9.34](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.33...docs@1.9.34) (2023-05-23) + +**Note:** Version bump only for package docs + +## [1.9.33](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.32...docs@1.9.33) (2023-05-18) + +**Note:** Version bump only for package docs + +## [1.9.32](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.31...docs@1.9.32) (2023-05-17) + +**Note:** Version bump only for package docs + +## [1.9.31](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.30...docs@1.9.31) (2023-05-16) + +**Note:** Version bump only for package docs + +## [1.9.30](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.29...docs@1.9.30) (2023-05-15) + +**Note:** Version bump only for package docs + +## [1.9.29](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.28...docs@1.9.29) (2023-05-04) + +**Note:** Version bump only for package docs + +## [1.9.28](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.27...docs@1.9.28) (2023-05-04) + +**Note:** Version bump only for package docs + +## [1.9.27](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.26...docs@1.9.27) (2023-04-28) + +**Note:** Version bump only for package docs + +## [1.9.26](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.25...docs@1.9.26) (2023-04-25) + +**Note:** Version bump only for package docs + +## [1.9.25](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.24...docs@1.9.25) (2023-04-24) + +**Note:** Version bump only for package docs + +## [1.9.24](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.23...docs@1.9.24) (2023-04-24) + +**Note:** Version bump only for package docs + +## [1.9.23](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.22...docs@1.9.23) (2023-04-23) + +**Note:** Version bump only for package docs + +## [1.9.22](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.21...docs@1.9.22) (2023-04-20) + +**Note:** Version bump only for package docs + +## [1.9.21](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.20...docs@1.9.21) (2023-04-20) + +**Note:** Version bump only for package docs + +## [1.9.20](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.19...docs@1.9.20) (2023-04-14) + +**Note:** Version bump only for package docs + +## [1.9.19](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.18...docs@1.9.19) (2023-04-13) + +**Note:** Version bump only for package docs + +## [1.9.18](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.17...docs@1.9.18) (2023-04-07) + +**Note:** Version bump only for package docs + +## [1.9.17](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.16...docs@1.9.17) (2023-03-31) + +**Note:** Version bump only for package docs + +## [1.9.16](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.15...docs@1.9.16) (2023-03-27) + +**Note:** Version bump only for package docs + +## [1.9.15](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.14...docs@1.9.15) (2023-03-17) + +**Note:** Version bump only for package docs + +## [1.9.14](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.13...docs@1.9.14) (2023-03-15) + +**Note:** Version bump only for package docs + +## [1.9.13](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.12...docs@1.9.13) (2023-03-15) + +**Note:** Version bump only for package docs + +## [1.9.12](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.11...docs@1.9.12) (2023-03-15) + +**Note:** Version bump only for package docs + +## [1.9.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.10...docs@1.9.11) (2023-03-14) + +**Note:** Version bump only for package docs + +## [1.9.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.9...docs@1.9.10) (2023-03-14) + +**Note:** Version bump only for package docs + +## [1.9.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.8...docs@1.9.9) (2023-03-13) + +**Note:** Version bump only for package docs + +## [1.9.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.7...docs@1.9.8) (2023-03-13) + +**Note:** Version bump only for package docs + +## [1.9.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.6...docs@1.9.7) (2023-03-09) + +**Note:** Version bump only for package docs + +## [1.9.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.5...docs@1.9.6) (2023-03-08) + +**Note:** Version bump only for package docs + +## [1.9.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.4...docs@1.9.5) (2023-03-07) + +**Note:** Version bump only for package docs + +## [1.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.3...docs@1.9.4) (2023-03-03) + +**Note:** Version bump only for package docs + +## [1.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.2...docs@1.9.3) (2023-02-28) + +**Note:** Version bump only for package docs + +## [1.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.1...docs@1.9.2) (2023-02-28) + +**Note:** Version bump only for package docs + +## [1.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.9.0...docs@1.9.1) (2023-02-27) + +**Note:** Version bump only for package docs + +# [1.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.35...docs@1.9.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [1.8.35](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.34...docs@1.8.35) (2023-02-24) + +**Note:** Version bump only for package docs + +## [1.8.34](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.33...docs@1.8.34) (2023-02-24) + +**Note:** Version bump only for package docs + +## [1.8.33](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.32...docs@1.8.33) (2023-02-24) + +**Note:** Version bump only for package docs + +## [1.8.32](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.31...docs@1.8.32) (2023-02-23) + +**Note:** Version bump only for package docs + +## [1.8.31](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.30...docs@1.8.31) (2023-02-23) + +**Note:** Version bump only for package docs + +## [1.8.30](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.29...docs@1.8.30) (2023-02-23) + +**Note:** Version bump only for package docs + +## [1.8.29](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.28...docs@1.8.29) (2023-02-21) + +**Note:** Version bump only for package docs + +## [1.8.28](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.27...docs@1.8.28) (2023-02-21) + +**Note:** Version bump only for package docs + +## [1.8.27](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.26...docs@1.8.27) (2023-02-20) + +**Note:** Version bump only for package docs + +## [1.8.26](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.25...docs@1.8.26) (2023-02-20) + +**Note:** Version bump only for package docs + +## [1.8.25](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.24...docs@1.8.25) (2023-02-19) + +**Note:** Version bump only for package docs + +## [1.8.24](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.23...docs@1.8.24) (2023-02-17) + +**Note:** Version bump only for package docs + +## [1.8.23](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.22...docs@1.8.23) (2023-02-17) + +**Note:** Version bump only for package docs + +## [1.8.22](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.21...docs@1.8.22) (2023-02-16) + +**Note:** Version bump only for package docs + +## [1.8.21](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.20...docs@1.8.21) (2023-01-16) + +**Note:** Version bump only for package docs + +## [1.8.20](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.19...docs@1.8.20) (2023-01-14) + +**Note:** Version bump only for package docs + +## [1.8.19](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.18...docs@1.8.19) (2023-01-13) + +**Note:** Version bump only for package docs + +## [1.8.18](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.17...docs@1.8.18) (2023-01-12) + +**Note:** Version bump only for package docs + +## [1.8.17](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.16...docs@1.8.17) (2023-01-11) + +**Note:** Version bump only for package docs + +## [1.8.16](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.15...docs@1.8.16) (2023-01-11) + +**Note:** Version bump only for package docs + +## [1.8.15](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.14...docs@1.8.15) (2023-01-06) + +**Note:** Version bump only for package docs + +## [1.8.14](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.13...docs@1.8.14) (2022-12-16) + +**Note:** Version bump only for package docs + +## [1.8.13](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.12...docs@1.8.13) (2022-12-15) + +**Note:** Version bump only for package docs + +## [1.8.12](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.11...docs@1.8.12) (2022-12-15) + +**Note:** Version bump only for package docs + +## [1.8.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.10...docs@1.8.11) (2022-12-14) + +**Note:** Version bump only for package docs + +## [1.8.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.9...docs@1.8.10) (2022-12-11) + +**Note:** Version bump only for package docs + +## [1.8.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.8...docs@1.8.9) (2022-12-11) + +**Note:** Version bump only for package docs + +## [1.8.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.7...docs@1.8.8) (2022-12-08) + +**Note:** Version bump only for package docs + +## [1.8.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.6...docs@1.8.7) (2022-12-05) + +**Note:** Version bump only for package docs + +## [1.8.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.5...docs@1.8.6) (2022-12-05) + +**Note:** Version bump only for package docs + +## [1.8.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.4...docs@1.8.5) (2022-12-05) + +**Note:** Version bump only for package docs + +## [1.8.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.3...docs@1.8.4) (2022-12-05) + +**Note:** Version bump only for package docs + +## [1.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.2...docs@1.8.3) (2022-12-05) + +**Note:** Version bump only for package docs + +## [1.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.1...docs@1.8.2) (2022-12-05) + +**Note:** Version bump only for package docs + +## [1.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.8.0...docs@1.8.1) (2022-12-02) + +**Note:** Version bump only for package docs + +# [1.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.7.0...docs@1.8.0) (2022-12-02) + +**Note:** Version bump only for package docs + +# [1.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.6.0...docs@1.7.0) (2022-12-01) + +**Note:** Version bump only for package docs + +# [1.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.5.2...docs@1.6.0) (2022-12-01) + +**Note:** Version bump only for package docs + +## [1.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.5.1...docs@1.5.2) (2022-11-30) + +**Note:** Version bump only for package docs + +## [1.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.5.0...docs@1.5.1) (2022-11-22) + +**Note:** Version bump only for package docs + +# [1.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.14...docs@1.5.0) (2022-11-21) + +**Note:** Version bump only for package docs + +## [1.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.13...docs@1.4.14) (2022-11-18) + +**Note:** Version bump only for package docs + +## [1.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.12...docs@1.4.13) (2022-11-17) + +**Note:** Version bump only for package docs + +## [1.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.11...docs@1.4.12) (2022-11-17) + +**Note:** Version bump only for package docs + +## [1.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.10...docs@1.4.11) (2022-11-17) + +**Note:** Version bump only for package docs + +## [1.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.9...docs@1.4.10) (2022-11-17) + +**Note:** Version bump only for package docs + +## [1.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.8...docs@1.4.9) (2022-11-17) + +**Note:** Version bump only for package docs + +## [1.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.7...docs@1.4.8) (2022-11-16) + +**Note:** Version bump only for package docs + +## [1.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.6...docs@1.4.7) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.5...docs@1.4.6) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.4...docs@1.4.5) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.3...docs@1.4.4) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.2...docs@1.4.3) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.1...docs@1.4.2) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.4.0...docs@1.4.1) (2022-11-15) + +**Note:** Version bump only for package docs + +# [1.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.3.1...docs@1.4.0) (2022-11-15) + +**Note:** Version bump only for package docs + +## [1.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.3.0...docs@1.3.1) (2022-11-15) + +**Note:** Version bump only for package docs + +# [1.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.2.1...docs@1.3.0) (2022-11-14) + +**Note:** Version bump only for package docs + +## [1.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.2.0...docs@1.2.1) (2022-11-14) + +**Note:** Version bump only for package docs + +# [1.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.1.2...docs@1.2.0) (2022-11-10) + +**Note:** Version bump only for package docs + +## [1.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.1.1...docs@1.1.2) (2022-11-10) + +**Note:** Version bump only for package docs + +## [1.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.1.0...docs@1.1.1) (2022-11-08) + +**Note:** Version bump only for package docs + +# [1.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.0.2...docs@1.1.0) (2022-11-05) + +**Note:** Version bump only for package docs + +## [1.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/docs@1.0.1...docs@1.0.2) (2022-11-04) + +**Note:** Version bump only for package docs + +## 1.0.1 (2022-11-04) + +**Note:** Version bump only for package docs diff --git a/packages/docs/components/card.tsx b/packages/docs/components/card.tsx new file mode 100644 index 000000000..243c8f1fb --- /dev/null +++ b/packages/docs/components/card.tsx @@ -0,0 +1,111 @@ +import { useChain } from "@cosmos-kit/react"; +import { MouseEventHandler } from "react"; +import { Box, useColorModeValue } from "@interchain-ui/react"; +import { + Astronaut, + Error, + Connected, + ConnectedShowAddress, + ConnectedUserInfo, + Connecting, + ConnectStatusWarn, + CopyAddressBtn, + Disconnected, + NotExist, + Rejected, + RejectedWarn, + WalletConnectComponent, +} from "."; + +export const WalletCardSection = ({ chainName }: { chainName: string }) => { + const { connect, openView, status, username, address, message, wallet } = + useChain(chainName); + + // Events + const onClickConnect: MouseEventHandler = async (e) => { + e.preventDefault(); + await connect(); + }; + + const onClickOpenView: MouseEventHandler = (e) => { + e.preventDefault(); + openView(); + }; + + // Components + const connectWalletButton = ( + + } + connecting={} + connected={ + + } + rejected={} + error={} + notExist={ + + } + /> + ); + + const connectWalletWarn = ( + + } + error={ + + } + /> + ); + + const userInfo = username && ( + } /> + ); + + const addressBtn = ( + } + /> + ); + + return ( + <> + + {userInfo} + {addressBtn} + + + {connectWalletButton} + + + + {connectWalletWarn && {connectWalletWarn}} + + ); +}; diff --git a/packages/docs/components/hooks.tsx b/packages/docs/components/hooks.tsx new file mode 100644 index 000000000..169060232 --- /dev/null +++ b/packages/docs/components/hooks.tsx @@ -0,0 +1,40 @@ +import * as React from "react"; + +interface UseNextraThemeOptions { + onThemeChange?: (theme: "light" | "dark") => void; +} + +export const useNextraTheme = (opts: UseNextraThemeOptions) => { + let [theme, setTheme] = React.useState<"light" | "dark">("light"); + + React.useEffect(() => { + const handleThemeChange = () => { + const htmlTag = document.getElementsByTagName("html")[0]; + + if (htmlTag.classList.contains("light")) { + opts.onThemeChange?.("light"); + setTheme("light"); + } else if (htmlTag.classList.contains("dark")) { + opts.onThemeChange?.("dark"); + setTheme("dark"); + } + }; + + // Initial theme check + handleThemeChange(); + + // Listen for class name changes + const observer = new MutationObserver(handleThemeChange); + + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ["class"], + }); + + return () => { + observer.disconnect(); // Clean up the observer + }; + }, []); + + return [theme, setTheme]; +}; diff --git a/packages/docs/components/index.tsx b/packages/docs/components/index.tsx new file mode 100644 index 000000000..caa0124b1 --- /dev/null +++ b/packages/docs/components/index.tsx @@ -0,0 +1,4 @@ +export * from "./types"; +export * from "./react"; +export * from "./wallet"; +export * from "./card"; diff --git a/packages/docs/components/react/address-card.tsx b/packages/docs/components/react/address-card.tsx new file mode 100644 index 000000000..ba3f5c1fd --- /dev/null +++ b/packages/docs/components/react/address-card.tsx @@ -0,0 +1,117 @@ +import Image from "next/image"; +import { Box, ClipboardCopyText, Stack } from "@interchain-ui/react"; +import { WalletStatus } from "cosmos-kit"; +import React, { ReactNode, useEffect, useState } from "react"; + +const SIZES = { + lg: { + height: 32, + walletImageSize: 144, + }, + md: { + height: 24, + walletImageSize: 96, + }, + sm: { + height: 20, + walletImageSize: 64, + }, +}; + +type CopyAddressType = { + address?: string; + walletIcon?: string; + isLoading?: boolean; + maxDisplayLength?: number; + size?: keyof typeof SIZES; +}; + +export const ConnectedShowAddress = ({ + address = "", + walletIcon, + isLoading, + size = "md", + maxDisplayLength, +}: CopyAddressType) => { + const [displayAddress, setDisplayAddress] = useState(""); + const defaultMaxLength = { + lg: 14, + md: 16, + sm: 18, + }; + + useEffect(() => { + if (!address) setDisplayAddress("address not identified yet"); + if (address && maxDisplayLength) + setDisplayAddress(stringTruncateFromCenter(address, maxDisplayLength)); + if (address && !maxDisplayLength) + setDisplayAddress( + stringTruncateFromCenter( + address, + defaultMaxLength[size as keyof typeof defaultMaxLength] + ) + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [address]); + + const walletImgDimension = `${ + SIZES[size as keyof typeof SIZES].walletImageSize + }px`; + + const chainIcon = + address && walletIcon ? ( + + {displayAddress} + + ) : null; + + return ( + + {chainIcon} + + + ); +}; + +export const CopyAddressBtn = ({ + walletStatus, + connected, +}: { + walletStatus: WalletStatus; + connected: ReactNode; +}) => { + switch (walletStatus) { + case WalletStatus.Connected: + return <>{connected}; + default: + return <>; + } +}; + +function stringTruncateFromCenter(str: string, maxLength: number) { + const midChar = "…"; // character to insert into the center of the result + + if (str.length <= maxLength) return str; + + // length of beginning part + const left = Math.ceil(maxLength / 2); + + // start index of ending part + const right = str.length - Math.floor(maxLength / 2) + 1; + + return str.substring(0, left) + midChar + str.substring(right); +} diff --git a/packages/docs/components/react/astronaut.tsx b/packages/docs/components/react/astronaut.tsx new file mode 100644 index 000000000..0704133ad --- /dev/null +++ b/packages/docs/components/react/astronaut.tsx @@ -0,0 +1,156 @@ +export const Astronaut = (props: any) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); diff --git a/packages/docs/components/react/chain-card.tsx b/packages/docs/components/react/chain-card.tsx new file mode 100644 index 000000000..b62d730f4 --- /dev/null +++ b/packages/docs/components/react/chain-card.tsx @@ -0,0 +1,49 @@ +import Image from "next/image"; +import { Text, Box, useTheme } from "@interchain-ui/react"; + +interface IChainCard { + prettyName: string; + icon?: string; +} + +export const ChainCard = (props: IChainCard) => { + const { theme } = useTheme(); + return ( + + + chain icon + + + + {props.prettyName} + + + ); +}; diff --git a/packages/docs/components/react/choose-chain.tsx b/packages/docs/components/react/choose-chain.tsx new file mode 100644 index 000000000..27b783eec --- /dev/null +++ b/packages/docs/components/react/choose-chain.tsx @@ -0,0 +1,175 @@ +import * as React from "react"; +import { + Box, + Combobox, + Text, + Stack, + Avatar, + Skeleton, + ThemeProvider, + useTheme, +} from "@interchain-ui/react"; +import { search } from "fast-fuzzy"; + +type Option = { + label: string; + value: string; +}; + +export interface ChainInfo { + chainName: string; + chainRoute?: string; + label: string; + value: string; + icon?: string; + disabled?: boolean; +} + +export interface ChooseChainProps { + chainName?: string; + chainInfos: ChainInfo[]; + onChange: (selectedItem: Option | null) => void; +} + +const ChainOption = (props: Option & { iconUrl: string }) => { + return ( + + name[0]} + size="sm" + src={props.iconUrl} + fallbackMode="bg" + /> + + + {props.label} + + + ); +}; + +export const ChooseChain = (props: ChooseChainProps) => { + const { chainName, chainInfos, onChange } = props; + const [selectedKey, setSelectedKey] = React.useState(); + const { themeClass } = useTheme(); + let [filterValue, setFilterValue] = React.useState(""); + + React.useEffect(() => { + // Init selected key to provided chainName + if (chainName && chainInfos.length > 0) { + const defaultChain = chainInfos.filter( + (options) => options.chainName === chainName + )[0]; + + setSelectedKey(defaultChain.value); + return setFilterValue(defaultChain.label); + } + + if (!chainName) setSelectedKey(undefined); + }, [chainInfos, chainName]); + + let filteredItems = React.useMemo(() => { + const initialItems = chainInfos + .map((chainInfo) => ({ + iconUrl: chainInfo.icon, + label: chainInfo.label, + value: chainInfo.value, + })) + .filter((chainInfo) => chainInfo.label && chainInfo.value); + + if (!filterValue) return initialItems; + + const filtered = search(filterValue, initialItems, { + keySelector(s) { + return [s.label, s.value]; + }, + }); + + return filtered; + }, [chainInfos, filterValue]); + + const avatarUrl = + filteredItems.find((i) => i.value === selectedKey)?.iconUrl ?? undefined; + + return ( + + + { + setFilterValue(value); + + if (!value) { + return setSelectedKey(undefined); + } + }} + selectedKey={selectedKey as string} + onSelectionChange={(item) => { + if (item) { + setSelectedKey(item); + + const found = + chainInfos.find((options) => options.value === item) ?? null; + + if (found) { + onChange?.(found); + } + } + }} + inputAddonStart={ + selectedKey && avatarUrl ? ( + name[0]} + size="sm" + src={avatarUrl} + fallbackMode="bg" + attributes={{ + paddingX: "$4", + }} + /> + ) : ( + + + + ) + } + styleProps={{ + width: { + mobile: "100%", + mdMobile: "350px", + }, + }} + > + {filteredItems.map((option) => ( + + + + ))} + + + + ); +}; diff --git a/packages/docs/components/react/handleChangeColor.tsx b/packages/docs/components/react/handleChangeColor.tsx new file mode 100644 index 000000000..c1f46bc5d --- /dev/null +++ b/packages/docs/components/react/handleChangeColor.tsx @@ -0,0 +1,9 @@ +// use for let color mode value fit Rules of Hooks +export function handleChangeColorModeValue( + colorMode: string, + light: any, + dark: any +) { + if (colorMode === "light") return light; + if (colorMode === "dark") return dark; +} diff --git a/packages/docs/components/react/index.ts b/packages/docs/components/react/index.ts new file mode 100644 index 000000000..b27b4c978 --- /dev/null +++ b/packages/docs/components/react/index.ts @@ -0,0 +1,6 @@ +export * from "./astronaut"; +export * from "./choose-chain"; +export * from "./wallet-connect"; +export * from "./warn-block"; +export * from "./user-card"; +export * from "./address-card"; diff --git a/packages/docs/components/react/user-card.tsx b/packages/docs/components/react/user-card.tsx new file mode 100644 index 000000000..07f1c679e --- /dev/null +++ b/packages/docs/components/react/user-card.tsx @@ -0,0 +1,45 @@ +import * as React from "react"; +import { Text, Stack, Box } from "@interchain-ui/react"; +import { ConnectedUserCardType } from "../types"; + +export const ConnectedUserInfo = ({ + username, + icon, +}: ConnectedUserCardType) => { + return ( + + {username && ( + <> + + {icon} + + + + {username} + + + )} + + ); +}; diff --git a/packages/docs/components/react/wallet-connect.tsx b/packages/docs/components/react/wallet-connect.tsx new file mode 100644 index 000000000..44faaeb84 --- /dev/null +++ b/packages/docs/components/react/wallet-connect.tsx @@ -0,0 +1,243 @@ +import * as React from "react"; +import { + Button, + Box, + Text, + Stack, + useColorModeValue, +} from "@interchain-ui/react"; +import { IoWallet } from "react-icons/io5"; +import { FiAlertTriangle } from "react-icons/fi"; +import { WalletStatus } from "cosmos-kit"; + +interface IConnectWalletButton { + buttonText?: string; + isLoading?: boolean; + isDisabled?: boolean; + onClickConnectBtn?: React.MouseEventHandler; +} + +export const ConnectWalletButton = ({ + buttonText, + isLoading, + isDisabled, + onClickConnectBtn, +}: IConnectWalletButton) => { + return ( + + ); +}; + +export const Disconnected = ({ + buttonText, + onClick, +}: { + buttonText: string; + onClick: React.MouseEventHandler; +}) => { + return ( + + ); +}; + +export const Connected = ({ + buttonText, + onClick, +}: { + buttonText: string; + onClick: React.MouseEventHandler; +}) => { + return ( + + ); +}; + +export const Connecting = () => { + return ; +}; + +export const Rejected = ({ + buttonText, + wordOfWarning, + onClick, +}: { + buttonText: string; + wordOfWarning?: string; + onClick: React.MouseEventHandler; +}) => { + const bg = useColorModeValue("$orange200", "$orange300"); + + return ( + + + + {wordOfWarning && ( + + + + + + + + Warning:  + + + {wordOfWarning} + + + )} + + ); +}; + +export const Error = ({ + buttonText, + wordOfWarning, + onClick, +}: { + buttonText: string; + wordOfWarning?: string; + onClick: React.MouseEventHandler; +}) => { + const bg = useColorModeValue("$orange200", "$orange300"); + + return ( + + + + {wordOfWarning && ( + + + + + + + + Warning:  + + + {wordOfWarning} + + + )} + + ); +}; + +export const NotExist = ({ + buttonText, + onClick, +}: { + buttonText: string; + onClick: React.MouseEventHandler; +}) => { + return ( + + ); +}; + +export const WalletConnectComponent = ({ + walletStatus, + disconnect, + connecting, + connected, + rejected, + error, + notExist, +}: { + walletStatus: WalletStatus; + disconnect: React.ReactNode; + connecting: React.ReactNode; + connected: React.ReactNode; + rejected: React.ReactNode; + error: React.ReactNode; + notExist: React.ReactNode; +}) => { + switch (walletStatus) { + case WalletStatus.Disconnected: + return <>{disconnect}; + case WalletStatus.Connecting: + return <>{connecting}; + case WalletStatus.Connected: + return <>{connected}; + case WalletStatus.Rejected: + return <>{rejected}; + case WalletStatus.Error: + return <>{error}; + case WalletStatus.NotExist: + return <>{notExist}; + default: + return <>{disconnect}; + } +}; diff --git a/packages/docs/components/react/warn-block.tsx b/packages/docs/components/react/warn-block.tsx new file mode 100644 index 000000000..17fd08e6b --- /dev/null +++ b/packages/docs/components/react/warn-block.tsx @@ -0,0 +1,41 @@ +import React, { ReactNode } from "react"; +import { WalletStatus } from "@cosmos-kit/core"; +import { Callout, CalloutProps } from "@interchain-ui/react"; + +export const RejectedWarn = ({ + wordOfWarning, + intent, +}: { + wordOfWarning?: string; + icon?: ReactNode; + intent?: CalloutProps["intent"]; +}) => { + return ( + + {wordOfWarning} + + ); +}; + +export const ConnectStatusWarn = ({ + walletStatus, + rejected, + error, +}: { + walletStatus: WalletStatus; + rejected: ReactNode; + error: ReactNode; +}) => { + switch (walletStatus) { + case "Rejected": + return <>{rejected}; + case "Error": + return <>{error}; + default: + return <>; + } +}; diff --git a/packages/docs/components/types.tsx b/packages/docs/components/types.tsx new file mode 100644 index 000000000..ef7474172 --- /dev/null +++ b/packages/docs/components/types.tsx @@ -0,0 +1,86 @@ +import { MouseEventHandler, ReactNode, RefObject } from 'react'; +import { IconType } from 'react-icons'; + +export enum WalletStatus { + NotInit = 'NotInit', + Loading = 'Loading', + Loaded = 'Loaded', + NotExist = 'NotExist', + Rejected = 'Rejected' +} + +export interface OptionBase { + variant?: string; + colorScheme?: string; + isFixed?: boolean; + isDisabled?: boolean; +} + +export interface ChangeChainDropdownType { + data: ChainOption[]; + selectedItem?: ChainOption; + onChange: handleSelectChainDropdown; + chainDropdownLoading?: boolean; +} + +export interface ChangeChainMenuType { + data: ChainOption[]; + value?: ChainOption; + onClose?: () => void; + onChange: handleSelectChainDropdown; + innerRef?: RefObject; +} + +export interface ChooseChainInfo { + chainName: string; + chainRoute?: string; + label: string; + value: string; + icon?: string; + disabled?: boolean; +} + +export interface ChainOption extends OptionBase { + isDisabled?: boolean; + label: string; + value: string; + icon?: string; + chainName: string; + chainRoute?: string; +} + +export type handleSelectChainDropdown = (value: ChainOption | null) => void; + +export interface ConnectWalletType { + buttonText?: string; + isLoading?: boolean; + isDisabled?: boolean; + icon?: IconType; + onClickConnectBtn?: MouseEventHandler; +} + +export interface ConnectedUserCardType { + walletIcon?: string; + username?: string; + icon?: ReactNode; +} + +export interface FeatureProps { + title: string; + text: string; + href: string; +} + +export interface ChainCardProps { + prettyName: string; + icon?: string; +} + +export type CopyAddressType = { + address?: string; + walletIcon?: string; + isLoading?: boolean; + maxDisplayLength?: number; + isRound?: boolean; + size?: string; +}; diff --git a/packages/docs/components/wallet.tsx b/packages/docs/components/wallet.tsx new file mode 100644 index 000000000..70d4b153d --- /dev/null +++ b/packages/docs/components/wallet.tsx @@ -0,0 +1,78 @@ +import { useManager } from "@cosmos-kit/react"; +import { ThemeProvider, useTheme, Box } from "@interchain-ui/react"; +import { useEffect, useMemo, useState } from "react"; +import { + ChainOption, + ChooseChain, + handleSelectChainDropdown, + ConnectWalletButton, +} from "."; +import { ChainName } from "@cosmos-kit/core"; +import { WalletCardSection } from "./card"; + +export const WalletSection = () => { + const { themeClass } = useTheme(); + + const [chainName, setChainName] = useState( + "cosmoshub" + ); + const { chainRecords, getChainLogo } = useManager(); + + const chainOptions = useMemo( + () => + chainRecords.map((chainRecord) => { + return { + chainName: chainRecord?.name, + label: chainRecord?.chain.pretty_name, + value: chainRecord?.name, + icon: getChainLogo(chainRecord.name), + }; + }), + [chainRecords, getChainLogo] + ); + + useEffect(() => { + setChainName(window.localStorage.getItem("selected-chain") || "cosmoshub"); + }, []); + + const onChainChange: handleSelectChainDropdown = async ( + selectedValue: ChainOption | null + ) => { + setChainName(selectedValue?.chainName); + if (selectedValue?.chainName) { + window?.localStorage.setItem("selected-chain", selectedValue?.chainName); + } else { + window?.localStorage.removeItem("selected-chain"); + } + }; + + return ( + +
+ + + + + {chainName ? ( + + ) : ( + + )} + + +
+
+ ); +}; diff --git a/packages/docs/config/seo.js b/packages/docs/config/seo.js new file mode 100644 index 000000000..dfb6e2bc6 --- /dev/null +++ b/packages/docs/config/seo.js @@ -0,0 +1,36 @@ +const siteUrl = 'https://docs.cosmoskit.com'; +const siteAddress = new URL(siteUrl); +const canonical = siteAddress.href.slice(0, -1); +const title = 'Cosmology™'; +const description = + 'Cosmology is built from the ground up to catalyze web3 development in the Cosmos.'; +const fbAppId = null; +module.exports = { + title, + canonical, + description, + openGraph: { + type: 'website', + url: siteUrl, + title, + description, + site_name: title, + images: [ + { + url: canonical + '/og/image.jpg', + width: 942, + height: 466, + alt: title + } + ] + }, + twitter: { + handle: '@cosmology_tech', + site: '@cosmology_tech' + }, + facebook: fbAppId + ? { + appId: fbAppId + } + : undefined +}; diff --git a/packages/docs/config/site.js b/packages/docs/config/site.js new file mode 100644 index 000000000..0fa2ead5d --- /dev/null +++ b/packages/docs/config/site.js @@ -0,0 +1,27 @@ +const siteUrl = 'https://docs.cosmoskit.com'; +const siteAddress = new URL(siteUrl); +const canonical = siteAddress.href.slice(0, -1); + +module.exports = { + company: { + nick: 'Cosmology', + name: 'Cosmology', + addr: ['San Francisco, CA'], + legalCounty: 'San Francisco', + legalState: 'California' + }, + site: { + siteUrl, + www: `www.${siteAddress.host}`, + host: siteAddress.host + }, + emails: { + hello: 'hello@cosmology.zone', + support: 'support@cosmology.zone', + abuse: 'abuse@cosmology.zone', + privacy: 'privacy@cosmology.zone', + legal: 'legal@cosmology.zone', + copyright: 'copyright@cosmology.zone', + arbitrationOptOut: 'arbitration-opt-out@cosmology.zone' + } +}; diff --git a/packages/docs/next-env.d.ts b/packages/docs/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/docs/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/docs/next.config.js b/packages/docs/next.config.js new file mode 100644 index 000000000..500b4db6e --- /dev/null +++ b/packages/docs/next.config.js @@ -0,0 +1,62 @@ +const path = require("path"); +const withNextra = require("nextra")({ + theme: "nextra-theme-docs", + themeConfig: "./theme.config.tsx", + unstable_staticImage: true, + unstable_flexsearch: { + codeblock: false, + }, +}); + +module.exports = { + ...withNextra({ + reactStrictMode: true, + // webpack: ( + // config, + // { buildId, dev, isServer, defaultLoaders, nextRuntime, webpack } + // ) => { + // config.module.rules.push({ + // test: /\.(ts|tsx)$/, + // use: [ + // { + // loader: "babel-loader", + // options: { + // presets: [ + // "@babel/preset-env", + // ["@babel/preset-react", { runtime: "automatic" }], + // ["@babel/typescript", { allowDeclareFields: true }], + // ], + // plugins: ["inline-import-data-uri"], + // }, + // }, + // ], + // }); + + // config.resolve.extensions.push(".ts", ".tsx"); + // return config; + // }, + /** + * + * @param {import('webpack').Configuration} config + * @param {import('next/dist/server/config-shared').WebpackConfigContext} _context + * @returns {import('webpack').Configuration} + */ + webpack: (config, _context) => { + const overridePath = path.resolve( + __dirname, + "../..", + "node_modules/react" + ); + config.resolve.alias["react"] = overridePath; + return config; + }, + }), + images: { + domains: [ + "user-images.githubusercontent.com", + "github.com", + "img.shields.io", + ], + unoptimized: true, + }, +}; diff --git a/packages/docs/package.json b/packages/docs/package.json new file mode 100644 index 000000000..9f8945725 --- /dev/null +++ b/packages/docs/package.json @@ -0,0 +1,60 @@ +{ + "name": "docs", + "version": "2.22.0", + "private": true, + "main": "index.js", + "license": "MIT", + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "debug": "NODE_OPTIONS='--inspect' next dev", + "vercel-build": "yarn workspace nextra run build && yarn workspace nextra-theme-docs run build && yarn build", + "clean": "rimraf .next .turbo", + "export": "next build && next export", + "postexport": "npm run seo", + "seo": "node ./seo/seo.js", + "deploy": "AWS_PROFILE=webinc aws s3 sync out/ s3://docs.cosmoskit.com", + "invalidate": "AWS_PROFILE=webinc aws cloudfront create-invalidation --distribution-id EN5Y85FX893DG --paths \"/*\"", + "deploy:all": "npm run export && npm run deploy && ./seo/prepare.sh" + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "@cosmos-kit/react": "^2.18.0", + "@interchain-ui/react": "^1.23.13", + "chain-registry": "^1.63.2", + "cosmos-kit": "^2.19.0", + "fast-fuzzy": "^1.12.0", + "flexsearch": "^0.7.43", + "framer-motion": "^9.0.7", + "next": "^13", + "nextra": "^2.9.0", + "nextra-theme-docs": "^2.9.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-icons": "4.4.0" + }, + "resolutions": { + "@types/react": "^18" + }, + "devDependencies": { + "@babel/preset-env": "7.22.7", + "@babel/preset-react": "7.22.5", + "@babel/preset-typescript": "7.22.5", + "@types/react": "18.2", + "@types/react-dom": "18.2", + "babel-loader": "9.1.2", + "babel-plugin-inline-import-data-uri": "1.0.1", + "postcss": "8.4.24", + "shadcn-ui": "0.2.3", + "tailwindcss": "3.3.2" + }, + "dependenciesMeta": { + "nextra": { + "injected": true + }, + "nextra-theme-docs": { + "injected": true + } + } +} diff --git a/packages/docs/pages/_app.tsx b/packages/docs/pages/_app.tsx new file mode 100644 index 000000000..fca93f4af --- /dev/null +++ b/packages/docs/pages/_app.tsx @@ -0,0 +1,93 @@ +import "@interchain-ui/react/styles"; +import "../styles/globals.css"; +import { wallets } from "cosmos-kit"; +import type { AppProps } from "next/app"; +import { assets, chains } from "chain-registry"; +import { ChainProvider } from "@cosmos-kit/react"; +import { ThemeProvider, useTheme } from "@interchain-ui/react"; +import { useNextraTheme } from "../components/hooks"; +// import { makeWeb3AuthWallets } from "@cosmos-kit/web3auth"; +import "nextra-theme-docs/style.css"; +import React from "react"; + +function MyApp({ Component, pageProps }: AppProps) { + // const web3AuthWallets = useMemo( + // () => + // makeWeb3AuthWallets({ + // loginMethods: [ + // { + // provider: "google", + // name: "Google", + // logo: "https://upload.wikimedia.org/wikipedia/commons/5/53/Google_%22G%22_Logo.svg", + // }, + // ], + // client: { + // clientId: "localhostid", + // web3AuthNetwork: "testnet", + // }, + // promptSign: async (...args) => + // // eslint-disable-next-line no-alert + // confirm("Sign transaction? \n" + JSON.stringify(args, null, 2)), + // }), + // [] + // ); + const { setTheme, themeClass, theme } = useTheme(); + + // Sync nextra theme with interchain ui theme + useNextraTheme({ + onThemeChange(theme) { + setTheme(theme); + }, + }); + + return ( + + +
+ +
+
+
+ ); +} + +export default MyApp; diff --git a/packages/docs/pages/_meta.json b/packages/docs/pages/_meta.json new file mode 100644 index 000000000..70b2bd2cb --- /dev/null +++ b/packages/docs/pages/_meta.json @@ -0,0 +1,10 @@ +{ + "index": "Introduction", + "get-started": "Get Started", + "migration-to-v2": "Migration to V2", + "provider": "Provider", + "hooks": "Hooks", + "cookbook": "Cookbook", + "integrating-wallets": "Integrating Wallets", + "advanced": "Advanced" +} diff --git a/packages/docs/pages/advanced.md b/packages/docs/pages/advanced.md new file mode 100644 index 000000000..a66f89561 --- /dev/null +++ b/packages/docs/pages/advanced.md @@ -0,0 +1,82 @@ +# Advanced + +## Code Structure + +To make user better understand the whole design structure of CosmosKit, here to briefly introduce some important classes from `@cosmos-kit/core`. + +There are four important classes. + +- WalletManager +- MainWalletBase +- ChainWalletBase +- WalletRepo + +Before all, we need to clarify that there are two types of entities in CosmosKit as a wallet adapter: **Chain** and **Wallet**. Chain is identified by chain name i.e. `cosmoshub`, `osmosis` etc. And wallet is identified by wallet name i.e. `keplr-extension`, `keplr-mobile`, `cosmostation-extension` etc. + +> Note that we're taking a single wallet application as a wallet in CosmosKit rather than the wallet product name. Taking `Keplr` as an example, we diffientiate `extension` and `mobile` in our code because they are connected via totally different codes. So for product `Keplr`, we have two wallets `keplr-extension` and `keplr-mobile` in CosmosKit. + +### WalletManager + +`WalletManager` is the entrance of the whole code and it manages all `WalletRepo`, `MainWalletBase`, `ChainWalletBase` instances in it. It also corresponds to `ChainProvider` in `@cosmos-kit/react-lite` and `@cosmos-kit/react`. You can find that the properties of JSX element `ChainProvider` are almost the same with the constructor arguments of `WalletManager`. All necesssary chain information and wallet information from `ChainProvider` will be passed to corresponding wallet classes via `WalletManager`. + +Three important properties/arguments in `ChainProvider`/`WalletManager` are `chains`, `assetLists` and `wallets`. `chains` and `assetLists` provide chain information, and `wallets` provides wallet information. Actually `wallets` is an array of `MainWalletBase` instances. Here leads to the second class `MainWalletBase`. + +### MainWalletBase + +`MainWalletBase` is meant to provide a base implementation and unified interface for all different wallets like `keplr-extension`, `keplr-mobile` and `cosmostation-extension`. Basically every wallet has it's own `MainWallet` class, which extends `MainWalletBase` in common, but with `WalletClient` implemented in different ways. In this way `WalletManager` can handle all different wallets no matter how different they're inside. + +> For practice you can take a look at [How to Integrate New Wallets into CosmosKit](/integrating-wallets/adding-new-wallets) + +`MainWalletBase` is only about wallet and it's not about any specifical chain. And it's responsible for initializing wallet client and managing all chain wallets. Here brings in the third class `ChainWalletBase`. + +> So far `MainWalletBase` is dealing with four different broadcast/synchronization events for chain wallets. +> +> - broadcast_client +> - broadcast_env +> - sync_connect +> - sync_disconnect +> +> See details below. + +### ChainWalletBase + +When you're trying to connect to a wallet, you always need to provide a target chain name so that the wallet knows what to response. So `ChainWalletBase` is the class actually being used for real connection. It's the finest grain of functionality that with chain specified and also wallet specified. + +We're separating `MainWalletBase` and `ChainWalletBase` because it's clearer to put some common properties like `wallet client` and `env` in the `MainWalletBase` to enable +centralized management and distribution (events `broadcast_client` and `broadcast_env`), and put only chain specified functionalities in `ChainWalletBase`. + +Basically how many `chains` are provided in `ChainProvider` or `WalletManager`, how many `ChainWalletBase` instances will be constructed for a wallet. `ChainWalletBase` instances are independent with each other unless `sync` is set `true`. All the synchronization are also handled in `MainWalletBase` (events `sync_connect` and `sync_disconnect`). + +### WalletRepo + +We have a class `MainWalletBase` with wallet specified to manage all chain wallets. All these chain wallets are with the same wallet name but different chain name. Accordingly we also have another class `WalletRepo`, which with chain specified to manage all chain wallets that with the same chain name but different wallet name. + +### MainWalletBase vs. WalletRepo + +#### 1. **MainWalletBase** +- **Purpose**: Manages a collection of chain wallets. +- **Key Identifier**: Wallet name. +- **Example**: It handles wallets like cosmoshub/keplr-extension, osmosis/keplr-extension, etc. These are wallets from different chains but with the same wallet name. + +#### 2. **WalletRepo** +- **Purpose**: Manages chain wallets too, but with a different approach. +- **Key Identifier**: Chain name. +- **Example**: It manages wallets like cosmoshub/keplr-extension, cosmoshub/keplr-mobile, etc. These are wallets from the same chain but with different wallet names. + +#### Common Point +- **Both MainWalletBase and WalletRepo** are involved in managing chain wallets, which are wallets associated with different blockchain networks. + +#### Key Differences +- **MainWalletBase**: Focuses on managing wallets based on the wallet’s name. It doesn’t matter what chain the wallet is from; as long as they share the same wallet name, MainWalletBase manages them. +- **WalletRepo**: Concentrates on managing wallets based on the chain’s name. Here, the specific wallet names don’t matter; WalletRepo groups and manages wallets that are on the same blockchain network. + +#### Practical Use +- **In some decentralized applications (dapps)**, the focus might be more on the blockchain network (chain) rather than the wallet itself. In such cases, WalletRepo is particularly useful because it provides a perspective based on the chain, allowing different wallets on the same chain to be managed together. + +#### Summary +- **MainWalletBase**: Manages wallets across different chains but with the same wallet name. +- **WalletRepo**: Manages different wallets on the same chain. + +In essence, these two classes offer different ways of organizing and accessing chain wallets, based on what the primary point of interest is (wallet name or chain name). + +So far `WalletRepo` is only used in [`WalletModal`](https://docs.cosmology.zone/cosmos-kit/provider/chain-provider#walletmodal) properties. diff --git a/packages/docs/pages/cookbook/_meta.json b/packages/docs/pages/cookbook/_meta.json new file mode 100644 index 000000000..0e0059b27 --- /dev/null +++ b/packages/docs/pages/cookbook/_meta.json @@ -0,0 +1,4 @@ +{ + "connect-multi-chains": "Connect Multiple Chains", + "sign": "Sign" +} diff --git a/packages/docs/pages/cookbook/connect-multi-chains.mdx b/packages/docs/pages/cookbook/connect-multi-chains.mdx new file mode 100644 index 000000000..edac9d8ab --- /dev/null +++ b/packages/docs/pages/cookbook/connect-multi-chains.mdx @@ -0,0 +1,56 @@ +## How to connect multiple chains? + +### 1. Use `useChains` Hook +CosmosKit introduces **[`useChains`](/hooks/use-chains)** hook starting from `v2.3.0`. Use it to connect to multiple chains. + +### 2. For A Specific Wallet (No Modal Required) + +Let's take `keplr-extension` for example. + +```javascript +import { useWalletClient } from "@cosmos-kit/react"; + +export default function Home() { + const { status, client } = useWalletClient("keplr-extension"); // or comostation-extension, leap-extension, etc. + + useEffect(() => { + if (status === "Done") { + client.enable?.(["cosmoshub-4", "osmosis-1", "juno-1"]); + client.getAccount?.("juno-4").then((account) => console.log(account)); + client.getAccount?.("osmosis-1").then((account) => console.log(account)); + client + .getAccount?.("cosmoshub-4") + .then((account) => console.log(account)); + } + }, [status]); + // ... +} +``` + +### 3. No Specific Wallets (Modal Required, Version Prior to `v2.3.0`) + +There's no `useChains` hook in CosmosKit then, so the best you can do is below. + +```javascript +export default function Home() { + const { openView } = useChain("cosmoshub"); // or juno, osmosis, etc. + const { status, client } = useWalletClient(); + + useEffect(() => { + if (status === "Done") { + client.enable?.(["cosmoshub-4", "osmosis-1", "juno-1"]); + client.getAccount?.("juno-4").then((account) => console.log(account)); + client.getAccount?.("osmosis-1").then((account) => console.log(account)); + client + .getAccount?.("cosmoshub-4") + .then((account) => console.log(account)); + } + }, [status]); + + return ( +
+ +
+ ); +} +``` diff --git a/packages/docs/pages/cookbook/sign.mdx b/packages/docs/pages/cookbook/sign.mdx new file mode 100644 index 000000000..32402d5a9 --- /dev/null +++ b/packages/docs/pages/cookbook/sign.mdx @@ -0,0 +1,41 @@ +# Sign + +## Global Settings + +```ts + { + return 'amino'; + } + }} +> + + + +const { getSigningStargateClient } = useChain('cosmoshub'); +const aminoSigningClient = await getSigningStargateClient(); +``` + +By default use `amino` signer. Or you need to set `return 'direct'` if `direct` signer required. + +## Individual Settings + +```ts +const { status, client } = useWalletClient('keplr-extension'); + +if (status === 'Done') { + /** + * OR: + * const aminoSigner = client.getOfflineSignerAmino('cosmoshub'); + * const directSigner = client.getOfflineSignerDirect('cosmoshub'); + */ + const aminoSigner = client.getOfflineSigner('cosmoshub', 'amino'); +} + +const aminoSigningClient = await SigningStargateClient.connectWithSigner( + rpcEndpoint, + aminoSigner + ); +``` \ No newline at end of file diff --git a/packages/docs/pages/get-started.mdx b/packages/docs/pages/get-started.mdx new file mode 100644 index 000000000..73f128e39 --- /dev/null +++ b/packages/docs/pages/get-started.mdx @@ -0,0 +1,105 @@ +# How to use CosmosKit + +> 💡 Make sure you are using `React18` +> +> `CosmosKit V1` is deprecated, we suggest using [`CosmosKit V2`](/migration-to-v2) +> +> `defaultSignOptions` has been preset as below in latest version (core >= 2.7, react-lite >= 2.5, react >= 2.9): + +```json +{ + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; +``` + +## Quickstart + +🏁 Get started quickly by using [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) to help you build high-quality Cosmos apps fast! + +## Use CosmosKit from Scratch + +### 1️⃣ Install Dependencies + +Taking `Keplr` wallet as an example. + +```sh +yarn add @cosmos-kit/react @cosmos-kit/keplr chain-registry +``` + +`@cosmos-kit/react` includes default modal made with `@interchain-ui/react`. If [customized modal](/provider/chain-provider/#customize-modal-with-walletmodal) is provided, you can use `@cosmos-kit/react-lite` instead to lighter your app. + +There are multiple wallets supported by CosmosKit. Details see [Integrating Wallets](/integrating-wallets) + +> Note: `@cosmjs/*` packages are peer dependencies in `@cosmos-kit/core`, so if you're not using `@cosmjs/*` in your dapp, `yarn install` would complain UNMET cosmjs peer dependencies. + +### 2️⃣ Wrap Provider + +First, add [`ChainProvider`](/provider/chain-provider) and provider [required properties](/provider/chain-provider#required-properties). + +Example: + +```tsx +import * as React from 'react'; + +import { ChainProvider } from '@cosmos-kit/react'; +import { chains, assets } from 'chain-registry'; +import { wallets } from '@cosmos-kit/keplr'; + +// Import this in your top-level route/layout +import "@interchain-ui/react/styles"; + +function CosmosApp() { + return ( + + + + ); +} +``` + +### 3️⃣ Consume with Hook + +Take `useChain` as an example. + +```tsx +import * as React from 'react'; + +import { useChain } from "@cosmos-kit/react"; + +function Component ({ chainName }: { chainName: string }) => { + const chainContext = useChain(chainName); + + const { + status, + username, + address, + message, + connect, + disconnect, + openView, + } = chainContext; +} +``` + +## Localstorage Settings + +### current wallet + +- **Key**: `cosmos-kit@2:core//current-wallet` +- **Type**: `string` + +It records current wallet name. You can use this key to implement auto-connection in dapp. And it will expire after provided [session duration](#sessionoptions). + +### accounts + +- **Key**: `cosmos-kit@2:core//accounts` +- **Type**: `SimpleAccount[]` + +It records the connected chains' account information. It's used for account restore when refreshing in CosmosKit. And it will expire after provided [session duration](#sessionoptions). diff --git a/packages/docs/pages/hooks/_meta.json b/packages/docs/pages/hooks/_meta.json new file mode 100644 index 000000000..2e5d71a71 --- /dev/null +++ b/packages/docs/pages/hooks/_meta.json @@ -0,0 +1,12 @@ +{ + "index": "Introduction", + "use-chain": "- useChain", + "use-chains": "- useChains", + "use-chain-wallet": "- useChainWallet", + "use-iframe": "- useIframe", + "use-manager": "- useManager", + "use-modal-theme": "- useModalTheme", + "use-name-service": "- useNameService", + "use-wallet": "- useWallet", + "use-wallet-client": "- useWalletClient" +} diff --git a/packages/docs/pages/hooks/index.mdx b/packages/docs/pages/hooks/index.mdx new file mode 100644 index 000000000..46bd8862e --- /dev/null +++ b/packages/docs/pages/hooks/index.mdx @@ -0,0 +1,26 @@ +There are multiple hooks provided in CosmosKit. They all require [**ChainProvider**](/provider/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` to provide necessary information. + +- [`useChain`](/hooks/use-chain): Provide chainWallet related properties and methods, and support multiple chains connected at one time. When `useChain` is called, corresponding chainWallets will be activated. + +- [`useChainWallet`](/hooks/use-chain-wallet): Provide chainWallet related properties and methods, and support multiple chains and wallets connected at one time. When `useChainWallet` is called, corresponding chainWallet will be activated. + +> See more information about [Differences Between `useChain` And `useChainWallet`](#differences-between-usechain-and-usechainwallet) + +- [`useManager`](/hooks/use-manager): Manage all chains and wallets. + +- [`useModalTheme`](/hooks/use-modal-theme): Manage default modal themes. + +- [`useNameService`](/hooks/use-name-service): Get alias name of address from a particular name server. + +- [`useWallet`](/hooks/use-wallet): Manage all chainWallets and the global status for a particular wallet. + +- [`useWalletClient`](/hooks/use-manager): Get the wallet client for a particular wallet. + +- [`useIframe`](/hooks/use-iframe): Set up an iframe that can access the currently connected wallet automatically. + +## Differences Between `useChain` And `useChainWallet` + +1. `useChainWallet` requires an extra parameter `walletName`. +2. `useChain` will pop up a wallet modal to connect while `useChainWallet` not. +3. `useChain` exposes extra `openView` and `closeView` methods and `walletRepo` property. +4. the return value of methods `getRpcEndpoint`, `getRestEndpoint`, `getStargateClient`, `getCosmWasmClient`, `getNameService` can be different between `useChain` and `useChainWallet`, because `useChain` explores all `chainWallets` related to the parameter `chainName`. diff --git a/packages/docs/pages/hooks/use-chain-wallet.mdx b/packages/docs/pages/hooks/use-chain-wallet.mdx new file mode 100644 index 000000000..e52866fe0 --- /dev/null +++ b/packages/docs/pages/hooks/use-chain-wallet.mdx @@ -0,0 +1,100 @@ +## Hook - useChainWallet + +- required provider: [**ChainProvider**](/provider/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +- parameters: + - **chainName**: `ChainName` ( = `string` ); + - **walletName**: `WalletName` ( = `string` ); + - **sync**: `boolean` = `true` + +> parameter `sync` means whether to synchronize connection and disconnection to all other activated chainWallets. + +- return type: [**ChainWalletContext**](#type-chainwalletcontext) + +## Type - ChainWalletContext + +### Properties + +| Name | Description | Type | Default | +| ------------------------ | -------------------------------------------- | ------------------------ | -------------- | +| **chain** | chain registry information | `Chain` | - | +| **assets** | chain assets information | `AssetList \| undefined` | `undefined` | +| **wallet** | current selected wallet registry information | `Wallet \| undefined` | `undefined` | +| **logoUrl** | chain logo url | `string \| undefined` | `undefined` | +| **address** | chain address from current selected wallet | `string \| undefined` | `undefined` | +| **username** | username from current selected wallet | `string \| undefined` | `undefined` | +| **message** | error/warn/info message | `string \| undefined` | `undefined` | +| **status** | wallet status | `WalletStatus` | `Disconnected` | +| **isWalletDisconnected** | if `status === 'Disconnected'` | `boolean` | `true` | +| **isWalletConnecting** | if `status === 'Connecting'` | `boolean` | `false` | +| **isWalletConnected** | if `status === 'Connected'` | `boolean` | `false` | +| **isWalletRejected** | if `status === 'Rejected'` | `boolean` | `false` | +| **isWalletNotExist** | if `status === 'NotExist'` | `boolean` | `false` | +| **isWalletError** | if `status === 'Error'` | `boolean` | `false` | + +### Methods + +| Name | Description | Parameters | Return Type | Is Async | +| ---------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------- | +| **connect** | connect wallet | **wallet**?: `WalletName` | `void` | Y | +| **disconnect** | disconnect current selected wallet | - | `void` | Y | +| **getRpcEndpoint** | return rpc endpoint, `isLazy` explanation is [here](/provider/chain-provider#isLazy) | **isLazy**?: `boolean` | `string \| ExtendedHttpEndpoint` | Y | +| **getRestEndpoint** | return rest endpoint, `isLazy` explanation is [here](/provider/chain-provider#isLazy) | **isLazy**?: `boolean` | `string \| ExtendedHttpEndpoint` | Y | +| **getStargateClient** | - | - | `StargateClient` | Y | +| **getCosmWasmClient** | - | - | `CosmWasmClient` | Y | +| **getSigningStargateClient** | always validate endpoint in method | - | `SigningStargateClient` | Y | +| **getSigningCosmWasmClient** | always validate endpoint in method | - | `SigningCosmWasmClient` | Y | +| **getNameService** | get name service object supported on provided chain | - | `NameService` | Y | +| **estimateFee** | if **type** is `undefined`, default using `SigningStargateClient` | **messages**: `EncodeObject[]`,
**type**?: `CosmosClientType`,
**memo**?: `string`,
**multiplier**?: `number` | `StdFee` | Y | +| **sign** | using `cosmjs`. if **type** is `undefined`, default using `SigningStargateClient` | **messages**: `EncodeObject[]`,
**fee**?: `StdFee`,
**memo**?: `string`,
**type**?: `CosmosClientType` | `TxRaw` | Y | +| **broadcast** | if **type** is `undefined`, default using `SigningStargateClient` | **signedMessages**: `TxRaw`,
**type**?: `CosmosClientType`, | `DeliverTxResponse` | Y | +| **signAndBroadcast** | if **type** is `undefined`, default using `SigningStargateClient` | **messages**: `EncodeObject[]`,
**fee**?: `StdFee`,
**memo**?: `string`,
**type**?: `CosmosClientType`, | `DeliverTxResponse` | Y | + +### Properties from Wallet Client + +| Name | Description | Type | Default | +| ---------------------- | ----------- | ------------------ | ---------- | ----------- | +| **qrUrl** | - | `Mutable\ | undefined` | `undefined` | +| **appUrl** | - | `Mutable\ | undefined` | `undefined` | +| **defaultSignOptions** | - | `SignOptions` | as below | + +`defaultSignOptions`: + +```json +{ + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; +``` + +### Methods from Wallet Client + +> These methods are equal to wallet client methods with argument `chainId` assigned as `chainId` corresponding to hook argument `chainName`. If you want to directly use wallet client methods, choose hook [`useWalletClient`](/hooks/use-wallet-client) instead. + +| Name | Description | Parameters | Return Type | Is Async | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | --------------------- | -------- | +| **setDefaultSignOptions** | - | **options**: `SignOptions` | `void` | N | +| **enable** | - | - | `void` | Y | +| **getAccount** | - | - | `WalletAccount` | Y | +| **getOfflineSigner** | prioritize returning `preferredSignType` (in `ChainProvider` properties, by default `amino`) corresponding signer if it is available, otherwise return signer that is provided. | Y | +| **getOfflineSignerAmino** | - | - | `OfflineAminoSigner` | N | +| **getOfflineSignerDirect** | - | - | `OfflineDirectSigner` | N | +| **signAmino** | - | **signer**: `string`,
**signDoc**: `StdSignDoc`,
**signOptions**?: `SignOptions` | `AminoSignResponse` | Y | +| **signDirect** | - | **signer**: `string`,
**signDoc**: `StdSignDoc`,
**signOptions**?: `SignOptions` | `DirectSignResponse` | Y | +| **signArbitrary** | - | **signer**: `string`,
**data**: `string \| Uint8Array` | `StdSignature` | Y | +| **sendTx** | - | **tx**: `Uint8Array`,
**mode**: `BroadcastMode` | `Uint8Array` | Y | + +### Advanced + +**Used for deeper dive into the chain and wallet related objects** + +| Name | Description | Type | Default | +| --------------- | ------------------- | ------------------------------ | ----------- | +| **chainWallet** | current chainWallet | `ChainWalletBase \| undefined` | `undefined` | + +## Examples + +### [fetch address](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/use-chain-wallet.tsx) + +### [governance](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/gov.tsx) diff --git a/packages/docs/pages/hooks/use-chain.mdx b/packages/docs/pages/hooks/use-chain.mdx new file mode 100644 index 000000000..bc8eccf5e --- /dev/null +++ b/packages/docs/pages/hooks/use-chain.mdx @@ -0,0 +1,103 @@ +## Hook - useChain + +- required provider: [**ChainProvider**](/provider/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +> To use `useChain` with `ChainProvider` from `@cosmos-kit/react-lite`, property [`walletModal`](/provider/chain-provider#walletmodal) must be provided. Or you can choose `ChainProvider` from `@cosmos-kit/react`, which provides `DefaultModal`. Or you can use [`useChainWallet`](/hooks/use-chain-wallet) instead. + +- parameters: + - **chainName**: `ChainName` ( = `string` ); + - **sync**: `boolean` = `true` + +> parameter `sync` means whether to synchronize connection and disconnection to all other activated chainWallets. + +- return type: [**ChainContext**](#type-chaincontext) + +## Type - ChainContext + +### Properties + +| Name | Description | Type | Default | +| ------------------------ | -------------------------------------------- | ------------------------ | -------------- | +| **chain** | chain registry information | `Chain` | - | +| **assets** | chain assets information | `AssetList \| undefined` | `undefined` | +| **wallet** | current selected wallet registry information | `Wallet \| undefined` | `undefined` | +| **logoUrl** | chain logo url | `string \| undefined` | `undefined` | +| **address** | chain address from current selected wallet | `string \| undefined` | `undefined` | +| **username** | username from current selected wallet | `string \| undefined` | `undefined` | +| **message** | error/warn/info message | `string \| undefined` | `undefined` | +| **status** | wallet status | `WalletStatus` | `Disconnected` | +| **isWalletDisconnected** | if `status === 'Disconnected'` | `boolean` | `true` | +| **isWalletConnecting** | if `status === 'Connecting'` | `boolean` | `false` | +| **isWalletConnected** | if `status === 'Connected'` | `boolean` | `false` | +| **isWalletRejected** | if `status === 'Rejected'` | `boolean` | `false` | +| **isWalletNotExist** | if `status === 'NotExist'` | `boolean` | `false` | +| **isWalletError** | if `status === 'Error'` | `boolean` | `false` | + +### Methods + +| Name | Description | Parameters | Return Type | Is Async | +| ---------------------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------- | +| **openView** | open modal | - | `void` | N | +| **closeView** | close modal | - | `void` | N | +| **connect** | connect wallet | **wallet**?: `WalletName` | `void` | Y | +| **disconnect** | disconnect current selected wallet | - | `void` | Y | +| **getRpcEndpoint** | return rpc endpoint, `isLazy` explanation is [here](/provider/chain-provider#isLazy) | **isLazy**?: `boolean` | `string \| ExtendedHttpEndpoint` | Y | +| **getRestEndpoint** | return rest endpoint, `isLazy` explanation is [here](/provider/chain-provider#isLazy) | **isLazy**?: `boolean` | `string \| ExtendedHttpEndpoint` | Y | +| **getStargateClient** | - | - | `StargateClient` | Y | +| **getCosmWasmClient** | - | - | `CosmWasmClient` | Y | +| **getSigningStargateClient** | always validate endpoint in method | - | `SigningStargateClient` | Y | +| **getSigningCosmWasmClient** | always validate endpoint in method | - | `SigningCosmWasmClient` | Y | +| **getNameService** | get name service object supported on provided chain | - | `NameService` | Y | +| **estimateFee** | if **type** is `undefined`, default using `SigningStargateClient` | **messages**: `EncodeObject[]`,
**type**?: `CosmosClientType`,
**memo**?: `string`,
**multiplier**?: `number` | `StdFee` | Y | +| **sign** | using `cosmjs`. if **type** is `undefined`, default using `SigningStargateClient` | **messages**: `EncodeObject[]`,
**fee**?: `StdFee`,
**memo**?: `string`,
**type**?: `CosmosClientType` | `TxRaw` | Y | +| **broadcast** | if **type** is `undefined`, default using `SigningStargateClient` | **signedMessages**: `TxRaw`,
**type**?: `CosmosClientType`, | `DeliverTxResponse` | Y | +| **signAndBroadcast** | if **type** is `undefined`, default using `SigningStargateClient` | **messages**: `EncodeObject[]`,
**fee**?: `StdFee`,
**memo**?: `string`,
**type**?: `CosmosClientType`, | `DeliverTxResponse` | Y | + +### Properties from Wallet Client + +| Name | Description | Type | Default | +| ---------------------- | ----------- | ------------------ | ---------- | ----------- | +| **qrUrl** | - | `Mutable\ | undefined` | `undefined` | +| **appUrl** | - | `Mutable\ | undefined` | `undefined` | +| **defaultSignOptions** | - | `SignOptions` | as below | + +`defaultSignOptions`: + +```json +{ + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; +``` + +### Methods from Wallet Client + +> These methods are equal to wallet client methods with argument `chainId` assigned as `chainId` corresponding to hook argument `chainName`. If you want to directly use wallet client methods, choose hook [`useWalletClient`](/hooks/use-wallet-client) instead. + +| Name | Description | Parameters | Return Type | Is Async | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | --------------------- | -------- | +| **setDefaultSignOptions** | - | **options**: `SignOptions` | `void` | N | +| **enable** | - | - | `void` | Y | +| **getAccount** | - | - | `WalletAccount` | Y | +| **getOfflineSigner** | prioritize returning `preferredSignType` (in `ChainProvider` properties, by default `amino`) corresponding signer if it is available, otherwise return signer that is provided. | - | `OfflineSigner` | Y | +| **getOfflineSignerAmino** | - | - | `OfflineAminoSigner` | N | +| **getOfflineSignerDirect** | - | - | `OfflineDirectSigner` | N | +| **signAmino** | - | **signer**: `string`,
**signDoc**: `StdSignDoc`,
**signOptions**?: `SignOptions` | `AminoSignResponse` | Y | +| **signDirect** | - | **signer**: `string`,
**signDoc**: `StdSignDoc`,
**signOptions**?: `SignOptions` | `DirectSignResponse` | Y | +| **sendTx** | - | **tx**: `Uint8Array`,
**mode**: `BroadcastMode` | `Uint8Array` | Y | + +### Advanced + +**Used for deeper dive into the chain and wallet related objects** + +| Name | Description | Type | Default | +| --------------- | ------------------------------------------------------------------ | ------------------------------ | ----------- | +| **chainWallet** | current chainWallet | `ChainWalletBase \| undefined` | `undefined` | +| **walletRepo** | wallet repository, you can get all the chainWallets from this repo | `WalletRepo` | - | + +## Examples + +### [fetch address](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/index.tsx) + +### [fetch balance & send tokens](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/tx.tsx) diff --git a/packages/docs/pages/hooks/use-chains.mdx b/packages/docs/pages/hooks/use-chains.mdx new file mode 100644 index 000000000..34483e1e6 --- /dev/null +++ b/packages/docs/pages/hooks/use-chains.mdx @@ -0,0 +1,60 @@ +## Hook - useChains + +- required provider: [**ChainProvider**](/provider/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +> To use `useChains` with `ChainProvider` from `@cosmos-kit/react-lite`, property [`walletModal`](/provider/chain-provider#walletmodal) must be provided. Or you can choose `ChainProvider` from `@cosmos-kit/react`, which provides `DefaultModal`. Or you can use [`useChainWallet`](/hooks/use-chain-wallet) instead. + +- parameters: + - **chainNames**: `ChainName[]` + - **sync**: `boolean` = `true` + +> parameter `sync` means whether to synchronize connection and disconnection to all other activated chainWallets. + +- return type: **Record<ChainName, [**ChainContext**](/hooks/use-chain#type-chaincontext)>** + +## Usage +```jsx +export default function () { + const chains = useChains(['cosmoshub', 'osmosis', 'stargaze', 'juno', 'akash']); + const connected = Object.values(chains).every(chain => chain.isWalletConnected); + const { connect, openView } = chains.cosmoshub; + + // Notice: calling chains.chainName.connect() will connect to all 5 chains above. + + return
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodeValue
chains.cosmoshub.address{chains.cosmoshub.address}
chains.osmosis.address{chains.osmosis.address}
chains.stargaze.address{chains.stargaze.address}
chains.juno.address{chains.juno.address}
chains.akash.address{chains.akash.address}
+
; +} +``` diff --git a/packages/docs/pages/hooks/use-iframe.mdx b/packages/docs/pages/hooks/use-iframe.mdx new file mode 100644 index 000000000..ebe129ee4 --- /dev/null +++ b/packages/docs/pages/hooks/use-iframe.mdx @@ -0,0 +1,58 @@ +## Hook - useIframe + +- required provider: [**ChainProvider**](/provider/chain-provider) from either + `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +- parameters: + - **walletName?**: `WalletName` ( = `string` ); + - **walletInfo?**: `{ prettyName?: string; logo?: string }` + - **accountReplacement?**: `(chainId: string) => AccountReplacement | Promise | undefined` + - **walletClientOverrides?**: `Partial>>` + - **aminoSignerOverrides?**: `Partial>>` + - **directSignerOverrides?**: `Partial>>` + +> `walletName` optionally chooses a wallet to use, like the +> [`useWallet`](./use-wallet) hook. If unset, the main wallet is used. +> +> `walletInfo` optionally sets the iframe's connected wallet metadata. If unset, +> the currently connected wallet metadata is used. +> +> `accountReplacement` optionally overrides the account details returned from +> the wallet. +> +> `walletClientOverrides`, `aminoSignerOverrides`, and `directSignerOverrides` +> allow fine-grained control over the various client methods such that the +> controlling app can heavily customize the wallet passthrough experience. For +> example, this allows the app to manually handle and wrap messages from the +> nested app, like a smart contract wallet may want to do. +> +> Explore the types to better understand how to implement advanced functionality. + +- return type: **`{ wallet: MainWalletBase; iframeRef: RefCallback}`** + +## Usage + +```jsx +export default function () { + const { iframeRef } = useIframe(); + const { connect, disconnect, isWalletConnected } = useChain("cosmoshub"); + + return ( +
+ + + +
+ ); +} +``` diff --git a/packages/docs/pages/hooks/use-manager.mdx b/packages/docs/pages/hooks/use-manager.mdx new file mode 100644 index 000000000..c2a068557 --- /dev/null +++ b/packages/docs/pages/hooks/use-manager.mdx @@ -0,0 +1,39 @@ +## Hook - useManager + +- required provider: [**ChainProvider**](https://docs.cosmology.zone/cosmos-kit/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +- return type: [**ManagerConext**](#type-managerconext) + +## Type - ManagerConext + +### properties + +| Name | Description | Type | Default | +| ---------------------- | -------------------------------------------------------------------------------- | ------------------ | ------- | +| **chainRecords** | contains all chain registry and assets information | `ChainRecord[]` | [] | +| **walletRepos** | contains all chain wallets information, each wallet repo identified with a chain | `WalletRepo[]` | [] | +| **mainWallets** | all main wallets information | `MainWalletBase[]` | [] | +| **defaultNameService** | - | `NameServiceName` | `icns` | + +### methods + +| Name | Description | Parameters | Return Type | Is Async | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | -------- | +| **getChainRecord** | get the basic info of a chain, which contains registry and assets information for this chain | **chainName**: `ChainName` | `ChainRecord` | N | +| **getChainLogo** | get chain logo url | **chainName**: `ChainName` | `string \| undefined` | N | +| **getWalletRepo** | get the wallet repository of a chain, which stores all chain wallets for this chain | **chainName**: `ChainName` | `WalletRepo` | N | +| **getNameService** | get name service object supported on provided chain, if chain not provided, using `defaultNameService` in `ChainProvider` | **chainName?**: `ChainName` | `NameService` | Y | +| **addChains** | add new chains in provider | **chains**: `Chain[]`,
**assetLists**: `AssetList[]`,
**signerOptions**?: `SignerOptions`,
**endpoints**?: `EndpointOptions["endpoints"]` | `void` | N | +| **addEndpoints** | add new endpoints | **endpoints**: `EndpointOptions["endpoints"]` | `void` | N | +| **on** | attach event handler to [events](#events) | **event**: `EventName`,
**handler**: `(params: any) => void` | `void` | N | +| **off** | remove attached event handler | **event**: `EventName`,
**handler**: `(params: any) => void` | `void` | N | + +## Events + +### refresh_connection + +Every time the registered events `connectEventNamesOnWindow` and `connectEventNamesOnClient` (see [wallet registry](https://docs.cosmology.zone/cosmos-kit/integrating-wallets/adding-new-wallets#optional-properties)) are triggered, and the dapp has been connected to the corresponding wallet, the `refresh_connection` event will also be triggered. + +## Examples + +### [add chain](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/add-chain.tsx) diff --git a/packages/docs/pages/hooks/use-modal-theme.mdx b/packages/docs/pages/hooks/use-modal-theme.mdx new file mode 100644 index 000000000..1272ebaad --- /dev/null +++ b/packages/docs/pages/hooks/use-modal-theme.mdx @@ -0,0 +1,23 @@ +## Hook - useModalTheme + +If you're using default modal provided by CosmosKit, you might need this hook to get and set modal theme. + +- required provider: [**ChainProvider**](https://docs.cosmology.zone/cosmos-kit/chain-provider) from `@cosmos-kit/react` + +## Return Type - useModalTheme + +### properties + +| Name | Description | Type | Default | +| ----------- | ----------- | -- | -- | +| **modalTheme** | currently `light` or `dark` or `system` are available | `ModePreference` | `light` | + +### methods + +| Name | Description | Parameters | Return Type | Is Async | +| ----------- | ----------- | -- | -- | -- | +| **setModalTheme** | - | **theme**: `ModePreference` | `void` | N | + +## Examples + +### [dashboard](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/index.tsx) diff --git a/packages/docs/pages/hooks/use-name-service.mdx b/packages/docs/pages/hooks/use-name-service.mdx new file mode 100644 index 000000000..c561f7738 --- /dev/null +++ b/packages/docs/pages/hooks/use-name-service.mdx @@ -0,0 +1,26 @@ +## Hook - useNameService + +- required provider: [**ChainProvider**](/provider/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +- parameters: + - **name?**: `NameServiceName` ( = `string` ); + +> Note: `name` is optional. if `name` is not provided, using the `defaultNameService` in `ChainProvider` + +- return type: [**Mutable\**](#type---mutablenameservice) + +## Type - Mutable\ + +### properties + +| Name | Description | Type | Default | +| ----------- | ----------- | -- | -- | +| **state** | - | `State` | `State.Init` | +| **data** | - | `NameService` | `undefined` | +| **message** | - | `string` | `undefined` | + +> Note: `state`, `data` and `message` are react states. + +## Examples + +### [name service](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/ns2.tsx) \ No newline at end of file diff --git a/packages/docs/pages/hooks/use-wallet-client.mdx b/packages/docs/pages/hooks/use-wallet-client.mdx new file mode 100644 index 000000000..d32f25d2d --- /dev/null +++ b/packages/docs/pages/hooks/use-wallet-client.mdx @@ -0,0 +1,24 @@ +## Hook - useWalletClient + +- required provider: [**ChainProvider**](https://docs.cosmology.zone/cosmos-kit/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +- parameters: + - **walletName?**: `WalletName` ( = `string` ); + +> if `walletName` is `undefined`, using `currentWallet` instead. See LocalStorage key `cosmos-kit@2:core//current-wallet` + +- return type: [**WalletClientContext**](#type---walletclientcontext) + +## Type - WalletClientContext + +### Properties + +| Name | Description | Type | Default | +| ----------- | ------------------------------------------- | --------------------------- | ------------ | +| **client** | wallet client | `WalletClient \| undefined` | `undefined` | +| **status** | wallet client status | `State` | `State.Init` | +| **message** | error message if wallet client is undefined | `string \| undefined` | `undefined` | + +## Examples + +### [get account](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/tx.tsx) diff --git a/packages/docs/pages/hooks/use-wallet.mdx b/packages/docs/pages/hooks/use-wallet.mdx new file mode 100644 index 000000000..eb989f292 --- /dev/null +++ b/packages/docs/pages/hooks/use-wallet.mdx @@ -0,0 +1,29 @@ +## Hook - useWallet + +- required provider: [**ChainProvider**](https://docs.cosmology.zone/cosmos-kit/chain-provider) from either `@cosmos-kit/react` or `@cosmos-kit/react-lite` + +- parameters: + - **walletName?**: `WalletName` ( = `string` ); + - **activeOnly**: `boolean` (default to be `true`); + +> If `walletName` is `undefined`, using `currentWallet` instead. See LocalStorage key `cosmos-kit@2:core//current-wallet`. If `currentWallet` is also undefined, return default values. + +> If `activeOnly` is `true`, only look at chainWallets with `isActive` true. When `useChain` is called, corresponding chainWallet will be activated. + +- return type: [**WalletContext**](#type---walletcontext) + +## Type - WalletContext + +### Properties + +| Name | Description | Type | Default | +| ---------------- | ------------------------------------------------------------------------------- | --------------------- | --------------------------- | +| **mainWallet** | the mainWallet | `MainWalletBase | undefined` | +| **chainWallets** | all the chainWallets (including chains that not be called by useChain) | `ChainWalletBase[]` | `[]` | +| **wallet** | wallet registry information | `Wallet \| undefined` | `undefined` | +| **status** | global wallet status involves all active chainWallets if `activeOnly` is `true` | `WalletStatus` | `WalletStatus.Disconnected` | +| **message** | - | `string \| undefined` | `undefined` | + +## Examples + +### [global wallet status](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/example/pages/index.tsx) diff --git a/packages/docs/pages/index.mdx b/packages/docs/pages/index.mdx new file mode 100644 index 000000000..abb8d8195 --- /dev/null +++ b/packages/docs/pages/index.mdx @@ -0,0 +1,103 @@ +import React from "react"; +import { WalletSection } from "../components"; + +# CosmosKit + +

+ cosmos-kit +

+ +
+
+ + + +
+
+ + + +
+ +
+ + + +
+
+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +## Get Started + +⚡️ [How to use CosmosKit](https://docs.cosmology.zone/cosmos-kit/get-started) + +## Try It Out! + + + +## Wallet Developers + +🔌 [How to integrate new wallets into CosmosKit](https://docs.cosmology.zone/cosmos-kit/integrating-wallets/adding-new-wallets) + +## Packages + +### [@cosmos-kit/core](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/core) + +Core package of CosmosKit, including types, utils and base classes. + +### [@cosmos-kit/react](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/react) + +A wallet adapter for React with mobile WalletConnect support for the Cosmos ecosystem. + +### [@cosmos-kit/react-lite](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/react-lite) + +A lighter version of `@cosmos-kit/react` without the default modal. + +### [@cosmos-kit/ins](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/ins) + +Interchain Name System implementation + +### [@cosmos-kit/walletconnect](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/walletconnect) + +[Wallet Connect V2](https://walletconnect.com/) support tools (usually used when integrating mobile wallets). + +### [WALLETS](/integrating-wallets) + +Wallets integrated in CosmosKit. + +### [@cosmos-kit/example](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/example) + +An example Next.js project integrating `@cosmos-kit/react` wallet adapter. + +## Related Projects + +### [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) + +Set up a modern Cosmos app by running one command ⚛️ + +### [chain-registry](https://github.com/cosmology-tech/chain-registry) + +An npm module for the official Cosmos chain-registry diff --git a/packages/docs/pages/integrating-wallets/_meta.json b/packages/docs/pages/integrating-wallets/_meta.json new file mode 100644 index 000000000..38bb740a3 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/_meta.json @@ -0,0 +1,25 @@ +{ + "index": "Introduction", + "adding-new-wallets": "Adding New Wallets", + "adding-all-wallets": "Adding All Wallets", + "compass": "@ Compass Wallet", + "cosmos-metamask-extension": "@ Cosmos MetaMask Extension", + "cosmostation": "@ Cosmostation Wallet", + "exodus": "@ Exodus Wallet", + "fin": "@ Fin Wallet", + "frontier": "@ Frontier Wallet", + "keplr": "@ Keplr Wallet", + "leap": "@ Leap Wallet", + "leap-capsule-social-login": "@ Leap Capsule Social Login", + "leap-metamask-comos-snap": "@ Leap Cosmos MetaMask Snap", + "ledger": "@ Ledger", + "ninji": "@ Ninji", + "okx": "@ Okx Wallet", + "omni": "@ Omni Wallet", + "shell": "@ Shell Wallet", + "station": "@ Station Wallet", + "trust": "@ Trust Wallet", + "vectis": "@ Vectis Wallet", + "web3auth": "@ Web3Auth", + "xdefi": "@ Xdefi Wallet" +} diff --git a/packages/docs/pages/integrating-wallets/adding-all-wallets.mdx b/packages/docs/pages/integrating-wallets/adding-all-wallets.mdx new file mode 100644 index 000000000..fd4abcfc6 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/adding-all-wallets.mdx @@ -0,0 +1,56 @@ +# How to Add All Wallets at Once + +The `cosmos-kit` package exports all supported `wallets` in CosmosKit. + +## Add `cosmos-kit` + +```sh +# npm +npm i cosmos-kit + +# pnpm +pnpm i cosmos-kit + +# yarn +yarn add cosmos-kit +``` + +## Import the wallets + +```js +import { wallets } from "cosmos-kit"; +``` + +## Add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` + +## Subset of wallets +```js +import { wallets } from 'cosmos-kit' + +wallets.mobile // An array of mobile wallets +wallets.extension // An array of extension wallets +wallets.for('keplr', 'cosmostation') // [KeplrExtensionWallet, KeplrMobileWallet, CosmostationExtensionWallet, CosmostationMobileWallet] +wallets.for('keplr', 'cosmostation').mobile // [KeplrMobileWallet, CosmostationMobileWallet] +wallets.for('keplr', 'cosmostation').extension // [KeplrExtensionWallet, CosmostationExtensionWallet] +wallets.not('coin98', 'compass') // wallets except Coin98 and Compass +wallets.keplr // [KeplrExtensionWallet, KeplrMobileWallet] +wallets.keplr.mobile // KeplrMobileWallet +wallets.keplr.extension // KeplrExtensionWallet +``` \ No newline at end of file diff --git a/packages/docs/pages/integrating-wallets/adding-new-wallets.mdx b/packages/docs/pages/integrating-wallets/adding-new-wallets.mdx new file mode 100644 index 000000000..4c0235258 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/adding-new-wallets.mdx @@ -0,0 +1,133 @@ +# How to Integrate New Wallets into CosmosKit + +## Quickly Add Extension Wallets + +1. Copy files in [Leap Extension](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/leap-extension/src/extension) to your package; + +2. Replace `Leap` with your wallet name (_with first letter capitalized_) **globally**; + +3. Replace `leap` with your wallet name (_with first letter in lowercase_) **globally**; + +4. Edit file `client.ts`, `registry.ts`, `types.ts` and `utils.ts`. Replace what is different from Leap with the new wallet specificated methods/properties. + +5. Construct the MainWallet (_class in `main-wallet.ts`_) instance and put it into `ChainProvider` `wallets` property. + +## Quickly Add Mobile Wallets + +### For wallets support [Wallet Connect v2.0](https://docs.walletconnect.com/2.0) + +1. Copy files in [Keplr Mobile](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/keplr-mobile/src/wallet-connect) to your package; + +2. Replace `Keplr` with your wallet name (_with first letter capitalized_) **globally**; + +3. Replace `keplr` with your wallet name (_with first letter in lowercase_) **globally**; + +4. Edit file `client.ts`, `registry.ts` and `types.ts`. Replace what is different from Keplr with the new wallet specificated methods/properties. For `client.ts`, the main replacement would happen in `getAppUrl` and the `method` parameter of `sendCustomRequest` + +5. Construct the MainWallet (_class in `main-wallet.ts`_) instance and put it into `ChainProvider` `wallets` property. + +## Add New Wallets from Scratch + +### 1️⃣ Prepare basic information for wallet + +#### Required properties + +| Key | Type | Description | +| ------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **name** | `WalletName = string` | identifier | +| **prettyName** | `string` | display name | +| **mode** | `WalletMode = 'extension' \| 'wallet-connect'` | wallet client type | +| **mobileDisabled**\* | `boolean` | display on mobile or not | +| **walletconnect** | `{ name: string; projectId: string; encoding?: BufferEncoding }` | only required when you are integrating mobile wallets based on [walletconnect](https://walletconnect.com/). If `encoding` is undefined, by default using `hex` to encode bytes | + +\* Usually `true` when **mode** is `wallet-connect`, `false` when **mode** is `extension`. + +#### Optional properties + +| Key | Type | Description | +| ----------------------------- | ---------------| ------------------------| +| **rejectMessage** | `string` \| `{ source: string; target?: string }` | `rejectMessage` or `rejectMessage.source` is error message string thrown by wallet app/extension when user rejects, while `rejectMessage.target` is `message` returned by hooks. If not provided, `target` would be `'Request Rejected!'` | +| **connectEventNamesOnWindow** | `string[]` | window event names to fire auto-connect | +| **connectEventNamesOnClient** | `string[]` | wallet client event names to fire auto-connect (make sure `on` and `off` methods are defined in [`WalletClient`](#2️⃣-implement-walletclient)) | +| **downloads** | [`DownloadInfo[]`](https://github.com/cosmology-tech/cosmos-kit/blob/ce50648487e73c1f6f17777347df7984168381af/packages/core/src/types/wallet.ts#L28-L31) | wallet app/extension download information | +| **logo** | `string` \| `{ major: string, minor: string }` | wallet logo url, display on default modal. For MetaMask Snaps, use `logo: { major: METAMASK_LOGO, minor: WALLET_LOGO }`| +| **extends** | 'MetaMask' | indicate it's a MetaMask Snap + +#### Examples + +- [Keplr Extension - Wallet Info](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/keplr-extension/src/extension/registry.ts) + +- [Keplr Mobile - Wallet Info](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/keplr-extension/src/wallet-connect/registry.ts) + +### 2️⃣ Implement `WalletClient` + +`MainWallet` is a class organizing all `ChainWallet`s. **It should extend `MainWalletBase` class**, in which protected `_chainWallets` property stores all `ChainWallet`s. + +#### Required methods + +| Key | Type | Description | +| -------------------- | --------------------------------------------- | ------------------------------------------------------- | +| **getSimpleAccount** | `(chainId: string) => Promise` | return account with address but without pubkey and algo | + +#### Optional methods + +| Key | Type | Description | +| -------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| **getAccount** | `(chainId: string) => Promise`\* | return account with address, pubkey and algo | +| **getOfflineSigner** | `(chainId: string, preferredSignType?: SignType) => Promise` | prioritize returning `preferredSignType` (by default `amino`) corresponding signer if it is available, otherwise return siger that is provided. | +| **enable** | `(chainIds: string \| string[]) => Promise` | give permission for the webpage to access wallet | +| **addChain** | `(chainInfo: ChainRecord) => Promise` | add new Cosmos-SDK based blockchains that isn't natively integrated to wallet app/extension | +| **on** | `(type: string, listener: EventListenerOrEventListenerObject) => void` | add event listener | +| **off** | `(type: string, listener: EventListenerOrEventListenerObject) => void` | remove event listener | + +#### Examples + +- [Keplr Client](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/keplr-extension/src/extension/client.ts) + +### 3️⃣ Extend `ChainWalletBase` + +Create a `ChainWallet` class that extends `ChainWalletBase`. `ChainWallet` provides wallet information for a particular chain, e.g. `address`, `offlineSigner`, etc. + +`ChainWalletBase` has implemented a bunch of methods such as wallet connection, sign, broadcast, etc. [[learn more]](#). Therefore, normally you don't need to do any extra work inside `ChainWallet`. But feel free to overwrite these methods or add new methods/properties if customization is needed to meet new demand. + +#### Examples + +- [Keplr Extension - Chain Wallet](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/keplr-extension/src/extension/chain-wallet.ts) + +- [Keplr Mobile - Chain Wallet](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/keplr/src/wallet-connect/chain-wallet.ts) + +### 4️⃣ Extend `MainWalletBase` + +Create a `MainWallet` class that extends `MainWalletBase`. `MainWallet` organizes all `ChainWallet`s, which are stored in protected member `_chainWallets`. + +> Note: Class `ChainWallet` created in [Step 3](#3️⃣-extend-chainWalletbase) is required in `MainWalletBase` construction. + +#### Required methods + +| Key | Type | +| -------------- | ------------------------------------------ | +| **initClient** | `() => void \| Promise`\* | + +\* `WalletClient` is the one implemented in [Step 2](#2️⃣-implement-walletclient). + +Also, feel free to overwrite methods in `MainWalletBase` or add new methods/properties if necessary. + +#### Examples + +- [Keplr Extension - Main Wallet](https://github.com/cosmology-tech/cosmos-kit/tree/main/wallets/keplr-extension/src/extension/main-wallet.ts) + +- [Keplr Mobile - Main Wallet](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/keplr/src/wallet-connect/main-wallet.ts) + +### 5️⃣ Get `MainWallet` instance + +You can construct your `MainWallet` Instance according to your `MainWallet` construct method now. Usually the `walletInfo` object prepared in [Step 1](#1️⃣-prepare-basic-information-for-wallet) is imported here as a construction argument. + +#### Examples + +- [keplrExtension & keplrMobile](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/keplr/src/keplr.ts) + +Last but not least, append this instance to the `wallets` property of [ChainProvider](/provider/chain-provider). + +## 6️⃣ Don't Forget To Update Docs + +Add `Markdown File` just like other wallets [here](https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/docs/pages/integrating-wallets). diff --git a/packages/docs/pages/integrating-wallets/cdc.mdx b/packages/docs/pages/integrating-wallets/cdc.mdx new file mode 100644 index 000000000..b0b61b516 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/cdc.mdx @@ -0,0 +1,43 @@ +# How to Add Crypto.com Wallet to CosmosKit + +There are two packages for Crypto.com Wallet + +- `@cosmos-kit/cdcwallet` +- `@cosmos-kit/cdcwallet-extension` + +`@cosmos-kit/cdcwallet` export all available Crypto.com wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/cdcwallet-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/cdcwallet` for example + +## add `@cosmos-kit/cdcwallet` + +``` +yarn add @cosmos-kit/cdcwallet +``` + +## import the wallets + +```js +import { wallets as cdcwallet } from "@cosmos-kit/cdcwallet"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/compass.mdx b/packages/docs/pages/integrating-wallets/compass.mdx new file mode 100644 index 000000000..96c61fc34 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/compass.mdx @@ -0,0 +1,43 @@ +# How to Add Compass Wallet to CosmosKit + +There are two packages for compass + +- `@cosmos-kit/compass` +- `@cosmos-kit/compass-extension` + +`@cosmos-kit/compass` export all available compass wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/compass-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/compass` for example + +## add `@cosmos-kit/compass` + +``` +yarn add @cosmos-kit/compass +``` + +## import the wallets + +```js +import { wallets as compass } from "@cosmos-kit/compass"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/cosmos-metamask-extension.mdx b/packages/docs/pages/integrating-wallets/cosmos-metamask-extension.mdx new file mode 100644 index 000000000..2bad49ee3 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/cosmos-metamask-extension.mdx @@ -0,0 +1,36 @@ +# How to Add Cosmos MetaMask Extension to CosmosKit + +- `@cosmos-kit/cosmos-extension-metamask` + +`@cosmos-kit/cosmos-extension-metamask` export wallets for connecting to the official Cosmos MetaMask Snap + +## add `@cosmos-kit/cosmos-extension-metamask` + +``` +yarn add @cosmos-kit/cosmos-extension-metamask +``` + +## import the wallets + +```js +import { wallets } from "@cosmos-kit/cosmos-extension-metamask"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/cosmostation.mdx b/packages/docs/pages/integrating-wallets/cosmostation.mdx new file mode 100644 index 000000000..42d93d6dd --- /dev/null +++ b/packages/docs/pages/integrating-wallets/cosmostation.mdx @@ -0,0 +1,44 @@ +# How to Add Cosmostation Wallet to CosmosKit + +There are three packages for cosmostation + +- `@cosmos-kit/cosmostation` +- `@cosmos-kit/cosmostation-extension` +- `@cosmos-kit/cosmostation-mobile` (using walletconnect v1, v2 is coming soon) + +`@cosmos-kit/cosmostation` export all available cosmostation wallets, while if you only want to add a particular one, choose `@cosmos-kit/cosmostation-extension` or `@cosmos-kit/cosmostation-mobile` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/cosmostation` for example + +## add `@cosmos-kit/cosmostation` + +``` +yarn add @cosmos-kit/cosmostation +``` + +## import the wallets + +```js +import { wallets as cosmostation } from "@cosmos-kit/cosmostation"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/exodus.mdx b/packages/docs/pages/integrating-wallets/exodus.mdx new file mode 100644 index 000000000..6ee5e89db --- /dev/null +++ b/packages/docs/pages/integrating-wallets/exodus.mdx @@ -0,0 +1,43 @@ +# How to Add Exodus Wallet to CosmosKit + +There are two packages for exodus + +- `@cosmos-kit/exodus` +- `@cosmos-kit/exodus-extension` + +`@cosmos-kit/exodus` export all available exodus wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/exodus-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/exodus` for example + +## add `@cosmos-kit/exodus` + +``` +yarn add @cosmos-kit/exodus +``` + +## import the wallets + +```js +import { wallets as exodus } from "@cosmos-kit/exodus"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/fin.mdx b/packages/docs/pages/integrating-wallets/fin.mdx new file mode 100644 index 000000000..4309897aa --- /dev/null +++ b/packages/docs/pages/integrating-wallets/fin.mdx @@ -0,0 +1,43 @@ +# How to Add Fin Wallet to CosmosKit + +There are two packages for fin + +- `@cosmos-kit/fin` +- `@cosmos-kit/fin-extension` + +`@cosmos-kit/fin` export all available fin wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/fin-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/fin` for example + +## add `@cosmos-kit/fin` + +``` +yarn add @cosmos-kit/fin +``` + +## import the wallets + +```js +import { wallets as fin } from "@cosmos-kit/fin"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/frontier.mdx b/packages/docs/pages/integrating-wallets/frontier.mdx new file mode 100644 index 000000000..8455d06a7 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/frontier.mdx @@ -0,0 +1,43 @@ +# How to Add Frontier Wallet to CosmosKit + +There are two packages for frontier + +- `@cosmos-kit/frontier` +- `@cosmos-kit/frontier-extension` + +`@cosmos-kit/frontier` export all available frontier wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/frontier-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/frontier` for example + +## add `@cosmos-kit/frontier` + +``` +yarn add @cosmos-kit/frontier +``` + +## import the wallets + +```js +import { wallets as frontier } from "@cosmos-kit/frontier"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/galaxy-station.mdx b/packages/docs/pages/integrating-wallets/galaxy-station.mdx new file mode 100644 index 000000000..1e1477508 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/galaxy-station.mdx @@ -0,0 +1,43 @@ +# How to Add Galaxy Station Wallet to CosmosKit + +There are two packages for galaxy station + +- `@cosmos-kit/galaxy-station` +- `@cosmos-kit/galaxy-station-extension` + +`@cosmos-kit/galaxy-station` export all available galaxy station wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/galaxy-station-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/galaxy-station` for example + +## add `@cosmos-kit/galaxy-station` + +``` +yarn add @cosmos-kit/galaxy-station +``` + +## import the wallets + +```js +import { wallets as galaxy-station } from "@cosmos-kit/galaxy-station"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/index.mdx b/packages/docs/pages/integrating-wallets/index.mdx new file mode 100644 index 000000000..d6e7e38d7 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/index.mdx @@ -0,0 +1,13 @@ +# Wallet Integrations + +## Wallet Providers + +If you are a wallet provider, please see the docs for adding your wallet to our repository as a supported wallet: + +#### 🔌 [Documentation for Wallet Providers to add a new Wallet](/integrating-wallets/adding-new-wallets) + +## Dapp developers + +### Supported Wallets + +See left sidebar (Titles starting with `@` are wallets supported by CosmosKit). diff --git a/packages/docs/pages/integrating-wallets/keplr.mdx b/packages/docs/pages/integrating-wallets/keplr.mdx new file mode 100644 index 000000000..9adaf9d54 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/keplr.mdx @@ -0,0 +1,44 @@ +# How to Add Keplr Wallet to CosmosKit + +There are three packages for keplr + +- `@cosmos-kit/keplr` +- `@cosmos-kit/keplr-extension` +- `@cosmos-kit/keplr-mobile` + +`@cosmos-kit/keplr` export all available keplr wallets, while if you only want to add a particular one, choose `@cosmos-kit/keplr-extension` or `@cosmos-kit/keplr-mobile` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/keplr` for example + +## install `@cosmos-kit/keplr` + +``` +yarn add @cosmos-kit/keplr +``` + +## import the wallets + +```js +import { wallets as keplr } from "@cosmos-kit/keplr"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/leap-capsule-social-login.mdx b/packages/docs/pages/integrating-wallets/leap-capsule-social-login.mdx new file mode 100644 index 000000000..a43a6c154 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/leap-capsule-social-login.mdx @@ -0,0 +1,117 @@ +# @cosmos-kit/leap-capsule-social-login + + +`@cosmos-kit/leap-capsule-social-login` is the social login integration for CosmosKit using `@leapwallet/cosmos-social-login-capsule-provider` + +> You need install [@leapwallet/cosmos-social-login-capsule-provider-ui](https://www.npmjs.com/package/@leapwallet/cosmos-social-login-capsule-provider-ui) package for UI. + +> When you build it please have the environment variables `CAPSULE_API_KEY` and `CAPSULE_ENV` which you can request from [here](https://7f4shq8oyfd.typeform.com/to/F86oVLhb?typeform-source=usecapsule.com) + +## NextJS + +For nextjs we recommend to load the module dynamic or async as it is not yet supporting SSR. + +> When you build it please have the environment variables `NEXT_PUBLIC_CAPSULE_API_KEY` and `NEXT_PUBLIC_CAPSULE_ENV` which you can request from [here](https://7f4shq8oyfd.typeform.com/to/F86oVLhb?typeform-source=usecapsule.com) + +### In next.config.js + +> transpilePackages: ["@cosmos-kit/leap-social-login", "@leapwallet/capsule-web-sdk-lite", "@leapwallet/cosmos-social-login-capsule-provider"], + + +### For example + +```jsx + +function MyApp({ Component, pageProps }: AppProps) { + const defaultWallets: MainWalletBase[] = [...keplrWallets, ...leapWallets]; + const [wallets, setWallets] = useState(defaultWallets) + const [loadingWallets, setLoadingWallet] = useState(false); + + useEffect(() => { + setLoadingWallet(true) + import("@cosmos-kit/leap-capsule-social-login").then( + (CapsuleModule) => { + return CapsuleModule.wallets; + }, + ).then((leapSocialLogin) => { + setWallets([...keplrWallets, ...leapWallets, ...leapSocialLogin]) + setLoadingWallet(false); + }) + }, []) + + + if (loadingWallets) { + return <>Loading... + } + + + return ( + + + + + + + ); +} + +export default MyApp; + + +const LeapSocialLogin = dynamic( + () => + import("@leapwallet/cosmos-social-login-capsule-provider-ui").then( + (m) => m.CustomCapsuleModalView, + ), + { ssr: false }, +); + +export function CustomCapsuleModalViewX() { + const [showCapsuleModal, setShowCapsuleModal] = useState(false); + + useEffect(() => { + window.openCapsuleModal = () => { + setShowCapsuleModal(true); + } + }, []) + + return ( + <> + { + window.successFromCapsuleModal(); + }} + onLoginFailure={ + () => { + window.failureFromCapsuleModal(); + } + } + /> + + ); +} +``` diff --git a/packages/docs/pages/integrating-wallets/leap-metamask-comos-snap.mdx b/packages/docs/pages/integrating-wallets/leap-metamask-comos-snap.mdx new file mode 100644 index 000000000..69d259890 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/leap-metamask-comos-snap.mdx @@ -0,0 +1,36 @@ +# How to Add Leap Metamask Cosmos Snap to CosmosKit + +- `@cosmos-kit/leap-metamask-cosmos-snap` + +`@cosmos-kit/leap-metamask-cosmos-snap` export wallets for connecting to the leap cosmos snap in metamask + +## add `@cosmos-kit/leap-metamask-cosmos-snap` + +``` +yarn add @cosmos-kit/leap-metamask-cosmos-snap +``` + +## import the wallets + +```js +import { wallets } from "@cosmos-kit/leap-metamask-cosmos-snap"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/leap.mdx b/packages/docs/pages/integrating-wallets/leap.mdx new file mode 100644 index 000000000..e6d8abdbe --- /dev/null +++ b/packages/docs/pages/integrating-wallets/leap.mdx @@ -0,0 +1,45 @@ +# How to Add Leap Wallet to CosmosKit + +There are three packages for leap + +- `@cosmos-kit/leap` +- `@cosmos-kit/leap-extension` +- `@cosmos-kit/leap-mobile` +- `@cosmos-kit/leap-metamask-cosmos-snap` + +`@cosmos-kit/leap` export all available leap wallets, while if you only want to add a particular one, choose `@cosmos-kit/leap-extension` or `@cosmos-kit/leap-mobile` or `@cosmos-kit/leap-metamask-cosmos-snap` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/leap` for example + +## add `@cosmos-kit/leap` + +``` +yarn add @cosmos-kit/leap +``` + +## import the wallets + +```js +import { wallets as leap } from "@cosmos-kit/leap"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/ledger.mdx b/packages/docs/pages/integrating-wallets/ledger.mdx new file mode 100644 index 000000000..6f23e2703 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/ledger.mdx @@ -0,0 +1,52 @@ +# How to Add Ledger to CosmosKit + +## Prerequisites + +1. Connect your Ledger device via an USB cable and unlock it. +2. Open the Cosmos app in Ledger, which shows `Cosmos Ready` in the screen. + +## Browser Support + +This package uses the [WebUSB](https://caniuse.com/webusb) API to connect to Ledger devices. +We recommend using the latest version of Chrome and Chrome Android. + +- https://developer.mozilla.org/en-US/docs/Web/API/USB/getDevices +- https://developer.mozilla.org/en-US/docs/Web/API/USB/requestDevice + +## Add `@cosmos-kit/ledger` + +```sh +# npm +npm i @cosmos-kit/ledger + +# pnpm +pnpm i @cosmos-kit/ledger + +# yarn +yarn add @cosmos-kit/ledger +``` + +## Import the wallets + +```js +import { wallets as ledger } from "@cosmos-kit/ledger"; +``` + +## Add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/ninji.mdx b/packages/docs/pages/integrating-wallets/ninji.mdx new file mode 100644 index 000000000..013e114d2 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/ninji.mdx @@ -0,0 +1,43 @@ +# How to Add Ninji Wallet to CosmosKit + +There are two packages for ninji + +- `@cosmos-kit/ninji` +- `@cosmos-kit/ninji-extension` + +`@cosmos-kit/ninji` export all available ninji wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/ninji-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/ninji` for example + +## add `@cosmos-kit/ninji` + +``` +yarn add @cosmos-kit/ninji +``` + +## import the wallets + +```js +import { wallets as ninji } from "@cosmos-kit/ninji"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/okto.mdx b/packages/docs/pages/integrating-wallets/okto.mdx new file mode 100644 index 000000000..dbe303edd --- /dev/null +++ b/packages/docs/pages/integrating-wallets/okto.mdx @@ -0,0 +1,38 @@ +# How to Add Okto Wallet to CosmosKit + +There is one package for Okto + +- `@cosmos-kit/okto-extension` + +> Note: This package exports `wallets` and it's an array of `MainWalletBase`. + +## add `@cosmos-kit/okto-extension` + +``` +yarn add @cosmos-kit/okto +``` + +## import the wallets + +```js +import { wallets as okto } from "@cosmos-kit/okto"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/okx.mdx b/packages/docs/pages/integrating-wallets/okx.mdx new file mode 100644 index 000000000..b8bf5f74b --- /dev/null +++ b/packages/docs/pages/integrating-wallets/okx.mdx @@ -0,0 +1,43 @@ +# How to Add Okx Wallet to CosmosKit + +There are two packages for okxwallet + +- `@cosmos-kit/okxwallet` +- `@cosmos-kit/okxwallet-extension` + +`@cosmos-kit/okxwallet` export all available okxwallet wallets, while if you only want to add a particular one, choose `@cosmos-kit/okxwallet-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/okxwallet` for example + +## install `@cosmos-kit/okxwallet` + +``` +yarn add @cosmos-kit/okxwallet +``` + +## import the wallets + +```js +import { wallets as okxwallet } from "@cosmos-kit/okxwallet"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/omni.mdx b/packages/docs/pages/integrating-wallets/omni.mdx new file mode 100644 index 000000000..272ebbe05 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/omni.mdx @@ -0,0 +1,43 @@ +# How to Add Omni Wallet to CosmosKit + +There are two packages for omni + +- `@cosmos-kit/omni` +- `@cosmos-kit/omni-mobile` + +`@cosmos-kit/omni` export all available omni wallets (currently only mobile available), while if you only want to add a particular one, choose `@cosmos-kit/omni-mobile` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/omni` for example + +## add `@cosmos-kit/omni` + +``` +yarn add @cosmos-kit/omni +``` + +## import the wallets + +```js +import { wallets as omni } from "@cosmos-kit/omni"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/shell.mdx b/packages/docs/pages/integrating-wallets/shell.mdx new file mode 100644 index 000000000..8b262cbf9 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/shell.mdx @@ -0,0 +1,43 @@ +# How to Add Shell Wallet to CosmosKit + +There are three packages for shell + +- `@cosmos-kit/shell` +- `@cosmos-kit/shell-extension` + +`@cosmos-kit/shell` export all available shell wallets, while if you only want to add a particular one, choose `@cosmos-kit/shell-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/shell` for example + +## install `@cosmos-kit/shell` + +``` +yarn add @cosmos-kit/shell +``` + +## import the wallets + +```js +import { wallets as shell } from "@cosmos-kit/shell"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/station.mdx b/packages/docs/pages/integrating-wallets/station.mdx new file mode 100644 index 000000000..90cf4b0df --- /dev/null +++ b/packages/docs/pages/integrating-wallets/station.mdx @@ -0,0 +1,43 @@ +# How to Add Station Wallet to CosmosKit + +There are two packages for station + +- `@cosmos-kit/station` +- `@cosmos-kit/station-extension` + +`@cosmos-kit/station` export all available station wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/station-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/station` for example + +## add `@cosmos-kit/station` + +``` +yarn add @cosmos-kit/station +``` + +## import the wallets + +```js +import { wallets as station } from "@cosmos-kit/station"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/tailwind.mdx b/packages/docs/pages/integrating-wallets/tailwind.mdx new file mode 100644 index 000000000..5dc41d501 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/tailwind.mdx @@ -0,0 +1,43 @@ +# How to add TAILWIND Wallet to CosmosKit + +There are two packages for okxwallet + +- `@cosmos-kit/tailwind` +- `@cosmos-kit/tailwind-extension` + +`@cosmos-kit/tailwind` export all available okxwallet wallets, while if you only want to add a particular one, choose `@cosmos-kit/tailwind-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/tailwind` for example + +## install `@cosmos-kit/tailwind` + +```sh +yarn add @cosmos-kit/tailwind +``` + +## import the wallets + +```ts +import { wallets as tailwindWallet } from "@cosmos-kit/tailwind"; +``` + +## add to your provider + +```ts +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/trust.mdx b/packages/docs/pages/integrating-wallets/trust.mdx new file mode 100644 index 000000000..a3b054c77 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/trust.mdx @@ -0,0 +1,44 @@ +# How to Add Trust Wallet to CosmosKit + +There are three packages for Trust + +- `@cosmos-kit/trust` +- `@cosmos-kit/trust-extension` (NOT recommended) +- `@cosmos-kit/trust-mobile` + +> 💡 According to [Trust Doc](https://developer.trustwallet.com/developer/develop-for-trust/browser-extension), Trust Wallet Browser Extension currently supports only Ethereum & EVM chains, and support for Cosmos is still in progress. Because of the block from wallet side, `@cosmos-kit/trust-extension` is not fully implemented yet and we don't recommend to use it for now. +> +> Because of the reason above, only `@cosmos-kit/trust-mobile` is included in `@cosmos-kit/trust` so far. + +Take `@cosmos-kit/trust` for example + +## install `@cosmos-kit/trust` + +``` +yarn add @cosmos-kit/trust +``` + +## import the wallets + +```js +import { wallets as trust } from "@cosmos-kit/trust"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/vectis.mdx b/packages/docs/pages/integrating-wallets/vectis.mdx new file mode 100644 index 000000000..9e410daaf --- /dev/null +++ b/packages/docs/pages/integrating-wallets/vectis.mdx @@ -0,0 +1,43 @@ +# How to Add Vectis Wallet to CosmosKit + +There are two packages for vectis + +- `@cosmos-kit/vectis` +- `@cosmos-kit/vectis-extension` + +`@cosmos-kit/vectis` export all available vectis wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/vectis-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/vectis` for example + +## add `@cosmos-kit/vectis` + +``` +yarn add @cosmos-kit/vectis +``` + +## import the wallets + +```js +import { wallets as vectis } from "@cosmos-kit/vectis"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/web3auth.mdx b/packages/docs/pages/integrating-wallets/web3auth.mdx new file mode 100644 index 000000000..74a8aca89 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/web3auth.mdx @@ -0,0 +1,93 @@ +# How to Add Web3Auth Wallet to CosmosKit + +> ### Note! This package is still on progress. it doesn't work on mobile yet and it's pretty vulnerable to XSS attacks. + +There is one package for web3auth + +- `@cosmos-kit/web3auth` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +## install `@cosmos-kit/web3auth` + +``` +yarn add @cosmos-kit/web3auth +``` + +## import the wallets + +```js +import { makeWeb3AuthWallets, PromptSign } from "@cosmos-kit/web3auth"; +import { useMemo, useState } from "react"; +``` + +## set up web3auth account to retrieve a client ID + +https://web3auth.io/docs/dashboard-setup/ + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + const [web3AuthPrompt, setWeb3AuthPrompt] = useState<{ + signData: SignData + resolve: (approved: boolean) => void + } | undefined>(); + const web3AuthWallets = useMemo( + () => + makeWeb3AuthWallets({ + loginMethods: [ + // add whichever login methods you want to support + { + provider: "google", + name: "Google", + logo: "https://upload.wikimedia.org/wikipedia/commons/5/53/Google_%22G%22_Logo.svg", + }, + ], + // get client ID and network from your web3auth dashboard: + // https://web3auth.io/docs/dashboard-setup/get-client-id + client: { + clientId: "localhostid", + web3AuthNetwork: "testnet", + }, + // set state to show data to sign and approve/reject buttons in modal + promptSign: async (_, signData) => + new Promise((resolve) => + setWeb3AuthPrompt({ + signData, + resolve: (approved) => { + setWeb3AuthPrompt(undefined); + resolve(approved); + }, + }) + ), + }), + [] + ); + + return ( + + + + {/* wallet signature prompt */} + web3AuthPrompt?.resolve(false)} + > + web3AuthPrompt?.resolve(true)} + reject={() => web3AuthPrompt?.resolve(false)} + /> + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/integrating-wallets/xdefi.mdx b/packages/docs/pages/integrating-wallets/xdefi.mdx new file mode 100644 index 000000000..89a22b761 --- /dev/null +++ b/packages/docs/pages/integrating-wallets/xdefi.mdx @@ -0,0 +1,43 @@ +# How to Add Xdefi Wallet to CosmosKit + +There are two packages for xdefi + +- `@cosmos-kit/xdefi` +- `@cosmos-kit/xdefi-extension` + +`@cosmos-kit/xdefi` export all available xdefi wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/xdefi-extension` + +> Note: all these packages export `wallets` and it's an array of `MainWalletBase` + +Take `@cosmos-kit/xdefi` for example + +## add `@cosmos-kit/xdefi` + +``` +yarn add @cosmos-kit/xdefi +``` + +## import the wallets + +```js +import { wallets as xdefi } from "@cosmos-kit/xdefi"; +``` + +## add to your provider + +```js +function MyCosmosApp({ Component, pageProps }: AppProps) { + return ( + + + + ); +} + +export default MyCosmosApp; +``` diff --git a/packages/docs/pages/migration-to-v2.mdx b/packages/docs/pages/migration-to-v2.mdx new file mode 100644 index 000000000..85824d8a5 --- /dev/null +++ b/packages/docs/pages/migration-to-v2.mdx @@ -0,0 +1,476 @@ +# Migration from V1 to V2 + +## Major Changes + +1. `ChakraUI` Removed + +In CosmosKit V2, we discard the dependency on `ChakraUI` due to numerous runtime errors and the cost of CSS-in-JS. + +Main changes lie in `@cosmos-kit/react`, where the default modal locates. All the modal components are imported from `@interchain-ui/react`, which is our UI Kit in Cosmology. The latest `@interchain-ui/react` discards `ChakraUI` and instead adopts a pure CSS styling solution through a package called `vanilla-extract`. + +2. Build Process Changed + +In CosmosKit V2, we used pure `tsc` to compile CommonJS, ESM (es2022) instead of `babel`. Also, `.js` and `.d.ts` files are no longer to be separated in different folders, in this way non-index sources can easily find its corresponding types. + +## Migration Guides + +1. In CosmosKit V2, we require developers to install `@interchain-ui/react` and require **`import "@interchain-ui/react/styles"`** in your top-level route/layout if you are using our default modal in `@cosmos-kit/react`. i.e. in [`_app.tsx`](https://github.com/cosmology-tech/cosmos-kit/blob/af05600fd1913e0d3eb1bbef05382c1a06c6af69/packages/example/pages/_app.tsx#L4) for next project. + +2. We don't export `defaultTheme` anymore in `@cosmos-kit/react` in CosmosKit V2. + +3. `WrappedWithChakra` and `modalTheme` is removed in properties of `ChainProvider` from `@cosmos-kit/react`. + +4. `Web3Auth` wallet instance import has been replaced by constructing the wallet instance with a wallet generator function. In this way the web3auth implementation becomes much more secure, and also makes it support any of the login providers. See details [here](/integrating-wallets/web3auth) + +## Customizing the default modal + +Customizing the default modal styles is done through `modalTheme` prop of `` + +We are currently providing 2 ways to customize the default modal: + +1. Overriding the theme object: + +By using the `modalTheme.themeDefs` and `modalTheme.customTheme`, you can override all of the theme tokens however you want + +```TSX + + + {children} + +``` + +The full object shape of `themeDefs[index].vars` is as below + +```json +{ + colors: { + primary: ``, + body: ``, + background: ``, + link: ``, + linkHover: ``, + text: ``, + textSecondary: ``, + textDanger: ``, + textWarning: ``, + textPlaceholder: ``, + rewardBg: ``, + rewardContent: ``, + cardBg: ``, + inputBorder: ``, + inputBg: ``, + inputDangerBorder: ``, + inputDangerBg: ``, + inputDisabledBg: ``, + inputDisabledText: ``, + progressBg: ``, + progressValue: ``, + progressCursor: ``, + divider: ``, + menuItemBg: ``, + menuItemBgHovered: ``, + menuItemBgActive: ``, + skeletonBg: ``, + black: ``, + blackPrimary: ``, + white: ``, + transparent: ``, + current: ``, + whiteAlpha50: ``, + whiteAlpha100: ``, + whiteAlpha200: ``, + whiteAlpha300: ``, + whiteAlpha400: ``, + whiteAlpha500: ``, + whiteAlpha600: ``, + whiteAlpha700: ``, + whiteAlpha800: ``, + whiteAlpha900: ``, + blackAlpha50: ``, + blackAlpha100: ``, + blackAlpha200: ``, + blackAlpha300: ``, + blackAlpha400: ``, + blackAlpha500: ``, + blackAlpha600: ``, + blackAlpha700: ``, + blackAlpha800: ``, + blackAlpha900: ``, + gray50: ``, + gray100: ``, + gray200: ``, + gray300: ``, + gray400: ``, + gray500: ``, + gray600: ``, + gray700: ``, + gray800: ``, + gray900: ``, + red50: ``, + red100: ``, + red200: ``, + red300: ``, + red400: ``, + red500: ``, + red600: ``, + red700: ``, + red800: ``, + red900: ``, + orange50: ``, + orange100: ``, + orange200: ``, + orange300: ``, + orange400: ``, + orange500: ``, + orange600: ``, + orange700: ``, + orange800: ``, + orange900: ``, + yellow50: ``, + yellow100: ``, + yellow200: ``, + yellow300: ``, + yellow400: ``, + yellow500: ``, + yellow600: ``, + yellow700: ``, + yellow800: ``, + yellow900: ``, + green50: ``, + green100: ``, + green200: ``, + green300: ``, + green400: ``, + green500: ``, + green600: ``, + green700: ``, + green800: ``, + green900: ``, + blue50: ``, + blue100: ``, + blue200: ``, + blue300: ``, + blue400: ``, + blue500: ``, + blue600: ``, + blue700: ``, + blue800: ``, + blue900: ``, + primary50: ``, + primary100: ``, + primary200: ``, + primary300: ``, + primary400: ``, + primary500: ``, + primary600: ``, + primary700: ``, + primary800: ``, + primary900: ``, + purple50: ``, + purple100: ``, + purple200: ``, + purple300: ``, + purple400: ``, + purple500: ``, + purple600: ``, + purple700: ``, + purple800: ``, + purple900: ``, + }, + font: { + body: ``, + }, + space: { + "0": ``, + "1": ``, + "2": ``, + "3": ``, + "4": ``, + "5": ``, + "6": ``, + "7": ``, + "8": ``, + "9": ``, + "10": ``, + "11": ``, + "12": ``, + "13": ``, + "14": ``, + "15": ``, + "16": ``, + "17": ``, + "18": ``, + "19": ``, + "20": ``, + "21": ``, + "22": ``, + "23": ``, + "24": ``, + "25": ``, + "26": ``, + "27": ``, + "28": ``, + "29": ``, + "30": ``, + auto: ``, + full: ``, + fit: ``, + max: ``, + min: ``, + viewHeight: ``, + viewWidth: ``, + none: ``, + }, + borderWidth: { + none: ``, + sm: ``, + base: ``, + md: ``, + lg: ``, + xl: ``, + }, + borderStyle: { + none: ``, + solid: ``, + dotted: ``, + dashed: ``, + groove: ``, + ridge: ``, + hidden: ``, + double: ``, + inset: ``, + outset: ``, + unset: ``, + }, + boxShadow: { + xs: ``, + sm: ``, + base: ``, + md: ``, + lg: ``, + xl: ``, + "2xl": ``, + inset: ``, + primaryOutline: ``, + none: ``, + "dark-lg": ``, + }, + radii: { + none: ``, + sm: ``, + base: ``, + md: ``, + lg: ``, + xl: ``, + "2xl": ``, + "3xl": ``, + "4xl": ``, + full: ``, + }, + letterSpacing: { + tighter: ``, + tight: ``, + normal: ``, + wide: ``, + wider: ``, + widest: ``, + }, + lineHeight: { + normal: ``, + none: ``, + shorter: ``, + short: ``, + base: ``, + tall: ``, + taller: ``, + }, + fontWeight: { + hairline: ``, + thin: ``, + light: ``, + normal: ``, + medium: ``, + semibold: ``, + bold: ``, + extrabold: ``, + black: ``, + }, + fontSize: { + "3xs": ``, + "2xs": ``, + xs: ``, + sm: ``, + md: ``, + lg: ``, + xl: ``, + "2xl": ``, + "3xl": ``, + "4xl": ``, + "5xl": ``, + "6xl": ``, + "7xl": ``, + "8xl": ``, + "9xl": ``, + "10xl": ``, + "11xl": ``, + "12xl": ``, + "13xl": ``, + "14xl": ``, + "15xl": ``, + }, + zIndex: { + "0": ``, + "10": ``, + "20": ``, + "30": ``, + "40": ``, + "50": ``, + "100": ``, + auto: ``, + }, +} +``` + +2. Overriding css vars specific to a component. + +This is done through the `modalTheme.overrides` prop, which is a record with keys corresponding to a slot names and values are objects of overridable property name and its value in each theme mode. + +```json +{ + : { + : { light: , dark: } + } +} +``` + +Example: +```TSX + + {children} + +``` + +Supported overridable slots/components and their overridable state/attributes are: + +```json +{ + "button": [ + "bg", + "hoverBg", + "color", + "hoverColor" + ], + "clipboard-copy-text": [ + "color", + "borderColor" + ], + "connect-modal": [ + "bg", + "shadow" + ], + "connect-modal-install-button": [ + "bg", + "borderColor", + "color", + "shadow" + ], + "connect-modal-head-title": [ + "color" + ], + "connect-modal-wallet-button": [ + "color", + "bg", + "focusedBg", + "hoverBg", + "focusedShadow", + "hoverShadow", + ], + "connect-modal-wallet-button-label": [ + "color" + ], + "connect-modal-wallet-button-sublogo": [ + "bg", + "borderColor" + ], + "connect-modal-qr-code": [ + "bg", + "color", + "borderColor", + "shadow" + ], + "connect-modal-qr-code-shadow": [ + "bg" + ], + "connect-modal-qr-code-error": [ + "bg" + ], + "connect-modal-qr-code-error-button": [ + "bg", + "color", + "shadow" + ], + "connect-modal-qr-code-loading": [ + "bg" + ] +} +``` + +Additionally, you can customize the base modal class names using the follow properties of ``'s `modalTheme` prop: + +```ts +type ModalCustomizationProps = { + modalContainerClassName?: string; + modalContentClassName?: string; + modalChildrenClassName?: string; + modalContentStyles?: React.CSSProperties; +}; +``` + +## Improvement in bundle size in v2 + +Since we dropped Chakra UI to build our own foundational UI system. The bundle size dropped a lot. +Here are some screenshots and bundle size improvement + +### Core UI size improvement + +In the new package `@interchain-ui/react`, package size dropped from 362kb to 159kb (minified + gzipped) + +![Old](../public/bundle-size-screenshots/old-cosmology-ui.png) +![New](../public/bundle-size-screenshots/new-interchain-ui.png) + +### Cosmos Kit size improvement + +Additionally, we also reduce the bundle size of cosmos kit by significant amount, from 386kb to just 28kb (minified + gzipped) +![Old](../public/bundle-size-screenshots/old-v1-cosmos-kit.png) +![New](../public/bundle-size-screenshots/new-v2-cosmos-kit.png) + +We're pretty happy with the improvement in V2 so far and looking to improve it much more. diff --git a/packages/docs/pages/provider/_meta.json b/packages/docs/pages/provider/_meta.json new file mode 100644 index 000000000..cfbaa49ae --- /dev/null +++ b/packages/docs/pages/provider/_meta.json @@ -0,0 +1,3 @@ +{ + "chain-provider": "Chain Provider" +} \ No newline at end of file diff --git a/packages/docs/pages/provider/chain-provider.mdx b/packages/docs/pages/provider/chain-provider.mdx new file mode 100644 index 000000000..93e05716e --- /dev/null +++ b/packages/docs/pages/provider/chain-provider.mdx @@ -0,0 +1,514 @@ +Chain Provider provides necessary information for [hooks](/hooks). + +There are two `ChainProvider` from two packages (`@cosmos-kit/react` and `@cosmos-kit/react-lite`) respectively. They are basically the same only except that `ChainProvider` from `@cosmos-kit/react` has more properties of `default modal` (See [Properties for default modal ](#properties-for-default-modal) below). + +> Note: `preferredSignType` in [`signerOptions`](#signeroptions) determines which signer to use when signing document. By default using `amino` type. + +## Required Properties + +These properties are shared by `ChainProvider`s from `@cosmos-kit/react` and `@cosmos-kit/react-lite`. + +### chains + +Required property of type `(Chain | string)[]`. + +It defines supported chains. Any actions involving chains beyound it might cause errors. + +If chain has been registered in `@chain-registry/client`, you can also simply provide chain name (type `string`) here and it'll fetch the chain information automatically. + +See [`Chain` schema](https://github.com/cosmos/chain-registry/blob/master/chain.schema.json). + +#### adding localnet and testnets + +Example of adding `localosmosis` + +`_app.tsx`: + +```ts +import { ChainProvider } from '@cosmos-kit/react'; +import { wallets } from '@cosmos-kit/keplr'; +import { assets, chains } from 'chain-registry'; +import { getSigningCosmosClientOptions } from 'osmojs'; +import { GasPrice } from '@cosmjs/stargate'; + +import { SignerOptions } from '@cosmos-kit/core'; +import { Chain, AssetList } from '@chain-registry/types'; +import { localosmosis, localosmosisAssets } from '../config/localosmosis'; + +function App({ Component, pageProps }: AppProps) { + + const localosmosis: Chain = {...}; // with chain_name: 'localosmosis' + const localosmosisAssets: AssetList = {...}; // with chain_name: 'localosmosis' + + const signerOptions: SignerOptions = { + signingStargate: (_chain: Chain) => { + return getSigningCosmosClientOptions(); + }, + signingCosmwasm: (chain: Chain) => { + switch (chain.chain_name) { + case 'localosmosis': + return { + gasPrice: GasPrice.fromString('0.0025uosmo') + }; + } + } + }; + return ( + + + + ); +} +``` + +### wallets + +Required property of type `MainWalletBase[]` + +It defines supported wallets. There are several wallets out of box. + +```ts +import { wallets as keplrWallet } from "@cosmos-kit/keplr"; +import { wallets as cosmostationWallets } from "@cosmos-kit/cosmostation"; +import { wallets as leapwallets } from "@cosmos-kit/leap"; +``` + +If you don't like the default wallet settings such as icon, app name (they would be displayed on default modal), you can choose to provide your own settings by importing wallets like this. + +```ts +import { KeplrExtensionWallet, KeplrMobileWallet } from '@cosmos-kit/keplr'; + +const keplrExtensionInfo: Wallet = {...}; +const keplrMobileInfo: Wallet = {...}; + +const keplrExtension = new KeplrExtensionWallet(keplrExtensionInfo); +const KeplrMobile = new KeplrMobileWallet(keplrMobileInfo); + +export const wallets = [keplrExtension, KeplrMobile]; +``` + +In addition, you can integrate new wallets in a few steps. + +🔌 [How to integrate new wallets into CosmosKit](/integrating-wallets/adding-new-wallets) + +### walletconnectOptions + +Required when `mobile` wallets dependent on `@comos-kit/walletconnect`(implements walletconnect v2 connection) are added in [`wallets`](#wallets). + +**Type:** `WalletConnectOptions` + +```tsx +export interface WalletConnectOptions { + signClient: { projectId: string } & SignClientTypes.Options; +} +``` + +`projectId` is required and can be obtained from [WalletConnect Cloud](https://cloud.walletconnect.com/sign-in). Create (or use an existing) dapp project and copy its associated project id. + +## Optional Properties + +### assetLists + +Optional property of type `AssetList[]` (comes from `chain-registry`) + +It provides chains related assets information. If not provided, will fetch assets information with `@chain-registry/client` according to the chain name provided in [`chains`](#chains). + +See [`AssetList` schema](https://github.com/cosmos/chain-registry/blob/master/assetlist.schema.json). + +### walletModal + +Optional in most cases (Exception see [useChain](/hooks/use-chain)). + +**Type**: `({ isOpen, setOpen, walletRepo }: WalletModalProps) => JSX.Element` + +Basically the order of wallets follows the order of property `wallets` in ChainProvider, except that all mobiles are moved to the back. + +You can also define your own modal component with required props. + +#### customize modal with `walletModal` + +> Suggest customizing modal with [`modalViews`](#modalviews) instead if you only need to customize modal UI without involving any customized data logic. [`modalViews`](#modalviews) provides an easy and fast way to partially change the default modal UI. + +Example of using self-defined modal. + +`_app.tsx`: + +```tsx +import * as React from 'react'; + +import { ChainProvider } from '@cosmos-kit/react'; + +// Define Modal Component +const MyModal = ({ isOpen, setOpen, walletRepo, theme }: WalletModalPropsV2) => { + function onCloseModal() { + setOpen(false); + } + + return ( + + + Choose Wallet + + + {walletRepo.wallets.map(({ walletName, connect }) => ( + + ))} + + + + ); +}; + +function CosmosApp() { + return ( + + + + ); +} +``` + +### defaultNameService + +**Type:** `NameServiceName` = `string`; + +Currently two name services are registered: `'icns'` and `'stargaze'`. The default name service is `icns`. This property is only used in `getNameService` of `useManager` when prarameter `chainName` is undefined, and in `useNameService` when the prarameter `name` is not provided. Otherwise it will return the name service object corresponding to provided chain. Therefore it won't affect `getNameService` method returned by `useChain`, since `chainName` is always provide in `useChain`. + +### endpointOptions + +Optional property. Define preferred endpoints for each chain. + +**Type:** `EndpointOptions` + +> Note: From `@cosmos-kit/core@1.2.1` `EndpointOptions` type changes a little bit + +```tsx +export type ChainName = string; + +export interface ExtendedHttpEndpoint extends HttpEndpoint { + isLazy?: boolean; +} + +export interface Endpoints { + rpc?: (string | ExtendedHttpEndpoint)[]; + rest?: (string | ExtendedHttpEndpoint)[]; + isLazy?: boolean; +} + +// Expired Type: `type EndpointOptions = Record` + +export interface EndpointOptions { + isLazy?: boolean; + endpoints?: Record; +} +``` + +**Example:** + +```tsx + +``` + +#### isLazy + +**`isLazy` Explanation:** + +`isLazy` is used to control endpoints validation (get the fastest one when first validating). + +- When `isLazy` is `false`, will do endpoints validation +- When `isLazy` is `true`, will **disable** endpoints validation +- When `isLazy` is `undefined`, will inherit higher level explicitly set `isLazy`. If none is explicitly set, will do endpoints validation + +There are four levels of `isLazy` setting. + +**Four Levels of `isLazy`:** + +1. Global `isLazy`: `isLazy` in `EndpointOptions` is the highest level with the lowerst priority, which is meant to globally control all endpoints. + +2. Chain `isLazy`: `isLazy` in `Endpoints` will control all endpoints for a particular chain. If `isLazy` in `EndpointOptions` and `isLazy` in `Endpoints` are all set and don't agree, the latter predominates. + +3. Endpoint `isLazy`: `isLazy` in `ExtendedHttpEndpoint` only controls the one in `ExtendedHttpEndpoint` object. For signing or broadcasting a transaction, this one is the lowerst level and with the highest priority. + +4. Parameter `isLazy`: `isLazy` in `getRpcEndpoint` and `getRestEndpoint` prarameters. It also globally controls all endpoints. (Note: this one only affects getting endpoint functions with the highest priority, but won't affect signing or broadcasting a transaction.) + +The calculation of final `isLazy` can be seen [here](https://github.com/cosmology-tech/cosmos-kit/blob/main/packages/core/src/utils/endpoint.ts#L32-L59). + +**`isLazy` Examples:** + +- Disabling all endpoints validation + +```tsx +endpointOptions={{ + isLazy: true +}} +``` + +- Disabling `cosmoshub` endpoints validation + +```tsx +endpointOptions={{ + cosmoshub: { + isLazy: true + } +}} +``` + +- Disabling a particular endpoint validation + +```tsx +endpointOptions={{ + cosmoshub: { + rpc: [{ + url: 'http://test.com', + isLazy: true, + }] + } +}} +``` + +### sessionOptions + +Define connection session options. + +**Type:** `SessionOptions` + +```tsx +export interface SessionOptions { + duration: number; // ms + callback?: () => void; // when session expires +} +``` + +**Default:** + +```tsx +const sessionOptions: SessionOptions = { + duration: 1800000, // half an hour + callback: () => { + this.mainWallets.forEach((w) => w.disconnectAll(false)); + window?.localStorage.removeItem("cosmos-kit@2:core//current-wallet"); + }, +}; +``` + +### signerOptions + +Optional property. + +```ts +import * as React from "react"; + +import { Chain } from "@chain-registry/types"; +import { chains } from "chain-registry"; +import { GasPrice } from "@cosmjs/stargate"; +import { getSigningCosmosClientOptions } from "interchain"; +import { SignerOptions } from "@cosmos-kit/core"; +import { ChainProvider } from "@cosmos-kit/react"; +import { wallets } from '@cosmos-kit/keplr'; + +// construct signer options +const signerOptions: SignerOptions = { + signingStargate: (chain: Chain) => { + // return corresponding stargate options or undefined + return getSigningCosmosClientOptions(); + }, + signingCosmwasm: (chain: Chain) => { + // return corresponding cosmwasm options or undefined + switch (chain.chain_name) { + case "osmosis": + return { + gasPrice: GasPrice.fromString("0.0025uosmo"), + }; + case "juno": + return { + gasPrice: GasPrice.fromString("0.0025ujuno"), + }; + } + }, + preferredSignType: (chain: Chain) => { + // `preferredSignType` determines which signer is preferred for `getOfflineSigner` method. By default `amino`. It might affect the `OfflineSigner` used in `signingStargateClient` and `signingCosmwasmClient`. But if only one signer is provided, `getOfflineSigner` will always return this signer, `preferredSignType` won't affect anything. + return 'amino'; + } +}; + +function CosmosApp() { + return ( + + + + ); +} +``` + +### logLevel + +Optional property. By default `WARN`. + +**Type:** `'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'NONE'` + +Will disable logs lower than the value of `logLevel` (The log level order is the same with the order above). + +If `logLevel` is `NONE`, no logs would be printed. + +### throwErrors + +Optional property. By default `false`. + +**Type:** `boolean | 'connect_only'` + +If set `true`, will throw error when wallet status to be `WalletStatus.Error`, `WalletStatus.Rejected` or `WalletStatus.NotExist`, or wallet client status to be `State.Error`. + +If set `connect_only`, will only throw connect errors. + +### subscribeConnectEvents + +Optional property. By default `true`. + +**Type:** `boolean` + +If set `false`, will NOT subscribe registered `connectEventNamesOnWindow` and `connectEventNamesOnClient` in [wallet registry](/integrating-wallets/adding-new-wallets#optional-properties). + +## Optional Properties Only for Default Modal + +These properties **only** exist in `ChainProvider` from `@cosmos-kit/react`, and only counts when property [`walletModal`](#walletmodal) is `undefined`. + +### modalTheme + +Optional property to customize default modal theme. + +**Type** + +```tsx +type ThemeCustomizationProps = Pick< + // This type comes from @interchain-ui/react + ThemeProviderProps, + "defaultTheme" | "overrides" | "themeDefs" | "customTheme" +>; +``` + +### modalViews + +Optional property of type `ModalViews`. + +**Type** + +```tsx +type ModalViewImpl = { + head: React.ReactNode; + content: React.ReactNode; +}; + +type ModalViewImplGetter = ( + props: WalletViewProps | WalletListViewProps +) => ModalViewImpl; + +type ModalViews = { + Connecting?: (props: WalletViewProps) => ModalViewImplGetter; + Connected?: (props: WalletViewProps) => ModalViewImplGetter; + Error?: (props: WalletViewProps) => ModalViewImplGetter; + NotExist?: (props: WalletViewProps) => ModalViewImplGetter; + Rejected?: (props: WalletViewProps) => ModalViewImplGetter; + QRCode?: (props: WalletViewProps) => ModalViewImplGetter; +} & { + WalletList?: (props: WalletListViewProps) => JSX.Element; +}; + +export interface WalletViewProps { + onClose: () => void; + onReturn: () => void; + wallet: ChainWalletBase; +} + +export interface WalletListViewProps { + onClose: () => void; + wallets: ChainWalletBase[]; +} +``` + +#### customize modal with `modalViews` + +Example of using self-defined modal views. + +`_app.tsx`: + +```tsx +import * as React from 'react'; + +import { ChainProvider } from '@cosmos-kit/react'; + +// Define Modal Connected View Component +const ConnectedView = ({ + onClose, + onReturn, + wallet, +}: WalletViewProps) => { + const { + walletInfo: { prettyName }, + username, + address, + } = wallet; + + return
{`${prettyName}/${username}/${address}`}
; +}; + +function CosmosApp() { + return ( + + + + ); +} +``` + +### modalOptions + +- `mobile.displayQRCodeEveryTime` + + By default `false`. When set `true`, it'll cause all existing pairings be removed everytime wallet is disconnected. It corresponds to the `DisconnectOptions.walletconnect.removeAllPairings` in `disconnect` method. + +### includeAllWalletsOnMobile + +Optional property. By default `false`, which means on mobile only wallets with registry value of `mobileDisabled` (or returned value of `mobileDisabled` function) is `false` or `undefined` be displayed on wallet list page of default modal. + +For example, most `extension` wallets are set `mobileDisabled` `true`. Therefore you can't see `extension` wallets on mobile by default. If you want to see all wallets on mobile, set `includeAllWalletsOnMobile` `true`; diff --git a/packages/docs/public/android-icon-192x192.png b/packages/docs/public/android-icon-192x192.png new file mode 100644 index 000000000..51a1e7cb7 Binary files /dev/null and b/packages/docs/public/android-icon-192x192.png differ diff --git a/packages/docs/public/apple-icon-180x180.png b/packages/docs/public/apple-icon-180x180.png new file mode 100644 index 000000000..d0104d5c4 Binary files /dev/null and b/packages/docs/public/apple-icon-180x180.png differ diff --git a/packages/docs/public/bundle-size-screenshots/new-interchain-ui.png b/packages/docs/public/bundle-size-screenshots/new-interchain-ui.png new file mode 100644 index 000000000..6b8bdd15c Binary files /dev/null and b/packages/docs/public/bundle-size-screenshots/new-interchain-ui.png differ diff --git a/packages/docs/public/bundle-size-screenshots/new-v2-cosmos-kit.png b/packages/docs/public/bundle-size-screenshots/new-v2-cosmos-kit.png new file mode 100644 index 000000000..39b66d919 Binary files /dev/null and b/packages/docs/public/bundle-size-screenshots/new-v2-cosmos-kit.png differ diff --git a/packages/docs/public/bundle-size-screenshots/old-cosmology-ui.png b/packages/docs/public/bundle-size-screenshots/old-cosmology-ui.png new file mode 100644 index 000000000..35e89f0ad Binary files /dev/null and b/packages/docs/public/bundle-size-screenshots/old-cosmology-ui.png differ diff --git a/packages/docs/public/bundle-size-screenshots/old-v1-cosmos-kit.png b/packages/docs/public/bundle-size-screenshots/old-v1-cosmos-kit.png new file mode 100644 index 000000000..73d4a56f7 Binary files /dev/null and b/packages/docs/public/bundle-size-screenshots/old-v1-cosmos-kit.png differ diff --git a/packages/docs/public/favicon copy.ico.sb-8992bd4b-4LqWuo b/packages/docs/public/favicon copy.ico.sb-8992bd4b-4LqWuo new file mode 100644 index 000000000..d7b1d76a3 Binary files /dev/null and b/packages/docs/public/favicon copy.ico.sb-8992bd4b-4LqWuo differ diff --git a/packages/docs/public/favicon-16x16.png b/packages/docs/public/favicon-16x16.png new file mode 100644 index 000000000..bbc93008c Binary files /dev/null and b/packages/docs/public/favicon-16x16.png differ diff --git a/packages/docs/public/favicon-32x32.png b/packages/docs/public/favicon-32x32.png new file mode 100644 index 000000000..483bf991e Binary files /dev/null and b/packages/docs/public/favicon-32x32.png differ diff --git a/packages/docs/public/favicon-96x96.png b/packages/docs/public/favicon-96x96.png new file mode 100644 index 000000000..eee1c6a71 Binary files /dev/null and b/packages/docs/public/favicon-96x96.png differ diff --git a/packages/docs/public/favicon.ico b/packages/docs/public/favicon.ico new file mode 100644 index 000000000..d7b1d76a3 Binary files /dev/null and b/packages/docs/public/favicon.ico differ diff --git a/packages/docs/public/ms-icon-144x144.png b/packages/docs/public/ms-icon-144x144.png new file mode 100644 index 000000000..6e9d63122 Binary files /dev/null and b/packages/docs/public/ms-icon-144x144.png differ diff --git a/packages/docs/seo/prepare.sh b/packages/docs/seo/prepare.sh new file mode 100755 index 000000000..b5daa862d --- /dev/null +++ b/packages/docs/seo/prepare.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +export S3_BUCKET=docs.cosmoskit.com + +(cd out && + find . -type f -name '*.html' | while read HTMLFILE; do + HTMLFILESHORT=${HTMLFILE:2} + # HTMLFILE_WITHOUT_INDEX=${HTMLFILESHORT::${#HTMLFILESHORT}-11} + + HTMLFILE_WITHOUT_INDEX=${HTMLFILESHORT//index.html/} + HTMLFILE_WITHOUT_HTML=${HTMLFILE_WITHOUT_INDEX//.html/} + + + # cp /about/index.html to /about + aws s3 cp s3://$S3_BUCKET/${HTMLFILESHORT} s3://$S3_BUCKET/$HTMLFILE_WITHOUT_HTML + echo aws s3 cp s3://$S3_BUCKET/${HTMLFILESHORT} s3://$S3_BUCKET/$HTMLFILE_WITHOUT_HTML + + if [ $? -ne 0 ]; then + echo "***** Failed renaming build to $S3_BUCKET (html)" + exit 1 + fi + done) diff --git a/packages/docs/seo/seo.js b/packages/docs/seo/seo.js new file mode 100644 index 000000000..497402f3d --- /dev/null +++ b/packages/docs/seo/seo.js @@ -0,0 +1,217 @@ +const fs = require('fs'); +const seo = require('../config/seo'); +const canonical = seo.canonical; +const siteInfo = require('../config/site'); +const PAGE_DIR = __dirname + '/../pages/'; +const pageObjects = {}; +const legalPageObjects = {}; + +const IGNORE = [ + '404', + '_document', + '_app', + 'api/hello', + 'app', + 'test-balances', + 'test-swaps' +]; + +// FOR NOW keep this stuff out +// later when you generate a sitemap page, you can categorize this in Legal +const LEGAL_FILES = [ + 'acceptable-use-policy', + 'brand-guidelines', + 'cookie-policy', + 'copyright-policy', + 'corporate-colors', + 'credits', + 'data-processing-addendum', + 'developer-terms-of-use', + 'logo-guidelines', + 'security-measures' +]; +const path = require('path'); + +const walkSync = (dir) => { + // Get all files of the current directory & iterate over them + const files = fs.readdirSync(dir); + files.forEach((file) => { + // Construct whole file-path & retrieve file's stats + const filePath = `${dir}${file}`; + const fileStat = fs.statSync(filePath); + + if (fileStat.isDirectory()) { + // Recurse one folder deeper + walkSync(`${filePath}/`); + } else { + // Construct this file's pathname excluding the "pages" folder & its extension + let cleanFileName = filePath + .substr(0, filePath.lastIndexOf('.')) + .replace(PAGE_DIR, ''); + + if (path.extname(filePath) !== '.js') { + return; + } + + // any index.js pages will be renamed to / + if (cleanFileName.match(/\/index$/) || cleanFileName === 'index') { + cleanFileName = cleanFileName.replace(/\/?index$/, ''); + } + + if (!IGNORE.includes(cleanFileName)) { + // Add this file to `pageObjects` + if (LEGAL_FILES.includes(cleanFileName)) { + legalPageObjects[`/${cleanFileName}`] = { + page: `/${cleanFileName}`, + lastModified: fileStat.mtime + }; + } else { + pageObjects[`/${cleanFileName}`] = { + page: `/${cleanFileName}`, + lastModified: fileStat.mtime + }; + } + } + } + }); +}; + +// Start recursion to fill `pageObjects` +walkSync(PAGE_DIR); + +function formatDate(date) { + var d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) month = '0' + month; + if (day.length < 2) day = '0' + day; + + return [year, month, day].join('-'); +} + +const pageSitemapXml = ` + + ${Object.keys(pageObjects) + .map( + (path) => ` + ${canonical}${path} + ${formatDate(new Date(pageObjects[path].lastModified))} + ` + ) + .join('\n')} +`; + +const legalSitemapXml = ` + + ${Object.keys(legalPageObjects) + .map( + (path) => ` + ${canonical}${path} + ${formatDate( + new Date(legalPageObjects[path].lastModified) + )} + ` + ) + .join('\n')} +`; + +const sitemapXml = ` + + +${canonical}/sitemaps/legal.xml +${canonical}/sitemaps/pages.xml + + +`; + +const BAD_AGENTS = [ + { + text: 'Search engines only please :) Thanks for obeying robots.txt', + bots: ['UbiCrawler', 'DOC', 'Zao', 'discobot', 'dotbot', 'yacybot'] + }, + { + text: "Dear bots, we don't appreciate you copying site content and providing very little additional value.", + bots: [ + 'sitecheck.internetseer.com', + 'Zealbot', + 'MJ12bot', + 'MSIECrawler', + 'SiteSnagger', + 'WebStripper', + 'WebCopier', + 'Fetch', + 'Offline Explorer', + 'Teleport', + 'TeleportPro', + 'WebZIP', + 'linko', + 'HTTrack', + 'Microsoft.URL.Control', + 'Xenu', + 'larbin', + 'libwww', + 'ZyBORG', + 'Download Ninja' + ] + }, + { + text: 'Recursive mode wget is not friendly', + bots: ['wget', 'grub-client'] + }, + { + text: "I realize you don't follow robots.txt, but FYI", + bots: ['k2spider'] + }, + { + text: 'Abusive bots', + bots: ['NPBot'] + } +]; + +const robotsTxt = ` +# +# Dear bot, crawler or kind technical person who wishes to crawl ${ + siteInfo.site.host +}, +# please email ${ + siteInfo.emails.support +}. We require whitelisting to access our sitemap. +# +# Thanks in advance! Your friendly Ops Team @ ${seo.title}. + +${BAD_AGENTS.map(({ text, bots }) => { + return ` +# +# ${text} +# + + ${bots + .map((bot) => { + return ` +User-agent: ${bot} +Disallow: /`; + }) + .join('\n')} + `; +}).join('')} + +User-agent: * + +${Object.keys(pageObjects) + .map((path) => `Allow: ${path}$`) + .join('\n')} + +Sitemap: ${canonical}/sitemaps/pages.xml +Sitemap: ${canonical}/sitemaps/legal.xml + +Host: ${siteInfo.site.host} + +`; + +fs.writeFileSync('out/sitemap.xml', sitemapXml); +require('mkdirp').sync('out/sitemaps'); +fs.writeFileSync('out/sitemaps/pages.xml', pageSitemapXml); +fs.writeFileSync('out/sitemaps/legal.xml', legalSitemapXml); +fs.writeFileSync('out/robots.txt', robotsTxt); diff --git a/packages/docs/styles/globals.css b/packages/docs/styles/globals.css new file mode 100644 index 000000000..510ff1d53 --- /dev/null +++ b/packages/docs/styles/globals.css @@ -0,0 +1,4 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; +@tailwind variants; diff --git a/packages/docs/theme.config.tsx b/packages/docs/theme.config.tsx new file mode 100644 index 000000000..f99efe8af --- /dev/null +++ b/packages/docs/theme.config.tsx @@ -0,0 +1,82 @@ +import React from "react"; +import { DocsThemeConfig, useConfig } from "nextra-theme-docs"; +import { useRouter } from "next/router"; + +const config: DocsThemeConfig = { + logo: ( + <> + + +   CosmosKit + + + ), + project: { + link: "https://github.com/cosmology-tech/cosmos-kit", + }, + useNextSeoProps() { + const { asPath } = useRouter(); + if (asPath !== "/") { + return { + titleTemplate: "%s – CosmosKit", + }; + } else { + return { + titleTemplate: "%s", + }; + } + }, + head: () => { + const { asPath, defaultLocale, locale } = useRouter(); + const { title } = useConfig(); + const url = + "https://docs.cosmoskit.com/" + + (defaultLocale === locale ? asPath : `/${locale}${asPath}`); + + const _title = asPath !== "/" ? `${title} - CosmosKit` : `${title}`; + return ( + <> + + + + {_title} + + ); + }, + sidebar: { + defaultMenuCollapseLevel: 1, + }, + footer: { + text: ( + + 🛠 Built by Cosmology — if you like our tools, please consider delegating + to{" "} + + our validator ⚛️ + + + ), + }, + chat: { + link: "https://discord.gg/6hy8KQ9aJY", + }, + docsRepositoryBase: + "https://github.com/cosmology-tech/cosmos-kit/tree/main/packages/docs", + editLink: { + text: "Edit this page on GitHub", + }, +}; + +export default config; diff --git a/packages/docs/tsconfig.json b/packages/docs/tsconfig.json new file mode 100644 index 000000000..6db37c02f --- /dev/null +++ b/packages/docs/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/example-lite/.gitignore b/packages/example-lite/.gitignore new file mode 100644 index 000000000..d0d878e40 --- /dev/null +++ b/packages/example-lite/.gitignore @@ -0,0 +1 @@ +.next \ No newline at end of file diff --git a/packages/example-lite/CHANGELOG.md b/packages/example-lite/CHANGELOG.md new file mode 100644 index 000000000..631e4eb60 --- /dev/null +++ b/packages/example-lite/CHANGELOG.md @@ -0,0 +1,178 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [1.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.10.2...example-lite@1.11.0) (2024-07-11) + +**Note:** Version bump only for package example-lite + + + + + +## [1.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.10.1...example-lite@1.10.2) (2024-06-28) + +**Note:** Version bump only for package example-lite + + + + + +## [1.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.10.0...example-lite@1.10.1) (2024-06-26) + +**Note:** Version bump only for package example-lite + + + + + +# [1.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.9.0...example-lite@1.10.0) (2024-06-18) + +**Note:** Version bump only for package example-lite + + + + + +# [1.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.8.0...example-lite@1.9.0) (2024-06-12) + +**Note:** Version bump only for package example-lite + + + + + +# [1.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.7.1...example-lite@1.8.0) (2024-06-05) + +**Note:** Version bump only for package example-lite + + + + + +## [1.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.7.0...example-lite@1.7.1) (2024-05-29) + +**Note:** Version bump only for package example-lite + + + + + +# [1.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.6.0...example-lite@1.7.0) (2024-05-28) + +**Note:** Version bump only for package example-lite + + + + + +# [1.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.5.0...example-lite@1.6.0) (2024-05-23) + +**Note:** Version bump only for package example-lite + + + + + +# [1.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.4.0...example-lite@1.5.0) (2024-05-22) + +**Note:** Version bump only for package example-lite + + + + + +# [1.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.3.1...example-lite@1.4.0) (2024-05-08) + +**Note:** Version bump only for package example-lite + + + + + +## [1.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.3.0...example-lite@1.3.1) (2024-04-27) + +**Note:** Version bump only for package example-lite + +# [1.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.9...example-lite@1.3.0) (2024-04-20) + +**Note:** Version bump only for package example-lite + +## [1.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.8...example-lite@1.2.9) (2024-01-31) + +**Note:** Version bump only for package example-lite + +## [1.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.7...example-lite@1.2.8) (2024-01-25) + +**Note:** Version bump only for package example-lite + +## [1.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.6...example-lite@1.2.7) (2024-01-23) + +**Note:** Version bump only for package example-lite + +## [1.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.5...example-lite@1.2.6) (2024-01-22) + +**Note:** Version bump only for package example-lite + +## [1.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.4...example-lite@1.2.5) (2024-01-19) + +**Note:** Version bump only for package example-lite + +## [1.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.3...example-lite@1.2.4) (2024-01-19) + +**Note:** Version bump only for package example-lite + +## [1.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.2...example-lite@1.2.3) (2024-01-19) + +**Note:** Version bump only for package example-lite + +## [1.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.1...example-lite@1.2.2) (2024-01-15) + +**Note:** Version bump only for package example-lite + +## [1.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.2.0...example-lite@1.2.1) (2024-01-08) + +**Note:** Version bump only for package example-lite + +# [1.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.1.5...example-lite@1.2.0) (2024-01-07) + +**Note:** Version bump only for package example-lite + +## [1.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.1.4...example-lite@1.1.5) (2023-12-28) + +**Note:** Version bump only for package example-lite + +## [1.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.1.3...example-lite@1.1.4) (2023-12-26) + +**Note:** Version bump only for package example-lite + +## [1.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.1.2...example-lite@1.1.3) (2023-12-25) + +**Note:** Version bump only for package example-lite + +## [1.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.1.1...example-lite@1.1.2) (2023-12-22) + +### Bug Fixes + +- client and wallet state wrongly changed ([6a26281](https://github.com/cosmology-tech/cosmos-kit/commit/6a262816879b10d2ffb38f03149374822e0ad635)) + +## [1.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.1.0...example-lite@1.1.1) (2023-12-18) + +**Note:** Version bump only for package example-lite + +# [1.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.0.3...example-lite@1.1.0) (2023-12-15) + +**Note:** Version bump only for package example-lite + +## [1.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.0.2...example-lite@1.0.3) (2023-12-14) + +**Note:** Version bump only for package example-lite + +## [1.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/example-lite@1.0.1...example-lite@1.0.2) (2023-12-14) + +**Note:** Version bump only for package example-lite + +## 1.0.1 (2023-12-07) + +**Note:** Version bump only for package example-lite diff --git a/packages/example-lite/components/custom-modal.tsx b/packages/example-lite/components/custom-modal.tsx new file mode 100644 index 000000000..5e0022fe7 --- /dev/null +++ b/packages/example-lite/components/custom-modal.tsx @@ -0,0 +1,71 @@ +import { WalletModalProps, WalletStatus } from "@cosmos-kit/core"; +import React from "react"; +import { Badge, Button, Modal, Stack } from "react-bootstrap"; + +export const CustomModal = ({ + isOpen, + setOpen, + walletRepo, +}: WalletModalProps) => { + const onCloseModal = () => { + setOpen(false); + }; + + return ( +
+ + + Choose Wallet + + + + + {walletRepo?.wallets.map( + ({ + walletName, + connect, + disconnect, + walletInfo, + walletStatus, + message, + }) => { + let button; + switch (walletStatus) { + case WalletStatus.Disconnected: + button = ; + break; + case WalletStatus.NotExist: + button = ; + break; + case WalletStatus.Connected: + button = ( + + ); + break; + case WalletStatus.Error: + button = ( +
+ {message} +
+ ); + break; + } + return ( + +
+ {walletInfo.prettyName} - {walletStatus} +
+
{button}
+
+ ); + } + )} +
+
+
+
+ ); +}; diff --git a/packages/example-lite/next-env.d.ts b/packages/example-lite/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/packages/example-lite/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/packages/example-lite/next.config.js b/packages/example-lite/next.config.js new file mode 100644 index 000000000..18b46fad0 --- /dev/null +++ b/packages/example-lite/next.config.js @@ -0,0 +1,23 @@ +module.exports = { + webpack: (config) => { + config.module.rules.push({ + test: /\.(ts|tsx)$/, + use: [ + { + loader: "babel-loader", + options: { + presets: [ + "@babel/preset-env", + ["@babel/preset-react", { runtime: "automatic" }], + ["@babel/preset-typescript", { allowDeclareFields: true }], + ], + plugins: ["babel-plugin-inline-import-data-uri"], + }, + }, + ], + }); + + config.resolve.extensions.push(".ts", ".tsx"); + return config; + }, +}; diff --git a/packages/example-lite/package.json b/packages/example-lite/package.json new file mode 100644 index 000000000..611af42da --- /dev/null +++ b/packages/example-lite/package.json @@ -0,0 +1,30 @@ +{ + "name": "example-lite", + "private": true, + "description": "nextjs project using react lite (custom modal)", + "version": "1.11.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "dev": "next dev" + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "@cosmos-kit/keplr": "^2.12.2", + "@cosmos-kit/leap": "^2.12.2", + "@cosmos-kit/react-lite": "^2.13.0", + "@cosmos-kit/xdefi": "^2.10.2", + "bootstrap": "^5.3.2", + "next": "^14.0.3", + "react": "^18.2.0", + "react-bootstrap": "^2.9.1", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@babel/preset-env": "7.22.7", + "@babel/preset-react": "7.22.5", + "@babel/preset-typescript": "7.22.5", + "babel-loader": "9.1.2", + "babel-plugin-inline-import-data-uri": "1.0.1" + } +} diff --git a/packages/example-lite/pages/_app.tsx b/packages/example-lite/pages/_app.tsx new file mode 100644 index 000000000..35f0fd467 --- /dev/null +++ b/packages/example-lite/pages/_app.tsx @@ -0,0 +1,25 @@ +import "bootstrap/dist/css/bootstrap.min.css"; +import "@interchain-ui/react/styles"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { wallets as xdefiWallets } from "@cosmos-kit/xdefi"; +import { ChainProvider } from "@cosmos-kit/react-lite"; +import { assets, chains } from "chain-registry"; +import type { AppProps } from "next/app"; +import React from "react"; +import { CustomModal } from "../components/custom-modal"; + +function MyApp({ Component, pageProps }: AppProps) { + return ( + c.chain_name == "cosmoshub")]} + assetLists={[...assets.filter((a) => a.chain_name === "cosmoshub")]} + wallets={[...keplrWallets, ...xdefiWallets]} + logLevel={"DEBUG"} + walletModal={CustomModal} + > + + + ); +} + +export default MyApp; diff --git a/packages/example-lite/pages/index.tsx b/packages/example-lite/pages/index.tsx new file mode 100644 index 000000000..85d25ba60 --- /dev/null +++ b/packages/example-lite/pages/index.tsx @@ -0,0 +1,14 @@ +import { useChain } from "@cosmos-kit/react-lite"; +import React from "react"; +import { Button, Container } from "react-bootstrap"; + +export default function () { + const { openView } = useChain("cosmoshub"); + return ( + + + + ); +} diff --git a/packages/example-lite/tsconfig.json b/packages/example-lite/tsconfig.json new file mode 100644 index 000000000..4e224ad41 --- /dev/null +++ b/packages/example-lite/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/packages/example/.eslintrc.json b/packages/example/.eslintrc.json new file mode 100644 index 000000000..e9f5a2c71 --- /dev/null +++ b/packages/example/.eslintrc.json @@ -0,0 +1,73 @@ +{ + "plugins": ["@typescript-eslint", "simple-import-sort", "unused-imports"], + "extends": [ + // "next", + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + // configures both eslint-plugin-prettier and eslint-config-prettier + // "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + // "react-hooks/rules-of-hooks": "off", + // "react/display-name": "off", + "simple-import-sort/imports": 1, + "simple-import-sort/exports": 2, + // "prettier/prettier": 2, + "quotes": "off", + "unused-imports/no-unused-imports": 1, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": ["error", "except-parens"], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [2, "prefer-double"], + "linebreak-style": ["error", "unix"] + // "quotes": [ + // 2, + // "single", + // { + // "avoidEscape": true, + // "allowTemplateLiterals": true + // } + // ] + } +} diff --git a/packages/example/.gitignore b/packages/example/.gitignore new file mode 100644 index 000000000..c87c9b392 --- /dev/null +++ b/packages/example/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/packages/example/CHANGELOG.md b/packages/example/CHANGELOG.md new file mode 100644 index 000000000..ca5c51eb3 --- /dev/null +++ b/packages/example/CHANGELOG.md @@ -0,0 +1,1179 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.24.0...example@2.25.0) (2024-08-01) + +**Note:** Version bump only for package example + + + + + +# [2.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.23.2...example@2.24.0) (2024-07-11) + +**Note:** Version bump only for package example + + + + + +## [2.23.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.23.1...example@2.23.2) (2024-06-28) + +**Note:** Version bump only for package example + + + + + +## [2.23.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.23.0...example@2.23.1) (2024-06-26) + +**Note:** Version bump only for package example + + + + + +# [2.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.22.0...example@2.23.0) (2024-06-21) + +**Note:** Version bump only for package example + + + + + +# [2.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.21.0...example@2.22.0) (2024-06-18) + +**Note:** Version bump only for package example + + + + + +# [2.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.20.0...example@2.21.0) (2024-06-18) + +**Note:** Version bump only for package example + + + + + +# [2.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.19.0...example@2.20.0) (2024-06-18) + +**Note:** Version bump only for package example + + + + + +# [2.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.18.0...example@2.19.0) (2024-06-12) + +**Note:** Version bump only for package example + + + + + +# [2.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.17.1...example@2.18.0) (2024-06-05) + + +### Features + +* add cdc wallet to package deps ([f1ab3e0](https://github.com/cosmology-tech/cosmos-kit/commit/f1ab3e029bddcf59d20926709fcd784c6ba3e24b)) +* add Crypto.com wallet extension ([b539fb4](https://github.com/cosmology-tech/cosmos-kit/commit/b539fb4e7939b60918b916e0b270f91f2c17d4f0)) + + + + + +## [2.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.17.0...example@2.17.1) (2024-05-29) + +**Note:** Version bump only for package example + + + + + +# [2.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.16.0...example@2.17.0) (2024-05-28) + +**Note:** Version bump only for package example + + + + + +# [2.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.15.0...example@2.16.0) (2024-05-23) + +**Note:** Version bump only for package example + + + + + +# [2.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.14.0...example@2.15.0) (2024-05-22) + +**Note:** Version bump only for package example + + + + + +# [2.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.13.0...example@2.14.0) (2024-05-08) + +**Note:** Version bump only for package example + + + + + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.12.1...example@2.13.0) (2024-05-08) + +**Note:** Version bump only for package example + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.12.0...example@2.12.1) (2024-04-27) + +### Bug Fixes + +- uninstalled wallet extensions never transition into NotExist state ([f52b5a7](https://github.com/cosmology-tech/cosmos-kit/commit/f52b5a7a64b1a6021b517baf06de6400e6719092)) + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.15...example@2.12.0) (2024-04-20) + +**Note:** Version bump only for package example + +## [2.11.15](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.14...example@2.11.15) (2024-04-02) + +**Note:** Version bump only for package example + +## [2.11.14](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.13...example@2.11.14) (2024-03-07) + +**Note:** Version bump only for package example + +## [2.11.13](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.12...example@2.11.13) (2024-02-29) + +**Note:** Version bump only for package example + +## [2.11.12](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.11...example@2.11.12) (2024-02-28) + +### Bug Fixes + +- sync nextra theme with interchain ui theme ([160a0e9](https://github.com/cosmology-tech/cosmos-kit/commit/160a0e90f03de090e67db1403ee93c3ac60163e4)) + +## [2.11.11](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.10...example@2.11.11) (2024-02-02) + +### Bug Fixes + +- replace docs dropdown with a new combobox and upgrade dependency version ([5c87bbf](https://github.com/cosmology-tech/cosmos-kit/commit/5c87bbf016e6770c0577891028e789c1d4fce390)) + +## [2.11.10](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.9...example@2.11.10) (2024-01-31) + +**Note:** Version bump only for package example + +## [2.11.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.8...example@2.11.9) (2024-01-31) + +**Note:** Version bump only for package example + +## [2.11.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.7...example@2.11.8) (2024-01-25) + +**Note:** Version bump only for package example + +## [2.11.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.6...example@2.11.7) (2024-01-23) + +**Note:** Version bump only for package example + +## [2.11.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.5...example@2.11.6) (2024-01-22) + +**Note:** Version bump only for package example + +## [2.11.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.4...example@2.11.5) (2024-01-19) + +**Note:** Version bump only for package example + +## [2.11.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.3...example@2.11.4) (2024-01-19) + +**Note:** Version bump only for package example + +## [2.11.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.2...example@2.11.3) (2024-01-19) + +**Note:** Version bump only for package example + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.1...example@2.11.2) (2024-01-15) + +**Note:** Version bump only for package example + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.11.0...example@2.11.1) (2024-01-08) + +**Note:** Version bump only for package example + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.6...example@2.11.0) (2024-01-07) + +**Note:** Version bump only for package example + +## [2.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.5...example@2.10.6) (2023-12-28) + +**Note:** Version bump only for package example + +## [2.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.4...example@2.10.5) (2023-12-26) + +**Note:** Version bump only for package example + +## [2.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.3...example@2.10.4) (2023-12-25) + +**Note:** Version bump only for package example + +## [2.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.2...example@2.10.3) (2023-12-22) + +**Note:** Version bump only for package example + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.1...example@2.10.2) (2023-12-18) + +**Note:** Version bump only for package example + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.10.0...example@2.10.1) (2023-12-18) + +### Bug Fixes + +- bump dependency ([ad6ac8f](https://github.com/cosmology-tech/cosmos-kit/commit/ad6ac8f2a42a8f018bd62f91b1124f6bf0590287)) + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.19...example@2.10.0) (2023-12-15) + +**Note:** Version bump only for package example + +## [2.9.19](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.18...example@2.9.19) (2023-12-14) + +**Note:** Version bump only for package example + +## [2.9.18](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.17...example@2.9.18) (2023-12-14) + +**Note:** Version bump only for package example + +## [2.9.17](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.16...example@2.9.17) (2023-12-07) + +**Note:** Version bump only for package example + +## [2.9.16](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.15...example@2.9.16) (2023-11-27) + +**Note:** Version bump only for package example + +## [2.9.15](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.14...example@2.9.15) (2023-11-24) + +### Bug Fixes + +- **react:** move interchain ui to peerDependency to avoid css conflicts ([581c976](https://github.com/cosmology-tech/cosmos-kit/commit/581c9760f83765945d39385a5ef9e579df29d2db)) + +## [2.9.14](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.13...example@2.9.14) (2023-11-23) + +**Note:** Version bump only for package example + +## [2.9.13](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.12...example@2.9.13) (2023-11-15) + +### Bug Fixes + +- **react:** allow pass through custom classes to base modal ([cde4b7e](https://github.com/cosmology-tech/cosmos-kit/commit/cde4b7e2fcfbfd8e106eba4153e34d02a5c85887)) + +## [2.9.12](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.11...example@2.9.12) (2023-11-08) + +**Note:** Version bump only for package example + +## [2.9.11](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.10...example@2.9.11) (2023-11-06) + +**Note:** Version bump only for package example + +## [2.9.10](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.9...example@2.9.10) (2023-11-06) + +**Note:** Version bump only for package example + +## [2.9.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.8...example@2.9.9) (2023-11-06) + +**Note:** Version bump only for package example + +## [2.9.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.7...example@2.9.8) (2023-11-02) + +### Bug Fixes + +- **react:** upgrade deps and fix small type issues ([2bedc28](https://github.com/cosmology-tech/cosmos-kit/commit/2bedc28023fc5cf73b90c21c9eed07e6c386e4d5)) +- stuff ([d8d8f00](https://github.com/cosmology-tech/cosmos-kit/commit/d8d8f003739c0402962e2250ff18fc21caad4ab6)) + +## [2.9.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.6...example@2.9.7) (2023-10-31) + +**Note:** Version bump only for package example + +## [2.9.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.5...example@2.9.6) (2023-10-31) + +**Note:** Version bump only for package example + +## [2.9.5](https://github.com/NoahSaso/cosmos-kit/compare/example@2.9.4...example@2.9.5) (2023-10-19) + +**Note:** Version bump only for package example + +## [2.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.3...example@2.9.4) (2023-10-19) + +**Note:** Version bump only for package example + +## [2.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.2...example@2.9.3) (2023-10-18) + +**Note:** Version bump only for package example + +## [2.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.1...example@2.9.2) (2023-10-17) + +**Note:** Version bump only for package example + +## [2.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.9.0...example@2.9.1) (2023-10-13) + +**Note:** Version bump only for package example + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.10...example@2.9.0) (2023-10-07) + +**Note:** Version bump only for package example + +## [2.8.10](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.9...example@2.8.10) (2023-10-07) + +**Note:** Version bump only for package example + +## [2.8.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.8...example@2.8.9) (2023-10-06) + +**Note:** Version bump only for package example + +## [2.8.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.7...example@2.8.8) (2023-10-05) + +**Note:** Version bump only for package example + +## [2.8.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.6...example@2.8.7) (2023-10-04) + +**Note:** Version bump only for package example + +## [2.8.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.5...example@2.8.6) (2023-09-26) + +**Note:** Version bump only for package example + +## [2.8.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.4...example@2.8.5) (2023-09-22) + +**Note:** Version bump only for package example + +## [2.8.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.3...example@2.8.4) (2023-09-18) + +**Note:** Version bump only for package example + +## [2.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.2...example@2.8.3) (2023-09-15) + +**Note:** Version bump only for package example + +## [2.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.1...example@2.8.2) (2023-09-13) + +**Note:** Version bump only for package example + +## [2.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.8.0...example@2.8.1) (2023-09-13) + +**Note:** Version bump only for package example + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.7.2...example@2.8.0) (2023-09-12) + +### Features + +- metamask snaps support ([6c66a08](https://github.com/cosmology-tech/cosmos-kit/commit/6c66a080b07fef10ec7da021713f59084bdb3c54)) + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.7.1...example@2.7.2) (2023-09-07) + +**Note:** Version bump only for package example + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.7.0...example@2.7.1) (2023-09-07) + +**Note:** Version bump only for package example + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.6...example@2.7.0) (2023-09-05) + +**Note:** Version bump only for package example + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.5...example@2.6.6) (2023-09-02) + +### Bug Fixes + +- useChains bug when one chain has connected ([694c02c](https://github.com/cosmology-tech/cosmos-kit/commit/694c02c46c67fb70ff959134d81de6c0ee879f10)) + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.4...example@2.6.5) (2023-08-28) + +**Note:** Version bump only for package example + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.3...example@2.6.4) (2023-08-24) + +**Note:** Version bump only for package example + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.2...example@2.6.3) (2023-08-24) + +**Note:** Version bump only for package example + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.1...example@2.6.2) (2023-08-23) + +**Note:** Version bump only for package example + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.6.0...example@2.6.1) (2023-08-21) + +**Note:** Version bump only for package example + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.5.1...example@2.6.0) (2023-08-17) + +**Note:** Version bump only for package example + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.5.0...example@2.5.1) (2023-08-17) + +**Note:** Version bump only for package example + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.4.4...example@2.5.0) (2023-08-17) + +**Note:** Version bump only for package example + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.4.3...example@2.4.4) (2023-08-17) + +**Note:** Version bump only for package example + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.4.2...example@2.4.3) (2023-08-17) + +**Note:** Version bump only for package example + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.4.1...example@2.4.2) (2023-08-17) + +**Note:** Version bump only for package example + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.4.0...example@2.4.1) (2023-08-17) + +**Note:** Version bump only for package example + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.3.2...example@2.4.0) (2023-08-17) + +### Features + +- useChains ([8c24403](https://github.com/cosmology-tech/cosmos-kit/commit/8c24403ed4fc6b145e2e8c102643aa06dab0bd90)) + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.3.1...example@2.3.2) (2023-08-16) + +**Note:** Version bump only for package example + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.3.0...example@2.3.1) (2023-08-15) + +**Note:** Version bump only for package example + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.2.2...example@2.3.0) (2023-08-15) + +**Note:** Version bump only for package example + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.2.1...example@2.2.2) (2023-08-09) + +**Note:** Version bump only for package example + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.2.0...example@2.2.1) (2023-08-07) + +**Note:** Version bump only for package example + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.1.5...example@2.2.0) (2023-08-03) + +### Features + +- add platformEnabledWallets ([a48ffab](https://github.com/cosmology-tech/cosmos-kit/commit/a48ffabd6108363b24b5bdecb6a156a669758e4a)) + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.1.4...example@2.1.5) (2023-08-03) + +**Note:** Version bump only for package example + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.1.3...example@2.1.4) (2023-08-01) + +**Note:** Version bump only for package example + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.1.2...example@2.1.3) (2023-07-31) + +**Note:** Version bump only for package example + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.1.1...example@2.1.2) (2023-07-30) + +**Note:** Version bump only for package example + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.1.0...example@2.1.1) (2023-07-28) + +**Note:** Version bump only for package example + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.5...example@2.1.0) (2023-07-28) + +**Note:** Version bump only for package example + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.4...example@2.0.5) (2023-07-28) + +**Note:** Version bump only for package example + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.3...example@2.0.4) (2023-07-27) + +**Note:** Version bump only for package example + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.2...example@2.0.3) (2023-07-24) + +**Note:** Version bump only for package example + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1...example@2.0.2) (2023-07-21) + +**Note:** Version bump only for package example + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.9...example@2.0.1) (2023-07-21) + +**Note:** Version bump only for package example + +## [2.0.1-beta.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.8...example@2.0.1-beta.9) (2023-07-21) + +**Note:** Version bump only for package example + +## [2.0.1-beta.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.7...example@2.0.1-beta.8) (2023-07-19) + +**Note:** Version bump only for package example + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.6...example@2.0.1-beta.7) (2023-07-18) + +**Note:** Version bump only for package example + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.5...example@2.0.1-beta.6) (2023-07-18) + +**Note:** Version bump only for package example + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.4...example@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package example + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.3...example@2.0.1-beta.4) (2023-07-13) + +**Note:** Version bump only for package example + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.2...example@2.0.1-beta.3) (2023-07-13) + +**Note:** Version bump only for package example + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.1...example@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package example + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@2.0.1-beta.0...example@2.0.1-beta.1) (2023-07-12) + +### Bug Fixes + +- react-icons bundle size ([549e7ed](https://github.com/cosmology-tech/cosmos-kit/commit/549e7ed135c12dc85d7aea556f645ba2b24c5ce8)) + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@1.0.0...example@2.0.1-beta.0) (2023-07-11) + +### Bug Fixes + +- example address ([d2ce2dc](https://github.com/cosmology-tech/cosmos-kit/commit/d2ce2dc89527c4aee6a8f98619be0945e3b322b6)) +- example chain address ([f6b12aa](https://github.com/cosmology-tech/cosmos-kit/commit/f6b12aaff11dfb3c6352c66aae0c5561ef92ef9f)) +- feedback from june ([c8cec87](https://github.com/cosmology-tech/cosmos-kit/commit/c8cec878b05196e66b7b539bb9290bbbbc52e328)) +- lerna issues ([7b2a034](https://github.com/cosmology-tech/cosmos-kit/commit/7b2a03419e14682a37ad73f93e236a82fe531d08)) +- next config ([6dcbc4f](https://github.com/cosmology-tech/cosmos-kit/commit/6dcbc4f208fdcdad76d6f57fe3c55e929364884c)) +- tx ([6e75226](https://github.com/cosmology-tech/cosmos-kit/commit/6e7522635eadae5c31769f1ffbd68415d3235e3f)) +- tx example ([c8b01f0](https://github.com/cosmology-tech/cosmos-kit/commit/c8b01f06b4a0192f970e5b8468425a12bf2e296e)) +- use interchain-ui package ([a63ff36](https://github.com/cosmology-tech/cosmos-kit/commit/a63ff3601b6143637e3f670d957f33561cc4968e)) +- useChain address not trigger rerender ([13975de](https://github.com/cosmology-tech/cosmos-kit/commit/13975de3ef8bc27f1bdd951b0a4c4bb9eea2fff0)) + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.18...example@1.0.0) (2023-07-05) + +### Bug Fixes + +- bundle ([a3dc1c2](https://github.com/cosmology-tech/cosmos-kit/commit/a3dc1c21de2cf6dba0ea75fad4265d8a080b4a50)) +- bundle ([503939e](https://github.com/cosmology-tech/cosmos-kit/commit/503939e4bcddc35160578d151a720431e892089c)) +- docs and merge conflicts ([090bdf1](https://github.com/cosmology-tech/cosmos-kit/commit/090bdf1d98249d50bbded69af7d4689bce674af3)) +- mismatch version ([fcdf7ab](https://github.com/cosmology-tech/cosmos-kit/commit/fcdf7abdeee579ff6bff72af5fa88f175f75f470)) +- stuff ([195792d](https://github.com/cosmology-tech/cosmos-kit/commit/195792d1cf5cbf0a12bc8e887b07541a7ae12ca3)) +- toggle ([8d31b7e](https://github.com/cosmology-tech/cosmos-kit/commit/8d31b7e1fbfdce44c530bce66f0cdaacde5c7f2c)) +- use tsup and prettify the index example ([cb4196a](https://github.com/cosmology-tech/cosmos-kit/commit/cb4196a1e34f708c355897274afbb80c1f46d1de)) + +### Features + +- migrate beta ([e65a3cd](https://github.com/cosmology-tech/cosmos-kit/commit/e65a3cd7cc837dc4351bd6b9bb396e1066bb3b3a)) + +## [0.45.18](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.17...example@0.45.18) (2023-06-30) + +**Note:** Version bump only for package example + +## [0.45.17](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.16...example@0.45.17) (2023-06-27) + +**Note:** Version bump only for package example + +## [0.45.16](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.15...example@0.45.16) (2023-06-13) + +**Note:** Version bump only for package example + +## [0.45.15](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.14...example@0.45.15) (2023-06-09) + +**Note:** Version bump only for package example + +## [0.45.14](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.13...example@0.45.14) (2023-06-09) + +**Note:** Version bump only for package example + +## [0.45.13](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.12...example@0.45.13) (2023-06-08) + +**Note:** Version bump only for package example + +## [0.45.12](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.11...example@0.45.12) (2023-06-08) + +**Note:** Version bump only for package example + +## [0.45.11](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.10...example@0.45.11) (2023-06-05) + +**Note:** Version bump only for package example + +## [0.45.10](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.9...example@0.45.10) (2023-06-02) + +**Note:** Version bump only for package example + +## [0.45.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.8...example@0.45.9) (2023-06-01) + +**Note:** Version bump only for package example + +## [0.45.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.7...example@0.45.8) (2023-05-30) + +**Note:** Version bump only for package example + +## [0.45.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.6...example@0.45.7) (2023-05-23) + +**Note:** Version bump only for package example + +## [0.45.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.5...example@0.45.6) (2023-05-18) + +**Note:** Version bump only for package example + +## [0.45.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.4...example@0.45.5) (2023-05-17) + +**Note:** Version bump only for package example + +## [0.45.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.3...example@0.45.4) (2023-05-16) + +**Note:** Version bump only for package example + +## [0.45.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.2...example@0.45.3) (2023-05-15) + +**Note:** Version bump only for package example + +## [0.45.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.1...example@0.45.2) (2023-05-04) + +**Note:** Version bump only for package example + +## [0.45.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.45.0...example@0.45.1) (2023-05-04) + +**Note:** Version bump only for package example + +# [0.45.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.44.0...example@0.45.0) (2023-05-02) + +**Note:** Version bump only for package example + +# [0.44.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.43.1...example@0.44.0) (2023-04-28) + +### Features + +- :sparkles: add cw20 suggestion example ([bbd506f](https://github.com/cosmology-tech/cosmos-kit/commit/bbd506f619c831c80c61fd12116464a6932b2b5e)) + +## [0.43.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.43.0...example@0.43.1) (2023-04-25) + +**Note:** Version bump only for package example + +# [0.43.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.42.0...example@0.43.0) (2023-04-25) + +**Note:** Version bump only for package example + +# [0.42.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.41.1...example@0.42.0) (2023-04-25) + +**Note:** Version bump only for package example + +## [0.41.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.41.0...example@0.41.1) (2023-04-24) + +**Note:** Version bump only for package example + +# [0.41.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.40.0...example@0.41.0) (2023-04-24) + +**Note:** Version bump only for package example + +# [0.40.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.39.0...example@0.40.0) (2023-04-24) + +**Note:** Version bump only for package example + +# [0.39.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.38.0...example@0.39.0) (2023-04-24) + +**Note:** Version bump only for package example + +# [0.38.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.37.0...example@0.38.0) (2023-04-24) + +**Note:** Version bump only for package example + +# [0.37.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.23...example@0.37.0) (2023-04-24) + +**Note:** Version bump only for package example + +## [0.36.23](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.22...example@0.36.23) (2023-04-24) + +**Note:** Version bump only for package example + +## [0.36.22](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.21...example@0.36.22) (2023-04-23) + +**Note:** Version bump only for package example + +## [0.36.21](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.20...example@0.36.21) (2023-04-20) + +**Note:** Version bump only for package example + +## [0.36.20](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.19...example@0.36.20) (2023-04-20) + +**Note:** Version bump only for package example + +## [0.36.19](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.18...example@0.36.19) (2023-04-14) + +**Note:** Version bump only for package example + +## [0.36.18](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.17...example@0.36.18) (2023-04-13) + +**Note:** Version bump only for package example + +## [0.36.17](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.16...example@0.36.17) (2023-04-07) + +**Note:** Version bump only for package example + +## [0.36.16](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.15...example@0.36.16) (2023-03-31) + +**Note:** Version bump only for package example + +## [0.36.15](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.14...example@0.36.15) (2023-03-27) + +**Note:** Version bump only for package example + +## [0.36.14](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.13...example@0.36.14) (2023-03-17) + +**Note:** Version bump only for package example + +## [0.36.13](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.12...example@0.36.13) (2023-03-15) + +**Note:** Version bump only for package example + +## [0.36.12](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.11...example@0.36.12) (2023-03-15) + +**Note:** Version bump only for package example + +## [0.36.11](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.10...example@0.36.11) (2023-03-15) + +**Note:** Version bump only for package example + +## [0.36.10](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.9...example@0.36.10) (2023-03-14) + +**Note:** Version bump only for package example + +## [0.36.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.8...example@0.36.9) (2023-03-14) + +**Note:** Version bump only for package example + +## [0.36.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.7...example@0.36.8) (2023-03-13) + +**Note:** Version bump only for package example + +## [0.36.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.6...example@0.36.7) (2023-03-09) + +**Note:** Version bump only for package example + +## [0.36.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.5...example@0.36.6) (2023-03-08) + +**Note:** Version bump only for package example + +## [0.36.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.4...example@0.36.5) (2023-03-07) + +**Note:** Version bump only for package example + +## [0.36.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.3...example@0.36.4) (2023-03-03) + +**Note:** Version bump only for package example + +## [0.36.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.2...example@0.36.3) (2023-02-28) + +**Note:** Version bump only for package example + +## [0.36.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.1...example@0.36.2) (2023-02-28) + +**Note:** Version bump only for package example + +## [0.36.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.36.0...example@0.36.1) (2023-02-27) + +**Note:** Version bump only for package example + +# [0.36.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.21...example@0.36.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.35.21](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.20...example@0.35.21) (2023-02-24) + +**Note:** Version bump only for package example + +## [0.35.20](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.19...example@0.35.20) (2023-02-24) + +**Note:** Version bump only for package example + +## [0.35.19](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.18...example@0.35.19) (2023-02-24) + +**Note:** Version bump only for package example + +## [0.35.18](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.17...example@0.35.18) (2023-02-23) + +**Note:** Version bump only for package example + +## [0.35.17](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.16...example@0.35.17) (2023-02-23) + +**Note:** Version bump only for package example + +## [0.35.16](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.15...example@0.35.16) (2023-02-23) + +**Note:** Version bump only for package example + +## [0.35.15](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.14...example@0.35.15) (2023-02-21) + +**Note:** Version bump only for package example + +## [0.35.14](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.13...example@0.35.14) (2023-02-21) + +**Note:** Version bump only for package example + +## [0.35.13](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.12...example@0.35.13) (2023-02-20) + +**Note:** Version bump only for package example + +## [0.35.12](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.11...example@0.35.12) (2023-02-20) + +**Note:** Version bump only for package example + +## [0.35.11](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.10...example@0.35.11) (2023-02-19) + +**Note:** Version bump only for package example + +## [0.35.10](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.9...example@0.35.10) (2023-02-17) + +**Note:** Version bump only for package example + +## [0.35.9](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.8...example@0.35.9) (2023-02-17) + +**Note:** Version bump only for package example + +## [0.35.8](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.7...example@0.35.8) (2023-02-16) + +**Note:** Version bump only for package example + +## [0.35.7](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.6...example@0.35.7) (2023-01-16) + +**Note:** Version bump only for package example + +## [0.35.6](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.5...example@0.35.6) (2023-01-14) + +**Note:** Version bump only for package example + +## [0.35.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.4...example@0.35.5) (2023-01-13) + +**Note:** Version bump only for package example + +## [0.35.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.3...example@0.35.4) (2023-01-12) + +**Note:** Version bump only for package example + +## [0.35.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.2...example@0.35.3) (2023-01-11) + +**Note:** Version bump only for package example + +## [0.35.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.1...example@0.35.2) (2023-01-11) + +**Note:** Version bump only for package example + +## [0.35.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.35.0...example@0.35.1) (2023-01-06) + +**Note:** Version bump only for package example + +# [0.35.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.21.0...example@0.35.0) (2022-12-16) + +### Features + +- vectis wallet integration ([471b656](https://github.com/cosmology-tech/cosmos-kit/commit/471b65678d2df1a074a6d91e9899df5e86454cb2)) + +## [0.34.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.12...@cosmos-kit/example@0.34.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.11...@cosmos-kit/example@0.34.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.10...@cosmos-kit/example@0.34.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.9...@cosmos-kit/example@0.34.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.8...@cosmos-kit/example@0.34.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.7...@cosmos-kit/example@0.34.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.6...@cosmos-kit/example@0.34.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.5...@cosmos-kit/example@0.34.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.4...@cosmos-kit/example@0.34.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.3...@cosmos-kit/example@0.34.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.2...@cosmos-kit/example@0.34.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.1...@cosmos-kit/example@0.34.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.34.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.34.0...@cosmos-kit/example@0.34.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.34.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.33.0...@cosmos-kit/example@0.34.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.33.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.32.1...@cosmos-kit/example@0.33.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.32.0...@cosmos-kit/example@0.32.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.31.1...@cosmos-kit/example@0.32.0) (2022-11-30) + +### Features + +- vectis wallet integration ([471b656](https://github.com/cosmology-tech/cosmos-kit/commit/471b65678d2df1a074a6d91e9899df5e86454cb2)) + +## [0.31.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.31.0...@cosmos-kit/example@0.31.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.14...@cosmos-kit/example@0.31.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.13...@cosmos-kit/example@0.30.14) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.12...@cosmos-kit/example@0.30.13) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.11...@cosmos-kit/example@0.30.12) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.10...@cosmos-kit/example@0.30.11) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.9...@cosmos-kit/example@0.30.10) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.8...@cosmos-kit/example@0.30.9) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.7...@cosmos-kit/example@0.30.8) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.6...@cosmos-kit/example@0.30.7) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.5...@cosmos-kit/example@0.30.6) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.4...@cosmos-kit/example@0.30.5) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.3...@cosmos-kit/example@0.30.4) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.2...@cosmos-kit/example@0.30.3) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.1...@cosmos-kit/example@0.30.2) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.30.0...@cosmos-kit/example@0.30.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.29.2...@cosmos-kit/example@0.30.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.29.1...@cosmos-kit/example@0.29.2) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.29.0...@cosmos-kit/example@0.29.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.28.1...@cosmos-kit/example@0.29.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.28.0...@cosmos-kit/example@0.28.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.27.0...@cosmos-kit/example@0.28.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.26.1...@cosmos-kit/example@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.26.0...@cosmos-kit/example@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.22.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.22.2...@cosmos-kit/example@0.22.3) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.22.1...@cosmos-kit/example@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.22.0...@cosmos-kit/example@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.21.0...@cosmos-kit/example@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.20.7...@cosmos-kit/example@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.20.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.20.6...@cosmos-kit/example@0.20.7) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.20.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.16.3...@cosmos-kit/example@0.20.6) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.20.5...example@0.21.0) (2022-10-27) + +**Note:** Version bump only for package example + +## [0.20.5](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.20.4...example@0.20.5) (2022-10-17) + +**Note:** Version bump only for package example + +## [0.20.4](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.20.3...example@0.20.4) (2022-10-17) + +**Note:** Version bump only for package example + +## [0.20.3](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.20.2...example@0.20.3) (2022-10-17) + +**Note:** Version bump only for package example + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.20.1...example@0.20.2) (2022-10-17) + +**Note:** Version bump only for package example + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.19.2...example@0.20.1) (2022-10-13) + +**Note:** Version bump only for package example + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.19.0...example@0.20.0) (2022-10-08) + +**Note:** Version bump only for package example + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.18.1...example@0.19.0) (2022-10-01) + +**Note:** Version bump only for package example + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.18.0...example@0.18.1) (2022-10-01) + +**Note:** Version bump only for package example + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.17.1...example@0.18.0) (2022-09-30) + +**Note:** Version bump only for package example + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.17.0...example@0.17.1) (2022-09-30) + +**Note:** Version bump only for package example + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/example@0.4.17...example@0.17.0) (2022-09-30) + +**Note:** Version bump only for package example + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.16.2...@cosmos-kit/example@0.16.3) (2022-09-25) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.16.1...@cosmos-kit/example@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.16.0...@cosmos-kit/example@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.15.0...@cosmos-kit/example@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.14.0...@cosmos-kit/example@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/example + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.13.2...@cosmos-kit/example@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/example@0.11.0...@cosmos-kit/example@0.13.2) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/example + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/my-app@0.2.2...my-app@0.2.3) (2022-09-17) + +**Note:** Version bump only for package my-app + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/my-app@0.2.1...my-app@0.2.2) (2022-09-16) + +**Note:** Version bump only for package my-app + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/my-app@0.2.0...my-app@0.2.1) (2022-09-07) + +**Note:** Version bump only for package my-app + +# 0.2.0 (2022-09-06) + +**Note:** Version bump only for package my-app diff --git a/packages/example/LICENSE b/packages/example/LICENSE new file mode 100644 index 000000000..e8c402cfb --- /dev/null +++ b/packages/example/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 COSMOS-KIT AUTHORS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/example/README.md b/packages/example/README.md new file mode 100644 index 000000000..5a28247a8 --- /dev/null +++ b/packages/example/README.md @@ -0,0 +1,36 @@ +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/packages/example/components.json b/packages/example/components.json new file mode 100644 index 000000000..567d1a48b --- /dev/null +++ b/packages/example/components.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tailwind": { + "config": "tailwind.config.js", + "css": "style/global.css", + "baseColor": "zinc", + "cssVariables": true + }, + "aliases": { + "components": "components", + "utils": "lib/utils" + } +} diff --git a/packages/example/components/badge.tsx b/packages/example/components/badge.tsx new file mode 100644 index 000000000..6b31f7b1b --- /dev/null +++ b/packages/example/components/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ); +} + +export { Badge, badgeVariants }; diff --git a/packages/example/components/button.tsx b/packages/example/components/button.tsx new file mode 100644 index 000000000..6997ca8ee --- /dev/null +++ b/packages/example/components/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "lib/utils"; + +export const buttonVariants = cva( + "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +export const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + } +); + +Button.displayName = "Button"; diff --git a/packages/example/components/card.tsx b/packages/example/components/card.tsx new file mode 100644 index 000000000..ef0d1ddd7 --- /dev/null +++ b/packages/example/components/card.tsx @@ -0,0 +1,83 @@ +import * as React from "react"; + +import { cn } from "lib/utils"; + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardDescription, + CardContent, +}; diff --git a/packages/example/components/chain-wallet-card.tsx b/packages/example/components/chain-wallet-card.tsx new file mode 100644 index 000000000..a65c1db5e --- /dev/null +++ b/packages/example/components/chain-wallet-card.tsx @@ -0,0 +1,58 @@ +import { ChainName } from "@cosmos-kit/core"; +import { useChain } from "@cosmos-kit/react"; +import { Badge } from "components/badge"; +import { Button } from "components/button"; + +import { useIsClient } from "../hooks"; +import { ConnectedShowAddress } from "./react"; + +export const ChainWalletCard = ({ + chainName, + type = "address-on-page", +}: { + chainName: ChainName; + type: "address-in-modal" | "address-on-page"; +}) => { + const { chain, status, address, openView, chainWallet, walletRepo } = + useChain(chainName); + const isClient = useIsClient(); + + if (!isClient) return null; + + if (type === "address-in-modal") { + return ( +
+ +

+ {chain?.pretty_name} +

+
+ +
+ ); + } + + if (type === "address-on-page") { + return ( +
+ +

+ {chain?.pretty_name} +

+
+ {address && ( + + )} +
+ ); + } + + return null; +}; diff --git a/packages/example/components/chains-tx-wallet.tsx b/packages/example/components/chains-tx-wallet.tsx new file mode 100644 index 000000000..6cb0367c7 --- /dev/null +++ b/packages/example/components/chains-tx-wallet.tsx @@ -0,0 +1,111 @@ +import { ChainName } from "@cosmos-kit/core"; +import { useChain } from "@cosmos-kit/react"; +import React, { MouseEventHandler } from "react"; + +import { + Astronaut, + ChainDiv, + Connected, + ConnectedShowAddress, + ConnectedUserInfo, + Connecting, + ConnectStatusWarn, + CopyAddressBtn, + Disconnected, + Error, + NotExist, + Rejected, + RejectedWarn, + WalletConnectComponent, +} from "./react"; + +export function ChainsTXWalletSection({ chainName }: { chainName: ChainName }) { + const walletManager = useChain(chainName); + const { + chain: { pretty_name }, + wallet, + connect, + openView, + status, + username, + address, + message, + logoUrl, + } = walletManager; + + // Events + const onClickConnect: MouseEventHandler = async (e) => { + e.preventDefault(); + await connect(); + }; + + const onClickOpenView: MouseEventHandler = (e) => { + e.preventDefault(); + openView(); + }; + + // Components + const connectWalletbutton = ( + + } + connecting={} + connected={ + + } + rejected={} + error={} + notExist={ + + } + /> + ); + + const connectWalletWarn = ( + + } + error={ + + } + /> + ); + + const userInfo = username && ( + } /> + ); + + const addressBtn = ( + + +
+ } + /> + ); + + return ( +
+
+
{connectWalletbutton}
+ + {addressBtn} +
+ + {userInfo} + +
{connectWalletWarn}
+
+ ); +} diff --git a/packages/example/components/custom-connected.tsx b/packages/example/components/custom-connected.tsx new file mode 100644 index 000000000..f4c00ba52 --- /dev/null +++ b/packages/example/components/custom-connected.tsx @@ -0,0 +1,40 @@ +import { WalletViewProps } from "@cosmos-kit/core"; +import { ModalViewImpl } from "@cosmos-kit/react"; + +export function CustomConnectedView(props: WalletViewProps): ModalViewImpl { + const { onClose, wallet } = props; + + const { + walletInfo: { prettyName }, + username, + } = wallet; + + const header = ( +
+ Hello I'm a custom component +
+ ); + const body = ( +
+
+

+ {prettyName} {username} account is successfully connected +

+
+
+ ); + + return { + head: header, + content: body, + }; +} diff --git a/packages/example/components/dropdown-menu.tsx b/packages/example/components/dropdown-menu.tsx new file mode 100644 index 000000000..1e4d49a31 --- /dev/null +++ b/packages/example/components/dropdown-menu.tsx @@ -0,0 +1,205 @@ +"use client"; + +import * as React from "react"; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { + CheckIcon, + ChevronRightIcon, + DotFilledIcon, +} from "@radix-ui/react-icons"; + +import { cn } from "lib/utils"; + +const DropdownMenu = DropdownMenuPrimitive.Root; + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuGroup = DropdownMenuPrimitive.Group; + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal; + +const DropdownMenuSub = DropdownMenuPrimitive.Sub; + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)); +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName; + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName; + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)); +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName; + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)); +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean; + } +>(({ className, inset, ...props }, ref) => ( + +)); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ); +}; +DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +}; diff --git a/packages/example/components/index.ts b/packages/example/components/index.ts new file mode 100644 index 000000000..9079d18c0 --- /dev/null +++ b/packages/example/components/index.ts @@ -0,0 +1,4 @@ +export * from "./chain-wallet-card"; +export * from "./chains-tx-wallet"; +export * from "./react"; +export * from "./types"; diff --git a/packages/example/components/layout.tsx b/packages/example/components/layout.tsx new file mode 100644 index 000000000..a51ea8ffa --- /dev/null +++ b/packages/example/components/layout.tsx @@ -0,0 +1,19 @@ +import { ThemeProvider } from "components/theme-provider"; +import { ModeToggle } from "./mode-toggle"; + +interface RootLayoutProps { + children?: React.ReactNode; +} + +export function RootLayout({ children }: RootLayoutProps) { + return ( + +
+
+ +
+ {children} +
+
+ ); +} diff --git a/packages/example/components/mode-toggle.tsx b/packages/example/components/mode-toggle.tsx new file mode 100644 index 000000000..6b2a7ad16 --- /dev/null +++ b/packages/example/components/mode-toggle.tsx @@ -0,0 +1,56 @@ +import { useModalTheme } from "@cosmos-kit/react"; +import { MoonIcon, SunIcon } from "@radix-ui/react-icons"; +import { Button } from "components/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "components/dropdown-menu"; +import { useTheme } from "next-themes"; +import * as React from "react"; + +export function ModeToggle() { + const { setTheme } = useTheme(); + const { modalTheme, setModalTheme } = useModalTheme(); + + return ( + <> + + + + + + { + setTheme("light"); + setModalTheme("light"); + }} + > + Light + + { + setTheme("dark"); + setModalTheme("dark"); + }} + > + Dark + + { + setTheme("system"); + setModalTheme("system"); + }} + > + System + + + + + ); +} diff --git a/packages/example/components/react/address-card.tsx b/packages/example/components/react/address-card.tsx new file mode 100644 index 000000000..861dfa5c2 --- /dev/null +++ b/packages/example/components/react/address-card.tsx @@ -0,0 +1,87 @@ +import { WalletStatus } from "@cosmos-kit/core"; +import { Badge } from "components/badge"; +import React, { ReactNode, useEffect, useState } from "react"; + +import { CopyAddressType } from "../types"; + +export function stringTruncateFromdiv(str: string, maxLength: number) { + const midChar = "…"; // character to insert into the center of the result + + if (str.length <= maxLength) return str; + + // length of beginning part + const left = Math.ceil(maxLength / 2); + + // start index of ending part + const right = str.length - Math.floor(maxLength / 2) + 1; + + return str.substring(0, left) + midChar + str.substring(right); +} + +export const ConnectedShowAddress = ({ + address, + walletIcon, + size = "md", + maxDisplayLength, +}: CopyAddressType) => { + const [displayAddress, setDisplayAddress] = useState( + "address not available yet" + ); + + const defaultMaxLength = { + lg: 14, + md: 16, + sm: 18, + }; + + useEffect(() => { + if (!address) { + setDisplayAddress("address not available yet"); + } else if (maxDisplayLength) { + setDisplayAddress(stringTruncateFromdiv(address, maxDisplayLength)); + } else { + setDisplayAddress( + stringTruncateFromdiv( + address, + defaultMaxLength[size as keyof typeof defaultMaxLength] + ) + ); + } + }, [address]); + + if (!address) return null; + + return ( + + {address && walletIcon && ( +
+ {displayAddress} +
+ )} +

{displayAddress}

+
+ ); +}; + +export const CopyAddressBtn = ({ + walletStatus, + connected, +}: { + walletStatus: WalletStatus; + connected: ReactNode; +}) => { + switch (walletStatus) { + case "Connected": + return <>{connected}; + default: + return ( +
+ +
+ ); + } +}; diff --git a/packages/example/components/react/astronaut.tsx b/packages/example/components/react/astronaut.tsx new file mode 100644 index 000000000..104da850a --- /dev/null +++ b/packages/example/components/react/astronaut.tsx @@ -0,0 +1,156 @@ +export const Astronaut = (props: any) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +); diff --git a/packages/example/components/react/chain-card.tsx b/packages/example/components/react/chain-card.tsx new file mode 100644 index 000000000..28e3be91e --- /dev/null +++ b/packages/example/components/react/chain-card.tsx @@ -0,0 +1,11 @@ +import { Badge } from "components/badge"; +import { ChainDivProps } from "../types"; + +export const ChainDiv = (props: ChainDivProps) => { + return ( + + {props.icon && chain logo} + Chain: {props.prettyName} + + ); +}; diff --git a/packages/example/components/react/handleChangeColor.tsx b/packages/example/components/react/handleChangeColor.tsx new file mode 100644 index 000000000..c1f46bc5d --- /dev/null +++ b/packages/example/components/react/handleChangeColor.tsx @@ -0,0 +1,9 @@ +// use for let color mode value fit Rules of Hooks +export function handleChangeColorModeValue( + colorMode: string, + light: any, + dark: any +) { + if (colorMode === "light") return light; + if (colorMode === "dark") return dark; +} diff --git a/packages/example/components/react/index.ts b/packages/example/components/react/index.ts new file mode 100644 index 000000000..721f33e5d --- /dev/null +++ b/packages/example/components/react/index.ts @@ -0,0 +1,7 @@ +export * from "./address-card"; +export * from "./astronaut"; +export * from "./chain-card"; +export * from "./send-tokens-card"; +export * from "./user-card"; +export * from "./wallet-connect"; +export * from "./warn-block"; diff --git a/packages/example/components/react/send-tokens-card.tsx b/packages/example/components/react/send-tokens-card.tsx new file mode 100644 index 000000000..269f361de --- /dev/null +++ b/packages/example/components/react/send-tokens-card.tsx @@ -0,0 +1,64 @@ +import React from "react"; + +import { Badge } from "components/badge"; +import { Button } from "components/button"; +import { Card, CardContent, CardHeader, CardTitle } from "components/card"; + +export const SendTokensdiv = ({ + balance, + response, + isFetchingBalance, + isConnectWallet, + getBalancebuttonText, + handleClickGetBalance, + sendTokensbuttonText, + handleClickSendTokens, +}: { + balance: number; + response?: string; + isFetchingBalance: boolean; + isConnectWallet: boolean; + sendTokensbuttonText?: string; + handleClickSendTokens: () => void; + getBalancebuttonText?: string; + handleClickGetBalance: () => void; +}) => { + if (!isConnectWallet) { + return ( +
+
Please Connect Your Wallet!
+
+ ); + } + return ( +
+
+ + Balance:  + {balance} + + + +
+ + {response && ( + + + +

+ Result +

+
+
+ +
{response}
+
+
+ )} +
+ ); +}; diff --git a/packages/example/components/react/user-card.tsx b/packages/example/components/react/user-card.tsx new file mode 100644 index 000000000..18e26490d --- /dev/null +++ b/packages/example/components/react/user-card.tsx @@ -0,0 +1,23 @@ +import React from "react"; + +import { Card, CardHeader, CardTitle } from "components/card"; +import { Badge } from "components/badge"; +import { ConnectedUserdivType } from "../types"; + +export const ConnectedUserInfo = ({ username, icon }: ConnectedUserdivType) => { + if (!username) return null; + + return ( + + + + + + Account name: {username} + +
{icon}
+
+
+
+ ); +}; diff --git a/packages/example/components/react/wallet-connect.tsx b/packages/example/components/react/wallet-connect.tsx new file mode 100644 index 000000000..7462dc171 --- /dev/null +++ b/packages/example/components/react/wallet-connect.tsx @@ -0,0 +1,160 @@ +import { WalletStatus } from "@cosmos-kit/core"; +import React, { MouseEventHandler, ReactNode } from "react"; + +import { Button } from "components/button"; +import { ConnectWalletType } from "../types"; + +export const ConnectWalletbutton = ({ + buttonText, + isLoading, + isDisabled, + icon, + onClickConnectBtn, +}: ConnectWalletType) => { + return ( + <> + {isLoading ? ( + + ) : ( + + )} + + ); +}; + +export const Disconnected = ({ + buttonText, + onClick, +}: { + buttonText: string; + onClick: MouseEventHandler; +}) => { + return ( + + ); +}; + +export const Connected = ({ + buttonText, + onClick, +}: { + buttonText: string; + onClick: MouseEventHandler; +}) => { + return ( + + ); +}; + +export const Connecting = () => { + return ; +}; + +export const Rejected = ({ + buttonText, + wordOfWarning, + onClick, +}: { + buttonText: string; + wordOfWarning?: string; + onClick: MouseEventHandler; +}) => { + return ( +
+ + {wordOfWarning && ( +
+ + Warning:  + {wordOfWarning} + +
+ )} +
+ ); +}; + +export const Error = ({ + buttonText, + wordOfWarning, + onClick, +}: { + buttonText: string; + wordOfWarning?: string; + onClick: MouseEventHandler; +}) => { + return ( +
+ + {wordOfWarning && ( +
+ + Warning:  + {wordOfWarning} + +
+ )} +
+ ); +}; + +export const NotExist = ({ + buttonText, + onClick, +}: { + buttonText: string; + onClick: MouseEventHandler; +}) => { + return ( + + ); +}; + +export const WalletConnectComponent = ({ + walletStatus, + disconnect, + connecting, + connected, + rejected, + error, + notExist, +}: { + walletStatus: WalletStatus; + disconnect: ReactNode; + connecting: ReactNode; + connected: ReactNode; + rejected: ReactNode; + error: ReactNode; + notExist: ReactNode; +}) => { + switch (walletStatus) { + case "Disconnected": + return <>{disconnect}; + case "Connecting": + return <>{connecting}; + case "Connected": + return <>{connected}; + case "Rejected": + return <>{rejected}; + case "Error": + return <>{error}; + case "NotExist": + return <>{notExist}; + default: + return <>{disconnect}; + } +}; diff --git a/packages/example/components/react/warn-block.tsx b/packages/example/components/react/warn-block.tsx new file mode 100644 index 000000000..39fca9868 --- /dev/null +++ b/packages/example/components/react/warn-block.tsx @@ -0,0 +1,48 @@ +import { WalletStatus } from "@cosmos-kit/core"; +import React, { ReactNode } from "react"; + +export const WarnBlock = ({ + wordOfWarning, + icon, +}: { + wordOfWarning?: string; + icon?: ReactNode; +}) => { + return ( +
+
+
{icon}
+ {wordOfWarning} +
+
+ ); +}; + +export const RejectedWarn = ({ + wordOfWarning, + icon, +}: { + wordOfWarning?: string; + icon?: ReactNode; +}) => { + return ; +}; + +export const ConnectStatusWarn = ({ + walletStatus, + rejected, + error, +}: { + walletStatus: WalletStatus; + rejected: ReactNode; + error: ReactNode; +}) => { + switch (walletStatus) { + case "Rejected": + return <>{rejected}; + case "Error": + return <>{error}; + default: + return <>; + } +}; diff --git a/packages/example/components/theme-provider.tsx b/packages/example/components/theme-provider.tsx new file mode 100644 index 000000000..a4bd244a8 --- /dev/null +++ b/packages/example/components/theme-provider.tsx @@ -0,0 +1,7 @@ +import * as React from "react"; +import { ThemeProvider as NextThemesProvider } from "next-themes"; +import { type ThemeProviderProps } from "next-themes/dist/types"; + +export function ThemeProvider({ children, ...props }: ThemeProviderProps) { + return {children}; +} diff --git a/packages/example/components/types.tsx b/packages/example/components/types.tsx new file mode 100644 index 000000000..bdd6e1658 --- /dev/null +++ b/packages/example/components/types.tsx @@ -0,0 +1,78 @@ +import { MouseEventHandler, ReactNode, RefObject } from "react"; +import { IconType } from "react-icons"; + +export interface ChainDivProps { + prettyName: string; + icon?: string; +} + +export interface ConnectWalletType { + buttonText?: string; + isLoading?: boolean; + isDisabled?: boolean; + icon?: IconType; + onClickConnectBtn?: MouseEventHandler; +} + +export interface ChooseChainInfo { + chainName: string; + chainRoute?: string; + label: string; + value: string; + icon?: string; + disabled?: boolean; +} +export interface ConnectWalletType { + buttonText?: string; + isLoading?: boolean; + isDisabled?: boolean; + icon?: IconType; + onClickConnectBtn?: MouseEventHandler; +} + +export interface ConnectedUserdivType { + username?: string; + icon?: ReactNode; +} + +export interface OptionBase { + variant?: string; + colorScheme?: string; + isFixed?: boolean; + isDisabled?: boolean; +} + +export interface ChainOption extends OptionBase { + isDisabled?: boolean; + label: string; + value: string; + icon?: string; + chainName: string; + chainRoute?: string; +} + +export type handleSelectChainDropdown = (value: ChainOption | null) => void; + +export interface ChangeChainDropdownType { + data: ChainOption[]; + selectedItem?: ChainOption; + onChange: handleSelectChainDropdown; + chainDropdownLoading?: boolean; +} + +export interface ChangeChainMenuType { + data: ChainOption[]; + value?: ChainOption; + onClose?: () => void; + onChange: handleSelectChainDropdown; + innerRef?: RefObject; +} + +export type CopyAddressType = { + address?: string; + walletIcon?: string; + isLoading?: boolean; + maxDisplayLength?: number; + isRound?: boolean; + size?: string; +}; diff --git a/packages/example/config/seo.js b/packages/example/config/seo.js new file mode 100644 index 000000000..dfbeadd33 --- /dev/null +++ b/packages/example/config/seo.js @@ -0,0 +1,35 @@ +const siteUrl = "https://test.cosmoskit.com"; +const siteAddress = new URL(siteUrl); +const canonical = siteAddress.href.slice(0, -1); +const title = "CosmosKit Testing"; +const description = "Test site for CosmosKit"; +const fbAppId = null; +module.exports = { + title, + canonical, + description, + openGraph: { + type: "website", + url: siteUrl, + title, + description, + site_name: title, + images: [ + { + url: canonical + "/og_image.png", + // width: 942, + // height: 466, + alt: title, + }, + ], + }, + twitter: { + handle: "@cosmology_tech", + site: "@cosmology_tech", + }, + facebook: fbAppId + ? { + appId: fbAppId, + } + : undefined, +}; diff --git a/packages/example/config/site.js b/packages/example/config/site.js new file mode 100644 index 000000000..b3a59a09c --- /dev/null +++ b/packages/example/config/site.js @@ -0,0 +1,28 @@ +const siteUrl = 'https://test.cosmoskit.com'; +const siteAddress = new URL(siteUrl); +const canonical = siteAddress.href.slice(0, -1); + +module.exports = { + company: { + nick: 'CosmosKit', + name: 'CosmosKit', + addr: ['San Francisco, CA'], + legalCounty: 'San Francisco', + legalState: 'California' + }, + site: { + siteUrl, + www: `www.${siteAddress.host}`, + host: siteAddress.host, + canonical + }, + emails: { + hello: 'hello@cosmology.zone', + support: 'support@cosmology.zone', + abuse: 'abuse@cosmology.zone', + privacy: 'privacy@cosmology.zone', + legal: 'legal@cosmology.zone', + copyright: 'copyright@cosmology.zone', + arbitrationOptOut: 'arbitration-opt-out@cosmology.zone' + } +}; diff --git a/packages/example/hooks/index.ts b/packages/example/hooks/index.ts new file mode 100644 index 000000000..558721b99 --- /dev/null +++ b/packages/example/hooks/index.ts @@ -0,0 +1,11 @@ +import * as React from "react"; + +export function useIsClient() { + const [isClient, setIsClient] = React.useState(false); + + React.useEffect(() => { + setIsClient(true); + }, []); + + return isClient; +} diff --git a/packages/example/lib/utils.ts b/packages/example/lib/utils.ts new file mode 100644 index 000000000..ec79801fe --- /dev/null +++ b/packages/example/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/packages/example/next.config.js b/packages/example/next.config.js new file mode 100644 index 000000000..a69e4f2a7 --- /dev/null +++ b/packages/example/next.config.js @@ -0,0 +1,64 @@ +// const withBundleAnalyzer = require("@next/bundle-analyzer")({ +// enabled: process.env.ANALYZE === "true", +// }); + +// const withTM = require("next-transpile-modules")(["@cosmos-kit/web3auth"]); + +// /** @type {import('next').NextConfig} */ +// module.exports = withTM( +// withBundleAnalyzer({ +// reactStrictMode: true, +// swcMinify: true, +// webpack: (config) => { +// config.module.rules.push({ +// test: /\.(ts|tsx)$/, +// use: [ +// { +// loader: "babel-loader", +// options: { +// presets: [ +// "@babel/preset-env", +// ["@babel/preset-react", { runtime: "automatic" }], +// ["@babel/preset-typescript", { allowDeclareFields: true }], +// ], +// plugins: ["babel-plugin-inline-import-data-uri"], +// }, +// }, +// ], +// }); + +// config.resolve.extensions.push(".ts", ".tsx"); +// return config; +// }, +// }) +// ); +const path = require("path"); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + experimental: { esmExternals: true }, + reactStrictMode: true, + transpilePackages: [ + "@cosmos-kit/web3auth", + "@cosmos-kit/leap-social-login", + "@leapwallet/capsule-web-sdk-lite", + "@leapwallet/cosmos-social-login-capsule-provider", + ], + /** + * + * @param {import('webpack').Configuration} config + * @param {import('next/dist/server/config-shared').WebpackConfigContext} _context + * @returns {import('webpack').Configuration} + */ + webpack: (config, _context) => { + const overridePath = path.resolve(__dirname, "../..", "node_modules/react"); + config.resolve.alias["react"] = overridePath; + config.resolve.alias["@cosmos-kit/react"] = path.resolve( + __dirname, + "../react" + ); + return config; + }, +}; + +module.exports = nextConfig; diff --git a/packages/example/package.json b/packages/example/package.json new file mode 100644 index 000000000..37f905cfe --- /dev/null +++ b/packages/example/package.json @@ -0,0 +1,89 @@ +{ + "name": "example", + "version": "2.25.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "build:analyze": "ANALYZE=true next build", + "start": "next start", + "lint": "next lint", + "export": "next build && next export", + "postexport": "npm run seo", + "seo": "node ./seo/seo.js", + "deploy": "AWS_PROFILE=webinc aws s3 sync out/ s3://test.cosmoskit.com", + "invalidate": "AWS_PROFILE=webinc aws cloudfront create-invalidation --distribution-id E1J4F8FDME5L4Z --paths \"/*\"", + "deploy:all": "npm run export && npm run deploy && ./seo/prepare.sh" + }, + "overrides": { + "next": { + "@swc/helpers": "0.5.1" + } + }, + "dependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/cosmwasm-stargate": ">=0.32.3", + "@cosmjs/math": "0.32.3", + "@cosmjs/proto-signing": ">=0.32.3", + "@cosmjs/stargate": ">=0.32.3", + "@cosmos-kit/cdcwallet": "^2.13.2", + "@cosmos-kit/coin98": "^2.11.2", + "@cosmos-kit/core": "^2.13.1", + "@cosmos-kit/cosmostation": "^2.12.0", + "@cosmos-kit/fin": "^2.11.2", + "@cosmos-kit/galaxy-station": "^2.10.2", + "@cosmos-kit/ins": "^2.1.7", + "@cosmos-kit/keplr": "^2.12.2", + "@cosmos-kit/leap": "^2.12.2", + "@cosmos-kit/leap-capsule-social-login": "^0.10.2", + "@cosmos-kit/leap-metamask-cosmos-snap": "^0.12.2", + "@cosmos-kit/ledger": "^2.11.2", + "@cosmos-kit/owallet": "^2.11.2", + "@cosmos-kit/react": "^2.18.0", + "@cosmos-kit/shell": "^2.11.2", + "@cosmos-kit/station": "^2.10.2", + "@cosmos-kit/tailwind": "^1.5.2", + "@cosmos-kit/vectis": "^2.11.2", + "@cosmos-kit/web3auth": "^2.11.0", + "@interchain-ui/react": "^1.23.13", + "@leapwallet/cosmos-social-login-capsule-provider-ui": "0.0.56", + "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-slot": "^1.0.2", + "@web3modal/core": "^2.0.0-rc.1", + "@web3modal/ui": "^2.0.0-rc.1", + "bignumber.js": "^9.1.1", + "bootstrap": "^5.3.2", + "chain-registry": "^1.63.2", + "class-variance-authority": "^0.6.1", + "clsx": "^1.2.1", + "cosmjs-types": ">=0.9.0", + "cosmjs-utils": "0.1.0", + "juno-network": "^0.15.1", + "next": "^13", + "react": "^18.2.0", + "react-bootstrap": "^2.9.1", + "react-dom": "^18.2.0", + "react-icons": "4.7.1", + "react-no-ssr": "^1.1.0", + "tailwind-merge": "^1.13.2", + "tailwindcss-animate": "^1.0.6" + }, + "devDependencies": { + "@babel/preset-env": "7.22.7", + "@babel/preset-react": "7.22.5", + "@babel/preset-typescript": "7.22.5", + "@next/bundle-analyzer": "^13.4.9", + "@types/node": "^20", + "@types/react": "^18", + "@types/react-dom": "^18", + "autoprefixer": "^10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-inline-import-data-uri": "1.0.1", + "next-transpile-modules": "^10.0.0", + "postcss": "8.4.24", + "shadcn-ui": "0.2.3", + "tailwindcss": "3.3.2", + "typescript": "^5" + } +} diff --git a/packages/example/pages/_app.tsx b/packages/example/pages/_app.tsx new file mode 100644 index 000000000..025e248fc --- /dev/null +++ b/packages/example/pages/_app.tsx @@ -0,0 +1,239 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable unused-imports/no-unused-imports */ +import "bootstrap/dist/css/bootstrap.min.css"; +import "@leapwallet/cosmos-social-login-capsule-provider-ui/styles.css"; +import "../style/global.css"; +import "@interchain-ui/react/styles"; + +import { Chain } from "@chain-registry/types"; +import { Decimal } from "@cosmjs/math"; +import { GasPrice } from "@cosmjs/stargate"; +import { wallets as cdcwalletWallets } from "@cosmos-kit/cdcwallet"; +import { wallets as coin98Wallets } from "@cosmos-kit/coin98"; +import { ChainName } from "@cosmos-kit/core"; +import { MainWalletBase } from "@cosmos-kit/core"; +import { wallets as cosmostationWallets } from "@cosmos-kit/cosmostation"; +import { wallets as exodusWallets } from "@cosmos-kit/exodus"; +import { wallets as finWallets } from "@cosmos-kit/fin"; +import { wallets as frontierWallets } from "@cosmos-kit/frontier"; +import { wallets as galaxyStationWallets } from "@cosmos-kit/galaxy-station"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { wallets as leapWallets } from "@cosmos-kit/leap"; +import { wallets as snapWallet } from "@cosmos-kit/leap-metamask-cosmos-snap"; +import { wallets as ledgerWallets } from "@cosmos-kit/ledger"; +import { wallets as ninjiWallets } from "@cosmos-kit/ninji"; +import { wallets as omniWallets } from "@cosmos-kit/omni"; +import { wallets as owalletWallets } from "@cosmos-kit/owallet"; +// Show how to custom modal views +import { ChainProvider, defaultModalViews } from "@cosmos-kit/react"; +// import { ChainProvider } from "@cosmos-kit/react"; +import { wallets as shellWallets } from "@cosmos-kit/shell"; +import { wallets as stationWallets } from "@cosmos-kit/station"; +import { wallets as tailwindWallet } from "@cosmos-kit/tailwind"; +import { wallets as trustWallets } from "@cosmos-kit/trust"; +import { wallets as vectisWallets } from "@cosmos-kit/vectis"; +// import { makeWeb3AuthWallets } from "@cosmos-kit/web3auth"; +import { wallets as xdefiWallets } from "@cosmos-kit/xdefi"; +import { useTheme } from "@interchain-ui/react"; +import { assets, chains } from "chain-registry"; +import type { AppProps } from "next/app"; +import dynamic from "next/dynamic"; +import React, { useEffect, useMemo, useState } from "react"; + +// import { CustomConnectedView } from "../components/custom-connected"; +import { RootLayout } from "../components/layout"; +// import { useTheme } from "@interchain-ui/react"; + +function MyApp({ Component, pageProps }: AppProps) { + const defaultWallets: MainWalletBase[] = [...keplrWallets, ...leapWallets]; + const [wallets, setWallets] = useState(defaultWallets); + const [loadingWallets, setLoadingWallet] = useState(false); + // const web3AuthWallets = useMemo( + // () => + // makeWeb3AuthWallets({ + // loginMethods: [ + // { + // provider: "google", + // name: "Google", + // logo: "https://upload.wikimedia.org/wikipedia/commons/5/53/Google_%22G%22_Logo.svg", + // }, + // ], + // client: { + // clientId: "localhostid", + // web3AuthNetwork: "testnet", + // }, + // promptSign: async (...args) => + // // eslint-disable-next-line no-alert + // confirm("Sign transaction? \n" + JSON.stringify(args, null, 2)), + // }), + // [] + // ); + + useEffect(() => { + setLoadingWallet(true); + import("@cosmos-kit/leap-capsule-social-login") + .then((CapsuleModule) => { + return CapsuleModule.wallets; + }) + .then((leapSocialLogin) => { + setWallets([...keplrWallets, ...leapWallets, ...leapSocialLogin]); + setLoadingWallet(false); + }); + }, []); + + if (loadingWallets) { + return <>Loading...; + } + + return ( + + { + const chainName = + typeof chain === "string" ? chain : chain.chain_name; + switch (chainName) { + case "osmosis": + return { + // @ts-ignore + gasPrice: new GasPrice(Decimal.zero(1), "uosmo"), + }; + default: + return void 0; + } + }, + }} + logLevel={"DEBUG"} + endpointOptions={{ + isLazy: true, + endpoints: { + cosmoshub: { + rpc: [ + { + url: "https://rpc.cosmos.directory/cosmoshub", + headers: {}, + }, + ], + }, + // terra2: { + // rpc: ["https://terra-rpc.lavenderfive.com/"], + // rest: ["https://phoenix-lcd.terra.dev/"], + // }, + // terra2testnet: { + // rpc: ["https://terra-testnet-rpc.polkachu.com/"], + // rest: ["https://pisco-lcd.terra.dev/"], + // }, + }, + }} + // // ==== Custom base modal customization + // // modalTheme={{ + // // modalContentClassName: "my-custom-modal-content", + // }} + // // ==== Custom components + // // modalViews={{ + // // ...defaultModalViews, + // // Connected: CustomConnectedView, + // // }} + // walletModal={CustomModal} + // modalOptions={{ mobile: { displayQRCodeEveryTime: true } }} + > + + + + + ); +} + +export default MyApp; + +const LeapSocialLogin = dynamic( + () => + import("@leapwallet/cosmos-social-login-capsule-provider-ui").then( + (m) => m.CustomCapsuleModalView + ), + { ssr: false } +); + +export function CustomCapsuleModalViewX() { + const [showCapsuleModal, setShowCapsuleModal] = useState(false); + const [oAuthMethods, setOAuthMethods] = useState>([]); + + useEffect(() => { + import("@leapwallet/cosmos-social-login-capsule-provider").then( + (capsuleProvider) => { + setOAuthMethods([ + capsuleProvider.OAuthMethod.GOOGLE, + capsuleProvider.OAuthMethod.FACEBOOK, + capsuleProvider.OAuthMethod.TWITTER, + ]); + } + ); + }, []); + + const { theme } = useTheme(); + + return ( +
+ { + window.successFromCapsuleModal?.(); + }} + onLoginFailure={() => { + window.failureFromCapsuleModal?.(); + }} + logoUrl="https://raw.githubusercontent.com/cosmology-tech/cosmos-kit/main/packages/docs/public/favicon-96x96.png" + appName="CosmosKit" + oAuthMethods={oAuthMethods} + /> +
+ ); +} diff --git a/packages/example/pages/add-chain.tsx b/packages/example/pages/add-chain.tsx new file mode 100644 index 000000000..25720cb67 --- /dev/null +++ b/packages/example/pages/add-chain.tsx @@ -0,0 +1,117 @@ +import { WalletStatus } from "@cosmos-kit/core"; +import { useChain, useManager } from "@cosmos-kit/react"; +import { assets, chains } from "chain-registry"; + +import { ConnectedShowAddress } from "../components"; + +const chainNames_1 = ["osmosis"]; +const chainNames_2 = ["osmosis", "chihuahua"]; + +export default () => { + const usernames: (string | undefined)[] = []; + const walletNames: (string | undefined)[] = []; + const statusList: WalletStatus[] = []; + const connectList: (() => void)[] = []; + const disconnectList: (() => void)[] = []; + const { addChains, getWalletRepo } = useManager(); + + const addressInModal = chainNames_1.map((chainName) => { + const { chain, openView, username, wallet, status, connect, disconnect } = + useChain(chainName); + usernames.push(username); + walletNames.push(wallet?.prettyName); + statusList.push(status); + connectList.push(connect); + disconnectList.push(disconnect); + + return ( +
+
{chain.pretty_name}
+ {status === "Connecting" ? ( + + ) : ( + + )} +
+ ); + }); + + const addressOnPage = chainNames_2.map((chainName) => { + const { chain, username, address, connect, status, disconnect, wallet } = + useChain(chainName); + usernames.push(username); + walletNames.push(wallet?.prettyName); + statusList.push(status); + connectList.push(connect); + disconnectList.push(disconnect); + + return ( +
+
{chain.pretty_name}
+
+ +
+
+ ); + }); + + const getGlobalbutton = () => { + if (statusList.find((s) => s === "Connecting")) { + return ; + } + if (statusList.find((s) => s === "Connected")) { + return ( +
+ + + +
+ ); + } + + return ; + }; + + return ( +
+
+
ChainProvider Test
+ {getGlobalbutton()} + +
+
+
+
Address div in Modal
+
+
+
{addressInModal}
+
+
+
+
+
Address div on Page
+
+
+
{addressOnPage}
+
+
+
+ ); +}; diff --git a/packages/example/pages/add-cw20.tsx b/packages/example/pages/add-cw20.tsx new file mode 100644 index 000000000..46ce3c0b3 --- /dev/null +++ b/packages/example/pages/add-cw20.tsx @@ -0,0 +1,83 @@ +import { useChain } from "@cosmos-kit/react"; +import { useMemo } from "react"; +import { BsFillMoonStarsFill, BsFillSunFill } from "react-icons/bs"; +import { FaUserCircle } from "react-icons/fa"; +import { IoWalletOutline } from "react-icons/io5"; + +const chainName = "juno"; + +export default () => { + const { + username, + chain, + connect, + disconnect, + wallet, + status, + assets, + suggestToken, + } = useChain(chainName); + + /** + * Retrieve the first CW20 to provide an example + */ + const cw20Tokens = useMemo(() => { + if (assets) { + return assets.assets + .filter((asset) => asset.type_asset === "cw20") + .slice(0, 1); + } + + return []; + }, [assets]); + + const getConnectbutton = () => { + if (status === "Connecting") { + return ; + } + + if (status === "Connected") { + return ( +
+ + + + +
+ ); + } + + return ; + }; + + return ( +
+
+
{chainName}
+ {getConnectbutton()} +
+
+ ); +}; diff --git a/packages/example/pages/chain/[name].tsx b/packages/example/pages/chain/[name].tsx new file mode 100644 index 000000000..65ab4c4f7 --- /dev/null +++ b/packages/example/pages/chain/[name].tsx @@ -0,0 +1,134 @@ +import { useChain } from "@cosmos-kit/react"; +import { chains } from "chain-registry"; +import Link from "next/link"; + +export const chainNames = ["cosmoshub", "osmosis", "stargaze", "chihuahua"]; + +export const chainsInfo = chainNames.map((name) => { + const chain = chains.find((chain) => chain.chain_name === name); + return { + name, + prettyName: chain?.pretty_name, + }; +}); + +export function ChainLayout({ + openModal, + activeChain, + linkFormat, + children, +}: { + openModal: () => void; + activeChain: string; + linkFormat: string; + children: JSX.Element; +}) { + return ( +
+
+
+ +
+
    + {chainsInfo.map(({ name, prettyName }) => { + return ( +
  • + + {prettyName} + +
  • + ); + })} +
+
+
+ {children} +
+
+ ); +} + +export function ChainTable({ + chainName, + username, + address, +}: { + chainName: string; + username?: string; + address?: string; +}) { + return ( +
+ + + + + + + + + + + + + + + +
ChainUsernameAddress
{chainName}{username} + {address && + `${address?.slice(0, 7)}...${address?.slice( + address.length - 4, + address.length + )}`} +
+
+ ); +} + +export default function ChainPage(props: { name: string; prettyName: string }) { + const { username, openView, address } = useChain(props.name); + + return ( + + + + ); +} + +export async function getStaticPaths() { + return { + paths: chainNames.map((chainName) => ({ + params: { + name: chainName, + }, + })), + fallback: true, + }; +} + +export async function getStaticProps({ params }: { params: { name: string } }) { + const chainInfo = chainsInfo.find((chain) => chain.name === params.name); + return { + props: { + ...chainInfo, + }, + }; +} diff --git a/packages/example/pages/chain/query.tsx b/packages/example/pages/chain/query.tsx new file mode 100644 index 000000000..917d627a2 --- /dev/null +++ b/packages/example/pages/chain/query.tsx @@ -0,0 +1,33 @@ +import { useRouter } from "next/router"; +import { ChainLayout, ChainTable, chainsInfo } from "./[name]"; +import { useChain } from "@cosmos-kit/react"; + +export default function () { + const router = useRouter(); + const name = router.query.name as string; + + if (!name) { + return <>Name undefined.; + } + + const { username, openView, address } = useChain(name); + const chainInfo = chainsInfo.find((chain) => chain.name === name); + + if (!chainInfo) { + return <>Undefined chain.; + } + + return ( + + + + ); +} diff --git a/packages/example/pages/cosmoshub.tsx b/packages/example/pages/cosmoshub.tsx new file mode 100644 index 000000000..7cd4df392 --- /dev/null +++ b/packages/example/pages/cosmoshub.tsx @@ -0,0 +1,38 @@ +import { useChain } from "@cosmos-kit/react"; + +export default () => { + const { username, connect, disconnect, wallet, status } = + useChain("cosmoshub"); + + const getConnectbutton = () => { + if (status === "Connecting") { + return ; + } + if (status === "Connected") { + return ( +
+ {wallet?.prettyName} + {username} + +
+ ); + } + + return ; + }; + + return ( +
+
+
Cosmos Hub
+ {getConnectbutton()} +
+
+ ); +}; diff --git a/packages/example/pages/endpoint.tsx b/packages/example/pages/endpoint.tsx new file mode 100644 index 000000000..31c060806 --- /dev/null +++ b/packages/example/pages/endpoint.tsx @@ -0,0 +1,42 @@ +import "bootstrap/dist/css/bootstrap.min.css"; +import { useChainWallet, useManager } from "@cosmos-kit/react"; +import { useEffect, useState } from "react"; +import Button from "react-bootstrap/Button"; +import ListGroup from "react-bootstrap/ListGroup"; + +const Page = () => { + const { chainWallet } = useChainWallet("cosmoshub", "keplr-extension"); + const { addEndpoints } = useManager(); + const [endpoints, setEndpoints] = useState([]); + const [n, setn] = useState(0); + + useEffect(() => { + if (n !== 0) { + addEndpoints({ cosmoshub: { rpc: [`endpoint added ${n}`] } }); + } + setEndpoints( + chainWallet?.preferredEndpoints?.rpc?.map((rpc) => { + return typeof rpc === "string" ? rpc : rpc.url; + }) || [] + ); + }, [n]); + + return ( + <> + + + {endpoints.map((endpoint, i) => { + return {endpoint}; + })} + + + ); +}; + +export default Page; diff --git a/packages/example/pages/event.tsx b/packages/example/pages/event.tsx new file mode 100644 index 000000000..671dc6c0a --- /dev/null +++ b/packages/example/pages/event.tsx @@ -0,0 +1,35 @@ +import { useChain, useManager } from "@cosmos-kit/react"; +import { useEffect } from "react"; + +const chainName = "cosmoshub"; + +export default () => { + const { chain, status, username, address, connect } = useChain(chainName); + const { on, off } = useManager(); + + const handler = () => { + console.log("trigger event refresh_connection"); + }; + + useEffect(() => { + on("refresh_connection", handler); + return () => { + off("refresh_connection", handler); + }; + }, []); + + return ( +
+
+ {status === "Connecting" ? ( + + ) : ( + + )} +
{`Chain: ${chain.pretty_name}`}
+
{`Username: ${username}`}
+
{`Address: ${address}`}
+
+
+ ); +}; diff --git a/packages/example/pages/gov.tsx b/packages/example/pages/gov.tsx new file mode 100644 index 000000000..e4aeb13db --- /dev/null +++ b/packages/example/pages/gov.tsx @@ -0,0 +1,50 @@ +import { useChainWallet } from "@cosmos-kit/react"; +import { useEffect } from "react"; + +const Test = () => { + const { signAndBroadcast, connect, address } = useChainWallet( + "osmosis", + "keplr-extension" + ); + + useEffect(() => { + connect(); + }, []); + + const onClick = async () => { + const voteMessages = []; + + voteMessages.push({ + typeUrl: "/cosmos.gov.v1beta1.MsgVote", + value: { + voter: address, + proposalId: "369", + option: 2, + }, + }); + + const fee = { + amount: [ + { + denom: "uosmo", + amount: "0", + }, + ], + gas: "200000", + }; + + const res = await signAndBroadcast(voteMessages, fee); + + if (res) { + alert("Voted successfully!"); + } + }; + + return ( +
+ +
+ ); +}; + +export default Test; diff --git a/packages/example/pages/iframe-alert.tsx b/packages/example/pages/iframe-alert.tsx new file mode 100644 index 000000000..97818b929 --- /dev/null +++ b/packages/example/pages/iframe-alert.tsx @@ -0,0 +1,119 @@ +import { useChain, useIframe } from "@cosmos-kit/react-lite"; +import { useState } from "react"; + +export default () => { + const { iframeRef } = useIframe({ + walletClientOverrides: { + signAmino: (...params: unknown[]) => { + // eslint-disable-next-line no-alert + alert("amino: " + JSON.stringify(params, null, 2)); + }, + signDirect: (...params: unknown[]) => { + // eslint-disable-next-line no-alert + alert("direct: " + JSON.stringify(params, null, 2)); + }, + }, + signerOverrides: { + signAmino: (...params: unknown[]) => { + // eslint-disable-next-line no-alert + alert("signer/amino: " + JSON.stringify(params, null, 2)); + }, + signDirect: (...params: unknown[]) => { + // eslint-disable-next-line no-alert + alert("signer/direct: " + JSON.stringify(params, null, 2)); + }, + }, + }); + + const { username, connect, disconnect, wallet, status } = + useChain("cosmoshub"); + + const getConnectButton = () => { + if (status === "Connecting") { + return ; + } + if (status === "Connected") { + return ( +
+ {wallet?.prettyName} + {username} + +
+ ); + } + + return ; + }; + + const [iframe, setIframe] = useState(null); + const [url, setUrl] = useState(""); + + const go = () => { + if (iframe) { + iframe.src = url; + } + }; + + return ( + <> + {getConnectButton()} + +
+
+ setUrl(event.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") { + go(); + } + }} + placeholder="URL" + value={url} + /> + + +
+ + +
+ + ); +}; diff --git a/packages/example/pages/iframe.tsx b/packages/example/pages/iframe.tsx new file mode 100644 index 000000000..2fde98420 --- /dev/null +++ b/packages/example/pages/iframe.tsx @@ -0,0 +1,113 @@ +import { useChain, useIframe } from "@cosmos-kit/react-lite"; +import { useRouter } from "next/router"; +import { useEffect, useState } from "react"; + +export default () => { + const { iframeRef } = useIframe(); + const router = useRouter(); + + const { username, connect, disconnect, wallet, status } = + useChain("cosmoshub"); + + const getConnectButton = () => { + if (status === "Connecting") { + return ; + } + if (status === "Connected") { + return ( +
+ {wallet?.prettyName} + {username} + +
+ ); + } + + return ; + }; + + const [iframe, setIframe] = useState(null); + const [url, setUrl] = useState(""); + useEffect(() => { + if ( + router.isReady && + typeof router.query.url === "string" && + router.query.url && + !url + ) { + setUrl(router.query.url as string); + if (iframe) { + iframe.src = url; + } + } + }, [router, iframe]); + + const go = () => { + if (iframe) { + iframe.src = url; + } + }; + + return ( + <> + {getConnectButton()} + +
+
+ setUrl(event.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") { + go(); + } + }} + placeholder="URL" + value={url} + /> + + +
+ + +
+ + ); +}; diff --git a/packages/example/pages/index.tsx b/packages/example/pages/index.tsx new file mode 100644 index 000000000..791637793 --- /dev/null +++ b/packages/example/pages/index.tsx @@ -0,0 +1,115 @@ +import { useChain, useWallet } from "@cosmos-kit/react"; +import { PaperPlaneIcon, ResetIcon } from "@radix-ui/react-icons"; +import { Badge } from "components/badge"; +import { Button } from "components/button"; +import { Card, CardContent, CardHeader, CardTitle } from "components/card"; +import { ChainWalletCard } from "components/chain-wallet-card"; +import { useEffect } from "react"; + +import { useIsClient } from "../hooks"; + +// const chainNames_1 = ["cosmoshub"]; +// const chainNames_2: string[] = ["cosmoshub"]; + +// const chainNames_1 = ["osmosis", "cosmoshub"]; +// const chainNames_2 = ["stargaze", "chihuahua"]; + +const chainNames_1 = ["cosmoshub"]; +// const chainNames_1 = ["migaloo"]; +// const chainNames_2: string[] = ["osmosis"]; + +// const chainNames_1 = ["coreum"]; +const chainNames_2: string[] = []; + +export default function IndexPage() { + const { username, connect, disconnect, wallet, openView } = useChain( + chainNames_1[0] + ); + const { status: globalStatus, mainWallet } = useWallet(); // status here is the global wallet status for all activated chains (chain is activated when call useChain) + const isClient = useIsClient(); + + useEffect(() => { + const fn = async () => { + await mainWallet?.connect(); + }; + fn(); + }, []); + + if (!isClient) return null; + + const getGlobalbutton = () => { + if (globalStatus === "Connecting") { + return ( + + ); + } + if (globalStatus === "Connected") { + return ( + <> + + + + Account name: {username} + + + + + ); + } + + return ; + }; + + return ( + + + +

+ ChainProvider Test +

+
+
+ +
{getGlobalbutton()}
+ +

+ Address div in Modal +

+ {chainNames_1.map((chainName) => ( + + ))} +

+ Address div on Page +

+ {chainNames_2.map((chainName) => ( + + ))} +
+
+ ); +} diff --git a/packages/example/pages/ledger.tsx b/packages/example/pages/ledger.tsx new file mode 100644 index 000000000..59cc86285 --- /dev/null +++ b/packages/example/pages/ledger.tsx @@ -0,0 +1,169 @@ +import { useEffect, useState } from "react"; +import { useChain, useWallet, useWalletClient } from "@cosmos-kit/react"; +import { Badge } from "components/badge"; +import { Button } from "components/button"; +import { PaperPlaneIcon, ResetIcon } from "@radix-ui/react-icons"; + +const DEFAULT_TO_ADDRESS = "cosmos1xane5m7g6a845pfwldh6kparm357wu3grrt7hc"; + +export type SignResult = { + signature: Buffer | null; + return_code: string | number; +}; + +export type Account = { + "@type": string; + address: string; + pub_key: { "@type": string; key: string }; + account_number: string; + sequence: string; +}; + +export function getAccountURL(address: string) { + return `https://rest.cosmos.directory/cosmoshub/cosmos/auth/v1beta1/accounts/${address}`; +} + +export default function () { + const [toAddress, setToAddress] = useState(DEFAULT_TO_ADDRESS); + const [account, setAccount] = useState({} as Account); + const [isReviewing, setIsReviewing] = useState(false); + const [signResult, setSignResult] = useState({} as SignResult); + const { username, address, connect, disconnect, wallet, openView } = + useChain("cosmoshub"); + const { status: globalStatus } = useWallet(); + const { client } = useWalletClient("ledger-web-usb-hid"); + + useEffect(() => { + if (address) { + fetch(getAccountURL(address)) + .then((res) => res.json()) + .then((data) => setAccount(data?.account)); + } + }, [address]); + + const message = { + account_number: account.account_number ?? "", + chain_id: "cosmoshub-4", + fee: { amount: [{ amount: "500", denom: "uatom" }], gas: "200000" }, + memo: "Send tokens from Ledger Nano S", + msgs: [ + { + type: "cosmos-sdk/MsgSend", + value: { + amount: { amount: "1000", denom: "uatom" }, + from_address: address ?? "", + to_address: toAddress ?? "", + }, + }, + ], + sequence: account.sequence ?? "", + }; + + async function sign() { + setSignResult({} as SignResult); + setIsReviewing(true); + try { + const result = await client?.sign?.(message); + if (result) setSignResult(result); + } catch (error: any) { + alert(error?.message); + } finally { + setIsReviewing(false); + } + } + + const getGlobalbutton = () => { + if (globalStatus === "Connecting") { + return ( + + ); + } + if (globalStatus === "Connected") { + return ( + <> + + + + Account name: {username} + + + + + ); + } + + return ; + }; + + return ( +
+

Ledger

+

+ Connect your Ledger device with an USB cable, unlock it and open the + Cosmos App. +

+
+
{getGlobalbutton()}
+
+

+ + From Address:{" "} + {" "} + {address} +

+

+ + To Address:{" "} + + setToAddress(e.target.value)} + placeholder={DEFAULT_TO_ADDRESS} + className="ml-4 flex-1 border border-gray-300 rounded-md px-2 py-1" + /> +

+

+ Message: + {globalStatus === "Connected" ? ( + + ) : null} + {isReviewing ? ( + + Please review message in Ledger + + ) : null} +

+
+            {JSON.stringify(message, null, 2)}
+          
+

Result:

+
+            {JSON.stringify(signResult, null, 2)}
+          
+
+
+
+ ); +} diff --git a/packages/example/pages/ns.tsx b/packages/example/pages/ns.tsx new file mode 100644 index 000000000..3eaf8a2a0 --- /dev/null +++ b/packages/example/pages/ns.tsx @@ -0,0 +1,21 @@ +import { useManager } from "@cosmos-kit/react"; +import { useEffect, useState } from "react"; + +const address = ""; + +export default () => { + // const { getNameService } = useChain("stargaze"); + const { getNameService } = useManager(); + const [resolvedName, setResolvedName] = useState(); + + useEffect(() => { + const f = async () => { + const ns = await getNameService(); + const name = await ns.resolveName(address); + setResolvedName(name); + }; + f(); + }, []); + + return
{resolvedName}
; +}; diff --git a/packages/example/pages/ns2.tsx b/packages/example/pages/ns2.tsx new file mode 100644 index 000000000..d9e8c6c47 --- /dev/null +++ b/packages/example/pages/ns2.tsx @@ -0,0 +1,19 @@ +import { useNameService } from "@cosmos-kit/react"; +import { useEffect, useState } from "react"; + +const address = ""; // set your address here + +export default () => { + const { state, data: ns } = useNameService(); + const [resolvedName, setResolvedName] = useState(); + + useEffect(() => { + const f = async () => { + const name = await ns?.resolveName(address); + setResolvedName(name); + }; + f(); + }, [ns]); + + return
{resolvedName}
; +}; diff --git a/packages/example/pages/test.tsx b/packages/example/pages/test.tsx new file mode 100644 index 000000000..70f3dab80 --- /dev/null +++ b/packages/example/pages/test.tsx @@ -0,0 +1,15 @@ +import { useChainWallet, useChain } from "@cosmos-kit/react"; +import { useEffect } from "react"; + +export default function TestPage() { + const { getStargateClient } = useChain("cosmoshub"); + // const { getStargateClient } = useChainWallet("cosmoshub", "keplr-extension"); + + useEffect(() => { + getStargateClient().then((client) => { + console.log("%ctest.tsx line:9 client", "color: #007acc;", client); + }); + }, []); + + return
; +} diff --git a/packages/example/pages/tx.tsx b/packages/example/pages/tx.tsx new file mode 100644 index 000000000..0d3e9eef5 --- /dev/null +++ b/packages/example/pages/tx.tsx @@ -0,0 +1,231 @@ +/* eslint-disable no-alert */ +import { Asset, AssetList } from "@chain-registry/types"; +import { StdFee } from "@cosmjs/amino"; +import { SigningStargateClient } from "@cosmjs/stargate"; +import { ExtendedHttpEndpoint } from "@cosmos-kit/core"; +import { useChain, useWalletClient } from "@cosmos-kit/react"; +import BigNumber from "bignumber.js"; +import { assets } from "chain-registry"; +import { Button } from "components/button"; +import { Card, CardContent, CardHeader, CardTitle } from "components/card"; +import { cosmos } from "juno-network"; +import { useState } from "react"; + +import { ChainsTXWalletSection } from "../components/chains-tx-wallet"; +import { SendTokensdiv } from "../components/react/send-tokens-card"; + +const chainName = "cosmoshub"; + +const chainassets: AssetList = assets.find( + (chain) => chain.chain_name === chainName +) as AssetList; + +const coin: Asset = chainassets.assets.find( + (asset) => asset.base === "uatom" +) as Asset; + +const sendTokens = ( + getSigningStargateClient: () => Promise, + setResp: (resp: string) => any, + address: string +) => { + return async () => { + const stargateClient = await getSigningStargateClient(); + if (!stargateClient || !address) { + console.error("stargateClient undefined or address undefined."); + return; + } + + const { send } = cosmos.bank.v1beta1.MessageComposer.withTypeUrl; + + const msg = send({ + amount: [ + { + denom: coin.base, + amount: "1", + }, + ], + toAddress: address, + fromAddress: address, + }); + + const fee: StdFee = { + amount: [ + { + denom: coin.base, + amount: "1", + }, + ], + gas: "86364", + }; + try { + const response = await stargateClient.signAndBroadcast( + address, + [msg], + fee + ); + setResp(JSON.stringify(response, null, 2)); + } catch (error) { + console.error(error); + } + }; +}; + +export default function () { + const [cosmo_getAccount, setCosmo_getAccount] = useState< + string | undefined + >(); + const [cosmos_signAmino, setCosmos_signAmino] = useState< + string | undefined + >(); + + const { getSigningStargateClient, address, status, getRpcEndpoint } = + useChain(chainName); + + const { client } = useWalletClient(); + + const [balance, setBalance] = useState(new BigNumber(0)); + const [isFetchingBalance, setFetchingBalance] = useState(false); + const [resp, setResp] = useState(""); + const getBalance = async () => { + if (!address) { + setBalance(new BigNumber(0)); + setFetchingBalance(false); + return; + } + + let rpcEndpoint = await getRpcEndpoint(); + + if (!rpcEndpoint) { + console.info("no rpc endpoint — using a fallback"); + rpcEndpoint = `https://rpc.cosmos.directory/${chainName}`; + } + + // get RPC client + const client = await cosmos.ClientFactory.createRPCQueryClient({ + rpcEndpoint: + typeof rpcEndpoint === "string" + ? rpcEndpoint + : (rpcEndpoint as ExtendedHttpEndpoint).url, + }); + + // fetch balance + const balance = await client.cosmos.bank.v1beta1.balance({ + address, + denom: chainassets?.assets[0].base as string, + }); + + // Get the display exponent + // we can get the exponent from chain registry asset denom_units + const exp = coin.denom_units.find((unit) => unit.denom === coin.display) + ?.exponent as number; + + // show balance in display values by exponentiating it + const a = new BigNumber(balance.balance?.amount || 0); + const amount = a.multipliedBy(10 ** -exp); + setBalance(amount); + setFetchingBalance(false); + }; + + const directSignDoc = { + bodyBytes: + "0a90010a1c2f636f736d6f732e62616e6b2e763162657461312e4d736753656e6412700a2d636f736d6f7331706b707472653766646b6c366766727a6c65736a6a766878686c63337234676d6d6b38727336122d636f736d6f7331717970717870713971637273737a673270767871367273307a716733797963356c7a763778751a100a0575636f736d120731323334353637", + authInfoBytes: + "0a0a0a0012040a020801180112130a0d0a0575636f736d12043230303010c09a0c", + chainId: "cosmoshub-4", + accountNumber: "1", + }; + + const aminoSignDoc = { + msgs: [], + fee: { amount: [], gas: "23" }, + chain_id: "cosmoshub-4", + memo: "hello, world", + account_number: "7", + sequence: "54", + }; + + return ( + + + +

+ Tx test +

+
+
+ +
+ + + Promise, + setResp as () => any, + address as string + )} + handleClickGetBalance={() => { + setFetchingBalance(true); + getBalance(); + }} + /> +
+ +
+
+ +
+ + + +
{prettifyJson(cosmo_getAccount ?? "{}")}
+
+
+
+ +
+
+ +
+ + + +
{prettifyJson(cosmos_signAmino ?? "{}")}
+
+
+
+
+
+ ); +} + +function prettifyJson(jsonString: string) { + return JSON.stringify(JSON.parse(jsonString), null, 2); +} diff --git a/packages/example/pages/use-chain-wallet.tsx b/packages/example/pages/use-chain-wallet.tsx new file mode 100644 index 000000000..0105e79ef --- /dev/null +++ b/packages/example/pages/use-chain-wallet.tsx @@ -0,0 +1,20 @@ +import { ClipboardCopyText } from "@interchain-ui/react"; +import { useChainWallet } from "@cosmos-kit/react"; + +export default () => { + const context1 = useChainWallet("cosmoshub", "keplr-extension", false); + // const context2 = useChainWallet("cosmoshub", "cosmostation-extension", false); + return ( +
+ {[context1].map(({ username, address, connect, wallet }) => ( +
+ {username || "--"} +
+ +
+ +
+ ))} +
+ ); +}; diff --git a/packages/example/pages/use-chain.tsx b/packages/example/pages/use-chain.tsx new file mode 100644 index 000000000..fb291c2b7 --- /dev/null +++ b/packages/example/pages/use-chain.tsx @@ -0,0 +1,34 @@ +import Link from "next/link"; +import { useState } from "react"; +import { useChain } from "@cosmos-kit/react-lite"; +import { Button } from "components/button"; + +export default function () { + const [chainName, setChainName] = useState("cosmoshub"); + const chain = useChain(chainName); + + return ( +
+

useChain

+ + + + +

Address: {chain.address}

+

+ See useChains +

+
+ ); +} diff --git a/packages/example/pages/use-chains.tsx b/packages/example/pages/use-chains.tsx new file mode 100644 index 000000000..7f69a125b --- /dev/null +++ b/packages/example/pages/use-chains.tsx @@ -0,0 +1,71 @@ +import Link from "next/link"; +import { Button } from "components/button"; +import { useChains } from "@cosmos-kit/react-lite"; +import { useState, MouseEvent } from "react"; + +const CHAIN_NAMES = ['cosmoshub', 'osmosis', 'juno', 'akash', 'stargaze']; +const CHAIN_BUTTONS = [ + { value: 'mars', label: 'Add Mars Hub' }, + { value: 'migaloo', label: 'Add Migaloo' }, + { value: 'chihuahua', label: 'Add Chihuahua' } +]; + +export default function () { + const [names, setNames] = useState(CHAIN_NAMES); + const chains = useChains(names); + const connected = Object.values(chains).every(chain => chain.isWalletConnected); + const { connect, openView } = chains.cosmoshub; + + function onReset() { + setNames(CHAIN_NAMES); + } + + function onAddChain(e: MouseEvent) { + const name = (e.target as HTMLButtonElement).dataset.name || ''; + if (names.includes(name)) return; + setNames([...names, name]); + } + + return
+
+

Chains:

+ {names.map((name) =>

{name}

)} +
+
+ {CHAIN_BUTTONS.map(({ value, label }) => ( + + ))} + +
+
+ +
+ + + + + + + + + {Object.entries(chains).map(([name, chain]) => + + + + + )} + +
CodeValue
chains.{name}.address{chain.address}
+
+

See useChain

+
; +} \ No newline at end of file diff --git a/packages/example/pages/use-wallet-client.tsx b/packages/example/pages/use-wallet-client.tsx new file mode 100644 index 000000000..4811dbc94 --- /dev/null +++ b/packages/example/pages/use-wallet-client.tsx @@ -0,0 +1,7 @@ +import { useWalletClient } from "@cosmos-kit/react"; + +export default function () { + const { status, client } = useWalletClient("keplr-extension"); + + return <>{status}; +} diff --git a/packages/example/pages/use-wallet.tsx b/packages/example/pages/use-wallet.tsx new file mode 100644 index 000000000..7482e11d4 --- /dev/null +++ b/packages/example/pages/use-wallet.tsx @@ -0,0 +1,17 @@ +import { useManager, useWallet } from "@cosmos-kit/react"; +import { useEffect } from "react"; + +export default function Page() { + const { mainWallets } = useManager(); + const { mainWallet } = useWallet(); + console.log( + "%cuse-wallet.tsx line:6 mainWallet", + "color: #007acc;", + mainWallet + ); + useEffect(() => { + mainWallets[0]?.connect(); + // mainWallets[0]?.disconnect(); + }, []); + return <>; +} diff --git a/packages/example/pages/user-agent.tsx b/packages/example/pages/user-agent.tsx new file mode 100644 index 000000000..52dd64d17 --- /dev/null +++ b/packages/example/pages/user-agent.tsx @@ -0,0 +1,24 @@ +import { ChainWalletBase } from "@cosmos-kit/core"; +import { useManager } from "@cosmos-kit/react"; +import { useEffect, useState } from "react"; + +export default () => { + const [ua, setua] = useState(); + const [w, setw] = useState(); + const { getWalletRepo } = useManager(); + + useEffect(() => { + setua(window.navigator.userAgent); + setw(getWalletRepo("cosmoshub").wallets[0]); + }, []); + + return ( +
+
user-agent: {ua}
+
cosmos-kit device value: {w?.env?.device}
+
cosmos-kit os value: {w?.env?.os}
+
cosmos-kit browser value: {w?.env?.browser}
+
cosmos-kit isMobile value: {w?.isMobile ? "true" : "false"}
+
+ ); +}; diff --git a/packages/example/pages/wallet-manager/index.tsx b/packages/example/pages/wallet-manager/index.tsx new file mode 100644 index 000000000..663d3f2c7 --- /dev/null +++ b/packages/example/pages/wallet-manager/index.tsx @@ -0,0 +1,11 @@ +export default () => { + return ( + + ) +} diff --git a/packages/example/pages/wallet-manager/main-wallets.tsx b/packages/example/pages/wallet-manager/main-wallets.tsx new file mode 100644 index 000000000..c23b15b53 --- /dev/null +++ b/packages/example/pages/wallet-manager/main-wallets.tsx @@ -0,0 +1,62 @@ +import { WalletManager, Logger } from "@cosmos-kit/core"; +import { useMemo, useState } from 'react' +import { wallets as leapWallets } from "@cosmos-kit/leap"; +import { wallets as stationWallets } from "@cosmos-kit/station"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { assets } from "chain-registry"; +import { Button } from "components/button"; +export default () => { + const walletManager = useMemo(() => { + return new WalletManager( + ["cosmoshub", "juno", "stargaze"], [ + keplrWallets[0], leapWallets[0], stationWallets[0] + ], new Logger('NONE'), false, + undefined, undefined, assets + ); + }, []) + + const [_, forceUpdate] = useState(0) + + const mainWallets = walletManager.mainWallets + + return ( +
+ Main Wallets + + + + + + + + + + + + {mainWallets.map(mainWallet => { + const chainWallets = mainWallet.getChainWalletList(false) + return chainWallets.map((w, index) => { + return ( + + {index === 0 && ( + <> + + + + + )} + + + + ) + }) + })} + +
WalletConnectDisconnectChainAddress
{w.walletName} + + + + {w.chainName}{w.address}
+
+ ) +} diff --git a/packages/example/pages/wallet-manager/wallet-manager.tsx b/packages/example/pages/wallet-manager/wallet-manager.tsx new file mode 100644 index 000000000..c4ca3be32 --- /dev/null +++ b/packages/example/pages/wallet-manager/wallet-manager.tsx @@ -0,0 +1,120 @@ +import { WalletManager, Logger } from "@cosmos-kit/core"; +import { useMemo, useState } from 'react' +import { wallets as leapWallets } from "@cosmos-kit/leap"; +import { wallets as stationWallets } from "@cosmos-kit/station"; +import { wallets as coin98Wallets } from "@cosmos-kit/coin98"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { assets } from "chain-registry"; +import { Button } from "components/button"; +import { AccountData } from "@cosmjs/proto-signing"; + +export default () => { + const walletManager = useMemo(() => { + return new WalletManager( + ["cosmoshub", "juno", "stargaze"], [ + keplrWallets[0], leapWallets[0], stationWallets[0], coin98Wallets[0] + ], new Logger('NONE'), false, + undefined, undefined, assets + ); + }, []) + + const [_, forceUpdate] = useState(0) + + return ( +
+
+        {JSON.stringify({
+          activeRepos: walletManager.activeRepos,
+
+        }, null, 2)}
+      
+
Main Wallets
+ + + {walletManager.mainWallets.map(mw => { + return mw.getChainWalletList(false).map(cw => { + cw.callbacks = { + beforeConnect: () => console.log('beforeConnect'), + beforeDisconnect: () => console.log('beforeDisconnect'), + afterConnect: () => forceUpdate(i => i + 1), + afterDisconnect: () => forceUpdate(i => i + 1) + } + + const [account, setAccount] = useState(undefined) + + const getAddress = async () => { + await cw.initOfflineSigner() + const account = await cw.offlineSigner?.getAccounts() + setAccount(account) + } + + return ( + + + + + + + + + ) + }) + })} + +
{mw.walletName}{cw.chainName} + + + + {cw.state}{cw.message}{account?.[0]?.address}
+
Wallet Repo
+ + + {walletManager.walletRepos.map(wr => { + + + + return ( + <> + + + + + {wr.wallets.map(w => { + + const [account, setAccount] = useState(undefined) + + const getAddress = async () => { + await w.initOfflineSigner() + const account = await w.offlineSigner?.getAccounts() + if (account) { + setAccount(account) + } + } + + + return ( + + + + + + + + + ) + }) + } + + ) + })} + +
current: {wr.current?.walletName}{'client'}
{w.chainName}{w.walletName} + + + + {w.state}{w.message}{account?.[0]?.address}
+
) + + + +} diff --git a/packages/example/pages/wallet-manager/wallet-operate.tsx b/packages/example/pages/wallet-manager/wallet-operate.tsx new file mode 100644 index 000000000..2f49891a1 --- /dev/null +++ b/packages/example/pages/wallet-manager/wallet-operate.tsx @@ -0,0 +1,124 @@ +import { WalletManager, Logger } from "@cosmos-kit/core"; +import { useMemo, useState } from "react"; +import { wallets as leapWallets } from "@cosmos-kit/leap"; +import { wallets as stationWallets } from "@cosmos-kit/station"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { assets } from "chain-registry"; +import { Button } from "components/button"; +import { SigningStargateClient } from "@cosmjs/stargate"; + +export default () => { + const walletManager = useMemo(() => { + return new WalletManager( + ["cosmoshub", "juno", "stargaze"], + [keplrWallets[0], leapWallets[0], stationWallets[0]], + new Logger("NONE"), + false, + undefined, + undefined, + assets + ); + }, []); + + + const wallet = walletManager + .getWalletRepo("juno") + .getWallet("keplr-extension"); + + + const [accounts, setAccounts] = useState(undefined); + const [signingStargateClient, setSigningStargateClient] = + useState(undefined); + + const [_, forceUpdate] = useState(0); + + + const connect = async () => { + try { + await wallet?.connect(); + } catch (error) { + console.log(error); + } + forceUpdate((i) => i + 1); + }; + + const disconnect = async () => { + try { + await wallet?.disconnect(); + } catch (error) { + console.log(error); + } + forceUpdate((i) => i + 1); + }; + + const initOfflineSigner = async () => { + try { + await wallet?.initOfflineSigner(); + } catch (error) { + console.error(error); + } + forceUpdate((i) => i + 1); + }; + + const getAccounts = async () => { + try { + const accounts = await wallet?.offlineSigner?.getAccounts(); + setAccounts(accounts); + } catch (error) { + console.error(error); + } + }; + + const getSigningStargateClient = async () => { + try { + const client = await wallet?.getSigningStargateClient(); + setSigningStargateClient(client); + } catch (error) { + console.error(error); + } + }; + + const getFastEndpoints = async () => { + try { + const fastEndpoints = await wallet?.getRestEndpoint(false); + } catch (error) { + console.error(error); + } + } + + + + return ( +
+ KeplrWallet - JUNO +
+ + + + + {/* + */} +
+ +

status:{wallet?.state}

+

address:{wallet?.address}

+

walletState:{wallet?.walletStatus}

+
+ offline signer accounts:
{JSON.stringify(accounts, null, 2)}
+
+ {/*
+ SigningStargateClient: + {signingStargateClient?.broadcastTimeoutMs} +
*/} +
+ ); +}; diff --git a/packages/example/pages/wallet-manager/wallet-repo.tsx b/packages/example/pages/wallet-manager/wallet-repo.tsx new file mode 100644 index 000000000..5dbec44a5 --- /dev/null +++ b/packages/example/pages/wallet-manager/wallet-repo.tsx @@ -0,0 +1,64 @@ +import { WalletManager, Logger } from "@cosmos-kit/core"; +import { useMemo, useState } from 'react' +import { wallets as leapWallets } from "@cosmos-kit/leap"; +import { wallets as stationWallets } from "@cosmos-kit/station"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { assets } from "chain-registry"; +import { Button } from "components/button"; +export default () => { + const walletManager = useMemo(() => { + return new WalletManager( + ["cosmoshub", "juno", "stargaze"], [ + keplrWallets[0], leapWallets[0], stationWallets[0], + ], new Logger('NONE'), false, + undefined, undefined, assets + ); + }, []) + + const [_, forceUpdate] = useState(0) + + const walletRepo = walletManager.getWalletRepo('juno') + + return ( +
+ Wallet Repo + + + + + + + + + + + + + + + {walletRepo.wallets.map((w, index) => { + return ( + + {index === 0 && } + {index === 0 && } + + + + + + + + ) + }) + } + +
ChainCurrent Chain WalletWalletConnectDisconnectStateAddressDownload Link
{w.chainName}{walletRepo?.current?.walletName}-{walletRepo.current?.chainName}{w.walletName} + + + + {w.walletStatus}address:{w.address}{w.downloadInfo?.link}
+
+ + ) + +} diff --git a/packages/example/pages/wallet-manager/wallet-repos.tsx b/packages/example/pages/wallet-manager/wallet-repos.tsx new file mode 100644 index 000000000..9815f12c7 --- /dev/null +++ b/packages/example/pages/wallet-manager/wallet-repos.tsx @@ -0,0 +1,61 @@ +import { WalletManager, Logger } from "@cosmos-kit/core"; +import { useMemo, useState } from 'react' +import { wallets as leapWallets } from "@cosmos-kit/leap"; +import { wallets as stationWallets } from "@cosmos-kit/station"; +import { wallets as keplrWallets } from "@cosmos-kit/keplr"; +import { assets } from "chain-registry"; +import { Button } from "components/button"; +export default () => { + const walletManager = useMemo(() => { + return new WalletManager( + ["cosmoshub", "juno", "stargaze"], [ + keplrWallets[0], leapWallets[0], stationWallets[0] + ], new Logger('NONE'), false, + undefined, undefined, assets + ); + }, []) + + const [_, forceUpdate] = useState(0) + + return ( +
+ Wallet Repos + + + + + + + + + + + + + + + {walletManager.walletRepos.map(wr => { + return wr.wallets.map((w, index) => { + return ( + + {index === 0 && } + {index === 0 && } + + + + + + + + ) + }) + })} + +
ChainCurrent Chain WalletWalletConnectDisconnectStateAddressDownload Link
{w.chainName}{wr?.current?.walletName}-{wr.current?.chainName}{w.walletName} + + + + {w.walletStatus}address:{w.address}{w.downloadInfo?.link}
+
+ ) +} diff --git a/packages/example/pages/wc.tsx b/packages/example/pages/wc.tsx new file mode 100644 index 000000000..882bdb4e4 --- /dev/null +++ b/packages/example/pages/wc.tsx @@ -0,0 +1,76 @@ +import SignClient from "@walletconnect/sign-client"; +import { useEffect, useState } from "react"; + +import { Web3Modal } from "../wc/client"; + +const projectId = "a8510432ebb71e6948cfd6cde54b70f7"; + +// 2. Configure web3modal +const web3modal = new Web3Modal({ projectId: projectId }); + +export default function HomePage() { + const [signClient, setSignClient] = useState( + undefined + ); + const [qrcode, setQrcode] = useState(<>); + + // 3. Initialize sign client + async function onInitializeSignClient() { + const client = await SignClient.init({ + projectId: projectId, + relayUrl: "wss://relay.walletconnect.org", + }); + setSignClient(client); + } + + // 4. Initiate connection and pass pairing uri to the modal + async function onOpenModal() { + if (signClient) { + const namespaces = { + cosmos: { + methods: [ + "cosmos_getAccounts", + "cosmos_signAmino", + "cosmos_signDirect", + ], + chains: [`cosmos:cosmoshub-4`], + events: [], + }, + }; + const { uri, approval } = await signClient.connect({ + requiredNamespaces: namespaces, + }); + if (uri) { + // setQrcode( + // + // ); + // web3modal.openModal({ + // uri, + // standaloneChains: namespaces.cosmos.chains, + // }); + // await approval(); + // web3modal.closeModal(); + } + } + } + + useEffect(() => { + onInitializeSignClient(); + }, []); + + return signClient ? ( +
+ + {qrcode} +
+ ) : ( + "Initializing..." + ); +} diff --git a/packages/example/postcss.config.js b/packages/example/postcss.config.js new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/packages/example/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/example/public/favicon.ico b/packages/example/public/favicon.ico new file mode 100644 index 000000000..d7b1d76a3 Binary files /dev/null and b/packages/example/public/favicon.ico differ diff --git a/packages/example/seo/prepare.sh b/packages/example/seo/prepare.sh new file mode 100755 index 000000000..c1e2b606c --- /dev/null +++ b/packages/example/seo/prepare.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +export S3_BUCKET=test.cosmoskit.com + +(cd out && + find . -type f -name '*.html' | while read HTMLFILE; do + HTMLFILESHORT=${HTMLFILE:2} + # HTMLFILE_WITHOUT_INDEX=${HTMLFILESHORT::${#HTMLFILESHORT}-11} + + HTMLFILE_WITHOUT_INDEX=${HTMLFILESHORT//index.html/} + HTMLFILE_WITHOUT_HTML=${HTMLFILE_WITHOUT_INDEX//.html/} + + + # cp /about/index.html to /about + aws s3 cp s3://$S3_BUCKET/${HTMLFILESHORT} s3://$S3_BUCKET/$HTMLFILE_WITHOUT_HTML + echo aws s3 cp s3://$S3_BUCKET/${HTMLFILESHORT} s3://$S3_BUCKET/$HTMLFILE_WITHOUT_HTML + + if [ $? -ne 0 ]; then + echo "***** Failed renaming build to $S3_BUCKET (html)" + exit 1 + fi + done) diff --git a/packages/example/seo/seo.js b/packages/example/seo/seo.js new file mode 100644 index 000000000..3feb48219 --- /dev/null +++ b/packages/example/seo/seo.js @@ -0,0 +1,218 @@ +const fs = require('fs'); +const seo = require('../config/seo'); +const canonical = seo.canonical; +const siteInfo = require('../config/site'); +const PAGE_DIR = __dirname + '/../pages/'; +const pageObjects = {}; +const legalPageObjects = {}; + +const IGNORE = [ + '404', + '_document', + '_app', + 'api/hello', + 'app', + 'test-balances', + 'test-swaps' +]; + +// FOR NOW keep this stuff out +// later when you generate a sitemap page, you can categorize this in Legal +const LEGAL_FILES = [ + 'disclaimer', + 'acceptable-use-policy', + 'brand-guidelines', + 'cookie-policy', + 'copyright-policy', + 'corporate-colors', + 'credits', + 'data-processing-addendum', + 'developer-terms-of-use', + 'logo-guidelines', + 'security-measures' +]; +const path = require('path'); + +const walkSync = (dir) => { + // Get all files of the current directory & iterate over them + const files = fs.readdirSync(dir); + files.forEach((file) => { + // Construct whole file-path & retrieve file's stats + const filePath = `${dir}${file}`; + const fileStat = fs.statSync(filePath); + + if (fileStat.isDirectory()) { + // Recurse one folder deeper + walkSync(`${filePath}/`); + } else { + // Construct this file's pathname excluding the "pages" folder & its extension + let cleanFileName = filePath + .substr(0, filePath.lastIndexOf('.')) + .replace(PAGE_DIR, ''); + + if (path.extname(filePath) !== '.tsx') { + return; + } + + // any index.js pages will be renamed to / + if (cleanFileName.match(/\/index$/) || cleanFileName === 'index') { + cleanFileName = cleanFileName.replace(/\/?index$/, ''); + } + + if (!IGNORE.includes(cleanFileName)) { + // Add this file to `pageObjects` + if (LEGAL_FILES.includes(cleanFileName)) { + legalPageObjects[`/${cleanFileName}`] = { + page: `/${cleanFileName}`, + lastModified: fileStat.mtime + }; + } else { + pageObjects[`/${cleanFileName}`] = { + page: `/${cleanFileName}`, + lastModified: fileStat.mtime + }; + } + } + } + }); +}; + +// Start recursion to fill `pageObjects` +walkSync(PAGE_DIR); + +function formatDate(date) { + var d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) month = '0' + month; + if (day.length < 2) day = '0' + day; + + return [year, month, day].join('-'); +} + +const pageSitemapXml = ` + + ${Object.keys(pageObjects) + .map( + (path) => ` + ${canonical}${path} + ${formatDate(new Date(pageObjects[path].lastModified))} + ` + ) + .join('\n')} +`; + +const legalSitemapXml = ` + + ${Object.keys(legalPageObjects) + .map( + (path) => ` + ${canonical}${path} + ${formatDate( + new Date(legalPageObjects[path].lastModified) + )} + ` + ) + .join('\n')} +`; + +const sitemapXml = ` + + +${canonical}/sitemaps/legal.xml +${canonical}/sitemaps/pages.xml + + +`; + +const BAD_AGENTS = [ + { + text: 'Search engines only please :) Thanks for obeying robots.txt', + bots: ['UbiCrawler', 'DOC', 'Zao', 'discobot', 'dotbot', 'yacybot'] + }, + { + text: "Dear bots, we don't appreciate you copying site content and providing very little additional value.", + bots: [ + 'sitecheck.internetseer.com', + 'Zealbot', + 'MJ12bot', + 'MSIECrawler', + 'SiteSnagger', + 'WebStripper', + 'WebCopier', + 'Fetch', + 'Offline Explorer', + 'Teleport', + 'TeleportPro', + 'WebZIP', + 'linko', + 'HTTrack', + 'Microsoft.URL.Control', + 'Xenu', + 'larbin', + 'libwww', + 'ZyBORG', + 'Download Ninja' + ] + }, + { + text: 'Recursive mode wget is not friendly', + bots: ['wget', 'grub-client'] + }, + { + text: "I realize you don't follow robots.txt, but FYI", + bots: ['k2spider'] + }, + { + text: 'Abusive bots', + bots: ['NPBot'] + } +]; + +const robotsTxt = ` +# +# Dear bot, crawler or kind technical person who wishes to crawl ${ + siteInfo.site.host +}, +# please email ${ + siteInfo.emails.support +}. We require whitelisting to access our sitemap. +# +# Thanks in advance! Your friendly Ops Team @ ${seo.title}. + +${BAD_AGENTS.map(({ text, bots }) => { + return ` +# +# ${text} +# + + ${bots + .map((bot) => { + return ` +User-agent: ${bot} +Disallow: /`; + }) + .join('\n')} + `; +}).join('')} + +User-agent: * + +${Object.keys(pageObjects) + .map((path) => `Allow: ${path}$`) + .join('\n')} + +Sitemap: ${canonical}/sitemaps/pages.xml +Sitemap: ${canonical}/sitemaps/legal.xml + +Host: ${siteInfo.site.host} + +`; + +fs.writeFileSync('out/sitemap.xml', sitemapXml); +require('mkdirp').sync('out/sitemaps'); +fs.writeFileSync('out/sitemaps/pages.xml', pageSitemapXml); +fs.writeFileSync('out/sitemaps/legal.xml', legalSitemapXml); +fs.writeFileSync('out/robots.txt', robotsTxt); diff --git a/packages/example/style/global.css b/packages/example/style/global.css new file mode 100644 index 000000000..edf013142 --- /dev/null +++ b/packages/example/style/global.css @@ -0,0 +1,105 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root, + :root .leap-ui { + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 100% 50%; + --destructive-foreground: 210 40% 98%; + + --ring: 215 20.2% 65.1%; + + --radius: 0.5rem; + } + + .dark, + .leap-ui.dark { + --background: 224 71% 4%; + --foreground: 213 31% 91%; + + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; + + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; + + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; + + --border: 216 34% 17%; + --input: 216 34% 17%; + + --card: 224 71% 4%; + --card-foreground: 213 31% 91%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; + + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; + + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + + --ring: 216 34% 17%; + + --radius: 0.5rem; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: "rlig" 1, "calt" 1; + } +} + +.my-custom-modal-content { + padding: 0 50px; +} + +.bd-links-link { + padding: 0.1875rem 0.5rem; + margin-top: 0.125rem; + color: #212529; + text-decoration: none; +} + +.bd-links-link:hover, +.bd-links-link:focus, +.bd-links-link.active { + color: #000; + background-color: rgba(112.520718, 44.062154, 249.437846, 0.1); +} + +.bd-links-link.active { + font-weight: 600; +} diff --git a/packages/example/tailwind.config.js b/packages/example/tailwind.config.js new file mode 100644 index 000000000..67307e84e --- /dev/null +++ b/packages/example/tailwind.config.js @@ -0,0 +1,76 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./src/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +}; diff --git a/packages/example/tsconfig.json b/packages/example/tsconfig.json new file mode 100644 index 000000000..eec2206c7 --- /dev/null +++ b/packages/example/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "es2015", + "jsx": "preserve", + "lib": ["ES2015", "dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": false, + "esModuleInterop": true, + "module": "es2020", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": true, + "paths": { + "components": ["./components"], + "lib": ["./lib"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/packages/example/wc/client.ts b/packages/example/wc/client.ts new file mode 100644 index 000000000..aa092e938 --- /dev/null +++ b/packages/example/wc/client.ts @@ -0,0 +1,33 @@ +import type { ConfigCtrlState } from "@web3modal/core"; +import { ConfigCtrl, ModalCtrl } from "@web3modal/core"; + +/** + * Types + */ +type Web3ModalConfig = Omit; + +/** + * Client + */ +export class Web3Modal { + public constructor(config: Web3ModalConfig) { + // ConfigCtrl.setConfig({ enableStandaloneMode: true, ...config }); + this.initUi(); + } + + private async initUi() { + if (typeof window !== "undefined") { + await import("@web3modal/ui"); + const modal = document.createElement("w3m-modal"); + document.body.insertAdjacentElement("beforeend", modal); + } + } + + public openModal = ModalCtrl.open; + + public closeModal = ModalCtrl.close; + + public subscribeModal = ModalCtrl.subscribe; + + // public setTheme = ConfigCtrl.setThemeConfig; +} diff --git a/packages/ins/.editorconfig b/packages/ins/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/packages/ins/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/ins/.eslintignore b/packages/ins/.eslintignore new file mode 100644 index 000000000..8f0b997cd --- /dev/null +++ b/packages/ins/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +./types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/packages/ins/.eslintrc.json b/packages/ins/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/packages/ins/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/packages/ins/.gitignore b/packages/ins/.gitignore new file mode 100644 index 000000000..d93985ec4 --- /dev/null +++ b/packages/ins/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store \ No newline at end of file diff --git a/packages/ins/.npmignore b/packages/ins/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/packages/ins/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/packages/ins/.npmrc b/packages/ins/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/packages/ins/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/ins/.prettierrc.json b/packages/ins/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/packages/ins/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/packages/ins/CHANGELOG.md b/packages/ins/CHANGELOG.md new file mode 100644 index 000000000..b84548308 --- /dev/null +++ b/packages/ins/CHANGELOG.md @@ -0,0 +1,126 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.6...@cosmos-kit/ins@2.1.7) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/ins + + + + + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.5...@cosmos-kit/ins@2.1.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.4...@cosmos-kit/ins@2.1.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.3...@cosmos-kit/ins@2.1.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.2...@cosmos-kit/ins@2.1.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.1...@cosmos-kit/ins@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.1.0...@cosmos-kit/ins@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/ins + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.3...@cosmos-kit/ins@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.2...@cosmos-kit/ins@2.0.3) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.1...@cosmos-kit/ins@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.1-beta.4...@cosmos-kit/ins@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.1-beta.3...@cosmos-kit/ins@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.1-beta.2...@cosmos-kit/ins@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.1-beta.1...@cosmos-kit/ins@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@2.0.1-beta.0...@cosmos-kit/ins@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@1.0.0...@cosmos-kit/ins@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/ins + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.7...@cosmos-kit/ins@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.6...@cosmos-kit/ins@0.2.7) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.5...@cosmos-kit/ins@0.2.6) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.4...@cosmos-kit/ins@0.2.5) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.3...@cosmos-kit/ins@0.2.4) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.2...@cosmos-kit/ins@0.2.3) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.1...@cosmos-kit/ins@0.2.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.2.0...@cosmos-kit/ins@0.2.1) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/ins + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.1.6...@cosmos-kit/ins@0.2.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.1.5...@cosmos-kit/ins@0.1.6) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.1.4...@cosmos-kit/ins@0.1.5) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/ins + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ins@0.1.3...@cosmos-kit/ins@0.1.4) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/ins + +## 0.1.3 (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/ins diff --git a/packages/ins/LICENSE b/packages/ins/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/packages/ins/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/ins/README.md b/packages/ins/README.md new file mode 100644 index 000000000..71db1d088 --- /dev/null +++ b/packages/ins/README.md @@ -0,0 +1,37 @@ +# DRAFT: Interchain Name System implementation + +## Basic Usage + +### Resovle INS names + +### Resovle an address on a particular nameservice + +### Working with only a single nameservice + +An alternative nameservice implementation is supported for developers who dapp developers who only wish to interact with a single nameservice. + +## Adding a nameservice to the registry + + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/packages/ins/index.ts b/packages/ins/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/packages/ins/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/packages/ins/package.json b/packages/ins/package.json new file mode 100644 index 000000000..6da2c6a4e --- /dev/null +++ b/packages/ins/package.json @@ -0,0 +1,70 @@ +{ + "name": "@cosmos-kit/ins", + "version": "2.1.7", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "keplr", + "leap", + "cosmostation", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@babel/runtime": "7.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/packages/ins/src/__tests__/name-service.test.ts b/packages/ins/src/__tests__/name-service.test.ts new file mode 100644 index 000000000..856f1e558 --- /dev/null +++ b/packages/ins/src/__tests__/name-service.test.ts @@ -0,0 +1,79 @@ +import { chains } from 'chain-registry'; + +import { nameServiceRegistries } from '../config'; +import { INS, parseINSName } from '../name-service'; + +// Set longer test timeout to allow for network requests +jest.setTimeout(15000); + +describe('Parse INS names', () => { + it('Parses a full INS name', () => { + expect(parseINSName('bar@stars.sns')).toEqual({ + name: 'bar', + resolver: 'stars', + nameservice: 'sns', + }); + }); + + it('Returns undefined for incorrectly formatted INS names', () => { + expect(parseINSName('bar.stars')).toEqual(undefined); + expect(parseINSName('bar@stars')).toEqual(undefined); + }); +}); + +describe('INS name resolver', () => { + it('Instantiates correctly', () => { + const ins = new INS(chains, nameServiceRegistries); + expect(ins.chains).toEqual(chains); + expect(ins.ins_registry).toEqual(nameServiceRegistries); + }); + + it('Resolves an address for an INS name on ICNS', async () => { + const ins = new INS(chains, nameServiceRegistries); + const address = await ins.resolveINSAddress('rj@osmo.icns'); + expect(address).toBeTruthy(); + expect(address).not.toEqual(''); + }); + + it('Resolves an address for an INS name on Stargaze Name Service', async () => { + const ins = new INS(chains, nameServiceRegistries); + const address = await ins.resolveINSAddress('daoist@stars.sns'); + expect(address).toBeTruthy(); + expect(address).not.toEqual(''); + }); + + it('Resolves a name for an address using the Stargaze name service', async () => { + const ins = new INS(chains, nameServiceRegistries); + const name = await ins.resolveInsName( + 'stars139a4n6w6dhwv60dj2clgwm6r0q84gju28z9at0', + 'sns' + ); + expect(name).toEqual('daoist'); + }); + + it('Resolves a name for an address using ICNS', async () => { + const ins = new INS(chains, nameServiceRegistries); + const name = await ins.resolveInsName( + 'osmo15hndzyqykg09fturlkgayw0849xu686mmjrqns', + 'icns' + ); + expect(name).toEqual('rj.osmo'); + }); + + it('Throws errors resolving address if nameservice not found', async () => { + const ins = new INS(chains, nameServiceRegistries); + await expect( + ins.resolveInsName( + 'osmo15hndzyqykg09fturlkgayw0849xu686mmjrqns', + 'notarealnameservice' + ) + ).rejects.toThrow('Nameservice not found'); + }); + + it('Throws errors resolving name if nameservice not found', async () => { + const ins = new INS(chains, nameServiceRegistries); + await expect( + ins.resolveINSAddress('baz@stars.notarealnameservice') + ).rejects.toThrow('Nameservice not found'); + }); +}); diff --git a/packages/ins/src/config.ts b/packages/ins/src/config.ts new file mode 100644 index 000000000..98b265265 --- /dev/null +++ b/packages/ins/src/config.ts @@ -0,0 +1,55 @@ +import { NameServiceRegistry } from './name-service'; + +export const nameServiceRegistries: NameServiceRegistry = [ + { + name: 'icns', + contract: 'osmo1xk0s8xgktn9x5vwcgtjdxqzadg88fgn33p8u9cnpdxwemvxscvast52cdd', + chainName: 'osmosis', + getNameQueryMsg: (address: string) => { + return { + icns_names: { address }, + }; + }, + getAddressQueryMsg: (name: string, bech32_prefix?: string) => { + return { + address: { + name, + bech32_prefix: bech32_prefix || 'osmo', + }, + }; + }, + normalizeAddressResponse: (response): string => { + return response.address; + }, + normalizeNameResponse: (response): string => { + return response.primary_name; + }, + slip173: 'osmo', + }, + { + name: 'sns', + contract: + 'stars1fx74nkqkw2748av8j7ew7r3xt9cgjqduwn8m0ur5lhe49uhlsasszc5fhr', + chainName: 'stargaze', + getNameQueryMsg: (address: string) => { + return { + name: { address }, + }; + }, + getAddressQueryMsg: (name: string, bech32_prefix?: string) => { + // Stargaze names currtently don't support bech32_prefix? + return { + associated_address: { + name, + }, + }; + }, + normalizeAddressResponse: (response): string => { + return response; + }, + normalizeNameResponse: (response): string => { + return response; + }, + slip173: 'stars', + }, +]; diff --git a/packages/ins/src/index.ts b/packages/ins/src/index.ts new file mode 100644 index 000000000..4bbb5bb1f --- /dev/null +++ b/packages/ins/src/index.ts @@ -0,0 +1,2 @@ +export * from './config'; +export * from './name-service'; diff --git a/packages/ins/src/name-service.ts b/packages/ins/src/name-service.ts new file mode 100644 index 000000000..3ef2cb9f9 --- /dev/null +++ b/packages/ins/src/name-service.ts @@ -0,0 +1,149 @@ +import { Chains } from '@chain-registry/types'; +import { CosmWasmClient } from '@cosmjs/cosmwasm-stargate'; + +export type NameServiceName = string; + +export interface NameServiceInfo { + name: NameServiceName; + contract: string; + chainName: string; + getNameQueryMsg: (address: string) => any; + getAddressQueryMsg: (name: string, bech32_prefix?: string) => any; + normalizeAddressResponse: (response: any) => string; + normalizeNameResponse: (response: any) => string; + slip173: string; +} + +export type NameServiceRegistry = NameServiceInfo[]; + +export type ParsedInsName = + | { + name: string; + resolver: string; + nameservice: string; + } + | undefined; + +/** + * Parse a name into its components. + * + * The format is [name]@[chain_prefix].[resolver], similar to an email address. + * For example, `meow@juno.sns` would resolve a Juno address using the Stargaze + * + * @param {String} name A fully compliant INS name. + * @returns {ParsedInsName} The parsed name. + **/ +export const parseINSName = (name: string): ParsedInsName => { + const insRegEx = /(?[a-z0-9]+)@(?[a-z]+)\.(?[a-z]{2,})/; + return name.match(insRegEx)?.groups as ParsedInsName; +}; + +/** + * This class is used to resolve names and addresses accross the Interchain Name System. + * + * @Module INS + */ +export class INS { + chains: Chains; + ins_registry: NameServiceRegistry; + + /** + * This class is used to resolve names and addresses. + */ + constructor(chains: Chains, ins_registry: NameServiceRegistry) { + this.chains = chains; + this.ins_registry = ins_registry; + } + + /** + * Resolve a name to an address using a specific nameservice. + * + * @param {string} address The address to resolve a name for. + */ + async resolveInsName( + address: string, + nameservice: string + ): Promise { + // Find item in list of objects with a certatin key value pair + const registry = this.ins_registry.find( + (item) => item.name === nameservice + ); + + // Check if registry exists + if (!registry) throw new Error('Nameservice not found'); + + // Get the chain info for the registry + const chain = this.chains.find( + (item) => item.chain_name === registry.chainName + ); + + // Load the client for the appropriate chain + // TODO better logic for loading RPCs and handling errors + // NOTE in production a wallet provider will likely want to use their own RPCs + let client: CosmWasmClient; + for (let i = 0; i < chain.apis.rpc.length; i++) { + try { + client = await CosmWasmClient.connect(chain.apis.rpc[i]?.address); + break; + } catch (e) { + continue; + } + } + + const { contract, getNameQueryMsg, normalizeNameResponse } = registry; + const result = await client.queryContractSmart( + contract, + getNameQueryMsg(address) + ); + return normalizeNameResponse(result); + } + + /** + * Resolve a full INS name to an address. + * + * The format is [name]@[chain_prefix].[resolver], similar to an email address. + * For example, `jake@juno.sns` would resolve the address using the Stargaze + * + * @param {String} name A fully compliant INS name. + **/ + async resolveINSAddress(insName: string): Promise { + // Parse ins name + const { name, resolver, nameservice } = parseINSName(insName); + + // Find item in list of objects with a certatin key value pair + const registry = this.ins_registry.find( + (item) => item.name === nameservice + ); + + // Check if registry exists + if (!registry) throw new Error('Nameservice not found'); + + // Get the chain info for the registry + const chain = this.chains.find( + (item) => item.chain_name === registry.chainName + ); + + // Load the client for the appropriate chain + // TODO better logic for loading RPCs and handling errors + // NOTE in production a wallet provider will likely want to use their own RPCs + let client: CosmWasmClient; + for (let i = 0; i < chain.apis.rpc.length; i++) { + try { + client = await CosmWasmClient.connect(chain.apis.rpc[i]?.address); + break; + } catch (e) { + continue; + } + } + + // try { + const { contract, getAddressQueryMsg, normalizeAddressResponse } = registry; + + const result = await client.queryContractSmart( + contract, + getAddressQueryMsg(name, resolver) + ); + + return normalizeAddressResponse(result); + } +} diff --git a/packages/ins/tsconfig.json b/packages/ins/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/packages/ins/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/packages/react-lite/.editorconfig b/packages/react-lite/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/packages/react-lite/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/react-lite/.eslintignore b/packages/react-lite/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/packages/react-lite/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/packages/react-lite/.eslintrc.json b/packages/react-lite/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/packages/react-lite/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/packages/react-lite/.gitignore b/packages/react-lite/.gitignore new file mode 100644 index 000000000..cba0431de --- /dev/null +++ b/packages/react-lite/.gitignore @@ -0,0 +1,49 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module +dist + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/packages/react-lite/.npmignore b/packages/react-lite/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/packages/react-lite/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/packages/react-lite/.npmrc b/packages/react-lite/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/packages/react-lite/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/react-lite/.prettierrc.json b/packages/react-lite/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/packages/react-lite/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/packages/react-lite/CHANGELOG.md b/packages/react-lite/CHANGELOG.md new file mode 100644 index 000000000..ea5e893a1 --- /dev/null +++ b/packages/react-lite/CHANGELOG.md @@ -0,0 +1,956 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.12.2...@cosmos-kit/react-lite@2.13.0) (2024-07-11) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +## [2.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.12.1...@cosmos-kit/react-lite@2.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.12.0...@cosmos-kit/react-lite@2.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.11.0...@cosmos-kit/react-lite@2.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.10.0...@cosmos-kit/react-lite@2.11.0) (2024-06-05) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.9.0...@cosmos-kit/react-lite@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.8.0...@cosmos-kit/react-lite@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.7.3...@cosmos-kit/react-lite@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/react-lite + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.7.2...@cosmos-kit/react-lite@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.7.1...@cosmos-kit/react-lite@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.7.0...@cosmos-kit/react-lite@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.9...@cosmos-kit/react-lite@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.8...@cosmos-kit/react-lite@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.7...@cosmos-kit/react-lite@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.6...@cosmos-kit/react-lite@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.5...@cosmos-kit/react-lite@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.4...@cosmos-kit/react-lite@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.3...@cosmos-kit/react-lite@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.2...@cosmos-kit/react-lite@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.1...@cosmos-kit/react-lite@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.6.0...@cosmos-kit/react-lite@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.17...@cosmos-kit/react-lite@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.16...@cosmos-kit/react-lite@2.5.17) (2023-12-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.15...@cosmos-kit/react-lite@2.5.16) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.14...@cosmos-kit/react-lite@2.5.15) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.13...@cosmos-kit/react-lite@2.5.14) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.12...@cosmos-kit/react-lite@2.5.13) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.11...@cosmos-kit/react-lite@2.5.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.10...@cosmos-kit/react-lite@2.5.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.9...@cosmos-kit/react-lite@2.5.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.8...@cosmos-kit/react-lite@2.5.9) (2023-11-15) + +### Bug Fixes + +- **react:** allow pass through custom classes to base modal ([cde4b7e](https://github.com/cosmology-tech/cosmos-kit/commit/cde4b7e2fcfbfd8e106eba4153e34d02a5c85887)) + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.7...@cosmos-kit/react-lite@2.5.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.6...@cosmos-kit/react-lite@2.5.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.5...@cosmos-kit/react-lite@2.5.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.4...@cosmos-kit/react-lite@2.5.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.3...@cosmos-kit/react-lite@2.5.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.2...@cosmos-kit/react-lite@2.5.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.1...@cosmos-kit/react-lite@2.5.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.5.0...@cosmos-kit/react-lite@2.5.1) (2023-10-13) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.15...@cosmos-kit/react-lite@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.14...@cosmos-kit/react-lite@2.4.15) (2023-10-06) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.13...@cosmos-kit/react-lite@2.4.14) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.12...@cosmos-kit/react-lite@2.4.13) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.11...@cosmos-kit/react-lite@2.4.12) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.10...@cosmos-kit/react-lite@2.4.11) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.9...@cosmos-kit/react-lite@2.4.10) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.8...@cosmos-kit/react-lite@2.4.9) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.7...@cosmos-kit/react-lite@2.4.8) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.6...@cosmos-kit/react-lite@2.4.7) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.5...@cosmos-kit/react-lite@2.4.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.4...@cosmos-kit/react-lite@2.4.5) (2023-09-02) + +### Bug Fixes + +- useChains bug when one chain has connected ([694c02c](https://github.com/cosmology-tech/cosmos-kit/commit/694c02c46c67fb70ff959134d81de6c0ee879f10)) + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.3...@cosmos-kit/react-lite@2.4.4) (2023-08-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.2...@cosmos-kit/react-lite@2.4.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.1...@cosmos-kit/react-lite@2.4.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.4.0...@cosmos-kit/react-lite@2.4.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.3.1...@cosmos-kit/react-lite@2.4.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.3.0...@cosmos-kit/react-lite@2.3.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.2.4...@cosmos-kit/react-lite@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.2.3...@cosmos-kit/react-lite@2.2.4) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.2.2...@cosmos-kit/react-lite@2.2.3) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.2.1...@cosmos-kit/react-lite@2.2.2) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.2.0...@cosmos-kit/react-lite@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.8...@cosmos-kit/react-lite@2.2.0) (2023-08-17) + +### Features + +- useChains ([8c24403](https://github.com/cosmology-tech/cosmos-kit/commit/8c24403ed4fc6b145e2e8c102643aa06dab0bd90)) + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.7...@cosmos-kit/react-lite@2.1.8) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.6...@cosmos-kit/react-lite@2.1.7) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.5...@cosmos-kit/react-lite@2.1.6) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.4...@cosmos-kit/react-lite@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.3...@cosmos-kit/react-lite@2.1.4) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.2...@cosmos-kit/react-lite@2.1.3) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.1...@cosmos-kit/react-lite@2.1.2) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.1.0...@cosmos-kit/react-lite@2.1.1) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.5...@cosmos-kit/react-lite@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.4...@cosmos-kit/react-lite@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.3...@cosmos-kit/react-lite@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.2...@cosmos-kit/react-lite@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1...@cosmos-kit/react-lite@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.7...@cosmos-kit/react-lite@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.6...@cosmos-kit/react-lite@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.5...@cosmos-kit/react-lite@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.4...@cosmos-kit/react-lite@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.3...@cosmos-kit/react-lite@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.2...@cosmos-kit/react-lite@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.1...@cosmos-kit/react-lite@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.1-beta.0...@cosmos-kit/react-lite@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@2.0.0...@cosmos-kit/react-lite@2.0.1-beta.0) (2023-07-11) + +### Bug Fixes + +- merge conflicts ([37a2b6b](https://github.com/cosmology-tech/cosmos-kit/commit/37a2b6b8e93ddde11d2955c57a3d19169f64c4fa)) +- useChain address not trigger rerender ([13975de](https://github.com/cosmology-tech/cosmos-kit/commit/13975de3ef8bc27f1bdd951b0a4c4bb9eea2fff0)) + +# [2.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2-beta.6...@cosmos-kit/react-lite@2.0.0) (2023-07-05) + +### Bug Fixes + +- use tsup and prettify the index example ([cb4196a](https://github.com/cosmology-tech/cosmos-kit/commit/cb4196a1e34f708c355897274afbb80c1f46d1de)) + +## [1.5.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2-beta.5...@cosmos-kit/react-lite@1.5.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.5.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2-beta.4...@cosmos-kit/react-lite@1.5.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.5.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2-beta.3...@cosmos-kit/react-lite@1.5.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.5.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2...@cosmos-kit/react-lite@1.5.2-beta.3) (2023-06-30) + +### Bug Fixes + +- babel output not compatible ([2d8a21f](https://github.com/cosmology-tech/cosmos-kit/commit/2d8a21fdc210e9bc8dbeb8b9401cfb37c547a4f1)) +- bundle ([a3dc1c2](https://github.com/cosmology-tech/cosmos-kit/commit/a3dc1c21de2cf6dba0ea75fad4265d8a080b4a50)) +- conflicts ([31d20b4](https://github.com/cosmology-tech/cosmos-kit/commit/31d20b47983b17ef1e4d39e8c2a2c5f5b46647fa)) +- stuff ([52944e2](https://github.com/cosmology-tech/cosmos-kit/commit/52944e208620eb2df689c5d663608971b472cc57)) + +## [1.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.1...@cosmos-kit/react-lite@1.5.2) (2023-06-30) + +## [1.5.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2-beta.1...@cosmos-kit/react-lite@1.5.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.5.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.2-beta.0...@cosmos-kit/react-lite@1.5.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.5.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.1...@cosmos-kit/react-lite@1.5.2-beta.0) (2023-06-28) + +### Bug Fixes + +- babel output not compatible ([04e4b63](https://github.com/cosmology-tech/cosmos-kit/commit/04e4b6336095244f911b3745e6d31351dbbbb608)) +- bundle ([072f527](https://github.com/cosmology-tech/cosmos-kit/commit/072f527e2b91eca9ac253fb7896a90a392aecf1c)) +- conflicts ([2f6466f](https://github.com/cosmology-tech/cosmos-kit/commit/2f6466fdafecac719527d3569d6979a30b676110)) +- stuff ([7ed3a74](https://github.com/cosmology-tech/cosmos-kit/commit/7ed3a74b2b4d8bc464b5d7c98b5a6a9bd0897406)) + +## [1.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.5.0...@cosmos-kit/react-lite@1.5.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [1.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.10...@cosmos-kit/react-lite@1.5.0) (2023-06-13) + +### Features + +- add signArbitrary to ChainWalletContext ([6f9a38a](https://github.com/cosmology-tech/cosmos-kit/commit/6f9a38a77d5d02d516f6f2482130a203ea2eee99)) + +## [1.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.9...@cosmos-kit/react-lite@1.4.10) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.8...@cosmos-kit/react-lite@1.4.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.7...@cosmos-kit/react-lite@1.4.8) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.6...@cosmos-kit/react-lite@1.4.7) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.5...@cosmos-kit/react-lite@1.4.6) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.4...@cosmos-kit/react-lite@1.4.5) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.3...@cosmos-kit/react-lite@1.4.4) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.2...@cosmos-kit/react-lite@1.4.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.1...@cosmos-kit/react-lite@1.4.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.4.0...@cosmos-kit/react-lite@1.4.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +# [1.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.19...@cosmos-kit/react-lite@1.4.0) (2023-04-28) + +### Bug Fixes + +- :bug: fix suggestToken params inheritance ([8b2a6a5](https://github.com/cosmology-tech/cosmos-kit/commit/8b2a6a5dce811b3f9097a832ca383be5de135ade)) + +### Features + +- :sparkles: add suggest token inside chain wallet context ([3cd9f20](https://github.com/cosmology-tech/cosmos-kit/commit/3cd9f20d0377aee07ccfb7217e4220fa0cc5856b)) + +## [1.3.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.18...@cosmos-kit/react-lite@1.3.19) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.17...@cosmos-kit/react-lite@1.3.18) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.16...@cosmos-kit/react-lite@1.3.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.15...@cosmos-kit/react-lite@1.3.16) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.14...@cosmos-kit/react-lite@1.3.15) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.13...@cosmos-kit/react-lite@1.3.14) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.12...@cosmos-kit/react-lite@1.3.13) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.11...@cosmos-kit/react-lite@1.3.12) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.10...@cosmos-kit/react-lite@1.3.11) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.9...@cosmos-kit/react-lite@1.3.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.8...@cosmos-kit/react-lite@1.3.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.7...@cosmos-kit/react-lite@1.3.8) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.6...@cosmos-kit/react-lite@1.3.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.5...@cosmos-kit/react-lite@1.3.6) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.4...@cosmos-kit/react-lite@1.3.5) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.3...@cosmos-kit/react-lite@1.3.4) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react-lite@1.3.2...@cosmos-kit/react-lite@1.3.3) (2023-03-08) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## 1.3.2 (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/react-lite + +## [1.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.2.3...@cosmos-kit/react@1.3.1) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.2.2...@cosmos-kit/react@1.2.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.2.1...@cosmos-kit/react@1.2.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.2.0...@cosmos-kit/react@1.2.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/react + +# [1.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.1.3...@cosmos-kit/react@1.2.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [1.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.1.2...@cosmos-kit/react@1.1.3) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.1.1...@cosmos-kit/react@1.1.2) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.16...@cosmos-kit/react@1.1.1) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.15...@cosmos-kit/react@1.0.16) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.14...@cosmos-kit/react@1.0.15) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.13...@cosmos-kit/react@1.0.14) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.12...@cosmos-kit/react@1.0.13) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.11...@cosmos-kit/react@1.0.12) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.10...@cosmos-kit/react@1.0.11) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.9...@cosmos-kit/react@1.0.10) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.8...@cosmos-kit/react@1.0.9) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.7...@cosmos-kit/react@1.0.8) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.6...@cosmos-kit/react@1.0.7) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.4...@cosmos-kit/react@1.0.6) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.3...@cosmos-kit/react@1.0.4) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.2...@cosmos-kit/react@1.0.3) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@1.0.1...@cosmos-kit/react@1.0.2) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/react + +## [1.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.10...@cosmos-kit/react@1.0.1) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.9...@cosmos-kit/react@0.27.10) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.8...@cosmos-kit/react@0.27.9) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.7...@cosmos-kit/react@0.27.8) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.6...@cosmos-kit/react@0.27.7) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.5...@cosmos-kit/react@0.27.6) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.4...@cosmos-kit/react@0.27.5) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.3...@cosmos-kit/react@0.27.4) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.2...@cosmos-kit/react@0.27.3) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.1...@cosmos-kit/react@0.27.2) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.27.0...@cosmos-kit/react@0.27.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.26.0...@cosmos-kit/react@0.27.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.25.2...@cosmos-kit/react@0.26.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.25.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.25.1...@cosmos-kit/react@0.25.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.25.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.25.0...@cosmos-kit/react@0.25.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.14...@cosmos-kit/react@0.25.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.13...@cosmos-kit/react@0.24.14) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.12...@cosmos-kit/react@0.24.13) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.11...@cosmos-kit/react@0.24.12) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.10...@cosmos-kit/react@0.24.11) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.9...@cosmos-kit/react@0.24.10) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.8...@cosmos-kit/react@0.24.9) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.7...@cosmos-kit/react@0.24.8) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.6...@cosmos-kit/react@0.24.7) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.5...@cosmos-kit/react@0.24.6) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.4...@cosmos-kit/react@0.24.5) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.3...@cosmos-kit/react@0.24.4) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.2...@cosmos-kit/react@0.24.3) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.1...@cosmos-kit/react@0.24.2) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.24.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.24.0...@cosmos-kit/react@0.24.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.23.1...@cosmos-kit/react@0.24.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.23.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.23.0...@cosmos-kit/react@0.23.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.22.1...@cosmos-kit/react@0.23.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.22.0...@cosmos-kit/react@0.22.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.21.2...@cosmos-kit/react@0.22.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.21.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.21.1...@cosmos-kit/react@0.21.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.21.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.21.0...@cosmos-kit/react@0.21.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.20.0...@cosmos-kit/react@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.19.2...@cosmos-kit/react@0.20.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.19.1...@cosmos-kit/react@0.19.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.19.0...@cosmos-kit/react@0.19.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.6...@cosmos-kit/react@0.19.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.18.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.5...@cosmos-kit/react@0.18.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.18.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.4...@cosmos-kit/react@0.18.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.18.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.3...@cosmos-kit/react@0.18.4) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.18.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.2...@cosmos-kit/react@0.18.3) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.18.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.1...@cosmos-kit/react@0.18.2) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.18.0...@cosmos-kit/react@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.17.1...@cosmos-kit/react@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.17.0...@cosmos-kit/react@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.16.3...@cosmos-kit/react@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.16.2...@cosmos-kit/react@0.16.3) (2022-09-25) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.16.1...@cosmos-kit/react@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.16.0...@cosmos-kit/react@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.15.0...@cosmos-kit/react@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.14.0...@cosmos-kit/react@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.13.2...@cosmos-kit/react@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.12.3...@cosmos-kit/react@0.13.2) (2022-09-22) + +## 0.12.5 (2022-09-17) + +## 0.12.4 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.12.2...@cosmos-kit/react@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.12.1...@cosmos-kit/react@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/react + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.12.0...@cosmos-kit/react@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/react@0.11.0...@cosmos-kit/react@0.12.0) (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/react + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/packages/react-lite/LICENSE b/packages/react-lite/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/packages/react-lite/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/react-lite/README.md b/packages/react-lite/README.md new file mode 100644 index 000000000..d32ae47ca --- /dev/null +++ b/packages/react-lite/README.md @@ -0,0 +1,61 @@ +# cosmos-kit + +

+ +

+ +

+ + + + + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/react is the React integration for CosmosKit. + +## Documentation + +[docs.cosmology.zone/cosmos-kit](https://docs.cosmology.zone/cosmos-kit) + +## Installation + +```sh +yarn add @cosmos-kit/react @cosmos-kit/core @cosmos-kit/keplr chain-registry +``` + +## Provider + +- [ChainProvider](https://docs.cosmology.zone/cosmos-kit/provider/chain-provider) + +## Hooks + +- [useChain](https://docs.cosmology.zone/cosmos-kit/hooks/use-chain) + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/packages/react-lite/__test__/useChain.test.tsx b/packages/react-lite/__test__/useChain.test.tsx new file mode 100644 index 000000000..c935171fd --- /dev/null +++ b/packages/react-lite/__test__/useChain.test.tsx @@ -0,0 +1,72 @@ +import { act, renderHook, waitFor, render, fireEvent, screen } from '@testing-library/react'; +import { useChain, useManager } from '../src' +import { customWrapper } from "../test-utils" +import '@testing-library/jest-dom' +import React from 'react' + +const TestComponent = () => { + const chain = useChain('juno') + const manager = useManager() + return
+

address:{chain.address}

+
+ {manager.getWalletRepo('juno').wallets.map(w => { + return + })} +
+
+} + +describe('useChain', () => { + + const useContextMock = jest.spyOn(React, 'useContext') + + afterEach(() => { + useContextMock.mockRestore() + }) + + it('should throw an error if no modal provided', async () => { + useContextMock.mockReturnValue({ walletManager: {}, modalProvided: undefined } as any) + renderHook(() => { + try { + useChain('juno') + } catch (error) { + expect(error.message).toBe('You have to provide `walletModal` to use `useChain`, or use `useChainWallet` instead.') + } + }, { wrapper: customWrapper }) + }) + + it('should throw an error if used without ChainProvider', async () => { + renderHook(() => { + try { + useChain('juno') + } catch (error) { + expect(error.message).toBe('You have forgot to use ChainProvider.') + } + }) + }) + + it('return undefined if not select a wallet', async () => { + const { result } = renderHook(() => useChain('juno', false), { wrapper: customWrapper }) + await waitFor(() => { + expect(result.current.address).toBeUndefined() + }) + }) + + it('should return address of selected wallet and chain', async () => { + render(, { wrapper: customWrapper }) + + await act(() => fireEvent.click(screen.getByText('station-extension'))) + + await waitFor(async () => { + expect(await screen.getByText('address:juno-1AddressStation')).toBeInTheDocument() + }) + + await act(() => fireEvent.click(screen.getByText('leap-extension'))) + + await waitFor(async () => { + expect(await screen.getByText('address:juno-1AddressLeap')).toBeInTheDocument() + }) + + }) +}) diff --git a/packages/react-lite/__test__/useChainWallet.test.tsx b/packages/react-lite/__test__/useChainWallet.test.tsx new file mode 100644 index 000000000..43439dccb --- /dev/null +++ b/packages/react-lite/__test__/useChainWallet.test.tsx @@ -0,0 +1,26 @@ +import { act, renderHook, waitFor } from "@testing-library/react" +import { useChainWallet } from "../src" +import { customWrapper } from "../test-utils" + +describe('useChainWallet', () => { + it('should throw error, if not wrapped in ChainProvider', async () => { + renderHook(() => { + try { + useChainWallet('juno', 'keplr-extension', true) + } catch (error) { + expect(error.message).toBe('You have forgot to use ChainProvider.') + } + }) + }) + it('should return right chain and wallet information', async () => { + const { result } = renderHook(() => useChainWallet('juno', 'leap-extension', true), { wrapper: customWrapper }) + + await act(async () => { + await result.current?.connect() + }) + + await waitFor(() => { + expect(result.current?.chain?.chain_name).toBe('juno') + }) + }) +}) diff --git a/packages/react-lite/__test__/useChains.test.tsx b/packages/react-lite/__test__/useChains.test.tsx new file mode 100644 index 000000000..7f375800e --- /dev/null +++ b/packages/react-lite/__test__/useChains.test.tsx @@ -0,0 +1,87 @@ +import { act, fireEvent, render, renderHook, screen, waitFor } from "@testing-library/react" +import { useChains, useManager } from "../src" +import React from 'react' +import { customWrapper } from '../test-utils' +import '@testing-library/jest-dom' + +const TestComponent = () => { + const chains = useChains(['juno', 'stargaze', 'osmosis']); + const manager = useManager() + + const leapWallet = manager.mainWallets.find(w => w.walletName === 'leap-extension') + const stationWallet = manager.mainWallets.find(w => w.walletName === 'station-extension') + + return ( +
+
    + {Object.entries(chains).map(([name, chain]) => { + return ( +
  • + {name}:{chain.address} +
  • + ) + })} +
+ + + +
+ ) +} + +describe('useChains', () => { + + const useContextMock = jest.spyOn(React, 'useContext') + afterEach(() => { + useContextMock.mockRestore() + }) + + it('should throw an error if no modal provided', async () => { + useContextMock.mockReturnValue({ walletManager: {}, modalProvided: undefined } as any) + renderHook(() => { + try { + useChains(['juno', 'stargaze']) + } catch (error) { + expect(error.message).toBe('You have to provide `walletModal` to use `useChains`, or use `useChainWallet` instead.') + } + }, { wrapper: customWrapper }) + }) + + it('should throw an error if used without ChainProvider', async () => { + renderHook(() => { + try { + useChains(['juno', 'stargaze']) + } catch (error) { + expect(error.message).toBe('You have forgotten to use ChainProvider.') + } + }) + }) + + it('should render chains address', async () => { + render(, { wrapper: customWrapper }) + + await act(async () => { + await fireEvent.click(screen.getByText('connect leap')) + }) + + await waitFor(() => { + expect(screen.getByText('juno:juno-1AddressLeap')).toBeInTheDocument() + expect(screen.getByText('stargaze:stargaze-1AddressLeap')).toBeInTheDocument() + expect(screen.getByText('osmosis:osmosis-1AddressLeap')).toBeInTheDocument() + }) + + await act(() => fireEvent.click(screen.getByText('disconnect leap'))) + + await act(async () => { + await fireEvent.click(screen.getByText('connect station')) + }) + + await waitFor(() => { + expect(screen.getByText('juno:juno-1AddressStation')).toBeInTheDocument() + expect(screen.getByText('stargaze:stargaze-1AddressStation')).toBeInTheDocument() + expect(screen.getByText('osmosis:osmosis-1AddressStation')).toBeInTheDocument() + }) + }) + + +}) diff --git a/packages/react-lite/__test__/useManager.test.tsx b/packages/react-lite/__test__/useManager.test.tsx new file mode 100644 index 000000000..a61b7a9c1 --- /dev/null +++ b/packages/react-lite/__test__/useManager.test.tsx @@ -0,0 +1,29 @@ +import { renderHook, waitFor } from '@testing-library/react' +import { useManager } from '../src' +import { Keplr } from '@keplr-wallet/types' +import { customWrapper } from '../test-utils'; + +describe('useManager', () => { + it('should throw an error if used without ChainProvider', async () => { + renderHook(() => { + try { + useManager() + } catch (error) { + expect(error.message).toBe('You have forgot to use ChainProvider.') + } + }) + }) + + it('should create main wallet according wallets', async () => { + const { result } = renderHook(() => useManager(), { wrapper: customWrapper }) + await waitFor(() => { + expect(result.current.mainWallets).toHaveLength(3) + }) + }) + it('should create wallet repo according chains', async () => { + const { result } = renderHook(() => useManager(), { wrapper: customWrapper }) + await waitFor(() => { + expect(result.current.walletRepos).toHaveLength(4) + }) + }) +}) diff --git a/packages/react-lite/__test__/useNameService.test.tsx b/packages/react-lite/__test__/useNameService.test.tsx new file mode 100644 index 000000000..3c2edef0a --- /dev/null +++ b/packages/react-lite/__test__/useNameService.test.tsx @@ -0,0 +1,61 @@ +import { renderHook, waitFor } from "@testing-library/react" +import { customWrapper } from "../test-utils" +import { useNameService } from "../src" +import { Keplr } from '@keplr-wallet/types' +import * as useManagerHook from '../src/hooks/useManager' + +describe('useNameService', () => { + + const getNameServiceMock = jest.fn() + const getNameServiceRegistryFromNameMock = jest.fn() + + + beforeEach(() => { + jest.spyOn(useManagerHook, 'useManager').mockImplementation(() => ({ + defaultNameService: 'icns', + getNameService: getNameServiceMock, + chainRecords: [], + walletRepos: [], + mainWallets: [], + getChainRecord: jest.fn(), + getWalletRepo: jest.fn(), + addChains: jest.fn(), + addEndpoints: jest.fn(), + getChainLogo: jest.fn(), + on: jest.fn(), + off: jest.fn() // Add the missing properties here + })) + + + }) + + it('should throw error, if there is no default name space', () => { + renderHook(() => { + try { + useNameService('notexistnameservice') + } catch (error) { + expect(error.message).toBe('No such name service: notexistnameservice') + } + }) + }) + + + it('should return right name service', async () => { + getNameServiceMock.mockImplementation(() => Promise.resolve('nameservice1')) + + const { result } = renderHook(() => useNameService(), { wrapper: customWrapper }) + await waitFor(() => { + expect(result.current.data).toBe('nameservice1') + }) + }) + + it('should return error message', async () => { + getNameServiceMock.mockImplementation(() => Promise.reject(new Error('error message'))) + + const { result } = renderHook(() => useNameService(), { wrapper: customWrapper }) + await waitFor(() => { + expect(result.current.message).toBe('error message') + }) + }) + +}) diff --git a/packages/react-lite/__test__/useWallet.test.tsx b/packages/react-lite/__test__/useWallet.test.tsx new file mode 100644 index 000000000..77a8a1f9b --- /dev/null +++ b/packages/react-lite/__test__/useWallet.test.tsx @@ -0,0 +1,32 @@ +import { renderHook, waitFor } from "@testing-library/react" +import { useManager, useWallet } from "../src" +import { customWrapper } from "../test-utils" + +describe("useWallet", () => { + it('should throw an error if used without ChainProvider', async () => { + renderHook(() => { + try { + useManager() + } catch (error) { + expect(error.message).toBe('You have forgot to use ChainProvider.') + } + }) + }) + + it('should return wallet 1', async () => { + const { result: useWalletR } = renderHook(() => useWallet('leap-extension'), { wrapper: customWrapper }) + await waitFor(() => { + expect(useWalletR.current.mainWallet?.walletName).toBe('leap-extension') + expect(useWalletR.current.status).toBe('Connected') + }) + }) + + it('should return wallet 2', async () => { + const { result: useWalletR } = renderHook(() => useWallet('station-extension'), { wrapper: customWrapper }) + await waitFor(() => { + expect(useWalletR.current.mainWallet?.walletName).toBe('station-extension') + expect(useWalletR.current.status).toBe('Connected') + }) + }) + +}) diff --git a/packages/react-lite/__test__/useWalletClient.test.tsx b/packages/react-lite/__test__/useWalletClient.test.tsx new file mode 100644 index 000000000..965f4a218 --- /dev/null +++ b/packages/react-lite/__test__/useWalletClient.test.tsx @@ -0,0 +1,45 @@ +import { act, renderHook, waitFor, render, screen, fireEvent } from "@testing-library/react" +import { useManager, useWalletClient } from "../src" +import { customWrapper } from "../test-utils" +import React from 'react' +import '@testing-library/jest-dom' + +const TestComponent = () => { + const { client, status, message } = useWalletClient() + const manager = useManager() + return
+

client:{JSON.stringify(client)}

+

status:{status}

+

message:{message}

+
+ {manager.getWalletRepo('juno').wallets.map(w => { + return + })} +
+
+} + +describe('useWalletClient', () => { + + it('should throw an error if used without ChainProvider', async () => { + renderHook(() => { + try { + useWalletClient('leap-extension') + } catch (error) { + expect(error.message).toBe('You have forgot to use ChainProvider.') + } + }) + }) + + it('should return wallet 1', async () => { + render(, { wrapper: customWrapper }) + + await act(async () => { + fireEvent.click(screen.getByText('leap-extension')) + }) + + await waitFor(async () => { + expect(await screen.findByText('status:Done')).toBeInTheDocument() + }) + }) +}) diff --git a/packages/react-lite/index.ts b/packages/react-lite/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/packages/react-lite/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/packages/react-lite/jest.config.js b/packages/react-lite/jest.config.js new file mode 100644 index 000000000..f263614d6 --- /dev/null +++ b/packages/react-lite/jest.config.js @@ -0,0 +1,20 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +const path = require('path'); +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + transform: { + '^.+\\.tsx?$': [ + 'ts-jest', + { + babelConfig: false, + tsconfig: 'tsconfig.json', + }, + ], + }, + transformIgnorePatterns: [`/node_modules/*`], + testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + modulePathIgnorePatterns: ['dist/*'], + setupFilesAfterEnv: ['/jest.setup.js'], +}; diff --git a/packages/react-lite/jest.setup.js b/packages/react-lite/jest.setup.js new file mode 100644 index 000000000..f5b1a95d9 --- /dev/null +++ b/packages/react-lite/jest.setup.js @@ -0,0 +1,108 @@ +Object.setPrototypeOf(window, { + keplr: { + enable: () => Promise.resolve(), + async getSimpleAccount(chainId) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + }, + async getAccount(chainId) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + }, + async getKey(chainId) { + return { + name: 'keplr', + bech32Address: `${chainId}AddressKeplr`, + algo: 'secp256k1', + pubKey: 'pubkey', + isNanoLedger: false, + }; + }, + }, + leap: { + enable: () => Promise.resolve(), + async getSimpleAccount(chainId) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + }, + async getAccount(chainId) { + const key = await this.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + }, + async getKey(chainId) { + return { + name: 'leap', + bech32Address: `${chainId}AddressLeap`, + algo: 'secp256k1', + pubKey: 'pubkey', + isNanoLedger: false, + }; + }, + async disconnect() { + return Promise.resolve(); + }, + }, + station: { + connect: async () => ({ + name: 'station', + addresses: { + 'juno-1': `juno-1AddressStation`, + 'osmosis-1': `osmosis-1AddressStation`, + 'stargaze-1': `stargaze-1AddressStation`, + }, + }), + async getSimpleAccount(chainId) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + }, + async getAccount(chainId) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + }, + async getKey() { + return { + name: 'station', + bech32Address: `${chainId}AddressStation`, + algo: 'secp256k1', + pubKey: 'pubkey', + isNanoLedger: false, + }; + }, + async disconnect() { + return Promise.resolve(); + }, + }, +}); diff --git a/packages/react-lite/package.json b/packages/react-lite/package.json new file mode 100644 index 000000000..843321d07 --- /dev/null +++ b/packages/react-lite/package.json @@ -0,0 +1,95 @@ +{ + "name": "@cosmos-kit/react-lite", + "version": "2.13.0", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "source": "./src/index.ts", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "clear": "rm -rf ./dist", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "cosmostation", + "leap", + "keplr", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "devDependencies": { + "@testing-library/jest-dom": "5.14.1", + "@testing-library/react": "^15.0.7", + "@testing-library/react-hooks": "8.0.1", + "@types/react": "^18.2", + "@types/react-dom": "^18.2", + "jest-environment-jsdom": "29.7.0" + }, + "dependencies": { + "@chain-registry/types": "^0.45.1", + "@cosmos-kit/core": "^2.13.1", + "@dao-dao/cosmiframe": "^0.1.0" + }, + "resolutions": { + "@types/react": "^18.2" + }, + "peerDependencies": { + "@types/react": ">= 17", + "@types/react-dom": ">= 17", + "react": "^18", + "react-dom": "^18" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/packages/react-lite/src/hooks/index.ts b/packages/react-lite/src/hooks/index.ts new file mode 100644 index 000000000..8c9aa4726 --- /dev/null +++ b/packages/react-lite/src/hooks/index.ts @@ -0,0 +1,8 @@ +export * from './useChain'; +export * from './useChains'; +export * from './useChainWallet'; +export * from './useIframe'; +export * from './useManager'; +export * from './useNameService'; +export * from './useWallet'; +export * from './useWalletClient'; diff --git a/packages/react-lite/src/hooks/useChain.ts b/packages/react-lite/src/hooks/useChain.ts new file mode 100644 index 000000000..c89a0b301 --- /dev/null +++ b/packages/react-lite/src/hooks/useChain.ts @@ -0,0 +1,82 @@ +import { ChainContext, ChainName, DisconnectOptions } from '@cosmos-kit/core'; +import { useContext, useEffect, useMemo, useState } from 'react'; + +import { walletContext } from '../provider'; +import { getChainWalletContext } from '../utils'; + +export const useChain = (chainName: ChainName, sync = true): ChainContext => { + const context = useContext(walletContext); + const [_, forceRender] = useState(0); + + if (!context) { + throw new Error('You have forgot to use ChainProvider.'); + } + + const { walletManager, modalProvided } = context; + + if (!modalProvided) { + throw new Error( + 'You have to provide `walletModal` to use `useChain`, or use `useChainWallet` instead.' + ); + } + + const walletRepo = walletManager.getWalletRepo(chainName); + walletRepo.activate(); + const { + connect, + disconnect, + openView, + closeView, + current, + chainRecord: { chain, assetList }, + getRpcEndpoint, + getRestEndpoint, + getStargateClient, + getCosmWasmClient, + getNameService, + } = walletRepo; + + const chainWalletContext = useMemo(() => { + if (chain) { + return getChainWalletContext(chain.chain_id, current, sync); + } else { + return void 0; + } + }, [chain, current, current?.state]); + + useEffect(() => { + forceRender((i) => i + 1); + }, [chain, assetList, chainWalletContext?.address]); + + // temporary solution for sync not working when the used chain is changed without page rendering (only component rendering) + useEffect(() => { + const currentWallet = window.localStorage.getItem( + 'cosmos-kit@2:core//current-wallet' + ); + if ( + sync && + chainWalletContext && + chainWalletContext.isWalletDisconnected && + currentWallet + ) { + connect(currentWallet); + } + }, [chain, assetList]); + + return { + ...chainWalletContext, + walletRepo, + chain, + assets: assetList, + openView, + closeView, + connect: () => connect(void 0, sync), + disconnect: (options?: DisconnectOptions) => + disconnect(void 0, sync, options), + getRpcEndpoint, + getRestEndpoint, + getStargateClient, + getCosmWasmClient, + getNameService, + }; +}; diff --git a/packages/react-lite/src/hooks/useChainWallet.ts b/packages/react-lite/src/hooks/useChainWallet.ts new file mode 100644 index 000000000..11eb8cb27 --- /dev/null +++ b/packages/react-lite/src/hooks/useChainWallet.ts @@ -0,0 +1,30 @@ +import { ChainName, ChainWalletContext, WalletName } from '@cosmos-kit/core'; +import { useContext, useMemo } from 'react'; + +import { walletContext } from '../provider'; +import { getChainWalletContext } from '../utils'; + +export const useChainWallet = ( + chainName: ChainName, + walletName: WalletName, + sync = true +): ChainWalletContext => { + const context = useContext(walletContext); + + if (!context) { + throw new Error('You have forgot to use ChainProvider.'); + } + + const { walletManager } = context; + + const wallet = walletManager.getChainWallet(chainName, walletName); + wallet.activate(); + const chainWalletContext = useMemo(() => { + if (wallet.chain) { + return getChainWalletContext(wallet.chain.chain_id, wallet, sync); + } else { + return void 0; + } + }, [wallet.chain]); + return chainWalletContext; +}; diff --git a/packages/react-lite/src/hooks/useChains.ts b/packages/react-lite/src/hooks/useChains.ts new file mode 100644 index 000000000..8678d82a6 --- /dev/null +++ b/packages/react-lite/src/hooks/useChains.ts @@ -0,0 +1,99 @@ +import { ChainContext, ChainName } from '@cosmos-kit/core'; +import { useContext } from 'react'; + +import { walletContext } from '../provider'; +import { getChainWalletContext } from '../utils'; + +export function useChains(chainNames: ChainName[], sync = true) { + const names = Array.from(new Set(chainNames)); + const context = useContext(walletContext); + + if (!context) { + throw new Error('You have forgotten to use ChainProvider.'); + } + + const { walletManager, modalProvided } = context; + + if (!modalProvided) { + throw new Error( + 'You have to provide `walletModal` to use `useChains`, or use `useChainWallet` instead.' + ); + } + + const repos = names.map(name => walletManager.getWalletRepo(name)); + const ids = repos.map(repo => repo.chainRecord.chain.chain_id); + + return names.reduce((result, chainName, index) => { + const walletRepo = repos[index]; + + walletRepo.activate(); + + walletRepo.wallets.forEach((wallet) => { + if (wallet.isModeExtension) { + wallet.callbacks.beforeConnect = async () => { + try { + await wallet.client?.enable?.(ids); + } catch (e) { + for (const repo of repos) { + await wallet.client?.addChain?.(repo.chainRecord) + } + await wallet.client?.enable?.(ids); + } + } + } + + if (wallet.isModeWalletConnect) { + wallet.connectChains = async () => { + await wallet?.client?.connect?.(ids); + for (const name of names.filter((name) => name !== chainName)) { + await wallet.mainWallet + .getChainWallet(name) + .update({ connect: false }); + } + }; + } + }); + + const { + connect, + disconnect, + openView, + closeView, + current, + chainRecord: { chain, assetList }, + getRpcEndpoint, + getRestEndpoint, + getStargateClient, + getCosmWasmClient, + getNameService, + } = walletRepo; + + const chainWalletContext = getChainWalletContext( + chain.chain_id, + current, + sync + ); + + result[chainName] = { + ...chainWalletContext, + walletRepo, + chain, + assets: assetList, + openView, + closeView, + connect: () => + connect( + localStorage.getItem('cosmos-kit@2:core//current-wallet'), + sync + ), + disconnect: () => disconnect(void 0, sync), + getRpcEndpoint, + getRestEndpoint, + getStargateClient, + getCosmWasmClient, + getNameService, + }; + + return result; + }, {} as Record); +} diff --git a/packages/react-lite/src/hooks/useIframe.ts b/packages/react-lite/src/hooks/useIframe.ts new file mode 100644 index 000000000..902119f77 --- /dev/null +++ b/packages/react-lite/src/hooks/useIframe.ts @@ -0,0 +1,193 @@ +import { OfflineAminoSigner } from '@cosmjs/amino'; +import { OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + COSMIFRAME_KEYSTORECHANGE_EVENT, + COSMIFRAME_NOT_CONNECTED_MESSAGE, + MainWalletBase, + WalletClient, + WalletName, +} from '@cosmos-kit/core'; +import { + Cosmiframe, + OverrideHandler, + ParentMetadata, +} from '@dao-dao/cosmiframe'; +import { RefCallback, useCallback, useEffect, useRef, useState } from 'react'; + +import { useWallet } from './useWallet'; + +export type FunctionKeys = { + [K in keyof T]: T[K] extends (...args: unknown[]) => unknown ? K : never; +}[keyof T]; + +export type UseIframeOptions = { + /** + * Optionally attempt to use a specific wallet. Otherwise get the first active + * wallet. + */ + walletName?: WalletName; + /** + * Optionally set the metadata that represents this parent to the iframe. + */ + metadata?: ParentMetadata; + /** + * If defined, the relevant override of a wallet client function will be + * called with the parameters. The return value determines how the iframe + * should handle the function. By default, if nothing is returned, an error + * will be thrown with the message "Handled by outer wallet." + */ + walletClientOverrides?: Partial<{ + [K in FunctionKeys]: ( + ...params: Parameters + ) => OverrideHandler | Promise; + }>; + /** + * If defined, the relevant override of a direct or amino signer will be + * called with the parameters. The return value determines how the iframe + * should handle the function. By default, if nothing is returned, an error + * will be thrown with the message "Handled by outer wallet." + */ + signerOverrides?: Partial<{ + [K in keyof (OfflineAminoSigner & OfflineDirectSigner)]: ( + ...params: Parameters<(OfflineAminoSigner & OfflineDirectSigner)[K]> + ) => OverrideHandler | Promise; + }>; + /** + * Optionally only respond to requests from iframes of specific origin. If + * undefined or empty, all origins are allowed. + */ + origins?: string[]; +}; + +export const useIframe = ({ + walletName, + metadata, + walletClientOverrides, + signerOverrides, + origins, +}: UseIframeOptions = {}): { + wallet: MainWalletBase; + iframeRef: RefCallback; +} => { + const wallet = useWallet(walletName).mainWallet; + const [iframe, setIframe] = useState(null); + + // Memoize these values with refs so the listener always uses their latest + // values without needing to reset. + const walletClientOverridesRef = useRef(walletClientOverrides); + walletClientOverridesRef.current = walletClientOverrides; + const signerOverridesRef = useRef(signerOverrides); + signerOverridesRef.current = signerOverrides; + + // Broadcast keystore change event to iframe wallet. + useEffect(() => { + const notifyIframe = () => { + iframe?.contentWindow.postMessage( + { + event: COSMIFRAME_KEYSTORECHANGE_EVENT, + }, + '*' + ); + }; + + // Notify inner window of keystore change on any wallet client change + // (likely either connection or disconnection). + notifyIframe(); + + if (!wallet || typeof window === 'undefined') { + return; + } + + // Notify inner window of keystore change on any wallet connect event. + wallet.walletInfo.connectEventNamesOnWindow?.forEach((eventName) => { + window.addEventListener(eventName, notifyIframe); + }); + wallet.walletInfo.connectEventNamesOnClient?.forEach(async (eventName) => { + wallet.client?.on?.(eventName, notifyIframe); + }); + + return () => { + wallet.walletInfo.connectEventNamesOnWindow?.forEach((eventName) => { + window.removeEventListener(eventName, notifyIframe); + }); + wallet.walletInfo.connectEventNamesOnClient?.forEach( + async (eventName) => { + wallet.client?.off?.(eventName, notifyIframe); + } + ); + }; + }, [wallet, iframe]); + + // Whenever wallet changes, broadcast keystore change event to iframe wallet. + useEffect(() => { + iframe?.contentWindow.postMessage( + { + event: COSMIFRAME_KEYSTORECHANGE_EVENT, + }, + '*' + ); + }, [wallet, iframe]); + + useEffect(() => { + if (!iframe) { + return; + } + + const removeListener = Cosmiframe.listen({ + iframe, + target: wallet?.client || {}, + getOfflineSignerDirect: + wallet?.client.getOfflineSignerDirect.bind(wallet.client) || + (() => Promise.reject(COSMIFRAME_NOT_CONNECTED_MESSAGE)), + getOfflineSignerAmino: + wallet?.client.getOfflineSignerAmino.bind(wallet.client) || + (() => Promise.reject(COSMIFRAME_NOT_CONNECTED_MESSAGE)), + nonSignerOverrides: () => ({ + ...walletClientOverridesRef.current, + // Override connect to return wallet info. + connect: async (...params) => { + if (walletClientOverridesRef.current?.connect) { + return await walletClientOverridesRef.current.connect( + params[0], + params[1] + ); + } else if (wallet?.client?.connect) { + await wallet.client.connect(params[0], params[1]); + } else { + return { + type: 'error', + error: COSMIFRAME_NOT_CONNECTED_MESSAGE, + }; + } + }, + }), + signerOverrides: () => signerOverridesRef.current, + origins, + metadata: { + name: + metadata?.name || `${wallet.walletInfo.prettyName} (Outer Wallet)`, + imageUrl: + metadata?.imageUrl || + (wallet.walletInfo.logo + ? typeof wallet.walletInfo.logo === 'string' + ? wallet.walletInfo.logo + : 'major' in wallet.walletInfo.logo + ? wallet.walletInfo.logo.major + : undefined + : undefined), + }, + }); + + return removeListener; + }, [iframe, wallet, metadata, origins]); + + const iframeRef: RefCallback = useCallback( + (iframe) => setIframe(iframe), + [] + ); + + return { + wallet, + iframeRef, + }; +}; diff --git a/packages/react-lite/src/hooks/useManager.ts b/packages/react-lite/src/hooks/useManager.ts new file mode 100644 index 000000000..4141a3797 --- /dev/null +++ b/packages/react-lite/src/hooks/useManager.ts @@ -0,0 +1,44 @@ +import { ManagerContext } from '@cosmos-kit/core'; +import { useContext } from 'react'; + +import { walletContext } from '../provider'; + +export const useManager = (): ManagerContext => { + const context = useContext(walletContext); + + if (!context) { + throw new Error('You have forgot to use ChainProvider.'); + } + + const { + walletManager: { + mainWallets, + chainRecords, + walletRepos, + defaultNameService, + getChainRecord, + getWalletRepo, + addChains, + addEndpoints, + getChainLogo, + getNameService, + on, + off, + }, + } = context; + + return { + chainRecords, + walletRepos, + mainWallets, + defaultNameService, + getChainRecord, + getWalletRepo, + addChains, + addEndpoints, + getChainLogo, + getNameService, + on, + off, + }; +}; diff --git a/packages/react-lite/src/hooks/useNameService.ts b/packages/react-lite/src/hooks/useNameService.ts new file mode 100644 index 000000000..10b6046af --- /dev/null +++ b/packages/react-lite/src/hooks/useNameService.ts @@ -0,0 +1,51 @@ +import { + getNameServiceRegistryFromName, + Mutable, + NameService, + NameServiceName, + State, +} from '@cosmos-kit/core'; +import { useEffect, useMemo, useState } from 'react'; + +import { useManager } from './useManager'; + +export const useNameService = ( + name?: NameServiceName +): Mutable => { + const [state, setState] = useState(State.Pending); + const [ns, setNS] = useState(); + const [msg, setMsg] = useState(); + + const { defaultNameService, getNameService } = useManager(); + const registry = useMemo( + () => getNameServiceRegistryFromName(name || defaultNameService), + [name] + ); + + if (!registry) { + throw new Error('No such name service: ' + (name || defaultNameService)); + } + + useEffect(() => { + getNameService() + .then((ns) => { + setNS(ns); + setState(State.Done); + }) + .catch((e) => { + setMsg((e as Error).message); + setState(State.Error); + }) + .finally(() => { + if (state === 'Pending') { + setState(State.Init); + } + }); + }, [name]); + + return { + state, + data: ns, + message: msg, + }; +}; diff --git a/packages/react-lite/src/hooks/useWallet.ts b/packages/react-lite/src/hooks/useWallet.ts new file mode 100644 index 000000000..cb85755b5 --- /dev/null +++ b/packages/react-lite/src/hooks/useWallet.ts @@ -0,0 +1,50 @@ +import { + State, + WalletContext, + WalletName, + WalletStatus, +} from '@cosmos-kit/core'; +import { useContext } from 'react'; + +import { walletContext } from '../provider'; + +export const useWallet = ( + walletName?: WalletName, + activeOnly = true +): WalletContext => { + const context = useContext(walletContext); + + if (!context) { + throw new Error('You have forgot to use ChainProvider.'); + } + + const { walletManager } = context; + const mainWallet = walletName + ? walletManager.getMainWallet(walletName) + : walletManager.mainWallets.find( + (w) => w.isActive && w.clientMutable.state !== State.Error + ); + + if (!mainWallet) { + return { + mainWallet, + chainWallets: [], + wallet: void 0, + status: WalletStatus.Disconnected, + message: void 0, + }; + } + + const { walletInfo, getChainWalletList, getGlobalStatusAndMessage } = + mainWallet; + + const [globalStatus, globalMessage] = getGlobalStatusAndMessage(activeOnly); + + return { + mainWallet, + chainWallets: getChainWalletList(false), + wallet: walletInfo, + status: globalStatus, + message: globalMessage, + }; +}; diff --git a/packages/react-lite/src/hooks/useWalletClient.ts b/packages/react-lite/src/hooks/useWalletClient.ts new file mode 100644 index 000000000..df14f8ca7 --- /dev/null +++ b/packages/react-lite/src/hooks/useWalletClient.ts @@ -0,0 +1,36 @@ +import { State, WalletClientContext, WalletName } from '@cosmos-kit/core'; +import { useContext } from 'react'; + +import { walletContext } from '../provider'; + +export const useWalletClient = ( + walletName?: WalletName +): WalletClientContext => { + const context = useContext(walletContext); + + if (!context) { + throw new Error('You have forgot to use ChainProvider.'); + } + + const { walletManager } = context; + + const mainWallet = walletName + ? walletManager.getMainWallet(walletName) + : walletManager.mainWallets.find((w) => w.isActive); + + if (!mainWallet) { + return { + client: void 0, + status: State.Init, + message: void 0, + }; + } + + const { clientMutable } = mainWallet; + + return { + client: clientMutable.data, + status: clientMutable.state, + message: clientMutable.message, + }; +}; diff --git a/packages/react-lite/src/index.ts b/packages/react-lite/src/index.ts new file mode 100644 index 000000000..11fbfc1c7 --- /dev/null +++ b/packages/react-lite/src/index.ts @@ -0,0 +1,2 @@ +export * from './hooks'; +export * from './provider'; diff --git a/packages/react-lite/src/provider.tsx b/packages/react-lite/src/provider.tsx new file mode 100644 index 000000000..fb71a3864 --- /dev/null +++ b/packages/react-lite/src/provider.tsx @@ -0,0 +1,162 @@ +import type { AssetList, Chain } from '@chain-registry/types'; +import { + ChainName, + Data, + EndpointOptions, + Logger, + LogLevel, + MainWalletBase, + NameServiceName, + SessionOptions, + SignerOptions, + State, + WalletConnectOptions, + WalletManager, + WalletModalProps, + WalletRepo, +} from '@cosmos-kit/core'; +import { createContext, ReactNode, useEffect, useMemo, useState } from 'react'; + +export const walletContext = createContext<{ + walletManager: WalletManager; + modalProvided: boolean; +} | null>(null); + +export function ChainProvider({ + chains, + assetLists, + wallets, + walletModal: ProvidedWalletModal, + throwErrors = false, + subscribeConnectEvents = true, + defaultNameService = 'icns', + walletConnectOptions, + signerOptions, + endpointOptions, + sessionOptions, + logLevel = 'WARN', + allowedIframeParentOrigins = [ + 'http://localhost:*', + 'https://localhost:*', + 'https://app.osmosis.zone', + 'https://daodao.zone', + 'https://dao.daodao.zone', + 'https://my.abstract.money', + 'https://apps.abstract.money', + 'https://console.abstract.money' + ], + children, +}: { + chains: (Chain | ChainName)[]; + wallets: MainWalletBase[]; + assetLists?: AssetList[]; + walletModal?: (props: WalletModalProps) => JSX.Element; + throwErrors?: boolean | 'connect_only'; + subscribeConnectEvents?: boolean; + defaultNameService?: NameServiceName; + walletConnectOptions?: WalletConnectOptions; // SignClientOptions is required if using wallet connect v2 + signerOptions?: SignerOptions; + endpointOptions?: EndpointOptions; + sessionOptions?: SessionOptions; + logLevel?: LogLevel; + /** + * Origins to allow wrapping this app in an iframe and connecting to this + * Cosmos Kit instance. + * + * Defaults to Osmosis and DAO DAO. + */ + allowedIframeParentOrigins?: string[]; + children: ReactNode; +}) { + const logger = useMemo(() => new Logger(logLevel), []); + const walletManager = useMemo(() => { + return new WalletManager( + chains, + wallets, + logger, + throwErrors, + subscribeConnectEvents, + allowedIframeParentOrigins, + assetLists, + defaultNameService, + walletConnectOptions, + signerOptions, + endpointOptions, + sessionOptions + ); + }, []); + + const [isViewOpen, setViewOpen] = useState(false); + const [viewWalletRepo, setViewWalletRepo] = useState< + WalletRepo | undefined + >(); + + const [data, setData] = useState(); + const [state, setState] = useState(State.Init); + const [msg, setMsg] = useState(); + + const [, setClientState] = useState(State.Init); + const [, setClientMsg] = useState(); + + const [render, forceRender] = useState(0); + + logger.debug('[provider.tsx] data:', data); + logger.debug('[provider.tsx] state:', state); + logger.debug('[provider.tsx] message:', msg); + + walletManager.setActions({ + viewOpen: setViewOpen, + viewWalletRepo: setViewWalletRepo, + data: setData, + state: setState, + message: setMsg, + }); + + walletManager.walletRepos.forEach((wr) => { + wr.setActions({ + viewOpen: setViewOpen, + viewWalletRepo: setViewWalletRepo, + render: forceRender, + }); + wr.wallets.forEach((w) => { + w.setActions({ + data: setData, + state: setState, + message: setMsg, + }); + }); + }); + + walletManager.mainWallets.forEach((w) => { + w.setActions({ + data: setData, + state: setState, + message: setMsg, + clientState: setClientState, + clientMessage: setClientMsg, + }); + }); + + useEffect(() => { + walletManager.onMounted(); + return () => { + setViewOpen(false); + walletManager.onUnmounted(); + }; + }, [render]); + + return ( + + {ProvidedWalletModal && ( + + )} + {children} + + ); +} diff --git a/packages/react-lite/src/utils.ts b/packages/react-lite/src/utils.ts new file mode 100644 index 000000000..8f9fc60bf --- /dev/null +++ b/packages/react-lite/src/utils.ts @@ -0,0 +1,238 @@ +import { + ChainWalletBase, + ChainWalletContext, + DisconnectOptions, + WalletStatus, +} from '@cosmos-kit/core'; + +export function getChainWalletContext( + chainId: string, + wallet?: ChainWalletBase, + sync = true +): ChainWalletContext { + const walletAssert = ( + func: ((...params: any[]) => any | undefined) | undefined, + params: any[] = [], + name: string + ) => { + if (!wallet) { + throw new Error( + `Wallet is undefined. Please choose a wallet to connect first.` + ); + } + + if (!func) { + throw new Error( + `Function ${name} not implemented by ${wallet?.walletInfo.prettyName} yet.` + ); + } + + return func(...params); + }; + + function clientMethodAssert( + func: ((...params: any[]) => any | undefined) | undefined, + params: any[] = [], + name: string + ) { + if (!wallet) { + throw new Error( + `Wallet is undefined. Please choose a wallet to connect first.` + ); + } + + if (!wallet?.client) { + throw new Error(`Wallet Client is undefined.`); + } + + if (!func) { + throw new Error( + `Function ${name} not implemented by ${wallet?.walletInfo.prettyName} Client yet.` + ); + } + + return func(...params); + } + + const status = wallet?.walletStatus || WalletStatus.Disconnected; + + return { + chainWallet: wallet, + + chain: wallet?.chainRecord.chain, + assets: wallet?.chainRecord.assetList, + logoUrl: wallet?.chainLogoUrl, + wallet: wallet?.walletInfo, + address: wallet?.address, + username: wallet?.username, + message: wallet ? wallet.message : 'No wallet is connected walletly.', + status, + + isWalletDisconnected: status === 'Disconnected', + isWalletConnecting: status === 'Connecting', + isWalletConnected: status === 'Connected', + isWalletRejected: status === 'Rejected', + isWalletNotExist: status === 'NotExist', + isWalletError: status === 'Error', + + connect: () => walletAssert(wallet?.connect, [void 0, sync], 'connect'), + disconnect: (options?: DisconnectOptions) => + walletAssert(wallet?.disconnect, [void 0, sync, options], 'disconnect'), + getRpcEndpoint: (isLazy?: boolean) => + walletAssert(wallet?.getRpcEndpoint, [isLazy], 'getRpcEndpoint'), + getRestEndpoint: (isLazy?: boolean) => + walletAssert(wallet?.getRestEndpoint, [isLazy], 'getRestEndpoint'), + getStargateClient: () => + walletAssert(wallet?.getStargateClient, [], 'getStargateClient'), + getCosmWasmClient: () => + walletAssert(wallet?.getCosmWasmClient, [], 'getCosmWasmClient'), + getSigningStargateClient: () => + walletAssert( + wallet?.getSigningStargateClient, + [], + 'getSigningStargateClient' + ), + getSigningCosmWasmClient: () => + walletAssert( + wallet?.getSigningCosmWasmClient, + [], + 'getSigningCosmWasmClient' + ), + getNameService: () => + walletAssert(wallet?.getNameService, [], 'getNameService'), + + estimateFee: (...params: Parameters) => + walletAssert(wallet?.estimateFee, params, 'estimateFee'), + sign: (...params: Parameters) => + walletAssert(wallet?.sign, params, 'sign'), + broadcast: (...params: Parameters) => + walletAssert(wallet?.broadcast, params, 'broadcast'), + signAndBroadcast: ( + ...params: Parameters + ) => walletAssert(wallet?.signAndBroadcast, params, 'signAndBroadcast'), + + qrUrl: wallet?.client?.qrUrl, + appUrl: wallet?.client?.appUrl, + + defaultSignOptions: wallet?.client?.defaultSignOptions, + setDefaultSignOptions: ( + ...params: Parameters + ) => + clientMethodAssert( + wallet?.client?.setDefaultSignOptions.bind(wallet.client), + [...params], + 'setDefaultSignOptions' + ), + enable: () => + clientMethodAssert( + wallet?.client?.enable.bind(wallet.client), + [chainId], + 'enable' + ), + suggestToken: (...params: Parameters) => + clientMethodAssert( + wallet?.client?.suggestToken.bind(wallet.client), + [...params], + 'suggestToken' + ), + getAccount: () => + clientMethodAssert( + wallet?.client?.getAccount.bind(wallet.client), + [chainId], + 'getAccount' + ), + getOfflineSigner: () => + clientMethodAssert( + wallet?.client?.getOfflineSigner.bind(wallet.client), + [chainId, wallet?.preferredSignType], + 'getOfflineSigner' + ), + getOfflineSignerAmino: () => + clientMethodAssert( + wallet?.client?.getOfflineSignerAmino.bind(wallet.client), + [chainId], + 'getOfflineSignerAmino' + ), + getOfflineSignerDirect: () => + clientMethodAssert( + wallet?.client?.getOfflineSignerDirect.bind(wallet.client), + [chainId], + 'getOfflineSignerDirect' + ), + signAmino: (...params: Parameters) => + clientMethodAssert( + wallet?.client?.signAmino.bind(wallet.client), + [chainId, ...params], + 'signAmino' + ), + signDirect: (...params: Parameters) => + clientMethodAssert( + wallet?.client?.signDirect.bind(wallet.client), + [chainId, ...params], + 'signDirect' + ), + signArbitrary: ( + ...params: Parameters + ) => + clientMethodAssert( + wallet?.client?.signArbitrary.bind(wallet.client), + [chainId, ...params], + 'signArbitrary' + ), + sendTx: (...params: Parameters) => + clientMethodAssert( + wallet?.client?.sendTx.bind(wallet.client), + [chainId, ...params], + 'sendTx' + ), + }; +} + +// Listen for a message and remove the listener if the callback returns true or +// if it throws an error. +export const listenOnce = ( + callback: (message: unknown) => boolean | Promise +) => { + const listener = async ({ data }: MessageEvent) => { + let remove; + try { + remove = await callback(data); + } catch (error) { + console.error(error); + remove = true; + } + + if (remove) { + window.removeEventListener('message', listener); + } + }; + + window.addEventListener('message', listener); +}; + +// Send message to iframe and listen for a response. Returns a promise that +// resolves when the callback returns true and rejects if it throws an error. +export const sendAndListenOnce = ( + iframe: HTMLIFrameElement, + message: unknown, + callback: (message: unknown) => boolean | Promise +): Promise => + new Promise((resolve, reject) => { + // Add one-time listener that waits for a response. + listenOnce(async (data) => { + try { + if (await callback(data)) { + resolve(); + return true; + } else { + return false; + } + } catch (err) { + reject(err); + return true; + } + }); + + // Send the message to the iframe. + iframe.contentWindow.postMessage(message); + }); diff --git a/packages/react-lite/test-utils/chain-provider-wrapper.tsx b/packages/react-lite/test-utils/chain-provider-wrapper.tsx new file mode 100644 index 000000000..c5bfc3bd6 --- /dev/null +++ b/packages/react-lite/test-utils/chain-provider-wrapper.tsx @@ -0,0 +1,53 @@ +import { ChainProvider } from '../src' +import { assets, chains } from 'chain-registry' +import { wallets as keplrWallets } from "@cosmos-kit/keplr-extension"; +import { wallets as leapWallets } from "@cosmos-kit/leap-extension"; +import { wallets as stationWallets } from "@cosmos-kit/station-extension"; +import React from 'react' +import { Chain } from '@chain-registry/types'; +import { ChainName } from '@cosmos-kit/core'; +import { Decimal } from "@cosmjs/math"; +import { GasPrice } from "@cosmjs/stargate"; + +export const customWrapper = ({ children }) => { + return ( + ['juno', 'stargaze', 'osmosis', 'cosmoshub'].includes(c.chain_name))} + assetLists={assets} + wallets={[...leapWallets, ...stationWallets, ...keplrWallets]} + walletModal={() =>
Wallet Modal
} + subscribeConnectEvents={true} + defaultNameService={"stargaze"} + walletConnectOptions={{ + signClient: { + projectId: "a8510432ebb71e6948cfd6cde54b70f7", + relayUrl: "wss://relay.walletconnect.org", + metadata: { + name: "CosmosKit Example", + description: "CosmosKit test dapp", + url: "https://test.cosmoskit.com/", + icons: [ + "https://raw.githubusercontent.com/cosmology-tech/cosmos-kit/main/packages/docs/public/favicon-96x96.png", + ], + }, + }, + }} + signerOptions={{ + signingStargate: (chain: Chain | ChainName) => { + const chainName = + typeof chain === "string" ? chain : chain.chain_name; + switch (chainName) { + case "osmosis": + return { + // @ts-ignore + gasPrice: new GasPrice(Decimal.zero(1), "uosmo"), + }; + } + } + }}> + {children} +
+ ) +} + +export const CustomWrapper = customWrapper diff --git a/packages/react-lite/test-utils/custom-render-hook.tsx b/packages/react-lite/test-utils/custom-render-hook.tsx new file mode 100644 index 000000000..ced25cb2c --- /dev/null +++ b/packages/react-lite/test-utils/custom-render-hook.tsx @@ -0,0 +1,60 @@ +import { ChainProvider } from '../src' +import { assets } from 'chain-registry' +import { wallets as keplrWallets } from "@cosmos-kit/keplr-extension"; +import { wallets as leapWallets } from "@cosmos-kit/leap-extension"; +import React from 'react' +import { Chain } from '@chain-registry/types'; +import { ChainName } from '@cosmos-kit/core'; +import { Decimal } from "@cosmjs/math"; +import { GasPrice } from "@cosmjs/stargate"; +import { renderHook, RenderHookOptions, RenderHookResult } from '@testing-library/react'; + +const AllTheProviders = ({ children }) => { + return ( +
Wallet Modal
} + subscribeConnectEvents={true} + defaultNameService={"stargaze"} + walletConnectOptions={{ + signClient: { + projectId: "a8510432ebb71e6948cfd6cde54b70f7", + relayUrl: "wss://relay.walletconnect.org", + metadata: { + name: "CosmosKit Example", + description: "CosmosKit test dapp", + url: "https://test.cosmoskit.com/", + icons: [ + "https://raw.githubusercontent.com/cosmology-tech/cosmos-kit/main/packages/docs/public/favicon-96x96.png", + ], + }, + }, + }} + signerOptions={{ + signingStargate: (chain: Chain | ChainName) => { + const chainName = + typeof chain === "string" ? chain : chain.chain_name; + switch (chainName) { + case "osmosis": + return { + // @ts-ignore + gasPrice: new GasPrice(Decimal.zero(1), "uosmo"), + }; + } + } + }}> + {children} +
+ ) +} + +const customRenderHook = (hook: (props: P) => R, options?: RenderHookOptions

) => + renderHook(hook, { wrapper: AllTheProviders, ...options }) + +// re-export everything +export * from '@testing-library/react' + +// override render method +export { customRenderHook as renderHook } diff --git a/packages/react-lite/test-utils/index.ts b/packages/react-lite/test-utils/index.ts new file mode 100644 index 000000000..47bbc6ad7 --- /dev/null +++ b/packages/react-lite/test-utils/index.ts @@ -0,0 +1,2 @@ +export * from './custom-render-hook' +export * from './chain-provider-wrapper' diff --git a/packages/react-lite/tsconfig.json b/packages/react-lite/tsconfig.json new file mode 100644 index 000000000..fd8b9b2fb --- /dev/null +++ b/packages/react-lite/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src", + "jsx": "react-jsx" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/packages/react/.editorconfig b/packages/react/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/packages/react/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/react/.eslintignore b/packages/react/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/packages/react/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/packages/react/.eslintrc.json b/packages/react/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/packages/react/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/packages/react/.gitignore b/packages/react/.gitignore new file mode 100644 index 000000000..cba0431de --- /dev/null +++ b/packages/react/.gitignore @@ -0,0 +1,49 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module +dist + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/packages/react/.npmignore b/packages/react/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/packages/react/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/packages/react/.npmrc b/packages/react/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/packages/react/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/react/.prettierrc.json b/packages/react/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/packages/react/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/packages/react/LICENSE b/packages/react/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/packages/react/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/react/index.ts b/packages/react/index.ts new file mode 100644 index 000000000..e31be21f6 --- /dev/null +++ b/packages/react/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development. +export * from './src'; diff --git a/packages/react/src/context/index.ts b/packages/react/src/context/index.ts new file mode 100644 index 000000000..b6231c68a --- /dev/null +++ b/packages/react/src/context/index.ts @@ -0,0 +1 @@ +export * from './useSelectedWalletContext' diff --git a/packages/react/src/context/useSelectedWalletContext.tsx b/packages/react/src/context/useSelectedWalletContext.tsx new file mode 100644 index 000000000..cab0df45d --- /dev/null +++ b/packages/react/src/context/useSelectedWalletContext.tsx @@ -0,0 +1,29 @@ +import { createContext, useContext, useEffect, useState } from "react"; + + +type SelectedWalletRepoContextType = { + selectedWalletRepoName: string, selectWalletRepoName: (name: string) => void +} + +export const SelectedWalletRepoContext = createContext(null) + +export const SelectedWalletRepoProvider = ({ children }) => { + + const [selectedWalletRepoName, selectWalletRepoName] = useState('') + + useEffect(() => { + const selectedWalletName = localStorage.getItem('cosmos-kit@2:core//current-wallet') + if (selectedWalletName) { + selectWalletRepoName(selectedWalletName) + } + }, []) + + + return + {children} + +} + +export const useSelectedWalletRepoContext = () => useContext(SelectedWalletRepoContext) diff --git a/packages/react/src/hooks/index.ts b/packages/react/src/hooks/index.ts index 63d5db0d0..5a6e11daa 100644 --- a/packages/react/src/hooks/index.ts +++ b/packages/react/src/hooks/index.ts @@ -4,4 +4,4 @@ export * from './useAccount' export * from './useChain' export * from './useConnect' export * from './useChainWallet' -export * from './useConfig' \ No newline at end of file +export * from './useConfig' diff --git a/packages/react/src/hooks/useModalTheme.ts b/packages/react/src/hooks/useModalTheme.ts new file mode 100644 index 000000000..c134c7545 --- /dev/null +++ b/packages/react/src/hooks/useModalTheme.ts @@ -0,0 +1,17 @@ +import { ModePreference, useTheme } from '@interchain-ui/react'; +import * as React from 'react'; + +export function useModalTheme() { + const { theme, setColorMode } = useTheme(); + + const value = React.useMemo(() => theme, [theme]); + + const setModalTheme = React.useCallback((mode: ModePreference) => { + setColorMode(mode); + }, []); + + return { + modalTheme: value, + setModalTheme, + }; +} diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 90ac2ff41..4fa7bc4ff 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -2,4 +2,4 @@ export * from './provider' export * from './hooks' export * from './types' export * from './enum' -export * from './modal' \ No newline at end of file +export * from './modal' diff --git a/packages/react/src/modal/components/Astronaut.tsx b/packages/react/src/modal/components/Astronaut.tsx new file mode 100644 index 000000000..02750c564 --- /dev/null +++ b/packages/react/src/modal/components/Astronaut.tsx @@ -0,0 +1,163 @@ +import { SVGProps } from 'react'; + +export function AstronautSvg(props: SVGProps) { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/packages/react/src/modal/components/index.ts b/packages/react/src/modal/components/index.ts new file mode 100644 index 000000000..792962380 --- /dev/null +++ b/packages/react/src/modal/components/index.ts @@ -0,0 +1 @@ +export * from './views'; diff --git a/packages/react/src/modal/components/views/Connected.tsx b/packages/react/src/modal/components/views/Connected.tsx new file mode 100644 index 000000000..6213e6609 --- /dev/null +++ b/packages/react/src/modal/components/views/Connected.tsx @@ -0,0 +1,54 @@ +import { WalletViewProps } from '@cosmos-kit/core'; +import { ConnectModalHead, ConnectModalStatus } from '@interchain-ui/react'; + +import { AstronautSvg } from '../Astronaut'; +import { getWalletProp, ModalViewImpl } from './config'; + +export function ConnectedView({ + onClose, + onReturn, + wallet, + options, +}: WalletViewProps): ModalViewImpl { + const { walletInfo, username, address } = wallet; + + const onDisconnect = async () => { + await wallet.disconnect(true, { + walletconnect: { + removeAllPairings: options?.mobile.displayQRCodeEveryTime, + }, + }); + }; + + const modalHead = ( + + ); + + const modalContent = ( + + ), + address, + }} + onDisconnect={onDisconnect} + /> + ); + + return { head: modalHead, content: modalContent }; +} diff --git a/packages/react/src/modal/components/views/Connecting.tsx b/packages/react/src/modal/components/views/Connecting.tsx new file mode 100644 index 000000000..63afe400c --- /dev/null +++ b/packages/react/src/modal/components/views/Connecting.tsx @@ -0,0 +1,46 @@ +import { WalletViewProps } from '@cosmos-kit/core'; +import { ConnectModalHead, ConnectModalStatus } from '@interchain-ui/react'; + +import { getWalletProp, ModalViewImpl } from './config'; + +export function ConnectingView({ + onClose, + onReturn, + wallet, +}: WalletViewProps): ModalViewImpl { + const { + walletInfo: { prettyName, mode }, + message, + } = wallet; + + let title = 'Requesting Connection'; + let desc: string = + mode === 'wallet-connect' + ? `Approve ${prettyName} connection request on your mobile.` + : `Open the ${prettyName} browser extension to connect your wallet.`; + + if (message === 'InitClient') { + title = 'Initializing Wallet Client'; + desc = ''; + } + + const modalHead = ( + + ); + + const modalContent = ( + + ); + + return { head: modalHead, content: modalContent }; +} diff --git a/packages/react/src/modal/components/views/Error.tsx b/packages/react/src/modal/components/views/Error.tsx new file mode 100644 index 000000000..974529187 --- /dev/null +++ b/packages/react/src/modal/components/views/Error.tsx @@ -0,0 +1,36 @@ +import { WalletViewProps } from '@cosmos-kit/core'; +import { ConnectModalHead, ConnectModalStatus } from '@interchain-ui/react'; + +import { getWalletProp, ModalViewImpl } from './config'; + +export function ErrorView({ + onClose, + onReturn, + wallet, +}: WalletViewProps): ModalViewImpl { + const { + walletInfo: { prettyName }, + message, + } = wallet; + + const modalHead = ( + + ); + + const modalContent = ( + + ); + + return { head: modalHead, content: modalContent }; +} diff --git a/packages/react/src/modal/components/views/NotExist.tsx b/packages/react/src/modal/components/views/NotExist.tsx new file mode 100644 index 000000000..63756874f --- /dev/null +++ b/packages/react/src/modal/components/views/NotExist.tsx @@ -0,0 +1,61 @@ +import { WalletViewProps } from '@cosmos-kit/core'; +import { ConnectModalHead, ConnectModalStatus } from '@interchain-ui/react'; +import { FaAndroid } from '@react-icons/all-files/fa/FaAndroid'; +import { GoDesktopDownload } from '@react-icons/all-files/go/GoDesktopDownload'; +import { GrFirefox } from '@react-icons/all-files/gr/GrFirefox'; +import { RiAppStoreFill } from '@react-icons/all-files/ri/RiAppStoreFill'; +import { RiChromeFill } from '@react-icons/all-files/ri/RiChromeFill'; + +import { getWalletProp, ModalViewImpl } from './config'; + +export function NotExistView({ + onClose, + onReturn, + wallet, +}: WalletViewProps): ModalViewImpl { + const { + walletInfo: { prettyName }, + downloadInfo, + } = wallet; + + const onInstall = () => { + window.open(downloadInfo?.link, '_blank'); + }; + + const IconComp = getIcon(downloadInfo); + + const modalHead = ( + + ); + + const modalContent = ( + } + disableInstall={!downloadInfo?.link} + /> + ); + + return { head: modalHead, content: modalContent }; +} + +function getIcon(downloadInfo: WalletViewProps['wallet']['downloadInfo']) { + if (downloadInfo?.browser === 'chrome') return RiChromeFill; + if (downloadInfo?.browser === 'firefox') return GrFirefox; + if (downloadInfo?.os === 'android') return FaAndroid; + if (downloadInfo?.os === 'ios') return RiAppStoreFill; + return GoDesktopDownload; +} diff --git a/packages/react/src/modal/components/views/QRCode.tsx b/packages/react/src/modal/components/views/QRCode.tsx new file mode 100644 index 000000000..4815aeb50 --- /dev/null +++ b/packages/react/src/modal/components/views/QRCode.tsx @@ -0,0 +1,85 @@ +import { ExpiredError, State, WalletViewProps } from '@cosmos-kit/core'; +import { + ConnectModalHead, + ConnectModalQRCode, + QRCodeStatus, +} from '@interchain-ui/react'; + +import { ModalViewImpl } from './config'; + +export function QRCodeView({ + onClose, + onReturn, + wallet, +}: WalletViewProps): ModalViewImpl { + const { + walletInfo: { prettyName }, + } = wallet; + + const { data, state, message } = wallet.qrUrl ?? {}; + + function getParts() { + let desc = `Open ${prettyName} App to Scan`; + let errorTitle: string, errorDesc: string; + if (state === 'Error') { + desc = void 0; + if (message === ExpiredError.message) { + errorTitle = 'QRCode Expired'; + errorDesc = 'Click to refresh.'; + } else { + errorTitle = 'QRCode Error'; + errorDesc = message; + } + } + + let status: QRCodeStatus; + + switch (state) { + case State.Pending: + status = 'Pending'; + break; + case State.Done: + status = 'Done'; + break; + case State.Error: + if (message === ExpiredError.message) { + status = 'Expired'; + } else { + status = 'Error'; + } + break; + default: + status = 'Error'; + } + + return { desc, errorTitle, errorDesc, status }; + } + + const { desc, errorTitle, errorDesc, status } = getParts(); + + const onRefresh = () => { + wallet.connect(false); + }; + + const modalHead = ( + + ); + + const modalContent = ( + + ); + + return { head: modalHead, content: modalContent }; +} diff --git a/packages/react/src/modal/components/views/Rejected.tsx b/packages/react/src/modal/components/views/Rejected.tsx new file mode 100644 index 000000000..a86bfd4a6 --- /dev/null +++ b/packages/react/src/modal/components/views/Rejected.tsx @@ -0,0 +1,41 @@ +import { WalletViewProps } from '@cosmos-kit/core'; +import { ConnectModalHead, ConnectModalStatus } from '@interchain-ui/react'; + +import { getWalletProp, ModalViewImpl } from './config'; + +export function RejectedView({ + onClose, + onReturn, + wallet, +}: WalletViewProps): ModalViewImpl { + const { + walletInfo: { prettyName }, + } = wallet; + + const onReconnect = () => { + wallet.connect(false); + }; + + const modalHead = ( + + ); + + const modalContent = ( + + ); + + return { head: modalHead, content: modalContent }; +} diff --git a/packages/react/src/modal/components/views/WalletList.tsx b/packages/react/src/modal/components/views/WalletList.tsx new file mode 100644 index 000000000..d49c6dcb5 --- /dev/null +++ b/packages/react/src/modal/components/views/WalletList.tsx @@ -0,0 +1,107 @@ +import { ChainWalletBase, WalletListViewProps } from '@cosmos-kit/core'; +import { ConnectModalHead, ConnectModalWalletList } from '@interchain-ui/react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; + +import { getWalletProp } from './config'; +import { useSelectedWalletRepoContext } from '../../../context'; + +interface DynamicWalletListProps { + wallets: WalletListViewProps['wallets']; + onClose: () => void; +} + +function DynamicWalletList({ wallets, onClose }: DynamicWalletListProps) { + const [isLargeScreen, setIsLargeScreen] = useState(true); + + const { selectWalletRepoName } = useSelectedWalletRepoContext() + + const onWalletClicked = useCallback(async (wallet: ChainWalletBase) => { + selectWalletRepoName(wallet.walletName) + await wallet.connect(wallet.walletStatus !== 'NotExist'); + if (!['Rejected', 'NotExist'].includes(wallet.walletStatus)) { + onClose(); + } + }, []); + + useEffect(() => { + const handleWindowResize = () => { + if (window.innerWidth >= 768) { + setIsLargeScreen(true); + } else { + setIsLargeScreen(false); + } + }; + handleWindowResize(); + + window.addEventListener('resize', handleWindowResize); + + return () => { + window.removeEventListener('resize', handleWindowResize); + }; + }, []); + + const walletsData = useMemo( + () => + wallets + .sort((a, b) => { + if ( + a.walletInfo.mode !== 'wallet-connect' && + b.walletInfo.mode !== 'wallet-connect' + ) { + return 0; + } else if (a.walletInfo.mode !== 'wallet-connect') { + return -1; + } else { + return 1; + } + }) + .map((wallet, i) => { + return { + ...getWalletProp(wallet.walletInfo), + // subLogo can either be 'walletConnect' or a valid src attribute + subLogo: + wallet.walletInfo.mode === 'wallet-connect' + ? 'walletConnect' + : undefined, + btmLogo: + typeof wallet.walletInfo.logo === 'object' + ? wallet.walletInfo.logo.minor + : wallet.walletInfo.extends, + badge: { MetaMask: 'SNAP' }[wallet.walletInfo.extends], + shape: (i < 2 && isLargeScreen ? 'square' : 'list') as + | 'square' + | 'list', + downloadUrl: '', + originalWallet: wallet, + }; + }), + [wallets, isLargeScreen] + ); + + return ( + + ); +} + +export function WalletListView({ + onClose, + wallets, + initialFocus, +}: WalletListViewProps) { + const modalHead = ( + + ); + + const modalContent = ( + + ); + + return { head: modalHead, content: modalContent }; +} diff --git a/packages/react/src/modal/components/views/config.ts b/packages/react/src/modal/components/views/config.ts new file mode 100644 index 000000000..f31b8915f --- /dev/null +++ b/packages/react/src/modal/components/views/config.ts @@ -0,0 +1,50 @@ +import { + ModalViews, + Wallet, + WalletListViewProps, + WalletViewProps, +} from '@cosmos-kit/core'; + +import { ConnectedView } from './Connected'; +import { ConnectingView } from './Connecting'; +import { ErrorView } from './Error'; +import { NotExistView } from './NotExist'; +import { QRCodeView } from './QRCode'; +import { RejectedView } from './Rejected'; +import { WalletListView } from './WalletList'; + +export type ModalViewImpl = { + head: React.ReactNode; + content: React.ReactNode; +}; + +export type WalletViewImplGetter = (props: WalletViewProps) => ModalViewImpl; + +export type WalletListImplGetter = ( + props: WalletListViewProps +) => ModalViewImpl; + +export const defaultModalViews: Record< + keyof ModalViews, + WalletViewImplGetter | WalletListImplGetter +> = { + Connecting: ConnectingView, + Connected: ConnectedView, + Error: ErrorView, + NotExist: NotExistView, + Rejected: RejectedView, + QRCode: QRCodeView, + WalletList: WalletListView, +}; + +export function getWalletProp(wallet: Wallet) { + const { prettyName, mode, name, logo, mobileDisabled } = wallet; + return { + name, + prettyName, + logo: typeof logo === 'object' ? logo.major : logo, + mobileDisabled: + typeof mobileDisabled === 'boolean' ? mobileDisabled : mobileDisabled(), + isMobile: mode === 'wallet-connect', + }; +} diff --git a/packages/react/src/modal/components/views/index.ts b/packages/react/src/modal/components/views/index.ts new file mode 100644 index 000000000..f1b656c01 --- /dev/null +++ b/packages/react/src/modal/components/views/index.ts @@ -0,0 +1,8 @@ +export * from './config'; +export * from './Connected'; +export * from './Connecting'; +export * from './Error'; +export * from './NotExist'; +export * from './QRCode'; +export * from './Rejected'; +export * from './WalletList'; diff --git a/packages/react/src/modal/constant.ts b/packages/react/src/modal/constant.ts new file mode 100644 index 000000000..22019cf95 --- /dev/null +++ b/packages/react/src/modal/constant.ts @@ -0,0 +1,2 @@ +export const WC_ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzg1IiBoZWlnaHQ9IjIzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Ik03OC42NTAxIDQ2LjAwMDFjNjIuNjQ5OS02MS4zMSAxNjQuMjE5OS02MS4zMSAyMjYuODY5OSAwbDcuNTQgNy4zOGMuNzQzLjcyMDYgMS4zMzQgMS41ODMyIDEuNzM4IDIuNTM2Ni40MDQuOTUzNC42MTEgMS45NzgxLjYxMSAzLjAxMzQgMCAxLjAzNTMtLjIwNyAyLjA2LS42MTEgMy4wMTM0LS40MDQuOTUzNC0uOTk1IDEuODE2LTEuNzM4IDIuNTM2NmwtMjUuNzkgMjUuMjVjLS43NjEuNzM1LTEuNzc3IDEuMTQ1OC0yLjgzNSAxLjE0NThzLTIuMDc0LS40MTA4LTIuODM1LTEuMTQ1OGwtMTAuMzgtMTAuMTZjLTQzLjctNDIuNzctMTE0LjU3LTQyLjc3LTE1OC4yNyAwbC0xMS4xMSAxMC44OGMtLjc2Mi43MzU2LTEuNzggMS4xNDY4LTIuODM5OSAxLjE0NjgtMS4wNTk1IDAtMi4wNzc2LS40MTEyLTIuODQwMS0xLjE0NjhsLTI1Ljc4OTktMjUuMjVjLS43NDM0LS43MjA2LTEuMzM0NC0xLjU4MzItMS43Mzc5LTIuNTM2Ni0uNDAzNi0uOTUzNC0uNjExNi0xLjk3ODEtLjYxMTYtMy4wMTM0IDAtMS4wMzUzLjIwOC0yLjA2LjYxMTYtMy4wMTM0LjQwMzUtLjk1MzQuOTk0NS0xLjgxNiAxLjczNzktMi41MzY2bDguMjgtOC4xWm0yODAuMjA5OSA1Mi4yMSAyMyAyMi40NTk5Yy43NDIuNzIyIDEuMzMyIDEuNTg2IDEuNzM1IDIuNTRzLjYxMSAxLjk3OS42MTEgMy4wMTUtLjIwOCAyLjA2MS0uNjExIDMuMDE1Yy0uNDAzLjk1NC0uOTkzIDEuODE4LTEuNzM1IDIuNTRMMjc4LjMxIDIzMy4wNmMtMS41MiAxLjQ3Mi0zLjU1NCAyLjI5Ni01LjY3IDIuMjk2cy00LjE1LS44MjQtNS42Ny0yLjI5NmwtNzMuNDctNzEuOWMtLjE4Ni0uMTg2LS40MDYtLjMzMy0uNjQ5LS40MzQtLjI0My0uMTAxLS41MDMtLjE1Mi0uNzY2LS4xNTJzLS41MjMuMDUxLS43NjYuMTUyLS40NjMuMjQ4LS42NDkuNDM0bC03My40NiA3MS45Yy0xLjUyMiAxLjQ3My0zLjU1NyAyLjI5Ny01LjY3NSAyLjI5N3MtNC4xNTMtLjgyNC01LjY3NS0yLjI5N0wyLjM1MDA1IDEzMS43NWMtLjc0MzMxLS43MjEtMS4zMzQzLTEuNTgzLTEuNzM3ODg2LTIuNTM3LS40MDM1ODgtLjk1My0uNjExNTUzNjUtMS45NzgtLjYxMTU1MzY1LTMuMDEzcy4yMDc5NjU2NS0yLjA2LjYxMTU1MzY1LTMuMDEzYy40MDM1ODYtLjk1NC45OTQ1NzYtMS44MTYgMS43Mzc4ODYtMi41MzdMMjUuMzUwMSA5OC4xOTAxYzEuNTE3OC0xLjQ3NzEgMy41NTIxLTIuMzAzNSA1LjY3LTIuMzAzNSAyLjExNzggMCA0LjE1MjEuODI2NCA1LjY3IDIuMzAzNUwxMTAuMTYgMTcwLjA4Yy4xODYuMTg2LjQwNi4zMzQuNjQ5LjQzNC4yNDMuMTAxLjUwMy4xNTMuNzY2LjE1M3MuNTIzLS4wNTIuNzY2LS4xNTNjLjI0My0uMS40NjMtLjI0OC42NDktLjQzNGw3My40Ni03MS44ODk5YzEuNTItMS40Nzc3IDMuNTU2LTIuMzA0NCA1LjY3NS0yLjMwNDQgMi4xMiAwIDQuMTU2LjgyNjcgNS42NzUgMi4zMDQ0bDczLjQ2IDcxLjg4OTljLjE4Ni4xODguNDA3LjMzNi42NTEuNDM4LjI0NC4xMDEuNTA1LjE1NC43NjkuMTU0cy41MjUtLjA1My43NjktLjE1NGMuMjQ0LS4xMDIuNDY1LS4yNS42NTEtLjQzOGw3My40Ni03MS44ODk5YzEuNTE4LTEuNDc3MSAzLjU1Mi0yLjMwMzUgNS42Ny0yLjMwMzVzNC4xNTIuODI2NCA1LjY3IDIuMzAzNWwtLjA0LjAyWiIgZmlsbD0iIzMzOTZGRiIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMzg0LjE3djIzNS4zNUgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=='; diff --git a/packages/react/src/modal/index.ts b/packages/react/src/modal/index.ts index ba0eca8c4..bfdbef138 100644 --- a/packages/react/src/modal/index.ts +++ b/packages/react/src/modal/index.ts @@ -1,2 +1,2 @@ export * from './modal' -export * from './provider' \ No newline at end of file +export * from './provider' diff --git a/packages/react/src/modal/modal.tsx b/packages/react/src/modal/modal.tsx index ec1b08455..79e5c76b1 100644 --- a/packages/react/src/modal/modal.tsx +++ b/packages/react/src/modal/modal.tsx @@ -1,5 +1,5 @@ -import { useWalletManager } from "../hooks" -import { useWalletModal } from "./provider" +import { useWalletManager } from '../hooks'; +import { useWalletModal } from './provider'; const style: React.CSSProperties = { position: 'absolute', @@ -8,21 +8,27 @@ const style: React.CSSProperties = { transform: 'translate(-50%,-50%)', width: '500px', backgroundColor: 'white', -} +}; export const WalletModal = () => { - const walletManager = useWalletManager() - const { close } = useWalletModal() + const walletManager = useWalletManager(); + const { close } = useWalletModal(); return (

    - {walletManager.wallets.map(wallet => { + {walletManager.wallets.map((wallet) => { return (
  • {wallet.option.prettyName} - +
  • - ) + ); })}
- ) -} \ No newline at end of file + ); +}; diff --git a/packages/react/src/provider.tsx b/packages/react/src/provider.tsx index 538f1387b..38b037d3e 100644 --- a/packages/react/src/provider.tsx +++ b/packages/react/src/provider.tsx @@ -1,24 +1,29 @@ -import React, { useEffect, useMemo, useState } from 'react' -import { createContext, useContext } from "react"; -import { BaseWallet, SignerOptions, WalletManager, EndpointOptions } from '@interChain-kit/core' +import React, { useEffect, useMemo, useState } from 'react'; +import { createContext, useContext } from 'react'; +import { + BaseWallet, + SignerOptions, + WalletManager, + EndpointOptions, +} from '@interChain-kit/core'; import { AssetList, Chain } from '@chain-registry/v2-types'; import { WalletModalProvider } from './modal'; - type InterchainWalletContextType = { - walletManager: WalletManager -} + walletManager: WalletManager; +}; type InterchianWalletProviderProps = { - chains: Chain[] - assetLists: AssetList[] - wallets: BaseWallet[] - signerOptions: SignerOptions, - endpointOptions: EndpointOptions, - children: React.ReactNode -} + chains: Chain[]; + assetLists: AssetList[]; + wallets: BaseWallet[]; + signerOptions: SignerOptions; + endpointOptions: EndpointOptions; + children: React.ReactNode; +}; -const InterChainWalletContext = createContext(null); +const InterChainWalletContext = + createContext(null); export const ChainProvider = ({ chains, @@ -26,33 +31,38 @@ export const ChainProvider = ({ wallets, signerOptions, endpointOptions, - children + children, }: InterchianWalletProviderProps) => { - - const [_, forceRender] = useState({}) + const [_, forceRender] = useState({}); const walletManager = useMemo(() => { - return new WalletManager(chains, assetLists, wallets, signerOptions, endpointOptions, () => forceRender({})) - }, []) + return new WalletManager( + chains, + assetLists, + wallets, + signerOptions, + endpointOptions, + () => forceRender({}) + ); + }, []); useEffect(() => { - walletManager.init() - }, []) - + walletManager.init(); + }, []); return ( - - {children} - + {children} - ) -} + ); +}; export const useInterChainWalletContext = () => { - const context = useContext(InterChainWalletContext) + const context = useContext(InterChainWalletContext); if (!context) { - throw new Error('useInterChainWalletContext must be used within a InterChainProvider') + throw new Error( + 'useInterChainWalletContext must be used within a InterChainProvider' + ); } - return context -} \ No newline at end of file + return context; +}; diff --git a/packages/walletconnect/.editorconfig b/packages/walletconnect/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/packages/walletconnect/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/walletconnect/.eslintignore b/packages/walletconnect/.eslintignore new file mode 100644 index 000000000..8f0b997cd --- /dev/null +++ b/packages/walletconnect/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +./types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/packages/walletconnect/.eslintrc.json b/packages/walletconnect/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/packages/walletconnect/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/packages/walletconnect/.gitignore b/packages/walletconnect/.gitignore new file mode 100644 index 000000000..d93985ec4 --- /dev/null +++ b/packages/walletconnect/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store \ No newline at end of file diff --git a/packages/walletconnect/.npmignore b/packages/walletconnect/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/packages/walletconnect/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/packages/walletconnect/.npmrc b/packages/walletconnect/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/packages/walletconnect/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/packages/walletconnect/.prettierrc.json b/packages/walletconnect/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/packages/walletconnect/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/packages/walletconnect/CHANGELOG.md b/packages/walletconnect/CHANGELOG.md new file mode 100644 index 000000000..e0ad9bca0 --- /dev/null +++ b/packages/walletconnect/CHANGELOG.md @@ -0,0 +1,859 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.10.0...@cosmos-kit/walletconnect@2.10.1) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.9.0...@cosmos-kit/walletconnect@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.8.0...@cosmos-kit/walletconnect@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.7.0...@cosmos-kit/walletconnect@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.6.3...@cosmos-kit/walletconnect@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.6.2...@cosmos-kit/walletconnect@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.6.1...@cosmos-kit/walletconnect@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.6.0...@cosmos-kit/walletconnect@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.9...@cosmos-kit/walletconnect@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.8...@cosmos-kit/walletconnect@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.7...@cosmos-kit/walletconnect@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.6...@cosmos-kit/walletconnect@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.5...@cosmos-kit/walletconnect@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.4...@cosmos-kit/walletconnect@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.3...@cosmos-kit/walletconnect@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.2...@cosmos-kit/walletconnect@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.1...@cosmos-kit/walletconnect@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.5.0...@cosmos-kit/walletconnect@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.17...@cosmos-kit/walletconnect@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.16...@cosmos-kit/walletconnect@2.4.17) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.15...@cosmos-kit/walletconnect@2.4.16) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.14...@cosmos-kit/walletconnect@2.4.15) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.13...@cosmos-kit/walletconnect@2.4.14) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.12...@cosmos-kit/walletconnect@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.11...@cosmos-kit/walletconnect@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.10...@cosmos-kit/walletconnect@2.4.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.9...@cosmos-kit/walletconnect@2.4.10) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.8...@cosmos-kit/walletconnect@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.7...@cosmos-kit/walletconnect@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.6...@cosmos-kit/walletconnect@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.5...@cosmos-kit/walletconnect@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.4...@cosmos-kit/walletconnect@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.3...@cosmos-kit/walletconnect@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.2...@cosmos-kit/walletconnect@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.1...@cosmos-kit/walletconnect@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.4.0...@cosmos-kit/walletconnect@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.12...@cosmos-kit/walletconnect@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.11...@cosmos-kit/walletconnect@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.10...@cosmos-kit/walletconnect@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.9...@cosmos-kit/walletconnect@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.8...@cosmos-kit/walletconnect@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.7...@cosmos-kit/walletconnect@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.6...@cosmos-kit/walletconnect@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.5...@cosmos-kit/walletconnect@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.4...@cosmos-kit/walletconnect@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.3...@cosmos-kit/walletconnect@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.2...@cosmos-kit/walletconnect@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.1...@cosmos-kit/walletconnect@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.3.0...@cosmos-kit/walletconnect@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.2.1...@cosmos-kit/walletconnect@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.2.0...@cosmos-kit/walletconnect@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.12...@cosmos-kit/walletconnect@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.11...@cosmos-kit/walletconnect@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.10...@cosmos-kit/walletconnect@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.9...@cosmos-kit/walletconnect@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.8...@cosmos-kit/walletconnect@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.7...@cosmos-kit/walletconnect@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.6...@cosmos-kit/walletconnect@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.5...@cosmos-kit/walletconnect@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.4...@cosmos-kit/walletconnect@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.3...@cosmos-kit/walletconnect@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.2...@cosmos-kit/walletconnect@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.1...@cosmos-kit/walletconnect@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.1.0...@cosmos-kit/walletconnect@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.5...@cosmos-kit/walletconnect@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.4...@cosmos-kit/walletconnect@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.3...@cosmos-kit/walletconnect@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.2...@cosmos-kit/walletconnect@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1...@cosmos-kit/walletconnect@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.6...@cosmos-kit/walletconnect@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.5...@cosmos-kit/walletconnect@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.4...@cosmos-kit/walletconnect@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.3...@cosmos-kit/walletconnect@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.2...@cosmos-kit/walletconnect@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.1...@cosmos-kit/walletconnect@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@2.0.1-beta.0...@cosmos-kit/walletconnect@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@1.0.0...@cosmos-kit/walletconnect@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18-beta.6...@cosmos-kit/walletconnect@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18-beta.5...@cosmos-kit/walletconnect@0.3.18-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18-beta.4...@cosmos-kit/walletconnect@0.3.18-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18-beta.3...@cosmos-kit/walletconnect@0.3.18-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18...@cosmos-kit/walletconnect@0.3.18-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.17...@cosmos-kit/walletconnect@0.3.18) (2023-06-30) + +## [0.3.18-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18-beta.1...@cosmos-kit/walletconnect@0.3.18-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.18-beta.0...@cosmos-kit/walletconnect@0.3.18-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.18-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.17...@cosmos-kit/walletconnect@0.3.18-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.16...@cosmos-kit/walletconnect@0.3.17) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.15...@cosmos-kit/walletconnect@0.3.16) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.14...@cosmos-kit/walletconnect@0.3.15) (2023-06-09) + +### Bug Fixes + +- wallet connect error (projects-issues [#349](https://github.com/cosmology-tech/cosmos-kit/issues/349)) ([7a04233](https://github.com/cosmology-tech/cosmos-kit/commit/7a0423390f73e72e2935dd0c47c0da50083f808e)) + +## [0.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.13...@cosmos-kit/walletconnect@0.3.14) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.12...@cosmos-kit/walletconnect@0.3.13) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.11...@cosmos-kit/walletconnect@0.3.12) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.10...@cosmos-kit/walletconnect@0.3.11) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.9...@cosmos-kit/walletconnect@0.3.10) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.8...@cosmos-kit/walletconnect@0.3.9) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.7...@cosmos-kit/walletconnect@0.3.8) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.6...@cosmos-kit/walletconnect@0.3.7) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.5...@cosmos-kit/walletconnect@0.3.6) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.4...@cosmos-kit/walletconnect@0.3.5) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.3...@cosmos-kit/walletconnect@0.3.4) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.2...@cosmos-kit/walletconnect@0.3.3) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.1...@cosmos-kit/walletconnect@0.3.2) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.3.0...@cosmos-kit/walletconnect@0.3.1) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.19...@cosmos-kit/walletconnect@0.3.0) (2023-04-23) + +### Features + +- only call setMessage if defined ([9527711](https://github.com/cosmology-tech/cosmos-kit/commit/95277114ec63b65b5887f848bf8ca552afb4a40a)) + +## [0.2.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.18...@cosmos-kit/walletconnect@0.2.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.17...@cosmos-kit/walletconnect@0.2.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.16...@cosmos-kit/walletconnect@0.2.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.15...@cosmos-kit/walletconnect@0.2.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.14...@cosmos-kit/walletconnect@0.2.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.13...@cosmos-kit/walletconnect@0.2.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.12...@cosmos-kit/walletconnect@0.2.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.11...@cosmos-kit/walletconnect@0.2.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.10...@cosmos-kit/walletconnect@0.2.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.9...@cosmos-kit/walletconnect@0.2.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.8...@cosmos-kit/walletconnect@0.2.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.7...@cosmos-kit/walletconnect@0.2.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.6...@cosmos-kit/walletconnect@0.2.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.5...@cosmos-kit/walletconnect@0.2.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.4...@cosmos-kit/walletconnect@0.2.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.3...@cosmos-kit/walletconnect@0.2.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.2...@cosmos-kit/walletconnect@0.2.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.1...@cosmos-kit/walletconnect@0.2.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.2.0...@cosmos-kit/walletconnect@0.2.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.20...@cosmos-kit/walletconnect@0.2.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.1.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.19...@cosmos-kit/walletconnect@0.1.20) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.18...@cosmos-kit/walletconnect@0.1.19) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.17...@cosmos-kit/walletconnect@0.1.18) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.16...@cosmos-kit/walletconnect@0.1.17) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.15...@cosmos-kit/walletconnect@0.1.16) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.14...@cosmos-kit/walletconnect@0.1.15) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.13...@cosmos-kit/walletconnect@0.1.14) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.12...@cosmos-kit/walletconnect@0.1.13) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.11...@cosmos-kit/walletconnect@0.1.12) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.10...@cosmos-kit/walletconnect@0.1.11) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## 0.1.10 (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.7...@cosmos-kit/walletconnect@0.1.8) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.6...@cosmos-kit/walletconnect@0.1.7) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.5...@cosmos-kit/walletconnect@0.1.6) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.4...@cosmos-kit/walletconnect@0.1.5) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.3...@cosmos-kit/walletconnect@0.1.4) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.2...@cosmos-kit/walletconnect@0.1.3) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/walletconnect@0.1.1...@cosmos-kit/walletconnect@0.1.2) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## 0.1.1 (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/walletconnect + +## [0.27.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.8...@cosmos-kit/core@0.27.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.7...@cosmos-kit/core@0.27.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.6...@cosmos-kit/core@0.27.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.5...@cosmos-kit/core@0.27.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.4...@cosmos-kit/core@0.27.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.3...@cosmos-kit/core@0.27.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.2...@cosmos-kit/core@0.27.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.1...@cosmos-kit/core@0.27.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.27.0...@cosmos-kit/core@0.27.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.26.2...@cosmos-kit/core@0.27.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.26.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.26.1...@cosmos-kit/core@0.26.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.26.0...@cosmos-kit/core@0.26.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.25.5...@cosmos-kit/core@0.26.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.25.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.25.4...@cosmos-kit/core@0.25.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.25.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.25.3...@cosmos-kit/core@0.25.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.25.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.25.2...@cosmos-kit/core@0.25.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.25.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.25.1...@cosmos-kit/core@0.25.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.25.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.25.0...@cosmos-kit/core@0.25.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.24.1...@cosmos-kit/core@0.25.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.24.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.24.0...@cosmos-kit/core@0.24.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.23.1...@cosmos-kit/core@0.24.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.23.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.23.0...@cosmos-kit/core@0.23.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.22.0...@cosmos-kit/core@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.21.1...@cosmos-kit/core@0.22.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.21.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.21.0...@cosmos-kit/core@0.21.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.20.2...@cosmos-kit/core@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.20.1...@cosmos-kit/core@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.20.0...@cosmos-kit/core@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.9...@cosmos-kit/core@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.8...@cosmos-kit/core@0.19.9) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.5...@cosmos-kit/core@0.19.8) (2022-10-17) + +## 0.19.7 (2022-10-17) + +## 0.19.6 (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.4...@cosmos-kit/core@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.3...@cosmos-kit/core@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.2...@cosmos-kit/core@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.1...@cosmos-kit/core@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.19.0...@cosmos-kit/core@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.18.1...@cosmos-kit/core@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.18.0...@cosmos-kit/core@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.17.1...@cosmos-kit/core@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.17.0...@cosmos-kit/core@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.16.2...@cosmos-kit/core@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.16.1...@cosmos-kit/core@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.16.0...@cosmos-kit/core@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.15.0...@cosmos-kit/core@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.14.0...@cosmos-kit/core@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.13.2...@cosmos-kit/core@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.12.3...@cosmos-kit/core@0.13.2) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.12.2...@cosmos-kit/core@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.12.1...@cosmos-kit/core@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.12.0...@cosmos-kit/core@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.11.0...@cosmos-kit/core@0.12.0) (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/core + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/packages/walletconnect/LICENSE b/packages/walletconnect/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/packages/walletconnect/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/walletconnect/README.md b/packages/walletconnect/README.md new file mode 100644 index 000000000..bbc9a82a5 --- /dev/null +++ b/packages/walletconnect/README.md @@ -0,0 +1,42 @@ +# @cosmos-kit/core + +

+ +

+ +

+ + + + + + + + +

+ +A wallet adapter for React with mobile WalletConnect support for the Cosmos +ecosystem + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/packages/walletconnect/index.ts b/packages/walletconnect/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/packages/walletconnect/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/packages/walletconnect/package.json b/packages/walletconnect/package.json new file mode 100644 index 000000000..1be5e783d --- /dev/null +++ b/packages/walletconnect/package.json @@ -0,0 +1,87 @@ +{ + "name": "@cosmos-kit/walletconnect", + "version": "2.10.1", + "description": "cosmos-kit wallet connector using walletconnect", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "keplr", + "leap", + "cosmostation", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmjs/proto-signing": "^0.32.3", + "@cosmos-kit/core": "^2.13.1", + "@walletconnect/sign-client": "^2.9.0", + "@walletconnect/utils": "^2.9.0", + "events": "3.3.0" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@walletconnect/types": "2.11.0" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/packages/walletconnect/src/chain-wallet.ts b/packages/walletconnect/src/chain-wallet.ts new file mode 100644 index 000000000..393359572 --- /dev/null +++ b/packages/walletconnect/src/chain-wallet.ts @@ -0,0 +1,27 @@ +import { + type ChainRecord, + type Mutable, + type Wallet, + type WalletConnectOptions, + ChainWalletBase, + State, +} from '@cosmos-kit/core'; + +import { WCClient } from './client'; +import { IWCClient } from './types'; + +export class ChainWC extends ChainWalletBase { + WCClient: IWCClient; + clientMutable: Mutable = { state: State.Init }; + options?: WalletConnectOptions; + + constructor(walletInfo: Wallet, chainInfo: ChainRecord, WCClient: IWCClient) { + super(walletInfo, chainInfo); + this.WCClient = WCClient; + } + + setClientNotExist() { + this.setState(State.Error); + this.setMessage(this.clientMutable.message); + } +} diff --git a/packages/walletconnect/src/client.ts b/packages/walletconnect/src/client.ts new file mode 100644 index 000000000..753b69fdd --- /dev/null +++ b/packages/walletconnect/src/client.ts @@ -0,0 +1,729 @@ +import type { + AminoSignResponse, + OfflineAminoSigner, + StdSignDoc, +} from '@cosmjs/amino'; +import type { + Algo, + DirectSignResponse, + OfflineDirectSigner, +} from '@cosmjs/proto-signing'; +import type { + AppUrl, + DappEnv, + DirectSignDoc, + DisconnectOptions, + Logger, + Mutable, + SignOptions, + SignType, + SimpleAccount, + Wallet, + WalletAccount, + WalletClient, + WalletClientActions, + WalletConnectOptions, +} from '@cosmos-kit/core'; +import { ExpiredError, RejectedError, State } from '@cosmos-kit/core'; +import SignClient from '@walletconnect/sign-client'; +import { + EngineTypes, + PairingTypes, + SessionTypes, + SignClientTypes, +} from '@walletconnect/types'; +import type EventEmitter from 'events'; + +import { WCAccount, WCSignDirectRequest, WCSignDirectResponse } from './types'; +import { CoreUtil } from './utils'; + +const EXPLORER_API = 'https://explorer-api.walletconnect.com'; + +export class WCClient implements WalletClient { + readonly walletInfo: Wallet; + + signClient?: SignClient; + wcCloudInfo?: any; // info from WalletConnect Cloud Explorer + actions?: WalletClientActions; + qrUrl: Mutable; + appUrl: Mutable; + + pairings: PairingTypes.Struct[] = []; + sessions: SessionTypes.Struct[] = []; + emitter?: EventEmitter; + logger?: Logger; + options?: WalletConnectOptions; + relayUrl?: string; + env?: DappEnv; + requiredNamespaces?: { + methods: string[]; + events: string[]; + }; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + constructor(walletInfo: Wallet) { + if (!walletInfo.walletconnect) { + throw new Error( + `'walletconnect' info for wallet ${walletInfo.prettyName} is not provided in wallet registry.` + ); + } + this.walletInfo = walletInfo; + + this.qrUrl = { state: State.Init }; + this.appUrl = { state: State.Init }; + + this.requiredNamespaces = walletInfo.walletconnect.requiredNamespaces; + } + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + get isMobile() { + return this.env?.device === 'mobile'; + } + + // walletconnect wallet name + get wcName(): string { + return this.walletInfo.walletconnect.name; + } + + // wallet defined bytes encoding + get wcEncoding(): BufferEncoding { + return this.walletInfo.walletconnect.encoding || 'hex'; + } + + // walletconnect wallet project id + get wcProjectId(): string { + return this.walletInfo.walletconnect.projectId; + } + + // walletconnect wallet mobile link + get wcMobile() { + return this.walletInfo.walletconnect.mobile; + } + + get accounts(): SimpleAccount[] { + const accounts = []; + this.sessions.forEach((s) => { + Object.entries(s.namespaces).forEach(([, nsValue]) => { + nsValue.accounts.forEach((account) => { + const [namespace, chainId, address] = account.split(':'); + accounts.push({ + namespace, + chainId, + address, + }); + }); + }); + }); + return accounts; + } + + deleteSession(topic: string) { + const chainIds = []; + this.sessions = this.sessions.filter((s) => { + if (s.topic === topic) { + s.namespaces.cosmos.accounts.forEach((account) => { + const [, chainId] = account.split(':'); + chainIds.push(chainId); + }); + return false; + } else { + return true; + } + }); + this.emitter?.emit('reset', chainIds); + this.logger?.debug('[WALLET EVENT] Emit `reset`'); + } + + subscribeToEvents() { + if (typeof this.signClient === 'undefined') { + throw new Error('WalletConnect is not initialized'); + } + + this.signClient.on('session_ping', (args) => { + this.logger?.debug('EVENT', 'session_ping', args); + }); + + this.signClient.on('session_event', async (args) => { + this.logger?.debug('EVENT', 'session_event', args); + // const { + // topic, + // params: { event, chainId }, + // } = args; + // if (this.session?.topic != topic) return; + // if (event.name === 'accountsChanged') { + // await this.connect( + // this.accounts.map(([, chainId]) => chainId), + // false + // ); + // } + }); + + this.signClient.on('session_update', ({ topic, params }) => { + this.logger?.debug('EVENT', 'session_update', { topic, params }); + // if (this.session?.topic != topic) return; + + // const { namespaces } = params; + // const _session = this.signClient.session.get(topic); + // this.session = { ..._session, namespaces }; + }); + + this.signClient.on('session_delete', (args) => { + this.logger?.debug('EVENT', 'session_delete', args); + this.deleteSession(args.topic); + }); + + this.signClient.on('session_expire', (args) => { + this.logger?.debug('EVENT', 'session_expire', args); + this.deleteSession(args.topic); + }); + + this.signClient.on('session_proposal', (args) => { + this.logger?.debug('EVENT', 'session_proposal', args); + }); + + this.signClient.on('session_request', (args) => { + this.logger?.debug('EVENT', 'session_request', args); + }); + + this.signClient.on('proposal_expire', (args) => { + this.logger?.debug('EVENT', 'proposal_expire', args); + }); + } + + async deleteInactivePairings() { + if (typeof this.signClient === 'undefined') { + throw new Error('WalletConnect is not initialized'); + } + + for (const pairing of this.signClient.pairing.getAll({ active: false })) { + await this.signClient.pairing.delete(pairing.topic, { + code: 7001, + message: 'Clear inactive pairings.', + }); + this.logger?.debug('Delete inactive pairing:', pairing.topic); + } + } + + async deleteAllPairings() { + if (typeof this.signClient === 'undefined') { + throw new Error('WalletConnect is not initialized'); + } + + for (const pairing of this.signClient.pairing.getAll()) { + await this.signClient.pairing.delete(pairing.topic, { + code: 7001, + message: 'Clear pairings.', + }); + this.logger?.debug('Delete pairing:', pairing.topic); + } + } + + restorePairings() { + if (typeof this.signClient === 'undefined') { + throw new Error('WalletConnect is not initialized'); + } + this.pairings = this.signClient.pairing + .getAll({ active: true }) + .filter( + (p) => + p.peerMetadata?.name === this.wcName && + p.expiry * 1000 > Date.now() + 1000 + ); + this.logger?.debug('RESTORED PAIRINGS: ', this.pairings); + } + + get pairing(): PairingTypes.Struct | undefined { + return this.pairings[0]; + } + + restoreSessions() { + if (typeof this.signClient === 'undefined') { + throw new Error('WalletConnect is not initialized'); + } + this.sessions = this.signClient.session + .getAll() + .filter( + (s) => + s.peer.metadata.name === this.wcName && + s.expiry * 1000 > Date.now() + 1000 + ); + this.logger?.debug('RESTORED SESSIONS: ', this.sessions); + } + + async getSession(namespace: string, chainId: string) { + if (typeof this.signClient === 'undefined') { + await this.init(); + } + return this.sessions.find((s) => + s.namespaces[namespace]?.accounts?.find((account) => + account.startsWith(`${namespace}:${chainId}`) + ) + ); + } + + get walletName() { + return this.walletInfo.name; + } + + get dappProjectId() { + return this.options?.signClient.projectId; + } + + setActions(actions: WalletClientActions) { + this.actions = actions; + } + + setQRState(state: State) { + this.qrUrl.state = state; + this.actions?.qrUrl?.state(state); + } + + setQRError(e?: Error | string) { + this.setQRState(State.Error); + this.qrUrl.message = typeof e === 'string' ? e : e?.message; + this.actions?.qrUrl?.message?.(this.qrUrl.message); + if (typeof e !== 'string' && e?.stack) { + this.logger?.error(e.stack); + } + } + + async init() { + await this.initSignClient(); + if (this.isMobile) { + await this.initAppUrl(); + } + } + + async initSignClient() { + if ( + this.signClient && + this.relayUrl === this.options?.signClient.relayUrl + ) { + return; + } + + this.signClient = await SignClient.init( + this.options?.signClient as SignClientTypes.Options + ); + this.relayUrl = this.options?.signClient.relayUrl; + + this.logger?.debug('CREATED CLIENT: ', this.signClient); + this.logger?.debug('relayerRegion ', this.options?.signClient.relayUrl); + + this.subscribeToEvents(); + this.restorePairings(); + this.restoreSessions(); + } + + async initWCCloudInfo() { + const fetcUrl = `${EXPLORER_API}/v3/wallets?projectId=${this.dappProjectId}&sdks=sign_v2&search=${this.wcName}`; + const fetched = await (await fetch(fetcUrl)).json(); + this.wcCloudInfo = + fetched.listings[this.walletInfo.walletconnect.projectId]; + this.logger?.debug('WalletConnect Info:', this.wcCloudInfo); + } + + async initAppUrl() { + this.appUrl.state = State.Pending; + + if (!this.wcCloudInfo) await this.initWCCloudInfo(); + + const native = this.wcCloudInfo.mobile.native || this.wcMobile?.native; + const universal = + this.wcCloudInfo.mobile.universal || this.wcMobile?.universal; + + this.appUrl.data = { native, universal }; + this.appUrl.state = State.Done; + } + + get nativeUrl() { + const native = this.appUrl.data?.native; + if (typeof native === 'string' || typeof native === 'undefined') { + return native; + } else { + const { android, ios, macos, windows } = native; + switch (this.env?.os) { + case 'android': + return android; + case 'ios': + return ios; + case 'macos': + return macos; + case 'windows': + return windows; + default: + throw new Error(`Unknown os: ${this.env?.os}.`); + } + } + } + + get universalUrl() { + return this.appUrl.data?.universal; + } + + get redirectHref(): string | undefined { + return this.nativeUrl || this.universalUrl; + } + + get redirectHrefWithWCUri(): string | undefined { + let href: string | undefined; + if (this.nativeUrl) { + href = ( + this.walletInfo.walletconnect.formatNativeUrl || + CoreUtil.formatNativeUrl + )(this.nativeUrl, this.qrUrl.data, this.env?.os, this.walletName); + } else if (this.universalUrl) { + href = ( + this.walletInfo.walletconnect.formatUniversalUrl || + CoreUtil.formatUniversalUrl + )(this.universalUrl, this.qrUrl.data, this.walletName); + } + return href; + } + + get displayQRCode() { + if (this.pairing || this.redirect) { + return false; + } else { + return true; + } + } + + get redirect() { + return Boolean(this.isMobile && (this.nativeUrl || this.universalUrl)); + } + + openApp(withWCUri = true) { + const href = withWCUri ? this.redirectHrefWithWCUri : this.redirectHref; + if (href) { + this.logger?.debug('Redirecting:', href); + CoreUtil.openHref(href); + } else { + this.logger?.error('No redirecting href.'); + } + } + + async connect( + chainIds: string | string[], + options?: EngineTypes.ConnectParams + ) { + if (typeof this.signClient === 'undefined') { + await this.init(); + // throw new Error('WalletConnect is not initialized'); + } + + if (this.qrUrl.state !== 'Init') { + this.setQRState(State.Init); + } + + const chainIdsWithNS = + typeof chainIds === 'string' + ? [`cosmos:${chainIds}`] + : chainIds.map((chainId) => `cosmos:${chainId}`); + + this.restorePairings(); + const pairing = this.pairing; + this.logger?.debug('Restored active pairing topic is:', pairing?.topic); + + if (this.displayQRCode) this.setQRState(State.Pending); + + const requiredNamespaces = { + cosmos: { + methods: [ + 'cosmos_getAccounts', + 'cosmos_signAmino', + 'cosmos_signDirect', + ...(this.requiredNamespaces?.methods ?? []), + ], + chains: chainIdsWithNS, + events: [ + 'chainChanged', + 'accountsChanged', + ...(this.requiredNamespaces?.events ?? []), + ], + }, + }; + let connectResp: any; + try { + this.logger?.debug('Connecting chains:', chainIdsWithNS); + connectResp = await this.signClient.connect({ + pairingTopic: pairing?.topic, + requiredNamespaces, + ...options, + }); + + // https://github.com/cosmology-tech/projects-issues/issues/349 + // Commented out because of the issue above. + // if (typeof connectResp.uri === 'undefined') { + // throw new Error('Failed to generate WalletConnect URI!'); + // } + + this.qrUrl.data = connectResp.uri; + this.logger?.debug('Using QR URI:', connectResp.uri); + if (this.displayQRCode) this.setQRState(State.Done); + } catch (error) { + this.logger?.error('Client connect error: ', error); + if (this.displayQRCode) this.setQRError(error); + return; + } + + if (this.redirect) this.openApp(); + + try { + const session = await connectResp.approval(); + this.logger?.debug('Established session:', session); + this.sessions.push(session); + this.restorePairings(); + } catch (error) { + this.logger?.error('Session approval error: ', error); + await this.deleteInactivePairings(); + if (!error) { + if (this.displayQRCode) this.setQRError(ExpiredError); + throw new Error('Proposal Expired'); + } else if (error.code == 5001) { + throw RejectedError; + } else { + throw error; + } + } finally { + if (!pairing && this.qrUrl.message !== ExpiredError.message) { + this.setQRState(State.Init); + } + } + } + + async disconnect(options?: DisconnectOptions) { + if (typeof this.signClient === 'undefined') { + await this.init(); + // throw new Error('WalletConnect is not initialized'); + } + if (options?.walletconnect?.removeAllPairings === true) { + await this.deleteAllPairings(); + } + if (this.sessions.length === 0) { + return; + } + + for (const session of this.sessions) { + try { + this.logger?.debug('Delete session:', session); + const { getSdkError } = await import('@walletconnect/utils'); + await this.signClient.disconnect({ + topic: session.topic, + reason: getSdkError('USER_DISCONNECTED'), + }); + } catch (error) { + this.logger?.error( + `SignClient.disconnect session ${session.topic} failed:`, + error + ); + } + } + this.sessions = []; + this.emitter?.emit('sync_disconnect'); + this.logger?.debug('[WALLET EVENT] Emit `sync_disconnect`'); + } + + async getSimpleAccount(chainId: string): Promise { + const account = this.accounts.find(({ chainId: id }) => id === chainId); + if (!account) { + throw new Error( + `Chain ${chainId} is not connected yet, please check the session approval namespaces` + ); + } + return account; + } + + getOfflineSignerAmino(chainId: string) { + return { + getAccounts: async () => [await this.getAccount(chainId)], + signAmino: (signerAddress: string, signDoc: StdSignDoc) => + this.signAmino(chainId, signerAddress, signDoc), + } as OfflineAminoSigner; + } + + getOfflineSignerDirect(chainId: string) { + return { + getAccounts: async () => [await this.getAccount(chainId)], + signDirect: (signerAddress: string, signDoc: DirectSignDoc) => + this.signDirect(chainId, signerAddress, signDoc), + } as OfflineDirectSigner; + } + + async getOfflineSigner(chainId: string, preferredSignType?: SignType) { + if (preferredSignType === 'amino' && this.getOfflineSignerAmino) { + return this.getOfflineSignerAmino(chainId); + } + if (preferredSignType === 'direct' && this.getOfflineSignerDirect) { + return this.getOfflineSignerDirect(chainId); + } + return this.getOfflineSignerAmino + ? this.getOfflineSignerAmino?.(chainId) + : this.getOfflineSignerDirect(chainId); + } + + protected async _getAccount(chainId: string) { + const session = await this.getSession('cosmos', chainId); + if (!session) { + throw new Error(`Session for ${chainId} not established yet.`); + } + const resp = await this.signClient.request({ + topic: session.topic, + chainId: `cosmos:${chainId}`, + request: { + method: 'cosmos_getAccounts', + params: {}, + }, + }); + this.logger?.debug(`Response of cosmos_getAccounts`, resp); + return resp; + } + + async getAccount(chainId: string): Promise { + const { address, algo, pubkey } = ( + await this._getAccount(chainId) + )[0] as WCAccount; + return { + address, + algo: algo as Algo, + pubkey: new Uint8Array(Buffer.from(pubkey, this.wcEncoding)), + }; + } + + protected async _signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + const session = await this.getSession('cosmos', chainId); + if (!session) { + throw new Error(`Session for ${chainId} not established yet.`); + } + + if (this.redirect) this.openApp(); + + const resp = await this.signClient.request({ + topic: session.topic, + chainId: `cosmos:${chainId}`, + request: { + method: 'cosmos_signAmino', + params: { + signerAddress: signer, + signDoc, + }, + }, + }); + this.logger?.debug(`Response of cosmos_signAmino`, resp); + return resp; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ): Promise { + const result = (await this._signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + )) as AminoSignResponse; + return result; + } + + protected async _signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + const session = await this.getSession('cosmos', chainId); + if (!session) { + throw new Error(`Session for ${chainId} not established yet.`); + } + const signDocValue: WCSignDirectRequest = { + signerAddress: signer, + signDoc: { + chainId: signDoc.chainId, + bodyBytes: Buffer.from(signDoc.bodyBytes).toString(this.wcEncoding), + authInfoBytes: Buffer.from(signDoc.authInfoBytes).toString( + this.wcEncoding + ), + accountNumber: signDoc.accountNumber.toString(), + }, + }; + + if (this.redirect) this.openApp(); + + const resp = await this.signClient.request({ + topic: session.topic, + chainId: `cosmos:${chainId}`, + request: { + method: 'cosmos_signDirect', + params: signDocValue, + }, + }); + this.logger?.debug(`Response of cosmos_signDirect`, resp); + return resp; + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ): Promise { + const { signed, signature } = (await this._signDirect( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + )) as WCSignDirectResponse; + return { + signed: { + chainId: signed.chainId, + accountNumber: BigInt(signed.accountNumber), + authInfoBytes: new Uint8Array( + Buffer.from(signed.authInfoBytes, this.wcEncoding) + ), + bodyBytes: new Uint8Array( + Buffer.from(signed.bodyBytes, this.wcEncoding) + ), + }, + signature, + }; + } + + // restoreLatestSession() { + // if (typeof this.signClient === 'undefined') { + // throw new Error('WalletConnect is not initialized'); + // } + // if (typeof this.session !== 'undefined') return; + + // const targetKey = this.signClient.session.keys.reverse().find((key) => { + // const session = this.signClient.session.get(key); + // return ( + // session.peer.metadata.name === this.walletWCName && + // session.expiry * 1000 > Date.now() + 1000 + // ); + // }); + + // if (targetKey) { + // this.session = this.signClient.session.get(targetKey); + // this.logger?.debug('RESTORED LATEST SESSION:', this.session); + // } + // } +} diff --git a/packages/walletconnect/src/index.ts b/packages/walletconnect/src/index.ts new file mode 100644 index 000000000..9bb0955eb --- /dev/null +++ b/packages/walletconnect/src/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './client'; +export * from './main-wallet'; +export * from './types'; diff --git a/packages/walletconnect/src/main-wallet.ts b/packages/walletconnect/src/main-wallet.ts new file mode 100644 index 000000000..529c94a7d --- /dev/null +++ b/packages/walletconnect/src/main-wallet.ts @@ -0,0 +1,50 @@ +import type { Mutable, Wallet, WalletConnectOptions } from '@cosmos-kit/core'; +import { MainWalletBase, State } from '@cosmos-kit/core'; + +import type { WCClient } from './client'; +import { IChainWC, IWCClient } from './types'; + +export class WCWallet extends MainWalletBase { + WCClient: IWCClient; + clientMutable: Mutable = { state: State.Init }; + + constructor(walletInfo: Wallet, ChainWC: IChainWC, WCClient: IWCClient) { + if (!walletInfo.walletconnect) { + throw new Error( + `'walletconnect' info for wallet ${walletInfo.prettyName} is not provided in wallet registry.` + ); + } + super(walletInfo, ChainWC); + this.WCClient = WCClient; + } + + async initClient(options?: WalletConnectOptions) { + if (!options) { + this.initClientError( + new Error('`walletconnectOptions` is not provided.') + ); + return; + } + + if (!options.signClient.projectId) { + this.initClientError( + new Error('`projectId` is not provided in `walletconnectOptions`.') + ); + return; + } + + this.initingClient(); + + try { + const client = new this.WCClient(this.walletInfo); + client.logger = this.logger; + client.emitter = this.emitter; + client.env = this.env; + client.options = options; + + this.initClientDone(client); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/packages/walletconnect/src/types.ts b/packages/walletconnect/src/types.ts new file mode 100644 index 000000000..3fb51ca9b --- /dev/null +++ b/packages/walletconnect/src/types.ts @@ -0,0 +1,36 @@ +import { Algo, StdSignature } from '@cosmjs/amino'; +import { ChainRecord, Wallet } from '@cosmos-kit/core'; + +import { ChainWC } from './chain-wallet'; +import { WCClient } from './client'; + +export interface IChainWC { + new (walletInfo: Wallet, chainInfo: ChainRecord): ChainWC; +} + +export interface IWCClient { + new (walletInfo: Wallet): WCClient; +} + +export interface WCDirectSignDoc { + chainId: string; + accountNumber: string; + authInfoBytes: string; + bodyBytes: string; +} + +export interface WCSignDirectRequest { + signerAddress: string; + signDoc: WCDirectSignDoc; +} + +export interface WCSignDirectResponse { + signature: StdSignature; + signed: WCDirectSignDoc; +} + +export interface WCAccount { + address: string; + algo: string; + pubkey: string; +} diff --git a/packages/walletconnect/src/utils/core.ts b/packages/walletconnect/src/utils/core.ts new file mode 100644 index 000000000..68c05f0cc --- /dev/null +++ b/packages/walletconnect/src/utils/core.ts @@ -0,0 +1,55 @@ +import { OS } from '@cosmos-kit/core'; + +const WALLETCONNECT_DEEPLINK_CHOICE = 'WALLETCONNECT_DEEPLINK_CHOICE'; + +export const CoreUtil = { + isHttpUrl(url: string) { + return url.startsWith('http://') || url.startsWith('https://'); + }, + + formatNativeUrl(appUrl: string, wcUri: string, os: OS, name: string): string { + if (CoreUtil.isHttpUrl(appUrl)) { + return this.formatUniversalUrl(appUrl, wcUri, name); + } + const plainAppUrl = appUrl.replaceAll('/', '').replaceAll(':', ''); + CoreUtil.setWalletConnectDeepLink(plainAppUrl, name); + const encodedWcUrl = encodeURIComponent(wcUri); + + return `${plainAppUrl}://wc?uri=${encodedWcUrl}`; + }, + + formatUniversalUrl(appUrl: string, wcUri: string, name: string): string { + if (!CoreUtil.isHttpUrl(appUrl)) { + return this.formatNativeUrl(appUrl, wcUri, name); + } + let plainAppUrl = appUrl; + if (appUrl.endsWith('/')) { + plainAppUrl = appUrl.slice(0, -1); + } + CoreUtil.setWalletConnectDeepLink(plainAppUrl, name); + const encodedWcUrl = encodeURIComponent(wcUri); + + return `${plainAppUrl}/wc?uri=${encodedWcUrl}`; + }, + + async wait(miliseconds: number) { + return new Promise((resolve) => { + setTimeout(resolve, miliseconds); + }); + }, + + openHref(href: string, target = '_self') { + window.open(href, target, 'noreferrer noopener'); + }, + + setWalletConnectDeepLink(href: string, name: string) { + localStorage.setItem( + WALLETCONNECT_DEEPLINK_CHOICE, + JSON.stringify({ href, name }) + ); + }, + + removeWalletConnectDeepLink() { + localStorage.removeItem(WALLETCONNECT_DEEPLINK_CHOICE); + }, +}; diff --git a/packages/walletconnect/src/utils/index.ts b/packages/walletconnect/src/utils/index.ts new file mode 100644 index 000000000..4b0e04137 --- /dev/null +++ b/packages/walletconnect/src/utils/index.ts @@ -0,0 +1 @@ +export * from './core'; diff --git a/packages/walletconnect/tsconfig.json b/packages/walletconnect/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/packages/walletconnect/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/public/images/logos/wallets/cdcwallet.png b/public/images/logos/wallets/cdcwallet.png new file mode 100644 index 000000000..3f17a899f Binary files /dev/null and b/public/images/logos/wallets/cdcwallet.png differ diff --git a/public/images/logos/wallets/coin98.png b/public/images/logos/wallets/coin98.png new file mode 100644 index 000000000..ade499aed Binary files /dev/null and b/public/images/logos/wallets/coin98.png differ diff --git a/public/images/logos/wallets/compass.png b/public/images/logos/wallets/compass.png new file mode 100644 index 000000000..57c114538 Binary files /dev/null and b/public/images/logos/wallets/compass.png differ diff --git a/public/images/logos/wallets/cosmostation.png b/public/images/logos/wallets/cosmostation.png new file mode 100644 index 000000000..75cf292d0 Binary files /dev/null and b/public/images/logos/wallets/cosmostation.png differ diff --git a/public/images/logos/wallets/exodus.png b/public/images/logos/wallets/exodus.png new file mode 100644 index 000000000..c09943f4a Binary files /dev/null and b/public/images/logos/wallets/exodus.png differ diff --git a/public/images/logos/wallets/frontier.png b/public/images/logos/wallets/frontier.png new file mode 100644 index 000000000..042b319e5 Binary files /dev/null and b/public/images/logos/wallets/frontier.png differ diff --git a/public/images/logos/wallets/galaxystation.svg b/public/images/logos/wallets/galaxystation.svg new file mode 100644 index 000000000..7bb291336 --- /dev/null +++ b/public/images/logos/wallets/galaxystation.svg @@ -0,0 +1,589 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/logos/wallets/keplr.svg b/public/images/logos/wallets/keplr.svg new file mode 100644 index 000000000..666736bc5 --- /dev/null +++ b/public/images/logos/wallets/keplr.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/images/logos/wallets/leap.png b/public/images/logos/wallets/leap.png new file mode 100644 index 000000000..a0efe9d05 Binary files /dev/null and b/public/images/logos/wallets/leap.png differ diff --git a/public/images/logos/wallets/ledger.png b/public/images/logos/wallets/ledger.png new file mode 100644 index 000000000..96341da37 Binary files /dev/null and b/public/images/logos/wallets/ledger.png differ diff --git a/public/images/logos/wallets/okxwallet.svg b/public/images/logos/wallets/okxwallet.svg new file mode 100644 index 000000000..0118da2cf --- /dev/null +++ b/public/images/logos/wallets/okxwallet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/images/logos/wallets/omni.png b/public/images/logos/wallets/omni.png new file mode 100644 index 000000000..d28159b19 Binary files /dev/null and b/public/images/logos/wallets/omni.png differ diff --git a/public/images/logos/wallets/station.svg b/public/images/logos/wallets/station.svg new file mode 100644 index 000000000..f5a3e39ac --- /dev/null +++ b/public/images/logos/wallets/station.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/images/logos/wallets/trust.png b/public/images/logos/wallets/trust.png new file mode 100644 index 000000000..f2da8cc6a Binary files /dev/null and b/public/images/logos/wallets/trust.png differ diff --git a/public/images/logos/wallets/vectis.png b/public/images/logos/wallets/vectis.png new file mode 100644 index 000000000..978a93208 Binary files /dev/null and b/public/images/logos/wallets/vectis.png differ diff --git a/public/images/logos/wallets/web3auth.svg b/public/images/logos/wallets/web3auth.svg new file mode 100644 index 000000000..6b9c51704 --- /dev/null +++ b/public/images/logos/wallets/web3auth.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/images/logos/wallets/xdefi.svg b/public/images/logos/wallets/xdefi.svg new file mode 100644 index 000000000..c6bf0b506 --- /dev/null +++ b/public/images/logos/wallets/xdefi.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/public/images/wallet-connect.svg b/public/images/wallet-connect.svg new file mode 100644 index 000000000..079c644f3 --- /dev/null +++ b/public/images/wallet-connect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wallets/cdcwallet-extension/.editorconfig b/wallets/cdcwallet-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/cdcwallet-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/cdcwallet-extension/.eslintignore b/wallets/cdcwallet-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/cdcwallet-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/cdcwallet-extension/.eslintrc.json b/wallets/cdcwallet-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/cdcwallet-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/cdcwallet-extension/.gitignore b/wallets/cdcwallet-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/cdcwallet-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/cdcwallet-extension/.npmignore b/wallets/cdcwallet-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/cdcwallet-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/cdcwallet-extension/.npmrc b/wallets/cdcwallet-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/cdcwallet-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/cdcwallet-extension/.prettierrc.json b/wallets/cdcwallet-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/cdcwallet-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/cdcwallet-extension/CHANGELOG.md b/wallets/cdcwallet-extension/CHANGELOG.md new file mode 100644 index 000000000..ddc11b264 --- /dev/null +++ b/wallets/cdcwallet-extension/CHANGELOG.md @@ -0,0 +1,35 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cdcwallet-extension@2.13.1...@cosmos-kit/cdcwallet-extension@2.13.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cdcwallet-extension + + + + + +## [2.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cdcwallet-extension@2.13.0...@cosmos-kit/cdcwallet-extension@2.13.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/cdcwallet-extension + + + + + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cdcwallet-extension@2.12.0...@cosmos-kit/cdcwallet-extension@2.13.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/cdcwallet-extension + + + + + +# 2.12.0 (2024-06-05) + + +### Features + +* add Crypto.com wallet extension ([b539fb4](https://github.com/cosmology-tech/cosmos-kit/commit/b539fb4e7939b60918b916e0b270f91f2c17d4f0)) diff --git a/wallets/cdcwallet-extension/LICENSE b/wallets/cdcwallet-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/cdcwallet-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/cdcwallet-extension/README.md b/wallets/cdcwallet-extension/README.md new file mode 100644 index 000000000..35e117e09 --- /dev/null +++ b/wallets/cdcwallet-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/cdcwallet-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/cdcwallet-extension is the Crypto.com Wallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/cdcwallet-extension/index.ts b/wallets/cdcwallet-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/cdcwallet-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/cdcwallet-extension/package.json b/wallets/cdcwallet-extension/package.json new file mode 100644 index 000000000..cbe05ba51 --- /dev/null +++ b/wallets/cdcwallet-extension/package.json @@ -0,0 +1,74 @@ +{ + "name": "@cosmos-kit/cdcwallet-extension", + "version": "2.13.2", + "description": "cosmos-kit wallet connector", + "author": "andy.bin@crypto.com", + "contributors": [ + { + "name": "Andy Bin" + }, + { + "name": "Lucas Lee" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "cdcwallet", + "Crypto.com", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/cdcwallet-extension/src/cdcwallet.ts b/wallets/cdcwallet-extension/src/cdcwallet.ts new file mode 100644 index 000000000..6b75571d7 --- /dev/null +++ b/wallets/cdcwallet-extension/src/cdcwallet.ts @@ -0,0 +1,5 @@ +import { cdcwalletExtensionInfo, CdcwalletExtensionWallet } from './extension'; + +const cdcwalletExtension = new CdcwalletExtensionWallet(cdcwalletExtensionInfo); + +export const wallets = [cdcwalletExtension]; diff --git a/wallets/cdcwallet-extension/src/constant.ts b/wallets/cdcwallet-extension/src/constant.ts new file mode 100644 index 000000000..aa1d3883d --- /dev/null +++ b/wallets/cdcwallet-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/cdcwallet-extension/src/extension/chain-wallet.ts b/wallets/cdcwallet-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..7f31c050d --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainCdcwalletExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/cdcwallet-extension/src/extension/client.ts b/wallets/cdcwallet-extension/src/extension/client.ts new file mode 100644 index 000000000..112e69aef --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/client.ts @@ -0,0 +1,154 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + ExtendedHttpEndpoint, + SignType, + SuggestToken, +} from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { Cdcwallet } from './types'; +import Long from 'long'; + +export class CdcwalletClient implements WalletClient { + readonly client: Cdcwallet; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Cdcwallet) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress } of tokens) { + await this.client.suggestCW20Token(chainId, contractAddress); + } + } + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async disconnect() { + await this.client.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/cdcwallet-extension/src/extension/index.ts b/wallets/cdcwallet-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/cdcwallet-extension/src/extension/main-wallet.ts b/wallets/cdcwallet-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..ab81c34f7 --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainCdcwalletExtension } from './chain-wallet'; +import { CdcwalletClient } from './client'; +import { getCdcwalletFromExtension } from './utils'; + +export class CdcwalletExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainCdcwalletExtension); + } + + async initClient() { + this.initingClient(); + try { + const cdcwallet = await getCdcwalletFromExtension(); + this.initClientDone(cdcwallet ? new CdcwalletClient(cdcwallet) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/cdcwallet-extension/src/extension/registry.ts b/wallets/cdcwallet-extension/src/extension/registry.ts new file mode 100644 index 000000000..2ca2b193e --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/registry.ts @@ -0,0 +1,35 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const cdcwalletExtensionInfo: Wallet = { + name: 'cdcwallet-extension', + prettyName: 'Crypto.com Wallet', + logo: ICON, + mode: 'extension', + mobileDisabled: () => false, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['cdcwallet_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chromewebstore.google.com/detail/cryptocom-wallet-extensio/hifafgmccdpekplomjjkcfgodnhcellj', + }, + { + device: 'mobile', + os: 'android', + link: 'https://wallet.crypto.com/deeplink', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://wallet.crypto.com/deeplink', + }, + { + link: 'https://wallet.crypto.com/deeplink', + }, + ], +}; diff --git a/wallets/cdcwallet-extension/src/extension/types.ts b/wallets/cdcwallet-extension/src/extension/types.ts new file mode 100644 index 000000000..47ac67199 --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/types.ts @@ -0,0 +1,86 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export interface CdcwalletSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Cdcwallet { + defaultOptions: { + sign?: CdcwalletSignOptions; + }; + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + suggestToken(chainId: string, contractAddress: string): Promise; + suggestCW20Token(chainId: string, contractAddress: string): Promise; + mode: 'extension' | 'mobile-web'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: CdcwalletSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: CdcwalletSignOptions + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + getEnigmaPubKey(chainId: string): Promise; + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/wallets/cdcwallet-extension/src/extension/utils.ts b/wallets/cdcwallet-extension/src/extension/utils.ts new file mode 100644 index 000000000..a83f537e9 --- /dev/null +++ b/wallets/cdcwallet-extension/src/extension/utils.ts @@ -0,0 +1,49 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Cdcwallet } from './types'; + +export interface CdcwalletWindow { + cdc_wallet?: { + cosmos?: Cdcwallet; + }; +} + +export const getCdcwalletFromExtension: () => Promise< + Cdcwallet | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const cdcwallet = (window as CdcwalletWindow).cdc_wallet?.cosmos; + + if (cdcwallet) { + return cdcwallet; + } + + if (document.readyState === 'complete') { + if (cdcwallet) { + return cdcwallet; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (cdcwallet) { + resolve(cdcwallet); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/cdcwallet-extension/src/index.ts b/wallets/cdcwallet-extension/src/index.ts new file mode 100644 index 000000000..94f408354 --- /dev/null +++ b/wallets/cdcwallet-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './cdcwallet'; diff --git a/wallets/cdcwallet-extension/tsconfig.json b/wallets/cdcwallet-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/cdcwallet-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/cdcwallet/.editorconfig b/wallets/cdcwallet/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/cdcwallet/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/cdcwallet/.eslintignore b/wallets/cdcwallet/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/cdcwallet/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/cdcwallet/.eslintrc.json b/wallets/cdcwallet/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/cdcwallet/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/cdcwallet/.gitignore b/wallets/cdcwallet/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/cdcwallet/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/cdcwallet/.npmignore b/wallets/cdcwallet/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/cdcwallet/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/cdcwallet/.npmrc b/wallets/cdcwallet/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/cdcwallet/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/cdcwallet/.prettierrc.json b/wallets/cdcwallet/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/cdcwallet/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/cdcwallet/CHANGELOG.md b/wallets/cdcwallet/CHANGELOG.md new file mode 100644 index 000000000..eb461a262 --- /dev/null +++ b/wallets/cdcwallet/CHANGELOG.md @@ -0,0 +1,35 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cdcwallet@2.13.1...@cosmos-kit/cdcwallet@2.13.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cdcwallet + + + + + +## [2.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cdcwallet@2.13.0...@cosmos-kit/cdcwallet@2.13.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/cdcwallet + + + + + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cdcwallet@2.12.0...@cosmos-kit/cdcwallet@2.13.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/cdcwallet + + + + + +# 2.12.0 (2024-06-05) + + +### Features + +* add Crypto.com wallet extension ([b539fb4](https://github.com/cosmology-tech/cosmos-kit/commit/b539fb4e7939b60918b916e0b270f91f2c17d4f0)) diff --git a/wallets/cdcwallet/LICENSE b/wallets/cdcwallet/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/cdcwallet/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/cdcwallet/README.md b/wallets/cdcwallet/README.md new file mode 100644 index 000000000..5c0f3b789 --- /dev/null +++ b/wallets/cdcwallet/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/cdcwallet + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/cdcwallet is the Crypto.com Wallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/cdcwallet/index.ts b/wallets/cdcwallet/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/cdcwallet/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/cdcwallet/package.json b/wallets/cdcwallet/package.json new file mode 100644 index 000000000..46d505e08 --- /dev/null +++ b/wallets/cdcwallet/package.json @@ -0,0 +1,63 @@ +{ + "name": "@cosmos-kit/cdcwallet", + "version": "2.13.2", + "description": "cosmos-kit wallet connector", + "author": "andy.bin@crypto.com", + "contributors": [ + { + "name": "Andy Bin" + }, + { + "name": "Lucas Lee" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "cdcwallet", + "Crypto.com", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/cdcwallet-extension": "^2.13.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/cdcwallet/src/index.ts b/wallets/cdcwallet/src/index.ts new file mode 100644 index 000000000..ca991ecf7 --- /dev/null +++ b/wallets/cdcwallet/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/cdcwallet-extension'; + +export const wallets = [...ext]; diff --git a/wallets/cdcwallet/tsconfig.json b/wallets/cdcwallet/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/cdcwallet/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/coin98-extension/.editorconfig b/wallets/coin98-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/coin98-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/coin98-extension/.eslintignore b/wallets/coin98-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/coin98-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/coin98-extension/.eslintrc.json b/wallets/coin98-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/coin98-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/coin98-extension/.gitignore b/wallets/coin98-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/coin98-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/coin98-extension/.npmignore b/wallets/coin98-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/coin98-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/coin98-extension/.npmrc b/wallets/coin98-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/coin98-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/coin98-extension/.prettierrc.json b/wallets/coin98-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/coin98-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/coin98-extension/LICENSE b/wallets/coin98-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/coin98-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/coin98-extension/index.ts b/wallets/coin98-extension/index.ts new file mode 100644 index 000000000..f9f79b4a1 --- /dev/null +++ b/wallets/coin98-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; diff --git a/wallets/coin98-extension/src/coin98.ts b/wallets/coin98-extension/src/coin98.ts new file mode 100644 index 000000000..460aa7762 --- /dev/null +++ b/wallets/coin98-extension/src/coin98.ts @@ -0,0 +1,9 @@ +import { preferredEndpoints } from './config'; +import { Coin98ExtensionInfo, Coin98ExtensionWallet } from './extension'; + +const coin98Extension = new Coin98ExtensionWallet( + Coin98ExtensionInfo, + preferredEndpoints +); + +export const wallets = [coin98Extension]; diff --git a/wallets/coin98-extension/src/config.ts b/wallets/coin98-extension/src/config.ts new file mode 100644 index 000000000..4a7681189 --- /dev/null +++ b/wallets/coin98-extension/src/config.ts @@ -0,0 +1,208 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://rpc-osmosis.keplr.app/'], + rest: ['https://lcd-osmosis.keplr.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.keplr.app'], + rest: ['https://lcd-cosmoshub.keplr.app'], + }, + terra: { + rpc: ['https://rpc-columbus.keplr.app'], + rest: ['https://lcd-columbus.keplr.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.keplr.app'], + rest: ['https://lcd-secret.keplr.app'], + }, + akash: { + rpc: ['https://rpc-akash.keplr.app'], + rest: ['https://lcd-akash.keplr.app'], + }, + regen: { + rpc: ['https://rpc-regen.keplr.app'], + rest: ['https://lcd-regen.keplr.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.keplr.app'], + rest: ['https://lcd-sentinel.keplr.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.keplr.app'], + rest: ['https://lcd-persistence.keplr.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.keplr.app'], + rest: ['https://lcd-iris.keplr.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.keplr.app/'], + rest: ['https://lcd-crypto-org.keplr.app/'], + }, + starname: { + rpc: ['https://rpc-iov.keplr.app'], + rest: ['https://lcd-iov.keplr.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.keplr.app'], + rest: ['https://lcd-emoney.keplr.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.keplr.app'], + rest: ['https://lcd-microtick.keplr.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.keplr.app'], + rest: ['https://lcd-impacthub.keplr.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.keplr.app'], + rest: ['https://lcd-sommelier.keplr.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.keplr.app/'], + rest: ['https://lcd-evmos.keplr.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.keplr.app'], + rest: ['https://lcd-kava.keplr.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/coin98-extension/src/extension/chain-wallet.ts b/wallets/coin98-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..86851ff44 --- /dev/null +++ b/wallets/coin98-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainCoin98Extension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/coin98-extension/src/extension/client.ts b/wallets/coin98-extension/src/extension/client.ts new file mode 100644 index 000000000..473268993 --- /dev/null +++ b/wallets/coin98-extension/src/extension/client.ts @@ -0,0 +1,162 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + WalletClient, +} from '@cosmos-kit/core'; + +import { Coin98 } from './types'; +import Long from 'long'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +export class Coin98Client implements WalletClient { + readonly client: Coin98; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Coin98) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async connect(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async getSimpleAccount(chainId: string) { + await this.enable(chainId); + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + await this.enable(chainId); + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signDirect: (signerAddress: string, signDoc: SignDoc) => + this.signDirect(chainId, signerAddress, signDoc), + }; + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + const resp = await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + return { + ...resp, + signed: { + ...resp.signed, + accountNumber: BigInt(resp.signed.accountNumber.toString()), + }, + }; + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/coin98-extension/src/extension/index.ts b/wallets/coin98-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/coin98-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/coin98-extension/src/extension/main-wallet.ts b/wallets/coin98-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..64ad93853 --- /dev/null +++ b/wallets/coin98-extension/src/extension/main-wallet.ts @@ -0,0 +1,26 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainCoin98Extension } from './chain-wallet'; +import { Coin98Client } from './client'; +import { getCoin98FromExtension } from './utils'; + +export class Coin98ExtensionWallet extends MainWalletBase { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainCoin98Extension); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient() { + this.initingClient(); + try { + const coin98 = await getCoin98FromExtension(); + this.initClientDone(coin98 ? new Coin98Client(coin98) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/coin98-extension/src/extension/registry.ts b/wallets/coin98-extension/src/extension/registry.ts new file mode 100644 index 000000000..bdd81df43 --- /dev/null +++ b/wallets/coin98-extension/src/extension/registry.ts @@ -0,0 +1,25 @@ +import { Wallet } from '@cosmos-kit/core'; +import { ICON } from '../constant'; + +export const Coin98ExtensionInfo: Wallet = { + name: 'coin98-extension', + prettyName: 'Coin98', + logo: ICON, + mode: 'extension', + //Enable for dapp browser + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/aeachknmefphepccionboohckonoeemg', + }, + { + link: 'https://coin98.com/wallet', + }, + ], +}; diff --git a/wallets/coin98-extension/src/extension/types.ts b/wallets/coin98-extension/src/extension/types.ts new file mode 100644 index 000000000..4caed82d5 --- /dev/null +++ b/wallets/coin98-extension/src/extension/types.ts @@ -0,0 +1,3 @@ +import { Keplr } from "@keplr-wallet/types"; + +export type Coin98 = Omit diff --git a/wallets/coin98-extension/src/extension/utils.ts b/wallets/coin98-extension/src/extension/utils.ts new file mode 100644 index 000000000..eb169a78e --- /dev/null +++ b/wallets/coin98-extension/src/extension/utils.ts @@ -0,0 +1,50 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Coin98 } from './types'; +// import { Keplr, Window as KeplrWindow } from '@keplr-wallet/types'; + +interface Coin98Window { + coin98?: { + keplr: Coin98; + }; +} + +export const getCoin98FromExtension: () => Promise< + Coin98 | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const provider = (window as Coin98Window).coin98?.keplr; + + if (provider) { + return provider; + } + + if (document.readyState === 'complete') { + if (provider) { + return provider; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (provider) { + resolve(provider); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/coin98-extension/src/index.ts b/wallets/coin98-extension/src/index.ts index 4c6b93c6e..35cc0df4a 100644 --- a/wallets/coin98-extension/src/index.ts +++ b/wallets/coin98-extension/src/index.ts @@ -1,3 +1,3 @@ export * from './extension' -export * from './registry' \ No newline at end of file +export * from './registry' diff --git a/wallets/coin98/.editorconfig b/wallets/coin98/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/coin98/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/coin98/.eslintignore b/wallets/coin98/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/coin98/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/coin98/.eslintrc.json b/wallets/coin98/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/coin98/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/coin98/.gitignore b/wallets/coin98/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/coin98/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/coin98/.npmignore b/wallets/coin98/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/coin98/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/coin98/.npmrc b/wallets/coin98/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/coin98/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/coin98/.prettierrc.json b/wallets/coin98/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/coin98/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/coin98/CHANGELOG.md b/wallets/coin98/CHANGELOG.md new file mode 100644 index 000000000..657d38da8 --- /dev/null +++ b/wallets/coin98/CHANGELOG.md @@ -0,0 +1,452 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.11.1...@cosmos-kit/coin98@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.11.0...@cosmos-kit/coin98@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/coin98 + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.10.0...@cosmos-kit/coin98@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.9.0...@cosmos-kit/coin98@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.8.0...@cosmos-kit/coin98@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/coin98 + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.7.3...@cosmos-kit/coin98@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/coin98 + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.7.2...@cosmos-kit/coin98@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.7.1...@cosmos-kit/coin98@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.7.0...@cosmos-kit/coin98@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.10...@cosmos-kit/coin98@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.9...@cosmos-kit/coin98@2.6.10) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.8...@cosmos-kit/coin98@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.7...@cosmos-kit/coin98@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.6...@cosmos-kit/coin98@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.5...@cosmos-kit/coin98@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.4...@cosmos-kit/coin98@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.3...@cosmos-kit/coin98@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.2...@cosmos-kit/coin98@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.1...@cosmos-kit/coin98@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.6.0...@cosmos-kit/coin98@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.5.4...@cosmos-kit/coin98@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.5.3...@cosmos-kit/coin98@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.5.2...@cosmos-kit/coin98@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.5.1...@cosmos-kit/coin98@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.5.0...@cosmos-kit/coin98@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.11...@cosmos-kit/coin98@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.10...@cosmos-kit/coin98@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.9...@cosmos-kit/coin98@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.8...@cosmos-kit/coin98@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.7...@cosmos-kit/coin98@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.6...@cosmos-kit/coin98@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.5...@cosmos-kit/coin98@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.4...@cosmos-kit/coin98@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.3...@cosmos-kit/coin98@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.2...@cosmos-kit/coin98@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.1...@cosmos-kit/coin98@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.4.0...@cosmos-kit/coin98@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.12...@cosmos-kit/coin98@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.11...@cosmos-kit/coin98@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.10...@cosmos-kit/coin98@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.9...@cosmos-kit/coin98@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.8...@cosmos-kit/coin98@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.7...@cosmos-kit/coin98@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.6...@cosmos-kit/coin98@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.5...@cosmos-kit/coin98@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.4...@cosmos-kit/coin98@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.3...@cosmos-kit/coin98@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.2...@cosmos-kit/coin98@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.1...@cosmos-kit/coin98@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.3.0...@cosmos-kit/coin98@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.2.1...@cosmos-kit/coin98@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.2.0...@cosmos-kit/coin98@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.12...@cosmos-kit/coin98@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.11...@cosmos-kit/coin98@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.10...@cosmos-kit/coin98@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.9...@cosmos-kit/coin98@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.8...@cosmos-kit/coin98@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.7...@cosmos-kit/coin98@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.6...@cosmos-kit/coin98@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.5...@cosmos-kit/coin98@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.4...@cosmos-kit/coin98@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.3...@cosmos-kit/coin98@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.2...@cosmos-kit/coin98@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.1...@cosmos-kit/coin98@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.1.0...@cosmos-kit/coin98@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.5...@cosmos-kit/coin98@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.4...@cosmos-kit/coin98@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.3...@cosmos-kit/coin98@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.2...@cosmos-kit/coin98@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1...@cosmos-kit/coin98@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.6...@cosmos-kit/coin98@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.5...@cosmos-kit/coin98@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.4...@cosmos-kit/coin98@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.3...@cosmos-kit/coin98@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.2...@cosmos-kit/coin98@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.1...@cosmos-kit/coin98@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@2.0.1-beta.0...@cosmos-kit/coin98@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@1.0.0...@cosmos-kit/coin98@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18-beta.6...@cosmos-kit/coin98@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18-beta.5...@cosmos-kit/coin98@0.2.18-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18-beta.4...@cosmos-kit/coin98@0.2.18-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18-beta.3...@cosmos-kit/coin98@0.2.18-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18...@cosmos-kit/coin98@0.2.18-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.17...@cosmos-kit/coin98@0.2.18) (2023-06-30) + +## [0.2.18-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18-beta.1...@cosmos-kit/coin98@0.2.18-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.18-beta.0...@cosmos-kit/coin98@0.2.18-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.18-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.17...@cosmos-kit/coin98@0.2.18-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.16...@cosmos-kit/coin98@0.2.17) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.15...@cosmos-kit/coin98@0.2.16) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.14...@cosmos-kit/coin98@0.2.15) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.13...@cosmos-kit/coin98@0.2.14) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.12...@cosmos-kit/coin98@0.2.13) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.11...@cosmos-kit/coin98@0.2.12) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.10...@cosmos-kit/coin98@0.2.11) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.9...@cosmos-kit/coin98@0.2.10) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.8...@cosmos-kit/coin98@0.2.9) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.7...@cosmos-kit/coin98@0.2.8) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.6...@cosmos-kit/coin98@0.2.7) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.5...@cosmos-kit/coin98@0.2.6) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.4...@cosmos-kit/coin98@0.2.5) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.3...@cosmos-kit/coin98@0.2.4) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.2...@cosmos-kit/coin98@0.2.3) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.1...@cosmos-kit/coin98@0.2.2) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/coin98@0.2.0...@cosmos-kit/coin98@0.2.1) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# 0.2.0 (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/coin98 + +# Change Log + +# 0.1.0 (2023-04-25) + +**Note:** First release! diff --git a/wallets/coin98/LICENSE b/wallets/coin98/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/coin98/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/coin98/README.md b/wallets/coin98/README.md new file mode 100644 index 000000000..7666a294b --- /dev/null +++ b/wallets/coin98/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/coin98 + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/coin98 is the Coin98 integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/coin98/index.ts b/wallets/coin98/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/coin98/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/coin98/package.json b/wallets/coin98/package.json new file mode 100644 index 000000000..7b390e9d6 --- /dev/null +++ b/wallets/coin98/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/coin98", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "tamvt@coin98.finance", + "contributors": [ + { + "name": "Tam VT" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "coin98", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/coin98-extension": "^2.12.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/coin98/src/index.ts b/wallets/coin98/src/index.ts new file mode 100644 index 000000000..17b1d41d6 --- /dev/null +++ b/wallets/coin98/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as coin98 } from '@cosmos-kit/coin98-extension'; + +export const wallets = [...coin98]; diff --git a/wallets/coin98/tsconfig.json b/wallets/coin98/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/coin98/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/compass-extension/.editorconfig b/wallets/compass-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/compass-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/compass-extension/.eslintignore b/wallets/compass-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/compass-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/compass-extension/.eslintrc.json b/wallets/compass-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/compass-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/compass-extension/.gitignore b/wallets/compass-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/compass-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/compass-extension/.npmignore b/wallets/compass-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/compass-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/compass-extension/.npmrc b/wallets/compass-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/compass-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/compass-extension/.prettierrc.json b/wallets/compass-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/compass-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/compass-extension/CHANGELOG.md b/wallets/compass-extension/CHANGELOG.md new file mode 100644 index 000000000..9736451a7 --- /dev/null +++ b/wallets/compass-extension/CHANGELOG.md @@ -0,0 +1,414 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.11.1...@cosmos-kit/compass-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.11.0...@cosmos-kit/compass-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.10.0...@cosmos-kit/compass-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.9.0...@cosmos-kit/compass-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.8.0...@cosmos-kit/compass-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.7.3...@cosmos-kit/compass-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.7.2...@cosmos-kit/compass-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.7.1...@cosmos-kit/compass-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.7.0...@cosmos-kit/compass-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.9...@cosmos-kit/compass-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.8...@cosmos-kit/compass-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.7...@cosmos-kit/compass-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.6...@cosmos-kit/compass-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.5...@cosmos-kit/compass-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.4...@cosmos-kit/compass-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.3...@cosmos-kit/compass-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.2...@cosmos-kit/compass-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.1...@cosmos-kit/compass-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.6.0...@cosmos-kit/compass-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.5.4...@cosmos-kit/compass-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.5.3...@cosmos-kit/compass-extension@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.5.2...@cosmos-kit/compass-extension@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.5.1...@cosmos-kit/compass-extension@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.5.0...@cosmos-kit/compass-extension@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.12...@cosmos-kit/compass-extension@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.11...@cosmos-kit/compass-extension@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.10...@cosmos-kit/compass-extension@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.9...@cosmos-kit/compass-extension@2.4.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.8...@cosmos-kit/compass-extension@2.4.9) (2023-11-23) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.7...@cosmos-kit/compass-extension@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.6...@cosmos-kit/compass-extension@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.5...@cosmos-kit/compass-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.4...@cosmos-kit/compass-extension@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.3...@cosmos-kit/compass-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.2...@cosmos-kit/compass-extension@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.1...@cosmos-kit/compass-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.4.0...@cosmos-kit/compass-extension@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.13...@cosmos-kit/compass-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.12...@cosmos-kit/compass-extension@2.3.13) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.11...@cosmos-kit/compass-extension@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.10...@cosmos-kit/compass-extension@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.9...@cosmos-kit/compass-extension@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.8...@cosmos-kit/compass-extension@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.7...@cosmos-kit/compass-extension@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.6...@cosmos-kit/compass-extension@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.5...@cosmos-kit/compass-extension@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.4...@cosmos-kit/compass-extension@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.3...@cosmos-kit/compass-extension@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.2...@cosmos-kit/compass-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.1...@cosmos-kit/compass-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.3.0...@cosmos-kit/compass-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.2.1...@cosmos-kit/compass-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.2.0...@cosmos-kit/compass-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.12...@cosmos-kit/compass-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.11...@cosmos-kit/compass-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.10...@cosmos-kit/compass-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.9...@cosmos-kit/compass-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.8...@cosmos-kit/compass-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.7...@cosmos-kit/compass-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.6...@cosmos-kit/compass-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.5...@cosmos-kit/compass-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.4...@cosmos-kit/compass-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.3...@cosmos-kit/compass-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.2...@cosmos-kit/compass-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.1...@cosmos-kit/compass-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.1.0...@cosmos-kit/compass-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.5...@cosmos-kit/compass-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.4...@cosmos-kit/compass-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.3...@cosmos-kit/compass-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.2...@cosmos-kit/compass-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1...@cosmos-kit/compass-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.6...@cosmos-kit/compass-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.5...@cosmos-kit/compass-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.4...@cosmos-kit/compass-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.3...@cosmos-kit/compass-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.2...@cosmos-kit/compass-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.1...@cosmos-kit/compass-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@2.0.1-beta.0...@cosmos-kit/compass-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@1.0.0...@cosmos-kit/compass-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2-beta.6...@cosmos-kit/compass-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2-beta.5...@cosmos-kit/compass-extension@0.2.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2-beta.4...@cosmos-kit/compass-extension@0.2.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2-beta.3...@cosmos-kit/compass-extension@0.2.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2...@cosmos-kit/compass-extension@0.2.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.1...@cosmos-kit/compass-extension@0.2.2) (2023-06-30) + +## [0.2.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2-beta.1...@cosmos-kit/compass-extension@0.2.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.2-beta.0...@cosmos-kit/compass-extension@0.2.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.1...@cosmos-kit/compass-extension@0.2.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.2.0...@cosmos-kit/compass-extension@0.2.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.1.3...@cosmos-kit/compass-extension@0.2.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.1.2...@cosmos-kit/compass-extension@0.1.3) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.1.1...@cosmos-kit/compass-extension@0.1.2) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass-extension@0.1.0...@cosmos-kit/compass-extension@0.1.1) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/compass-extension + +# 0.1.0 (2023-06-05) + +### Features + +- support compass wallet ([3133cd0](https://github.com/cosmology-tech/cosmos-kit/commit/3133cd024c44e8b507974403de55d9eb80b22061)) + +## [0.0.1] (2023-05-26) + +**Note:** Compass extension integration diff --git a/wallets/compass-extension/LICENSE b/wallets/compass-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/compass-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/compass-extension/README.md b/wallets/compass-extension/README.md new file mode 100644 index 000000000..e449c48fd --- /dev/null +++ b/wallets/compass-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/compass-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/compass-extension is the compass integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/compass-extension/index.ts b/wallets/compass-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/compass-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/compass-extension/package.json b/wallets/compass-extension/package.json new file mode 100644 index 000000000..42f9bb3bf --- /dev/null +++ b/wallets/compass-extension/package.json @@ -0,0 +1,71 @@ +{ + "name": "@cosmos-kit/compass-extension", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "himanshu.singh@leapwallet.io", + "contributors": [ + { + "name": "Himanshu Singh" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "compass", + "sei", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/compass-extension/src/compass.ts b/wallets/compass-extension/src/compass.ts new file mode 100644 index 000000000..b10f3a275 --- /dev/null +++ b/wallets/compass-extension/src/compass.ts @@ -0,0 +1,5 @@ +import { compassExtensionInfo, CompassExtensionWallet } from './extension'; + +const compassExtension = new CompassExtensionWallet(compassExtensionInfo); + +export const wallets = [compassExtension]; diff --git a/wallets/compass-extension/src/constant.ts b/wallets/compass-extension/src/constant.ts new file mode 100644 index 000000000..90243d4ce --- /dev/null +++ b/wallets/compass-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/compass-extension/src/extension/chain-wallet.ts b/wallets/compass-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..48c8f7b38 --- /dev/null +++ b/wallets/compass-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainCompassExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/compass-extension/src/extension/client.ts b/wallets/compass-extension/src/extension/client.ts new file mode 100644 index 000000000..c66fb109c --- /dev/null +++ b/wallets/compass-extension/src/extension/client.ts @@ -0,0 +1,154 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + ExtendedHttpEndpoint, + SignType, + SuggestToken, +} from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { Compass } from './types'; +import Long from 'long'; + +export class CompassClient implements WalletClient { + readonly client: Compass; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Compass) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress } of tokens) { + await this.client.suggestToken(chainId, contractAddress); + } + } + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async disconnect() { + await this.client.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/compass-extension/src/extension/index.ts b/wallets/compass-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/compass-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/compass-extension/src/extension/main-wallet.ts b/wallets/compass-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..5691685fb --- /dev/null +++ b/wallets/compass-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainCompassExtension } from './chain-wallet'; +import { CompassClient } from './client'; +import { getCompassFromExtension } from './utils'; + +export class CompassExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainCompassExtension); + } + + async initClient() { + this.initingClient(); + try { + const compass = await getCompassFromExtension(); + this.initClientDone(compass ? new CompassClient(compass) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/compass-extension/src/extension/registry.ts b/wallets/compass-extension/src/extension/registry.ts new file mode 100644 index 000000000..f6db43ab8 --- /dev/null +++ b/wallets/compass-extension/src/extension/registry.ts @@ -0,0 +1,27 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const compassExtensionInfo: Wallet = { + name: 'compass-extension', + prettyName: 'Compass', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['compass_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/compass-wallet/anokgmphncpekkhclmingpimjmcooifb', + }, + { + link: + 'https://chrome.google.com/webstore/detail/compass-wallet/anokgmphncpekkhclmingpimjmcooifb', + }, + ], +}; diff --git a/wallets/compass-extension/src/extension/types.ts b/wallets/compass-extension/src/extension/types.ts new file mode 100644 index 000000000..b6c1e29b7 --- /dev/null +++ b/wallets/compass-extension/src/extension/types.ts @@ -0,0 +1,85 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export interface CompassSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Compass { + defaultOptions: { + sign?: CompassSignOptions; + }; + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + suggestToken(chainId: string, contractAddress: string): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: CompassSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: CompassSignOptions + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + getEnigmaPubKey(chainId: string): Promise; + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/wallets/compass-extension/src/extension/utils.ts b/wallets/compass-extension/src/extension/utils.ts new file mode 100644 index 000000000..82ab1c0c4 --- /dev/null +++ b/wallets/compass-extension/src/extension/utils.ts @@ -0,0 +1,47 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Compass } from './types'; + +interface CompassWindow { + compass?: Compass; +} + +export const getCompassFromExtension: () => Promise< + Compass | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const compass = (window as CompassWindow).compass; + + if (compass) { + return compass; + } + + if (document.readyState === 'complete') { + if (compass) { + return compass; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (compass) { + resolve(compass); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/compass-extension/src/index.ts b/wallets/compass-extension/src/index.ts new file mode 100644 index 000000000..12cdab9b5 --- /dev/null +++ b/wallets/compass-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './compass'; diff --git a/wallets/compass-extension/tsconfig.json b/wallets/compass-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/compass-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/compass/.editorconfig b/wallets/compass/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/compass/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/compass/.eslintignore b/wallets/compass/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/compass/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/compass/.eslintrc.json b/wallets/compass/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/compass/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/compass/.gitignore b/wallets/compass/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/compass/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/compass/.npmignore b/wallets/compass/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/compass/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/compass/.npmrc b/wallets/compass/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/compass/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/compass/.prettierrc.json b/wallets/compass/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/compass/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/compass/CHANGELOG.md b/wallets/compass/CHANGELOG.md new file mode 100644 index 000000000..18d90fc7f --- /dev/null +++ b/wallets/compass/CHANGELOG.md @@ -0,0 +1,412 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.11.1...@cosmos-kit/compass@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.11.0...@cosmos-kit/compass@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/compass + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.10.0...@cosmos-kit/compass@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/compass + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.9.0...@cosmos-kit/compass@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/compass + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.8.0...@cosmos-kit/compass@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/compass + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.7.3...@cosmos-kit/compass@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/compass + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.7.2...@cosmos-kit/compass@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.7.1...@cosmos-kit/compass@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.7.0...@cosmos-kit/compass@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.9...@cosmos-kit/compass@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.8...@cosmos-kit/compass@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.7...@cosmos-kit/compass@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.6...@cosmos-kit/compass@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.5...@cosmos-kit/compass@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.4...@cosmos-kit/compass@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.3...@cosmos-kit/compass@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.2...@cosmos-kit/compass@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.1...@cosmos-kit/compass@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.6.0...@cosmos-kit/compass@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.5.4...@cosmos-kit/compass@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.5.3...@cosmos-kit/compass@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.5.2...@cosmos-kit/compass@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.5.1...@cosmos-kit/compass@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.5.0...@cosmos-kit/compass@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.12...@cosmos-kit/compass@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.11...@cosmos-kit/compass@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.10...@cosmos-kit/compass@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.9...@cosmos-kit/compass@2.4.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.8...@cosmos-kit/compass@2.4.9) (2023-11-23) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.7...@cosmos-kit/compass@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.6...@cosmos-kit/compass@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.5...@cosmos-kit/compass@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.4...@cosmos-kit/compass@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.3...@cosmos-kit/compass@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.2...@cosmos-kit/compass@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.1...@cosmos-kit/compass@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.4.0...@cosmos-kit/compass@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.13...@cosmos-kit/compass@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.12...@cosmos-kit/compass@2.3.13) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.11...@cosmos-kit/compass@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.10...@cosmos-kit/compass@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.9...@cosmos-kit/compass@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.8...@cosmos-kit/compass@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.7...@cosmos-kit/compass@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.6...@cosmos-kit/compass@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.5...@cosmos-kit/compass@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.4...@cosmos-kit/compass@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.3...@cosmos-kit/compass@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.2...@cosmos-kit/compass@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.1...@cosmos-kit/compass@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.3.0...@cosmos-kit/compass@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.2.1...@cosmos-kit/compass@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.2.0...@cosmos-kit/compass@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.12...@cosmos-kit/compass@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.11...@cosmos-kit/compass@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.10...@cosmos-kit/compass@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.9...@cosmos-kit/compass@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.8...@cosmos-kit/compass@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.7...@cosmos-kit/compass@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.6...@cosmos-kit/compass@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.5...@cosmos-kit/compass@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.4...@cosmos-kit/compass@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.3...@cosmos-kit/compass@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.2...@cosmos-kit/compass@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.1...@cosmos-kit/compass@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.1.0...@cosmos-kit/compass@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.5...@cosmos-kit/compass@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.4...@cosmos-kit/compass@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.3...@cosmos-kit/compass@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.2...@cosmos-kit/compass@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1...@cosmos-kit/compass@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.6...@cosmos-kit/compass@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.5...@cosmos-kit/compass@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.4...@cosmos-kit/compass@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.3...@cosmos-kit/compass@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.2...@cosmos-kit/compass@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.1...@cosmos-kit/compass@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@2.0.1-beta.0...@cosmos-kit/compass@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@1.0.0...@cosmos-kit/compass@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/compass + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7-beta.6...@cosmos-kit/compass@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7-beta.5...@cosmos-kit/compass@0.1.7-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7-beta.4...@cosmos-kit/compass@0.1.7-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7-beta.3...@cosmos-kit/compass@0.1.7-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7...@cosmos-kit/compass@0.1.7-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.6...@cosmos-kit/compass@0.1.7) (2023-06-30) + +## [0.1.7-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7-beta.1...@cosmos-kit/compass@0.1.7-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.7-beta.0...@cosmos-kit/compass@0.1.7-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.7-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.6...@cosmos-kit/compass@0.1.7-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.5...@cosmos-kit/compass@0.1.6) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.4...@cosmos-kit/compass@0.1.5) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.3...@cosmos-kit/compass@0.1.4) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.2...@cosmos-kit/compass@0.1.3) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.1...@cosmos-kit/compass@0.1.2) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/compass + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/compass@0.1.0...@cosmos-kit/compass@0.1.1) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/compass + +# 0.1.0 (2023-06-05) + +### Features + +- support compass wallet ([3133cd0](https://github.com/cosmology-tech/cosmos-kit/commit/3133cd024c44e8b507974403de55d9eb80b22061)) + +## [0.0.1] (2023-05-26) + +**Note:** First release diff --git a/wallets/compass/LICENSE b/wallets/compass/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/compass/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/compass/README.md b/wallets/compass/README.md new file mode 100644 index 000000000..aefee5a91 --- /dev/null +++ b/wallets/compass/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/compass + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/compass is the compass integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/compass/index.ts b/wallets/compass/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/compass/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/compass/package.json b/wallets/compass/package.json new file mode 100644 index 000000000..aec904951 --- /dev/null +++ b/wallets/compass/package.json @@ -0,0 +1,60 @@ +{ + "name": "@cosmos-kit/compass", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "himanshu.singh@leapwallet.io", + "contributors": [ + { + "name": "Himanshu Singh" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "compass", + "sei", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/compass-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/compass/src/index.ts b/wallets/compass/src/index.ts new file mode 100644 index 000000000..8f7a46656 --- /dev/null +++ b/wallets/compass/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/compass-extension'; + +export const wallets = [...ext]; diff --git a/wallets/compass/tsconfig.json b/wallets/compass/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/compass/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/cosmos-extension-metamask/.editorconfig b/wallets/cosmos-extension-metamask/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/cosmos-extension-metamask/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/cosmos-extension-metamask/.eslintignore b/wallets/cosmos-extension-metamask/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/cosmos-extension-metamask/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/.eslintrc.json b/wallets/cosmos-extension-metamask/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/cosmos-extension-metamask/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/.gitignore b/wallets/cosmos-extension-metamask/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/cosmos-extension-metamask/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/cosmos-extension-metamask/.npmignore b/wallets/cosmos-extension-metamask/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/cosmos-extension-metamask/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/.npmrc b/wallets/cosmos-extension-metamask/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/cosmos-extension-metamask/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/.prettierrc.json b/wallets/cosmos-extension-metamask/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/cosmos-extension-metamask/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/CHANGELOG.md b/wallets/cosmos-extension-metamask/CHANGELOG.md new file mode 100644 index 000000000..a863a1ec2 --- /dev/null +++ b/wallets/cosmos-extension-metamask/CHANGELOG.md @@ -0,0 +1,828 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.9.3...@cosmos-kit/cosmos-extension-metamask@0.10.0) (2024-08-01) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.9.2...@cosmos-kit/cosmos-extension-metamask@0.9.3) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.9.1...@cosmos-kit/cosmos-extension-metamask@0.9.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.9.0...@cosmos-kit/cosmos-extension-metamask@0.9.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.8.0...@cosmos-kit/cosmos-extension-metamask@0.9.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.7.0...@cosmos-kit/cosmos-extension-metamask@0.8.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.6.0...@cosmos-kit/cosmos-extension-metamask@0.7.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.5.3...@cosmos-kit/cosmos-extension-metamask@0.6.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + + + + + +## [0.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.5.2...@cosmos-kit/cosmos-extension-metamask@0.5.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.5.1...@cosmos-kit/cosmos-extension-metamask@0.5.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.5.0...@cosmos-kit/cosmos-extension-metamask@0.5.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.11...@cosmos-kit/cosmos-extension-metamask@0.5.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.10...@cosmos-kit/cosmos-extension-metamask@0.4.11) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.9...@cosmos-kit/cosmos-extension-metamask@0.4.10) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.8...@cosmos-kit/cosmos-extension-metamask@0.4.9) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.7...@cosmos-kit/cosmos-extension-metamask@0.4.8) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.6...@cosmos-kit/cosmos-extension-metamask@0.4.7) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.5...@cosmos-kit/cosmos-extension-metamask@0.4.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.4...@cosmos-kit/cosmos-extension-metamask@0.4.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.3...@cosmos-kit/cosmos-extension-metamask@0.4.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.2...@cosmos-kit/cosmos-extension-metamask@0.4.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.1...@cosmos-kit/cosmos-extension-metamask@0.4.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.4.0...@cosmos-kit/cosmos-extension-metamask@0.4.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.3.4...@cosmos-kit/cosmos-extension-metamask@0.4.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.3.3...@cosmos-kit/cosmos-extension-metamask@0.3.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.3.2...@cosmos-kit/cosmos-extension-metamask@0.3.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.3.1...@cosmos-kit/cosmos-extension-metamask@0.3.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.3.0...@cosmos-kit/cosmos-extension-metamask@0.3.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.11...@cosmos-kit/cosmos-extension-metamask@0.3.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.10...@cosmos-kit/cosmos-extension-metamask@0.2.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.9...@cosmos-kit/cosmos-extension-metamask@0.2.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.8...@cosmos-kit/cosmos-extension-metamask@0.2.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.7...@cosmos-kit/cosmos-extension-metamask@0.2.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.6...@cosmos-kit/cosmos-extension-metamask@0.2.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.5...@cosmos-kit/cosmos-extension-metamask@0.2.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.4...@cosmos-kit/cosmos-extension-metamask@0.2.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.3...@cosmos-kit/cosmos-extension-metamask@0.2.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.2...@cosmos-kit/cosmos-extension-metamask@0.2.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.1...@cosmos-kit/cosmos-extension-metamask@0.2.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.2.0...@cosmos-kit/cosmos-extension-metamask@0.2.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.10...@cosmos-kit/cosmos-extension-metamask@0.2.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.9...@cosmos-kit/cosmos-extension-metamask@0.1.10) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.8...@cosmos-kit/cosmos-extension-metamask@0.1.9) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.6...@cosmos-kit/cosmos-extension-metamask@0.1.8) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.5...@cosmos-kit/cosmos-extension-metamask@0.1.6) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.4...@cosmos-kit/cosmos-extension-metamask@0.1.5) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.3...@cosmos-kit/cosmos-extension-metamask@0.1.4) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.2...@cosmos-kit/cosmos-extension-metamask@0.1.3) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmos-extension-metamask@0.1.1...@cosmos-kit/cosmos-extension-metamask@0.1.2) (2023-09-13) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## 0.1.1 (2023-09-13) + +**Note:** Version bump only for package @cosmos-kit/cosmos-extension-metamask + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.4.4...@cosmos-kit/leap-extension@2.4.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.4.3...@cosmos-kit/leap-extension@2.4.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.4.2...@cosmos-kit/leap-extension@2.4.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.4.1...@cosmos-kit/leap-extension@2.4.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.4.0...@cosmos-kit/leap-extension@2.4.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.3.1...@cosmos-kit/leap-extension@2.4.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.3.0...@cosmos-kit/leap-extension@2.3.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.7...@cosmos-kit/leap-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.6...@cosmos-kit/leap-extension@2.2.7) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.5...@cosmos-kit/leap-extension@2.2.6) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.4...@cosmos-kit/leap-extension@2.2.5) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.3...@cosmos-kit/leap-extension@2.2.4) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.2...@cosmos-kit/leap-extension@2.2.3) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.1...@cosmos-kit/leap-extension@2.2.2) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.0...@cosmos-kit/leap-extension@2.2.1) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.4...@cosmos-kit/leap-extension@2.2.0) (2023-08-03) + +### Features + +- add platformEnabledWallets ([a48ffab](https://github.com/cosmology-tech/cosmos-kit/commit/a48ffabd6108363b24b5bdecb6a156a669758e4a)) + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.3...@cosmos-kit/leap-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.2...@cosmos-kit/leap-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.1...@cosmos-kit/leap-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.0...@cosmos-kit/leap-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.5...@cosmos-kit/leap-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.4...@cosmos-kit/leap-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.3...@cosmos-kit/leap-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.2...@cosmos-kit/leap-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1...@cosmos-kit/leap-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.6...@cosmos-kit/leap-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.5...@cosmos-kit/leap-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.4...@cosmos-kit/leap-extension@2.0.1-beta.5) (2023-07-18) + +### Features + +- add leap mobile webview support ([14b0d45](https://github.com/cosmology-tech/cosmos-kit/commit/14b0d45d88a809d2b95f45d56b5c745418e1dd21)) + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.3...@cosmos-kit/leap-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.2...@cosmos-kit/leap-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.1...@cosmos-kit/leap-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.0...@cosmos-kit/leap-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@1.0.0...@cosmos-kit/leap-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.6...@cosmos-kit/leap-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.5...@cosmos-kit/leap-extension@0.17.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.4...@cosmos-kit/leap-extension@0.17.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.3...@cosmos-kit/leap-extension@0.17.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2...@cosmos-kit/leap-extension@0.17.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.1...@cosmos-kit/leap-extension@0.17.2) (2023-06-30) + +## [0.17.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.1...@cosmos-kit/leap-extension@0.17.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.0...@cosmos-kit/leap-extension@0.17.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.1...@cosmos-kit/leap-extension@0.17.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.0...@cosmos-kit/leap-extension@0.17.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.11...@cosmos-kit/leap-extension@0.17.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.16.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.10...@cosmos-kit/leap-extension@0.16.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.9...@cosmos-kit/leap-extension@0.16.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.8...@cosmos-kit/leap-extension@0.16.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.7...@cosmos-kit/leap-extension@0.16.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.6...@cosmos-kit/leap-extension@0.16.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.5...@cosmos-kit/leap-extension@0.16.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.4...@cosmos-kit/leap-extension@0.16.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.3...@cosmos-kit/leap-extension@0.16.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.2...@cosmos-kit/leap-extension@0.16.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.1...@cosmos-kit/leap-extension@0.16.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.0...@cosmos-kit/leap-extension@0.16.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.15.0...@cosmos-kit/leap-extension@0.16.0) (2023-05-04) + +### Features + +- Add leap suggest chain ([5bc26db](https://github.com/cosmology-tech/cosmos-kit/commit/5bc26db2f15681ad16d0e6830cef5de170cb36fe)) + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.21...@cosmos-kit/leap-extension@0.15.0) (2023-04-28) + +### Features + +- :sparkles: add leap ext suggest token ([ebf87aa](https://github.com/cosmology-tech/cosmos-kit/commit/ebf87aaef7c3c7971b444d42fa86db6b50ec50fd)) +- :sparkles: add leap ext types ([b945f47](https://github.com/cosmology-tech/cosmos-kit/commit/b945f471fc56664954eca4987bd9b94785111232)) +- :sparkles: improve suggest token types ([dc06b79](https://github.com/cosmology-tech/cosmos-kit/commit/dc06b79d56a5153b2d5f955d919fffc8232fdcd4)) + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.20...@cosmos-kit/leap-extension@0.14.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.19...@cosmos-kit/leap-extension@0.14.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.18...@cosmos-kit/leap-extension@0.14.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.17...@cosmos-kit/leap-extension@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.16...@cosmos-kit/leap-extension@0.14.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.15...@cosmos-kit/leap-extension@0.14.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.14...@cosmos-kit/leap-extension@0.14.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.13...@cosmos-kit/leap-extension@0.14.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.12...@cosmos-kit/leap-extension@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.11...@cosmos-kit/leap-extension@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.10...@cosmos-kit/leap-extension@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.9...@cosmos-kit/leap-extension@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.8...@cosmos-kit/leap-extension@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.7...@cosmos-kit/leap-extension@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.6...@cosmos-kit/leap-extension@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.5...@cosmos-kit/leap-extension@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.4...@cosmos-kit/leap-extension@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.3...@cosmos-kit/leap-extension@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.2...@cosmos-kit/leap-extension@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.1...@cosmos-kit/leap-extension@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.0...@cosmos-kit/leap-extension@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.33...@cosmos-kit/leap-extension@0.14.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.32...@cosmos-kit/leap-extension@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.31...@cosmos-kit/leap-extension@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.30...@cosmos-kit/leap-extension@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.29...@cosmos-kit/leap-extension@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.28...@cosmos-kit/leap-extension@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.27...@cosmos-kit/leap-extension@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.26...@cosmos-kit/leap-extension@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.25...@cosmos-kit/leap-extension@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.24...@cosmos-kit/leap-extension@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.23...@cosmos-kit/leap-extension@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.21...@cosmos-kit/leap-extension@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.20...@cosmos-kit/leap-extension@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.19...@cosmos-kit/leap-extension@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.18...@cosmos-kit/leap-extension@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.17...@cosmos-kit/leap-extension@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.16...@cosmos-kit/leap-extension@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.15...@cosmos-kit/leap-extension@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## 0.13.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.13...@cosmos-kit/leap@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.12...@cosmos-kit/leap@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.11...@cosmos-kit/leap@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.10...@cosmos-kit/leap@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.9...@cosmos-kit/leap@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.8...@cosmos-kit/leap@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.7...@cosmos-kit/leap@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.6...@cosmos-kit/leap@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.5...@cosmos-kit/leap@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.4...@cosmos-kit/leap@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.3...@cosmos-kit/leap@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.2...@cosmos-kit/leap@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.1...@cosmos-kit/leap@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.0...@cosmos-kit/leap@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.12.0...@cosmos-kit/leap@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.2...@cosmos-kit/leap@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.1...@cosmos-kit/leap@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.0...@cosmos-kit/leap@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.6...@cosmos-kit/leap@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.5...@cosmos-kit/leap@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.4...@cosmos-kit/leap@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.3...@cosmos-kit/leap@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.2...@cosmos-kit/leap@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.1...@cosmos-kit/leap@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.0...@cosmos-kit/leap@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.1...@cosmos-kit/leap@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.0...@cosmos-kit/leap@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.1...@cosmos-kit/leap@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.0...@cosmos-kit/leap@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.7.0...@cosmos-kit/leap@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.6.0...@cosmos-kit/leap@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.5.0...@cosmos-kit/leap@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.2...@cosmos-kit/leap@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.1...@cosmos-kit/leap@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.0...@cosmos-kit/leap@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.3.0...@cosmos-kit/leap@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.2...@cosmos-kit/leap@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.1...@cosmos-kit/leap@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.0...@cosmos-kit/leap@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.6...@cosmos-kit/leap@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.5...@cosmos-kit/leap@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.4...@cosmos-kit/leap@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.3...@cosmos-kit/leap@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.1...@cosmos-kit/leap@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.0...@cosmos-kit/leap@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/cosmos-extension-metamask/LICENSE b/wallets/cosmos-extension-metamask/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/cosmos-extension-metamask/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/cosmos-extension-metamask/README.md b/wallets/cosmos-extension-metamask/README.md new file mode 100644 index 000000000..d2de58d53 --- /dev/null +++ b/wallets/cosmos-extension-metamask/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/cosmos-extension-metamask + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/cosmos-extension-metamask is the official Cosmos Snap for Metamask integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/cosmos-extension-metamask/index.ts b/wallets/cosmos-extension-metamask/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/cosmos-extension-metamask/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/package.json b/wallets/cosmos-extension-metamask/package.json new file mode 100644 index 000000000..2d13a8310 --- /dev/null +++ b/wallets/cosmos-extension-metamask/package.json @@ -0,0 +1,73 @@ +{ + "name": "@cosmos-kit/cosmos-extension-metamask", + "version": "0.10.0", + "description": "cosmos-kit wallet connector for the official Cosmos Extension for Metamask", + "author": "joe@mysticlabs.xyz", + "contributors": [ + { + "name": "Joe Schnetzler" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "metamask", + "wallet", + "snap" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1", + "@cosmsnap/snapper": "^0.2.5", + "cosmjs-types": ">=0.9.0" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/cosmos-extension-metamask/src/constant.ts b/wallets/cosmos-extension-metamask/src/constant.ts new file mode 100644 index 000000000..d13703b85 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjEyODBweCIgaGVpZ2h0PSI5NjBweCIgc3R5bGU9InNoYXBlLXJlbmRlcmluZzpnZW9tZXRyaWNQcmVjaXNpb247IHRleHQtcmVuZGVyaW5nOmdlb21ldHJpY1ByZWNpc2lvbjsgaW1hZ2UtcmVuZGVyaW5nOm9wdGltaXplUXVhbGl0eTsgZmlsbC1ydWxlOmV2ZW5vZGQ7IGNsaXAtcnVsZTpldmVub2RkIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjAuOTk3IiBmaWxsPSIjMmUzMTQ4IiBkPSJNIDYyNS41LDExOS41IEMgNzUzLjE5NCwxMTguNDM0IDg1NS4zNjEsMTY4LjQzNCA5MzIsMjY5LjVDIDk5NS43MDksMzYyLjM5OCAxMDE0LjA0LDQ2My43MzEgOTg3LDU3My41QyA5NTQuNTcxLDY4My4yNiA4ODYuNDA0LDc2Mi4wOTQgNzgyLjUsODEwQyA2ODEuOTU3LDg1MC45OTIgNTgyLjI5LDg0OC45OTIgNDgzLjUsODA0QyAzOTIuNTI2LDc1OC4wMjQgMzMwLjM1OSw2ODYuODU4IDI5Nyw1OTAuNUMgMjYyLjkyMSw0NzUuMzcxIDI3OS41ODcsMzY4LjM3MSAzNDcsMjY5LjVDIDQxNi42NzksMTc3LjA4OCA1MDkuNTEzLDEyNy4wODggNjI1LjUsMTE5LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzZkNzE4ZSIgZD0iTSA2OTMuNSwyODAuNSBDIDY5OC4xNDcsMzA5LjA2OSA3MDIuMTQ3LDMzNy43MzYgNzA1LjUsMzY2LjVDIDcyNS44MTksMzU2Ljg0IDc0Ni40ODYsMzQ4LjAwNyA3NjcuNSwzNDBDIDc2OC4xMTcsMzM3LjcyMyA3NjguNzg0LDMzNS41NTYgNzY5LjUsMzMzLjVDIDc2OC4zNzgsMzQwLjY4MSA3NzAuMDQ1LDM0Ny4wMTUgNzc0LjUsMzUyLjVDIDc1MS40ODMsMzYwLjkyNCA3MjguOTgzLDM3MC41OTEgNzA3LDM4MS41QyA3MDYuOTAxLDQwMC41MTYgNzA3LjU2Nyw0MTkuNTE2IDcwOSw0MzguNUMgNzI1LjY3Nyw0NDkuMTgyIDc0Mi4zNDQsNDU5Ljg0OSA3NTksNDcwLjVDIDc4NS40ODEsNDUyLjg0OSA4MTAuNjQ4LDQzMy41MTYgODM0LjUsNDEyLjVDIDg1Ny42MTUsMzkzLjg4NyA4NzcuNzgxLDM3Mi41NTQgODk1LDM0OC41QyA4OTguNDkxLDM0Mi41NDggOTAwLjQ5MSwzMzYuMjE1IDkwMSwzMjkuNUMgODk4Ljk1OCwzMjcuMzk2IDg5Ni40NTgsMzI2LjIyOSA4OTMuNSwzMjZDIDg3OC4zMzksMzI0Ljc0NCA4NjMuMzM5LDMyNS43NDQgODQ4LjUsMzI5QyA4MzYuNzE5LDMzMS44NTQgODI1LjA1MywzMzUuMDIxIDgxMy41LDMzOC41QyA4MTMuMzE0LDMzMy40NzMgODExLjk4LDMyOC44MDYgODA5LjUsMzI0LjVDIDgzMy4xNTQsMzE3LjE5NiA4NTcuMzIxLDMxMi41MyA4ODIsMzEwLjVDIDg5MC4wOTMsMzEwLjY1NCA4OTcuOTI2LDMxMi4xNTQgOTA1LjUsMzE1QyA5MTMuNjY0LDMxOS40OTUgOTE2LjgzLDMyNi4zMjggOTE1LDMzNS41QyA5MTIuMjg5LDM0Ni45ODIgOTA3LjI4OSwzNTcuMzE1IDkwMCwzNjYuNUMgODgxLjMwMiwzODkuMDMxIDg2MC44MDIsNDA5LjY5NyA4MzguNSw0MjguNUMgODE2LjczNiw0NDYuMjE5IDc5NC40MDIsNDYzLjIxOSA3NzEuNSw0NzkuNUMgNzk0LjcwNSw0OTUuMzczIDgxNy4wMzgsNTEyLjM3MyA4MzguNSw1MzAuNUMgODYxLjgzOCw1NTAuMDA1IDg4My4wMDUsNTcxLjY3MiA5MDIsNTk1LjVDIDkyNy4xODcsNjMzLjI4MyA5MTcuMDIsNjUwLjc4MyA4NzEuNSw2NDhDIDg0MS42NjMsNjQzLjczMyA4MTIuNjYzLDYzNi4yMzMgNzg0LjUsNjI1LjVDIDc1Ny43MTcsNjE1LjQ2NSA3MzEuMzg0LDYwNC40NjUgNzA1LjUsNTkyLjVDIDcwMS41ODksNjIxLjQ0NyA2OTcuNTg5LDY1MC40NDcgNjkzLjUsNjc5LjVDIDY4OC41MTksNzA2Ljc0MiA2ODEuMDE5LDczMy40MDkgNjcxLDc1OS41QyA2NjYuODU2LDc3MC45NjEgNjYwLjM1Niw3ODAuNzk1IDY1MS41LDc4OUMgNjQzLjQzLDc5NC45MjMgNjM1LjQzLDc5NC45MjMgNjI3LjUsNzg5QyA2MTYuMTM0LDc3Ni43OCA2MDcuOTY3LDc2Mi42MTMgNjAzLDc0Ni41QyA1OTguNzE1LDczMy42OTMgNTk1LjIxNSw3MjAuNjkzIDU5Mi41LDcwNy41QyA1OTcuNTIsNzA3Ljk1OSA2MDIuMTg3LDcwNi45NTkgNjA2LjUsNzA0LjVDIDYxMC41Miw3MjcuMzk2IDYxOC4wMiw3NDkuMDYyIDYyOSw3NjkuNUMgNjMxLjY5LDc3My42OSA2MzUuMTksNzc3LjAyNCA2MzkuNSw3NzkuNUMgNjQzLjgxLDc3Ny4wMjQgNjQ3LjMxLDc3My42OSA2NTAsNzY5LjVDIDY2My43ODksNzQyLjM1NCA2NzIuOTU2LDcxMy42ODcgNjc3LjUsNjgzLjVDIDY4NC4zNyw2NTAuODczIDY4OC43MDQsNjE3Ljg3MyA2OTAuNSw1ODQuNUMgNjczLjQwNCw1NzcuMDgxIDY1Ni43MzcsNTY4Ljc0OCA2NDAuNSw1NTkuNUMgNjIzLjYyNSw1NjguNDM3IDYwNi42MjUsNTc3LjEwNCA1ODkuNSw1ODUuNUMgNTg5LjE2Nyw1ODYuNSA1ODguODMzLDU4Ny41IDU4OC41LDU4OC41QyA1OTAuOTA4LDYxMy41NzkgNTkzLjkwOCw2MzguNTc5IDU5Ny41LDY2My41QyA1OTIuNDM2LDY2Mi45MDkgNTg3Ljc2OSw2NjMuOTA5IDU4My41LDY2Ni41QyA1NzkuOTU0LDY0Mi4yNTUgNTc3LjI4OCw2MTcuOTIyIDU3NS41LDU5My41QyA1NDguNDE0LDYwNS4wNCA1MjEuMDgxLDYxNi4wNCA0OTMuNSw2MjYuNUMgNDY1LjM4Nyw2MzcuMjYgNDM2LjM4Nyw2NDQuNDI3IDQwNi41LDY0OEMgMzY1LjQ0OSw2NTAuMDYzIDM1NS42MTYsNjMzLjU2MyAzNzcsNTk4LjVDIDM5NS4yNTYsNTc0Ljc0MyA0MTUuNzU2LDU1My4wNzYgNDM4LjUsNTMzLjVDIDQ2MS41OCw1MTQuNzU3IDQ4NS4yNDcsNDk2Ljc1NyA1MDkuNSw0NzkuNUMgNDg4LjcxMSw0NjUuMTE2IDQ2OC43MTEsNDQ5Ljc4MiA0NDkuNSw0MzMuNUMgNDUzLjgzMyw0MzEuMTY3IDQ1Ny4xNjcsNDI3LjgzMyA0NTkuNSw0MjMuNUMgNDc5LjYxMSw0NDAuMjY2IDUwMC42MTEsNDU1LjkzMyA1MjIuNSw0NzAuNUMgNTM3Ljk5Nyw0NjAuMjUgNTUzLjY2NCw0NTAuMjUgNTY5LjUsNDQwLjVDIDU3MS4xOTIsNDIwLjUwNiA1NzIuNTI1LDQwMC41MDYgNTczLjUsMzgwLjVDIDU1OC4zMywzNzQuNDk1IDU0My4zMywzNjcuOTk1IDUyOC41LDM2MUMgNTEzLjAyMSwzNTQuNTkxIDQ5Ny4zNTQsMzQ4Ljc1NyA0ODEuNSwzNDMuNUMgNDU5LjgwNCwzMzUuMzI2IDQzNy40NywzMjkuNDkzIDQxNC41LDMyNkMgNDA1LjgzMywzMjUuMzMzIDM5Ny4xNjcsMzI1LjMzMyAzODguNSwzMjZDIDM3OS4xNDQsMzI2Ljg2OCAzNzYuOTc3LDMzMS4zNjggMzgyLDMzOS41QyAzODguMDE3LDM1Mi41MTkgMzk2LjAxNywzNjQuMTg1IDQwNiwzNzQuNUMgNDEyLjc1NiwzODEuNzYxIDQxOS45MjIsMzg4LjQyOCA0MjcuNSwzOTQuNUMgNDIzLjA1MywzOTcuMzg0IDQyMC4wNTMsNDAxLjM4NCA0MTguNSw0MDYuNUMgMzk3LjM1MywzODguODY0IDM4MC41MTksMzY3Ljg2NCAzNjgsMzQzLjVDIDM2Mi4wNSwzMjYuODk2IDM2Ny41NSwzMTYuMzk2IDM4NC41LDMxMkMgNDA2LjkxNSwzMTAuMzg1IDQyOC45MTUsMzEyLjcxOCA0NTAuNSwzMTlDIDQ2NS4wMiwzMjMuMDQ0IDQ3OS4zNTQsMzI3LjU0NCA0OTMuNSwzMzIuNUMgNTIwLjU3OCwzNDIuMzY4IDU0Ny4yNDQsMzUzLjM2OCA1NzMuNSwzNjUuNUMgNTc3LjA4NywzMzcuMTQzIDU4MS4wODcsMzA4LjgxIDU4NS41LDI4MC41QyA1OTAuMDE2LDI1Mi43OCA1OTcuNTE2LDIyNS43OCA2MDgsMTk5LjVDIDYxMi43MDMsMTg2Ljg5OCA2MjAuMjAzLDE3Ni4zOTggNjMwLjUsMTY4QyA2MzcuODc2LDE2NC40MzQgNjQ0Ljg3NiwxNjUuMSA2NTEuNSwxNzBDIDY1OC41NDUsMTc2LjM3NyA2NjQuMDQ1LDE4My44NzcgNjY4LDE5Mi41QyA2ODAuMDk0LDIyMC45MzMgNjg4LjU5NCwyNTAuMjY2IDY5My41LDI4MC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMyZTMxNDgiIGQ9Ik0gNjc4LjUsMjc2LjUgQyA2NjUuNjA4LDI3My4xMTQgNjUyLjQ0MSwyNzEuNzggNjM5LDI3Mi41QyA2MjYuMzU3LDI3Mi4wODMgNjEzLjg1NywyNzMuMDgzIDYwMS41LDI3NS41QyA2MDUuMTQxLDI1Mi45MzYgNjEwLjk3NSwyMzAuOTM2IDYxOSwyMDkuNUMgNjIyLjMwMiwyMDAuODkzIDYyNi42MzUsMTkyLjg5MyA2MzIsMTg1LjVDIDYzNC4xMTIsMTgyLjcxNiA2MzYuNzc5LDE4MC43MTYgNjQwLDE3OS41QyA2NDUuMDM0LDE4Mi44NjggNjQ5LjAzNCwxODcuMjAyIDY1MiwxOTIuNUMgNjY0Ljg0NywyMTkuMjE4IDY3My42OCwyNDcuMjE4IDY3OC41LDI3Ni41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYjFlMzYiIGQ9Ik0gNjc4LjUsMjc2LjUgQyA2ODQuMTYyLDMwOC42MzMgNjg3Ljk5NiwzNDAuOTY2IDY5MCwzNzMuNUMgNjczLjI2MywzODEuNzg0IDY1Ni43NjMsMzkwLjQ1MSA2NDAuNSwzOTkuNUMgNjIzLjY1NiwzOTAuNTc4IDYwNi42NTYsMzgxLjkxMSA1ODkuNSwzNzMuNUMgNTkwLjUwMiwzNDAuNDg0IDU5NC41MDIsMzA3LjgxOCA2MDEuNSwyNzUuNUMgNjEzLjg1NywyNzMuMDgzIDYyNi4zNTcsMjcyLjA4MyA2MzksMjcyLjVDIDY1Mi40NDEsMjcxLjc4IDY2NS42MDgsMjczLjExNCA2NzguNSwyNzYuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMWIxZTM2IiBkPSJNIDU4NS41LDI4MC41IEMgNTgxLjA4NywzMDguODEgNTc3LjA4NywzMzcuMTQzIDU3My41LDM2NS41QyA1NDcuMjQ0LDM1My4zNjggNTIwLjU3OCwzNDIuMzY4IDQ5My41LDMzMi41QyA1MTguMjQyLDMwNy42MTYgNTQ3LjU3NSwyOTAuMTE2IDU4MS41LDI4MEMgNTgzLjA2NiwyNzkuMjM1IDU4NC4zOTksMjc5LjQwMiA1ODUuNSwyODAuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMWIxZTM2IiBkPSJNIDc3My41LDMyMy41IEMgNzcxLjE5NSwzMjYuNDA3IDc2OS44NjIsMzI5Ljc0MSA3NjkuNSwzMzMuNUMgNzY4Ljc4NCwzMzUuNTU2IDc2OC4xMTcsMzM3LjcyMyA3NjcuNSwzNDBDIDc0Ni40ODYsMzQ4LjAwNyA3MjUuODE5LDM1Ni44NCA3MDUuNSwzNjYuNUMgNzAyLjE0NywzMzcuNzM2IDY5OC4xNDcsMzA5LjA2OSA2OTMuNSwyODAuNUMgNzIyLjM3MiwyODcuNDM3IDc0OC4zNzIsMzAwLjYwNCA3NzEuNSwzMjBDIDc3Mi44MjMsMzIwLjgxNiA3NzMuNDg5LDMyMS45ODMgNzczLjUsMzIzLjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iI2I1YjdjNiIgZD0iTSA4MDkuNSwzMjQuNSBDIDgxMS45OCwzMjguODA2IDgxMy4zMTQsMzMzLjQ3MyA4MTMuNSwzMzguNUMgODEyLjcyOSwzNDYuMDUyIDgwOS4zOTYsMzUyLjA1MiA4MDMuNSwzNTYuNUMgNzkyLjgxNCwzNjEuNTg4IDc4My4xNDcsMzYwLjI1NCA3NzQuNSwzNTIuNUMgNzcwLjA0NSwzNDcuMDE1IDc2OC4zNzgsMzQwLjY4MSA3NjkuNSwzMzMuNUMgNzY5Ljg2MiwzMjkuNzQxIDc3MS4xOTUsMzI2LjQwNyA3NzMuNSwzMjMuNUMgNzg1Ljc4OSwzMTIuNTg2IDc5Ny43ODksMzEyLjkxOSA4MDkuNSwzMjQuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMmUzMTQ4IiBkPSJNIDQ4MS41LDM0My41IEMgNDc1LjQzMSwzNTEuMjkzIDQ2OS41OTgsMzU5LjI5MyA0NjQsMzY3LjVDIDQ1OC40MjksMzc1Ljk3NSA0NTMuOTI5LDM4NC45NzUgNDUwLjUsMzk0LjVDIDQ0Mi44MzMsMzkwLjUgNDM1LjE2NywzOTAuNSA0MjcuNSwzOTQuNUMgNDE5LjkyMiwzODguNDI4IDQxMi43NTYsMzgxLjc2MSA0MDYsMzc0LjVDIDM5Ni4wMTcsMzY0LjE4NSAzODguMDE3LDM1Mi41MTkgMzgyLDMzOS41QyAzNzYuOTc3LDMzMS4zNjggMzc5LjE0NCwzMjYuODY4IDM4OC41LDMyNkMgMzk3LjE2NywzMjUuMzMzIDQwNS44MzMsMzI1LjMzMyA0MTQuNSwzMjZDIDQzNy40NywzMjkuNDkzIDQ1OS44MDQsMzM1LjMyNiA0ODEuNSwzNDMuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMmUzMTQ4IiBkPSJNIDgzNC41LDQxMi41IEMgODI4LjMzNSwzOTMuNTAzIDgxOS41MDIsMzc1LjgzNyA4MDgsMzU5LjVDIDgwNy4wOTIsMzU3LjU2MSA4MDUuNTkyLDM1Ni41NjEgODAzLjUsMzU2LjVDIDgwOS4zOTYsMzUyLjA1MiA4MTIuNzI5LDM0Ni4wNTIgODEzLjUsMzM4LjVDIDgyNS4wNTMsMzM1LjAyMSA4MzYuNzE5LDMzMS44NTQgODQ4LjUsMzI5QyA4NjMuMzM5LDMyNS43NDQgODc4LjMzOSwzMjQuNzQ0IDg5My41LDMyNkMgODk2LjQ1OCwzMjYuMjI5IDg5OC45NTgsMzI3LjM5NiA5MDEsMzI5LjVDIDkwMC40OTEsMzM2LjIxNSA4OTguNDkxLDM0Mi41NDggODk1LDM0OC41QyA4NzcuNzgxLDM3Mi41NTQgODU3LjYxNSwzOTMuODg3IDgzNC41LDQxMi41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYjFlMzYiIGQ9Ik0gNDgxLjUsMzQzLjUgQyA0OTcuMzU0LDM0OC43NTcgNTEzLjAyMSwzNTQuNTkxIDUyOC41LDM2MUMgNTQzLjMzLDM2Ny45OTUgNTU4LjMzLDM3NC40OTUgNTczLjUsMzgwLjVDIDU3Mi41MjUsNDAwLjUwNiA1NzEuMTkyLDQyMC41MDYgNTY5LjUsNDQwLjVDIDU1My42NjQsNDUwLjI1IDUzNy45OTcsNDYwLjI1IDUyMi41LDQ3MC41QyA1MDAuNjExLDQ1NS45MzMgNDc5LjYxMSw0NDAuMjY2IDQ1OS41LDQyMy41QyA0NjQuMzEsNDExLjI2OSA0NjEuMzEsNDAxLjYwMiA0NTAuNSwzOTQuNUMgNDUzLjkyOSwzODQuOTc1IDQ1OC40MjksMzc1Ljk3NSA0NjQsMzY3LjVDIDQ2OS41OTgsMzU5LjI5MyA0NzUuNDMxLDM1MS4yOTMgNDgxLjUsMzQzLjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzFiMWUzNiIgZD0iTSA3NzQuNSwzNTIuNSBDIDc4My4xNDcsMzYwLjI1NCA3OTIuODE0LDM2MS41ODggODAzLjUsMzU2LjVDIDgwNS41OTIsMzU2LjU2MSA4MDcuMDkyLDM1Ny41NjEgODA4LDM1OS41QyA4MTkuNTAyLDM3NS44MzcgODI4LjMzNSwzOTMuNTAzIDgzNC41LDQxMi41QyA4MTAuNjQ4LDQzMy41MTYgNzg1LjQ4MSw0NTIuODQ5IDc1OSw0NzAuNUMgNzQyLjM0NCw0NTkuODQ5IDcyNS42NzcsNDQ5LjE4MiA3MDksNDM4LjVDIDcwNy41NjcsNDE5LjUxNiA3MDYuOTAxLDQwMC41MTYgNzA3LDM4MS41QyA3MjguOTgzLDM3MC41OTEgNzUxLjQ4MywzNjAuOTI0IDc3NC41LDM1Mi41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYzFmMzciIGQ9Ik0gNTg2LjUsMzg3LjUgQyA1OTkuNDI5LDM5My42MzIgNjEyLjA5Niw0MDAuMjk4IDYyNC41LDQwNy41QyA2MTEuNzg1LDQxNS4yNzggNTk4Ljk1Miw0MjIuOTQ1IDU4Niw0MzAuNUMgNTg1LjYwMyw0MTYuMTYzIDU4NS43NjksNDAxLjgyOSA1ODYuNSwzODcuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMWMxZjM3IiBkPSJNIDY4OS41LDM4OS41IEMgNjkwLjUsMzg5LjUgNjkxLjUsMzg5LjUgNjkyLjUsMzg5LjVDIDY5My4xMzUsNDAyLjUxOCA2OTMuMTM1LDQxNS41MTggNjkyLjUsNDI4LjVDIDY4MC4xNzIsNDIyLjAwNSA2NjguMTcyLDQxNS4wMDUgNjU2LjUsNDA3LjVDIDY2Ny4zNjcsNDAxLjIzNCA2NzguMzY3LDM5NS4yMzQgNjg5LjUsMzg5LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iI2I1YjdjNiIgZD0iTSA0NTAuNSwzOTQuNSBDIDQ2MS4zMSw0MDEuNjAyIDQ2NC4zMSw0MTEuMjY5IDQ1OS41LDQyMy41QyA0NTcuMTY3LDQyNy44MzMgNDUzLjgzMyw0MzEuMTY3IDQ0OS41LDQzMy41QyA0NDQuOTY3LDQzNC45ODQgNDQwLjMsNDM1LjY1IDQzNS41LDQzNS41QyA0MjEuMzQyLDQzMC44NTQgNDE1LjY3NSw0MjEuMTg3IDQxOC41LDQwNi41QyA0MjAuMDUzLDQwMS4zODQgNDIzLjA1MywzOTcuMzg0IDQyNy41LDM5NC41QyA0MzUuMTY3LDM5MC41IDQ0Mi44MzMsMzkwLjUgNDUwLjUsMzk0LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzFiMWUzNiIgZD0iTSA2MzkuNSw0MTUuNSBDIDY1OC4xODEsNDI0LjkyNCA2NzYuMzQ4LDQzNS4yNTcgNjk0LDQ0Ni41QyA2OTQuNjY3LDQ2OC41IDY5NC42NjcsNDkwLjUgNjk0LDUxMi41QyA2NzYuNTc2LDUyMy40NjUgNjU4Ljc0Miw1MzMuNzk4IDY0MC41LDU0My41QyA2MjEuNjEzLDUzMy40MzMgNjAzLjExMyw1MjIuNzY2IDU4NSw1MTEuNUMgNTg0LjMzMyw0OTAuMTY3IDU4NC4zMzMsNDY4LjgzMyA1ODUsNDQ3LjVDIDYwMy4wOTYsNDM2LjUzOSA2MjEuMjYzLDQyNS44NzIgNjM5LjUsNDE1LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzFiMWUzNiIgZD0iTSA4MzguNSw0MjguNSBDIDgzOS41ODYsNDI4LjYyIDg0MC4yNTMsNDI5LjI4NyA4NDAuNSw0MzAuNUMgODQ4LjU4NCw0NjMuNTE1IDg0OC40MTcsNDk2LjUxNSA4NDAsNTI5LjVDIDgzOS42MTcsNTMwLjA1NiA4MzkuMTE3LDUzMC4zODkgODM4LjUsNTMwLjVDIDgxNy4wMzgsNTEyLjM3MyA3OTQuNzA1LDQ5NS4zNzMgNzcxLjUsNDc5LjVDIDc5NC40MDIsNDYzLjIxOSA4MTYuNzM2LDQ0Ni4yMTkgODM4LjUsNDI4LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzFiMWUzNiIgZD0iTSA0NDkuNSw0MzMuNSBDIDQ2OC43MTEsNDQ5Ljc4MiA0ODguNzExLDQ2NS4xMTYgNTA5LjUsNDc5LjVDIDQ4NS4yNDcsNDk2Ljc1NyA0NjEuNTgsNTE0Ljc1NyA0MzguNSw1MzMuNUMgNDMwLjM3MSw1MDEuMDc0IDQyOS4zNzEsNDY4LjQwOCA0MzUuNSw0MzUuNUMgNDQwLjMsNDM1LjY1IDQ0NC45NjcsNDM0Ljk4NCA0NDkuNSw0MzMuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjYjViN2M2IiBkPSJNIDYzMy41LDQ0MS41IEMgNjYzLjg1OCw0NDIuMDIxIDY3OC4wMjUsNDU3LjM1NCA2NzYsNDg3LjVDIDY2OC43ODksNTA5LjUyOSA2NTMuNjIzLDUxOS4wMjkgNjMwLjUsNTE2QyA2MDguNDIzLDUwOC4yMzQgNTk5LjI1Nyw0OTIuNzM0IDYwMyw0NjkuNUMgNjA3Ljk4NSw0NTQuMzQyIDYxOC4xNTEsNDQ1LjAwOSA2MzMuNSw0NDEuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMWIxZTM2IiBkPSJNIDcxMC41LDQ1Ni41IEMgNzIyLjQyLDQ2My43NDggNzM0LjA4Niw0NzEuNDE0IDc0NS41LDQ3OS41QyA3MzQuMDg2LDQ4Ny41ODYgNzIyLjQyLDQ5NS4yNTIgNzEwLjUsNTAyLjVDIDcwOS4xNjcsNDg3LjE2NyA3MDkuMTY3LDQ3MS44MzMgNzEwLjUsNDU2LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzFkMjAzOCIgZD0iTSA1NjkuNSw0NTYuNSBDIDU3MC42NjEsNDcxLjY2MSA1NzAuODI4LDQ4Ni45OTQgNTcwLDUwMi41QyA1NTguMzY0LDQ5NS4wMjkgNTQ2Ljg2NCw0ODcuMzYzIDUzNS41LDQ3OS41QyA1NDYuODc0LDQ3MS43NzUgNTU4LjIwNyw0NjQuMTA4IDU2OS41LDQ1Ni41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMzZjQyNWQiIGQ9Ik0gNzEwLjUsNDU2LjUgQyA3MDkuMTY3LDQ3MS44MzMgNzA5LjE2Nyw0ODcuMTY3IDcxMC41LDUwMi41QyA3MTAuNDQsNTAzLjA0MyA3MTAuMTA3LDUwMy4zNzYgNzA5LjUsNTAzLjVDIDcwOC4xNjcsNDg3LjUgNzA4LjE2Nyw0NzEuNSA3MDkuNSw0NTUuNUMgNzEwLjEwNyw0NTUuNjI0IDcxMC40NCw0NTUuOTU3IDcxMC41LDQ1Ni41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYjFlMzYiIGQ9Ik0gNDgxLjUsNjE1LjUgQyA0NjQuOTk1LDU5NS41MDcgNDUyLjMyOSw1NzMuMTc0IDQ0My41LDU0OC41QyA0NjguNjYzLDUyNy4xNjggNDk0LjgzLDUwNy4xNjggNTIyLDQ4OC41QyA1MzcuNzMyLDQ5OC42MTkgNTUzLjU2Niw1MDguNjE5IDU2OS41LDUxOC41QyA1NzEuMjEyLDUzOC4xNDggNTcyLjM3OSw1NTcuODE1IDU3Myw1NzcuNUMgNTQzLjI2Miw1OTIuMDIzIDUxMi43NjIsNjA0LjY5IDQ4MS41LDYxNS41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYjFlMzYiIGQ9Ik0gODM0LjUsNTQ2LjUgQyA4MjUuOTYyLDU3MS41ODYgODEzLjI5NSw1OTQuMjUzIDc5Ni41LDYxNC41QyA3NjUuODQ4LDYwMy44NDMgNzM1Ljg0OCw1OTEuNTEgNzA2LjUsNTc3LjVDIDcwNi4xNjcsNTc2LjE2NyA3MDUuODMzLDU3NC44MzMgNzA1LjUsNTczLjVDIDcwNi42NjYsNTU1LjgzNiA3MDcuODMzLDUzOC4xNjkgNzA5LDUyMC41QyA3MjUuNjc3LDUwOS44MTggNzQyLjM0NCw0OTkuMTUxIDc1OSw0ODguNUMgNzg1LjQ4MSw1MDYuMTUxIDgxMC42NDgsNTI1LjQ4NCA4MzQuNSw1NDYuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMWIxZTM2IiBkPSJNIDU4NS41LDUyOC41IEMgNTk4LjY3Myw1MzUuOTE4IDYxMS42NzMsNTQzLjU4NSA2MjQuNSw1NTEuNUMgNjEyLjgxNiw1NTguMzQzIDYwMC44MTYsNTY0LjY3NiA1ODguNSw1NzAuNUMgNTg2LjM0LDU1Ni42MDMgNTg1LjM0LDU0Mi42MDMgNTg1LjUsNTI4LjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzFjMWYzNyIgZD0iTSA2OTAuNSw1MzAuNSBDIDY5MS41LDUzMC41IDY5Mi41LDUzMC41IDY5My41LDUzMC41QyA2OTIuOTY0LDU0My40OTQgNjkyLjYzMSw1NTYuNDk0IDY5Mi41LDU2OS41QyA2NzkuOTc1LDU2NC41NzEgNjY3Ljk3NSw1NTguNTcxIDY1Ni41LDU1MS41QyA2NjcuODYxLDU0NC40ODkgNjc5LjE5NSw1MzcuNDg5IDY5MC41LDUzMC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMyZTMxNDgiIGQ9Ik0gODM0LjUsNTQ2LjUgQyA4NTcuNjE1LDU2NS4xMTMgODc3Ljc4MSw1ODYuNDQ2IDg5NSw2MTAuNUMgODk3LjI3NCw2MTQuNzE0IDg5OS4yNzQsNjE5LjA0NyA5MDEsNjIzLjVDIDkwMi4xNzMsNjMwLjAwMyA4OTkuMzQsNjMzLjE3IDg5Mi41LDYzM0MgODgxLjEzMSw2MzMuNzkzIDg2OS43OTgsNjMzLjQ2IDg1OC41LDYzMkMgODM3LjMyNSw2MjcuODg1IDgxNi42NTgsNjIyLjA1MiA3OTYuNSw2MTQuNUMgODEzLjI5NSw1OTQuMjUzIDgyNS45NjIsNTcxLjU4NiA4MzQuNSw1NDYuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMmUzMTQ4IiBkPSJNIDQ0My41LDU0OC41IEMgNDUyLjMyOSw1NzMuMTc0IDQ2NC45OTUsNTk1LjUwNyA0ODEuNSw2MTUuNUMgNDU1LjEwMSw2MjUuODU4IDQyNy43NjcsNjMxLjg1OCAzOTkuNSw2MzMuNUMgMzk1LjUsNjMzLjMzMyAzOTEuNSw2MzMuMTY3IDM4Ny41LDYzM0MgMzgxLjE3Niw2MzIuNjg5IDM3OC42NzYsNjI5LjUyMyAzODAsNjIzLjVDIDM4Ni42NzUsNjA5LjE2MSAzOTUuMzQyLDU5Ni4xNjEgNDA2LDU4NC41QyA0MTguMDY2LDU3MS45MzIgNDMwLjU2Niw1NTkuOTMyIDQ0My41LDU0OC41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYjFlMzYiIGQ9Ik0gNjc3LjUsNjgzLjUgQyA2NTcuOTQ3LDY4Ni4yMDUgNjM4LjI4MSw2ODcuMjA1IDYxOC41LDY4Ni41QyA2MTguMDYyLDY3Mi43MzIgNjExLjA2Miw2NjUuMDY1IDU5Ny41LDY2My41QyA1OTMuOTA4LDYzOC41NzkgNTkwLjkwOCw2MTMuNTc5IDU4OC41LDU4OC41QyA1ODguODMzLDU4Ny41IDU4OS4xNjcsNTg2LjUgNTg5LjUsNTg1LjVDIDYwNi42MjUsNTc3LjEwNCA2MjMuNjI1LDU2OC40MzcgNjQwLjUsNTU5LjVDIDY1Ni43MzcsNTY4Ljc0OCA2NzMuNDA0LDU3Ny4wODEgNjkwLjUsNTg0LjVDIDY4OC43MDQsNjE3Ljg3MyA2ODQuMzcsNjUwLjg3MyA2NzcuNSw2ODMuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjMWIxZTM2IiBkPSJNIDc4NC41LDYyNS41IEMgNzg0LjYzMSw2MjYuMjM5IDc4NC40NjQsNjI2LjkwNiA3ODQsNjI3LjVDIDc1OC4yNjYsNjUyLjQ1MyA3MjguMSw2NjkuNzg3IDY5My41LDY3OS41QyA2OTcuNTg5LDY1MC40NDcgNzAxLjU4OSw2MjEuNDQ3IDcwNS41LDU5Mi41QyA3MzEuMzg0LDYwNC40NjUgNzU3LjcxNyw2MTUuNDY1IDc4NC41LDYyNS41IFoiLz48L2c+CjxnPjxwYXRoIHN0eWxlPSJvcGFjaXR5OjEiIGZpbGw9IiMxYjFlMzYiIGQ9Ik0gNTgzLjUsNjY2LjUgQyA1NzkuODk0LDY2OS4wMjQgNTc3LjIyOCw2NzIuMzU3IDU3NS41LDY3Ni41QyA1NDMuNjgxLDY2Ni45MzYgNTE2LjM0OCw2NTAuMjY5IDQ5My41LDYyNi41QyA1MjEuMDgxLDYxNi4wNCA1NDguNDE0LDYwNS4wNCA1NzUuNSw1OTMuNUMgNTc3LjI4OCw2MTcuOTIyIDU3OS45NTQsNjQyLjI1NSA1ODMuNSw2NjYuNSBaIi8+PC9nPgo8Zz48cGF0aCBzdHlsZT0ib3BhY2l0eToxIiBmaWxsPSIjYjRiNmM1IiBkPSJNIDU5Ny41LDY2My41IEMgNjExLjA2Miw2NjUuMDY1IDYxOC4wNjIsNjcyLjczMiA2MTguNSw2ODYuNUMgNjE3LjQ3Myw2OTQuNTcyIDYxMy40NzMsNzAwLjU3MiA2MDYuNSw3MDQuNUMgNjAyLjE4Nyw3MDYuOTU5IDU5Ny41Miw3MDcuOTU5IDU5Mi41LDcwNy41QyA1NzcuMTE3LDcwMi4zOTYgNTcxLjQ1LDY5Mi4wNjMgNTc1LjUsNjc2LjVDIDU3Ny4yMjgsNjcyLjM1NyA1NzkuODk0LDY2OS4wMjQgNTgzLjUsNjY2LjVDIDU4Ny43NjksNjYzLjkwOSA1OTIuNDM2LDY2Mi45MDkgNTk3LjUsNjYzLjUgWiIvPjwvZz4KPGc+PHBhdGggc3R5bGU9Im9wYWNpdHk6MSIgZmlsbD0iIzJlMzE0OCIgZD0iTSA2NzcuNSw2ODMuNSBDIDY3Mi45NTYsNzEzLjY4NyA2NjMuNzg5LDc0Mi4zNTQgNjUwLDc2OS41QyA2NDcuMzEsNzczLjY5IDY0My44MSw3NzcuMDI0IDYzOS41LDc3OS41QyA2MzUuMTksNzc3LjAyNCA2MzEuNjksNzczLjY5IDYyOSw3NjkuNUMgNjE4LjAyLDc0OS4wNjIgNjEwLjUyLDcyNy4zOTYgNjA2LjUsNzA0LjVDIDYxMy40NzMsNzAwLjU3MiA2MTcuNDczLDY5NC41NzIgNjE4LjUsNjg2LjVDIDYzOC4yODEsNjg3LjIwNSA2NTcuOTQ3LDY4Ni4yMDUgNjc3LjUsNjgzLjUgWiIvPjwvZz4KPC9zdmc+Cg=='; diff --git a/wallets/cosmos-extension-metamask/src/cosmos-metamask-extension.ts b/wallets/cosmos-extension-metamask/src/cosmos-metamask-extension.ts new file mode 100644 index 000000000..c1cc2ae5d --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/cosmos-metamask-extension.ts @@ -0,0 +1,5 @@ +import { cosmosSnapExtensionInfo, CosmosMetamaskExtensionWallet } from './extension'; + +const cosmosExtensionMetamaskExtension = new CosmosMetamaskExtensionWallet(cosmosSnapExtensionInfo); + +export const wallets = [cosmosExtensionMetamaskExtension]; diff --git a/wallets/cosmos-extension-metamask/src/extension/chain-wallet.ts b/wallets/cosmos-extension-metamask/src/extension/chain-wallet.ts new file mode 100644 index 000000000..c297172fe --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainCosmosExtensionMetamaskSnap extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/src/extension/client.ts b/wallets/cosmos-extension-metamask/src/extension/client.ts new file mode 100644 index 000000000..1cae3a778 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/client.ts @@ -0,0 +1,153 @@ +import { OfflineAminoSigner, StdSignature, StdSignDoc, AminoSignResponse } from '@cosmjs/amino'; +import { Algo, DirectSignResponse } from '@cosmjs/proto-signing'; +import { ChainRecord, DirectSignDoc, SignType } from '@cosmos-kit/core'; +import { SignOptions, WalletClient } from '@cosmos-kit/core'; +import { + Chain, + CosmJSOfflineSigner, + CosmosSnap, + installSnap, + signDirect, + suggestChain, +} from '@cosmsnap/snapper'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; +import Long from 'long'; + +export class CosmosExtensionClient implements WalletClient { + cosmos: CosmosSnap; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor() { + this.cosmos = new CosmosSnap(); + } + + async addChain(chainInfo: ChainRecord) { + await suggestChain(chainInfo.chain as unknown as Chain); + } + + async getSimpleAccount(chainId: string) { + const { address } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + }; + } + + async getAccount(chainId: string) { + await installSnap(); + const key = await this.cosmos.getAccount(chainId); + return { + address: key.address, + algo: key.algo as Algo, + pubkey: key.pubkey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + } + + getOfflineSignerAmino(chainId: string) { + return new CosmJSOfflineSigner(chainId) as unknown as OfflineAminoSigner; + } + + getOfflineSignerDirect(chainId: string) { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signDirect: async (signerAddress: string, signDoc: SignDoc): Promise => { + const { accountNumber } = signDoc; + + const signDocNew = { + bodyBytes: signDoc.bodyBytes, + authInfoBytes: signDoc.authInfoBytes, + chainId: signDoc.chainId, + accountNumber: Long.fromString(signDoc.accountNumber.toString()) + }; + const signRes = await signDirect(chainId, signerAddress, signDocNew); + const sign = { + signature: signRes.signature, + signed: { + ...signRes.signed, + accountNumber, + authInfoBytes: new Uint8Array( + Object.values(signRes.signed.authInfoBytes), + ), + bodyBytes: new Uint8Array(Object.values(signRes.signed.bodyBytes)), + }, + }; + return sign + } + }; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ): Promise { + return await this.cosmos.signAmino(chainId, signer, signDoc); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + const signature = await this.cosmos.signArbitrary(chainId, signer, data); + return signature; + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ): Promise { + + const { accountNumber } = signDoc; + + const signDocNew = { + bodyBytes: signDoc.bodyBytes, + authInfoBytes: signDoc.authInfoBytes, + chainId: signDoc.chainId, + accountNumber: Long.fromString(accountNumber.toString()) + }; + const signRes = await signDirect(chainId, signer, signDocNew); + const sign = { + signature: signRes.signature, + signed: { + ...signRes.signed, + accountNumber, + authInfoBytes: new Uint8Array( + Object.values(signRes.signed.authInfoBytes), + ), + bodyBytes: new Uint8Array(Object.values(signRes.signed.bodyBytes)), + }, + }; + + return sign; + } +} \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/src/extension/index.ts b/wallets/cosmos-extension-metamask/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/cosmos-extension-metamask/src/extension/main-wallet.ts b/wallets/cosmos-extension-metamask/src/extension/main-wallet.ts new file mode 100644 index 000000000..2f21dbf33 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/main-wallet.ts @@ -0,0 +1,20 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainCosmosExtensionMetamaskSnap } from './chain-wallet'; +import { CosmosExtensionClient } from './client'; + +export class CosmosMetamaskExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainCosmosExtensionMetamaskSnap); + } + + async initClient() { + this.initingClient(); + try { + this.initClientDone(new CosmosExtensionClient()); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/cosmos-extension-metamask/src/extension/registry.ts b/wallets/cosmos-extension-metamask/src/extension/registry.ts new file mode 100644 index 000000000..406e1bef4 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/registry.ts @@ -0,0 +1,29 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const cosmosSnapExtensionInfo: Wallet = { + name: 'cosmos-extension-metamask', + description: + 'The Official Cosmos Extension for MetaMask allowing full use of MetaMask within the Cosmos.', + prettyName: 'Cosmos MetaMask Extension', + logo: ICON, + mode: 'extension', + extends: 'MetaMask', + mobileDisabled: () => !('ethereum' in window), + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn', + }, + { + link: + 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn', + }, + ], +}; diff --git a/wallets/cosmos-extension-metamask/src/extension/types.ts b/wallets/cosmos-extension-metamask/src/extension/types.ts new file mode 100644 index 000000000..4062e4b60 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/types.ts @@ -0,0 +1,8 @@ +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} \ No newline at end of file diff --git a/wallets/cosmos-extension-metamask/src/extension/utils.ts b/wallets/cosmos-extension-metamask/src/extension/utils.ts new file mode 100644 index 000000000..3409c55a8 --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/extension/utils.ts @@ -0,0 +1,46 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; +import { CosmosSnap } from '@cosmsnap/snapper'; + +interface SnapWindow { + cosmos?: CosmosSnap; +} + +export const getSnapProviderFromExtension: () => Promise< + CosmosSnap | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const cosmos = (window as SnapWindow).cosmos; + + if (cosmos) { + return cosmos; + } + + if (document.readyState === 'complete') { + if (cosmos) { + return cosmos; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (cosmos) { + resolve(cosmos); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/cosmos-extension-metamask/src/index.ts b/wallets/cosmos-extension-metamask/src/index.ts new file mode 100644 index 000000000..9cf9ba5ce --- /dev/null +++ b/wallets/cosmos-extension-metamask/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './cosmos-metamask-extension'; diff --git a/wallets/cosmos-extension-metamask/tsconfig.json b/wallets/cosmos-extension-metamask/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/cosmos-extension-metamask/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/cosmostation-extension/.editorconfig b/wallets/cosmostation-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/cosmostation-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/cosmostation-extension/.eslintignore b/wallets/cosmostation-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/cosmostation-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/cosmostation-extension/.eslintrc.json b/wallets/cosmostation-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/cosmostation-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/cosmostation-extension/.gitignore b/wallets/cosmostation-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/cosmostation-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/cosmostation-extension/.npmignore b/wallets/cosmostation-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/cosmostation-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/cosmostation-extension/.npmrc b/wallets/cosmostation-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/cosmostation-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/cosmostation-extension/.prettierrc.json b/wallets/cosmostation-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/cosmostation-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/cosmostation-extension/CHANGELOG.md b/wallets/cosmostation-extension/CHANGELOG.md new file mode 100644 index 000000000..b1423879f --- /dev/null +++ b/wallets/cosmostation-extension/CHANGELOG.md @@ -0,0 +1,788 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.12.2...@cosmos-kit/cosmostation-extension@2.13.0) (2024-08-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +## [2.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.12.1...@cosmos-kit/cosmostation-extension@2.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.12.0...@cosmos-kit/cosmostation-extension@2.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.11.0...@cosmos-kit/cosmostation-extension@2.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.10.0...@cosmos-kit/cosmostation-extension@2.11.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.9.0...@cosmos-kit/cosmostation-extension@2.10.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.8.3...@cosmos-kit/cosmostation-extension@2.9.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + + + + + +## [2.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.8.2...@cosmos-kit/cosmostation-extension@2.8.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.8.1...@cosmos-kit/cosmostation-extension@2.8.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.8.0...@cosmos-kit/cosmostation-extension@2.8.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.10...@cosmos-kit/cosmostation-extension@2.8.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.9...@cosmos-kit/cosmostation-extension@2.7.10) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.8...@cosmos-kit/cosmostation-extension@2.7.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.7...@cosmos-kit/cosmostation-extension@2.7.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.6...@cosmos-kit/cosmostation-extension@2.7.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.5...@cosmos-kit/cosmostation-extension@2.7.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.4...@cosmos-kit/cosmostation-extension@2.7.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.3...@cosmos-kit/cosmostation-extension@2.7.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.2...@cosmos-kit/cosmostation-extension@2.7.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.1...@cosmos-kit/cosmostation-extension@2.7.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.7.0...@cosmos-kit/cosmostation-extension@2.7.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.6.4...@cosmos-kit/cosmostation-extension@2.7.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.6.3...@cosmos-kit/cosmostation-extension@2.6.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.6.2...@cosmos-kit/cosmostation-extension@2.6.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.6.1...@cosmos-kit/cosmostation-extension@2.6.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.6.0...@cosmos-kit/cosmostation-extension@2.6.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.12...@cosmos-kit/cosmostation-extension@2.6.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.11...@cosmos-kit/cosmostation-extension@2.5.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.10...@cosmos-kit/cosmostation-extension@2.5.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.9...@cosmos-kit/cosmostation-extension@2.5.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.8...@cosmos-kit/cosmostation-extension@2.5.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.7...@cosmos-kit/cosmostation-extension@2.5.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.6...@cosmos-kit/cosmostation-extension@2.5.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.5...@cosmos-kit/cosmostation-extension@2.5.6) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.4...@cosmos-kit/cosmostation-extension@2.5.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.3...@cosmos-kit/cosmostation-extension@2.5.4) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.2...@cosmos-kit/cosmostation-extension@2.5.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.1...@cosmos-kit/cosmostation-extension@2.5.2) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.5.0...@cosmos-kit/cosmostation-extension@2.5.1) (2023-10-17) + +### Bug Fixes + +- race condition when getting wallet when document state changes ([2aa252a](https://github.com/cosmology-tech/cosmos-kit/commit/2aa252a6735e3a1a5f3bdaa3eea9925dea7138c3)) + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.9...@cosmos-kit/cosmostation-extension@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.8...@cosmos-kit/cosmostation-extension@2.4.9) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.7...@cosmos-kit/cosmostation-extension@2.4.8) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.6...@cosmos-kit/cosmostation-extension@2.4.7) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.5...@cosmos-kit/cosmostation-extension@2.4.6) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.4...@cosmos-kit/cosmostation-extension@2.4.5) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.3...@cosmos-kit/cosmostation-extension@2.4.4) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.2...@cosmos-kit/cosmostation-extension@2.4.3) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.1...@cosmos-kit/cosmostation-extension@2.4.2) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.4.0...@cosmos-kit/cosmostation-extension@2.4.1) (2023-09-07) + +### Bug Fixes + +- cosmostation double sign pop up ([78a6ff7](https://github.com/cosmology-tech/cosmos-kit/commit/78a6ff7ffd5c485f526ac0d5b60c6a6604269274)) + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.3.3...@cosmos-kit/cosmostation-extension@2.4.0) (2023-09-02) + +### Features + +- Add Missing Sign Methods to Wallet Clients ([#1](https://github.com/cosmology-tech/cosmos-kit/issues/1)) ([0657840](https://github.com/cosmology-tech/cosmos-kit/commit/06578403a64a210023943031c40a9caf70d49866)) + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.3.2...@cosmos-kit/cosmostation-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.3.1...@cosmos-kit/cosmostation-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.3.0...@cosmos-kit/cosmostation-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.2.1...@cosmos-kit/cosmostation-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.2.0...@cosmos-kit/cosmostation-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.12...@cosmos-kit/cosmostation-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.11...@cosmos-kit/cosmostation-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.10...@cosmos-kit/cosmostation-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.9...@cosmos-kit/cosmostation-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.8...@cosmos-kit/cosmostation-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.7...@cosmos-kit/cosmostation-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.6...@cosmos-kit/cosmostation-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.5...@cosmos-kit/cosmostation-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.4...@cosmos-kit/cosmostation-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.3...@cosmos-kit/cosmostation-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.2...@cosmos-kit/cosmostation-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.1...@cosmos-kit/cosmostation-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.1.0...@cosmos-kit/cosmostation-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.5...@cosmos-kit/cosmostation-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.4...@cosmos-kit/cosmostation-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.3...@cosmos-kit/cosmostation-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.2...@cosmos-kit/cosmostation-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1...@cosmos-kit/cosmostation-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.6...@cosmos-kit/cosmostation-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.5...@cosmos-kit/cosmostation-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.4...@cosmos-kit/cosmostation-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.3...@cosmos-kit/cosmostation-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.2...@cosmos-kit/cosmostation-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.1...@cosmos-kit/cosmostation-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@2.0.1-beta.0...@cosmos-kit/cosmostation-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@1.0.0...@cosmos-kit/cosmostation-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2-beta.6...@cosmos-kit/cosmostation-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2-beta.5...@cosmos-kit/cosmostation-extension@0.17.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2-beta.4...@cosmos-kit/cosmostation-extension@0.17.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2-beta.3...@cosmos-kit/cosmostation-extension@0.17.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2...@cosmos-kit/cosmostation-extension@0.17.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.1...@cosmos-kit/cosmostation-extension@0.17.2) (2023-06-30) + +## [0.17.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2-beta.1...@cosmos-kit/cosmostation-extension@0.17.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.2-beta.0...@cosmos-kit/cosmostation-extension@0.17.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.1...@cosmos-kit/cosmostation-extension@0.17.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.17.0...@cosmos-kit/cosmostation-extension@0.17.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.11...@cosmos-kit/cosmostation-extension@0.17.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- add signArbitrary to Cosmostation extension ([0a79c4f](https://github.com/cosmology-tech/cosmos-kit/commit/0a79c4fe09c868404d34470903b3778f76712619)) +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.16.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.10...@cosmos-kit/cosmostation-extension@0.16.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.9...@cosmos-kit/cosmostation-extension@0.16.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.8...@cosmos-kit/cosmostation-extension@0.16.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.7...@cosmos-kit/cosmostation-extension@0.16.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.6...@cosmos-kit/cosmostation-extension@0.16.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.5...@cosmos-kit/cosmostation-extension@0.16.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.4...@cosmos-kit/cosmostation-extension@0.16.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.3...@cosmos-kit/cosmostation-extension@0.16.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.2...@cosmos-kit/cosmostation-extension@0.16.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.1...@cosmos-kit/cosmostation-extension@0.16.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.16.0...@cosmos-kit/cosmostation-extension@0.16.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.21...@cosmos-kit/cosmostation-extension@0.16.0) (2023-04-28) + +### Features + +- :sparkles: add cosmostation ext suggest token ([390a7c9](https://github.com/cosmology-tech/cosmos-kit/commit/390a7c92a7ea5daa2f1c45894166f6250116495b)) +- :sparkles: improve suggest token types ([dc06b79](https://github.com/cosmology-tech/cosmos-kit/commit/dc06b79d56a5153b2d5f955d919fffc8232fdcd4)) + +## [0.15.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.20...@cosmos-kit/cosmostation-extension@0.15.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.19...@cosmos-kit/cosmostation-extension@0.15.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.18...@cosmos-kit/cosmostation-extension@0.15.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.17...@cosmos-kit/cosmostation-extension@0.15.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.16...@cosmos-kit/cosmostation-extension@0.15.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.15...@cosmos-kit/cosmostation-extension@0.15.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.14...@cosmos-kit/cosmostation-extension@0.15.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.13...@cosmos-kit/cosmostation-extension@0.15.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.12...@cosmos-kit/cosmostation-extension@0.15.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.11...@cosmos-kit/cosmostation-extension@0.15.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.10...@cosmos-kit/cosmostation-extension@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.9...@cosmos-kit/cosmostation-extension@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.8...@cosmos-kit/cosmostation-extension@0.15.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.7...@cosmos-kit/cosmostation-extension@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.6...@cosmos-kit/cosmostation-extension@0.15.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.5...@cosmos-kit/cosmostation-extension@0.15.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.4...@cosmos-kit/cosmostation-extension@0.15.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.3...@cosmos-kit/cosmostation-extension@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.2...@cosmos-kit/cosmostation-extension@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.1...@cosmos-kit/cosmostation-extension@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.15.0...@cosmos-kit/cosmostation-extension@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.33...@cosmos-kit/cosmostation-extension@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.32...@cosmos-kit/cosmostation-extension@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.31...@cosmos-kit/cosmostation-extension@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.30...@cosmos-kit/cosmostation-extension@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.29...@cosmos-kit/cosmostation-extension@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.28...@cosmos-kit/cosmostation-extension@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.27...@cosmos-kit/cosmostation-extension@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.26...@cosmos-kit/cosmostation-extension@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.25...@cosmos-kit/cosmostation-extension@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.24...@cosmos-kit/cosmostation-extension@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.23...@cosmos-kit/cosmostation-extension@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.21...@cosmos-kit/cosmostation-extension@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.20...@cosmos-kit/cosmostation-extension@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.19...@cosmos-kit/cosmostation-extension@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.18...@cosmos-kit/cosmostation-extension@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.17...@cosmos-kit/cosmostation-extension@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.16...@cosmos-kit/cosmostation-extension@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-extension@0.14.15...@cosmos-kit/cosmostation-extension@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## 0.14.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.13...@cosmos-kit/cosmostation@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.12...@cosmos-kit/cosmostation@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.11...@cosmos-kit/cosmostation@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.10...@cosmos-kit/cosmostation@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.9...@cosmos-kit/cosmostation@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.8...@cosmos-kit/cosmostation@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.7...@cosmos-kit/cosmostation@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.6...@cosmos-kit/cosmostation@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.5...@cosmos-kit/cosmostation@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.4...@cosmos-kit/cosmostation@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.3...@cosmos-kit/cosmostation@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.2...@cosmos-kit/cosmostation@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.1...@cosmos-kit/cosmostation@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.0...@cosmos-kit/cosmostation@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.13.0...@cosmos-kit/cosmostation@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.2...@cosmos-kit/cosmostation@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.1...@cosmos-kit/cosmostation@0.12.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.0...@cosmos-kit/cosmostation@0.12.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.4...@cosmos-kit/cosmostation@0.12.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.3...@cosmos-kit/cosmostation@0.11.4) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.2...@cosmos-kit/cosmostation@0.11.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.1...@cosmos-kit/cosmostation@0.11.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.0...@cosmos-kit/cosmostation@0.11.1) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.10.1...@cosmos-kit/cosmostation@0.11.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.10.0...@cosmos-kit/cosmostation@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.9.1...@cosmos-kit/cosmostation@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.9.0...@cosmos-kit/cosmostation@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.8.1...@cosmos-kit/cosmostation@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.8.0...@cosmos-kit/cosmostation@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.7.0...@cosmos-kit/cosmostation@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.6.0...@cosmos-kit/cosmostation@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.5.0...@cosmos-kit/cosmostation@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.2...@cosmos-kit/cosmostation@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.1...@cosmos-kit/cosmostation@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.0...@cosmos-kit/cosmostation@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.3.0...@cosmos-kit/cosmostation@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.2...@cosmos-kit/cosmostation@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.1...@cosmos-kit/cosmostation@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.0...@cosmos-kit/cosmostation@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# 0.2.0 (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# 0.1.0 (2022-10-20) + +**Note:** First release! diff --git a/wallets/cosmostation-extension/LICENSE b/wallets/cosmostation-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/cosmostation-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/cosmostation-extension/README.md b/wallets/cosmostation-extension/README.md new file mode 100644 index 000000000..b9cf27a63 --- /dev/null +++ b/wallets/cosmostation-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/cosmostation-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/cosmostation is the cosmostation integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/cosmostation-extension/index.ts b/wallets/cosmostation-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/cosmostation-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/cosmostation-extension/package.json b/wallets/cosmostation-extension/package.json new file mode 100644 index 000000000..394ad3ba4 --- /dev/null +++ b/wallets/cosmostation-extension/package.json @@ -0,0 +1,71 @@ +{ + "name": "@cosmos-kit/cosmostation-extension", + "version": "2.13.0", + "description": "cosmos-kit wallet connector", + "author": "soaryong@stamper.network", + "contributors": [ + { + "name": "soaryong" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "cosmostation", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/cosmostation": "^1.66.2", + "@cosmos-kit/core": "^2.13.1", + "cosmjs-types": "^0.9.0" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/cosmostation-extension/src/constant.ts b/wallets/cosmostation-extension/src/constant.ts new file mode 100644 index 000000000..c972fcd41 --- /dev/null +++ b/wallets/cosmostation-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/cosmostation-extension/src/cosmostation.ts b/wallets/cosmostation-extension/src/cosmostation.ts new file mode 100644 index 000000000..ff52b10c5 --- /dev/null +++ b/wallets/cosmostation-extension/src/cosmostation.ts @@ -0,0 +1,10 @@ +import { + cosmostationExtensionInfo, + CosmostationExtensionWallet, +} from './extension'; + +const cosmostationExtension = new CosmostationExtensionWallet( + cosmostationExtensionInfo +); + +export const wallets = [cosmostationExtension]; diff --git a/wallets/cosmostation-extension/src/extension/chain-wallet.ts b/wallets/cosmostation-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..9f5524aa7 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/chain-wallet.ts @@ -0,0 +1,8 @@ +/* eslint-disable no-console */ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainCosmostationExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/cosmostation-extension/src/extension/client.ts b/wallets/cosmostation-extension/src/extension/client.ts new file mode 100644 index 000000000..3500396d5 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/client.ts @@ -0,0 +1,242 @@ +import { chainRegistryChainToCosmostation } from '@chain-registry/cosmostation'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { + BroadcastMode, + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + SuggestToken, + WalletClient, +} from '@cosmos-kit/core'; + +import { Cosmostation, RequestAccountResponse } from './types'; +import Long from 'long'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +export class CosmostationClient implements WalletClient { + readonly client: Cosmostation; + private eventMap: Map< + string, + Map + > = new Map(); + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Cosmostation) { + this.client = client; + } + + get cosmos() { + return this.client.cosmos; + } + + get ikeplr() { + return this.client.providers.keplr; + } + + async suggestToken({ chainName, tokens, type }: SuggestToken) { + if (type === 'cw20') { + await this.cosmos.request({ + method: 'cos_addTokensCW20', + params: { + chainName, + tokens, + }, + }); + } + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = (await this.cosmos.request({ + method: 'cos_requestAccount', + params: { chainName: chainId }, + })) as RequestAccountResponse; + return { + username: key.name, + address: key.address, + pubkey: key.publicKey, + algo: key.algo, + }; + } + + async disconnect() { + await this.cosmos.request({ + method: 'cos_disconnect', + }); + } + + on(type: string, listener: EventListenerOrEventListenerObject): void { + const event = this.cosmos.on(type, listener); + const typeEventMap: Map = + this.eventMap.get(type) || new Map(); + typeEventMap.set(listener, event); + this.eventMap.set(type, typeEventMap); + } + + off(type: string, listener: EventListenerOrEventListenerObject): void { + const event = this.eventMap.get(type)?.get(listener); + if (event) { + this.cosmos.off(event); + } + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.ikeplr.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.ikeplr.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signDirect: (signerAddress: string, signDoc: SignDoc) => + this.signDirect(chainId, signerAddress, signDoc), + }; + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToCosmostation( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.restURL as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + const result = (await this.cosmos.request({ + method: 'cos_addChain', + params: suggestChain, + })) as boolean; + + if (!result) { + throw new Error(`Failed to add chain ${chainInfo.name}.`); + } + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + if (this.ikeplr?.signAmino) { + return await this.ikeplr.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + return await this.cosmos.request({ + method: 'cos_signAmino', + params: { + chainName: chainId, + doc: signDoc, + isEditMemo: (signOptions || this.defaultSignOptions).preferNoSetMemo, + isEditFee: (signOptions || this.defaultSignOptions).preferNoSetFee, + }, + }); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ): Promise { + if (this.ikeplr?.signDirect) { + const resp = await this.ikeplr.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString( + signDoc.accountNumber.toString(), + false + ), + }, + signOptions || this.defaultSignOptions + ); + return { + ...resp, + signed: { + ...resp.signed, + accountNumber: BigInt(resp.signed.accountNumber.toString()), + }, + }; + } + + return await this.cosmos.request({ + method: 'cos_signDirect', + params: { + chainName: chainId, + doc: signDoc, + isEditMemo: (signOptions || this.defaultSignOptions).preferNoSetMemo, + isEditFee: (signOptions || this.defaultSignOptions).preferNoSetFee, + }, + }); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + try { + return await this.ikeplr.signArbitrary(chainId, signer, data); + } catch (error) { + // https://github.com/cosmostation/cosmostation-chrome-extension-client/blob/main/src/cosmos.ts#LL70C17-L70C28 + const message = + typeof data === 'string' ? data : new TextDecoder('utf-8').decode(data); + return await this.cosmos.request({ + method: 'cos_signMessage', + params: { + chainName: chainId, + signer, + message, + }, + }); + } + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.ikeplr.sendTx(chainId, tx, mode); + } +} \ No newline at end of file diff --git a/wallets/cosmostation-extension/src/extension/index.ts b/wallets/cosmostation-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/cosmostation-extension/src/extension/main-wallet.ts b/wallets/cosmostation-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..104d104c1 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/main-wallet.ts @@ -0,0 +1,24 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainCosmostationExtension } from './chain-wallet'; +import { CosmostationClient } from './client'; +import { getCosmostationFromExtension } from './utils'; + +export class CosmostationExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainCosmostationExtension); + } + + async initClient() { + this.initingClient(); + try { + const cosmostation = await getCosmostationFromExtension(); + this.initClientDone( + cosmostation ? new CosmostationClient(cosmostation) : undefined + ); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/cosmostation-extension/src/extension/registry.ts b/wallets/cosmostation-extension/src/extension/registry.ts new file mode 100644 index 000000000..8030f6f13 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/registry.ts @@ -0,0 +1,30 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const cosmostationExtensionInfo: Wallet = { + name: 'cosmostation-extension', + prettyName: 'Cosmostation', + logo: ICON, + mode: 'extension', + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/cosmostation/fpkhgmpbidmiogeglndfbkegfdlnajnf?hl=en', + }, + { + link: 'https://cosmostation.io/wallet/#extension', + }, + ], + mobileDisabled: () => !('cosmostation' in window || /Cosmostation/i.test(navigator.userAgent)), + rejectMessage: { + source: + 'The requested account and/or method has not been authorized by the user.', + // target: + // 'The requested account and/or method has not been authorized by the user. \n Open Extension/App to authorize this site before retrying.', + }, + rejectCode: 4001, + connectEventNamesOnWindow: ['cosmostation_keystorechange'], +}; diff --git a/wallets/cosmostation-extension/src/extension/types.ts b/wallets/cosmostation-extension/src/extension/types.ts new file mode 100644 index 000000000..4e1ed6449 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/types.ts @@ -0,0 +1,35 @@ +import { Algo } from '@cosmjs/proto-signing'; +import { Keplr } from '@keplr-wallet/types'; + +/* eslint-disable @typescript-eslint/no-explicit-any */ +export interface CosmostationSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Request { + method: string; + params?: object; +} + +export interface Cosmos { + request(request: Request): Promise; + on(type: string, listener: EventListenerOrEventListenerObject): Event; + off(event: Event): void; +} + +export interface Cosmostation { + cosmos: Cosmos; + providers: { + keplr: Keplr; + }; +} + +export type RequestAccountResponse = { + name: string; + address: string; + publicKey: Uint8Array; + isLedger: boolean; + algo: Algo; +}; diff --git a/wallets/cosmostation-extension/src/extension/utils.ts b/wallets/cosmostation-extension/src/extension/utils.ts new file mode 100644 index 000000000..0af01fe38 --- /dev/null +++ b/wallets/cosmostation-extension/src/extension/utils.ts @@ -0,0 +1,48 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Cosmostation } from './types'; + +interface CosmostationWindow { + cosmostation?: Cosmostation; +} + +export const getCosmostationFromExtension: () => Promise< + Cosmostation | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const cosmostation = (window as CosmostationWindow).cosmostation; + + if (cosmostation) { + return cosmostation; + } + + if (document.readyState === 'complete') { + if (cosmostation) { + return cosmostation; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + const cosmostation = (window as CosmostationWindow).cosmostation; + if (cosmostation) { + resolve(cosmostation); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/cosmostation-extension/src/index.ts b/wallets/cosmostation-extension/src/index.ts new file mode 100644 index 000000000..00ad58c52 --- /dev/null +++ b/wallets/cosmostation-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './cosmostation'; +export * from './extension'; diff --git a/wallets/cosmostation-extension/tsconfig.json b/wallets/cosmostation-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/cosmostation-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/cosmostation-mobile/.editorconfig b/wallets/cosmostation-mobile/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/cosmostation-mobile/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/cosmostation-mobile/.eslintignore b/wallets/cosmostation-mobile/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/cosmostation-mobile/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/cosmostation-mobile/.eslintrc.json b/wallets/cosmostation-mobile/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/cosmostation-mobile/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/cosmostation-mobile/.gitignore b/wallets/cosmostation-mobile/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/cosmostation-mobile/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/cosmostation-mobile/.npmignore b/wallets/cosmostation-mobile/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/cosmostation-mobile/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/cosmostation-mobile/.npmrc b/wallets/cosmostation-mobile/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/cosmostation-mobile/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/cosmostation-mobile/.prettierrc.json b/wallets/cosmostation-mobile/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/cosmostation-mobile/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/cosmostation-mobile/CHANGELOG.md b/wallets/cosmostation-mobile/CHANGELOG.md new file mode 100644 index 000000000..d85f34030 --- /dev/null +++ b/wallets/cosmostation-mobile/CHANGELOG.md @@ -0,0 +1,782 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.11.1...@cosmos-kit/cosmostation-mobile@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.11.0...@cosmos-kit/cosmostation-mobile@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.10.0...@cosmos-kit/cosmostation-mobile@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.9.0...@cosmos-kit/cosmostation-mobile@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.8.0...@cosmos-kit/cosmostation-mobile@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.7.3...@cosmos-kit/cosmostation-mobile@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.7.2...@cosmos-kit/cosmostation-mobile@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.7.1...@cosmos-kit/cosmostation-mobile@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.7.0...@cosmos-kit/cosmostation-mobile@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.9...@cosmos-kit/cosmostation-mobile@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.8...@cosmos-kit/cosmostation-mobile@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.7...@cosmos-kit/cosmostation-mobile@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.6...@cosmos-kit/cosmostation-mobile@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.5...@cosmos-kit/cosmostation-mobile@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.4...@cosmos-kit/cosmostation-mobile@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.3...@cosmos-kit/cosmostation-mobile@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.2...@cosmos-kit/cosmostation-mobile@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.1...@cosmos-kit/cosmostation-mobile@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.6.0...@cosmos-kit/cosmostation-mobile@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.5.4...@cosmos-kit/cosmostation-mobile@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.5.3...@cosmos-kit/cosmostation-mobile@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.5.2...@cosmos-kit/cosmostation-mobile@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.5.1...@cosmos-kit/cosmostation-mobile@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.5.0...@cosmos-kit/cosmostation-mobile@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.13...@cosmos-kit/cosmostation-mobile@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.12...@cosmos-kit/cosmostation-mobile@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.11...@cosmos-kit/cosmostation-mobile@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.10...@cosmos-kit/cosmostation-mobile@2.4.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.9...@cosmos-kit/cosmostation-mobile@2.4.10) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.8...@cosmos-kit/cosmostation-mobile@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.7...@cosmos-kit/cosmostation-mobile@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.6...@cosmos-kit/cosmostation-mobile@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.5...@cosmos-kit/cosmostation-mobile@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.4...@cosmos-kit/cosmostation-mobile@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.3...@cosmos-kit/cosmostation-mobile@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.2...@cosmos-kit/cosmostation-mobile@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.1...@cosmos-kit/cosmostation-mobile@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.4.0...@cosmos-kit/cosmostation-mobile@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.12...@cosmos-kit/cosmostation-mobile@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.11...@cosmos-kit/cosmostation-mobile@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.10...@cosmos-kit/cosmostation-mobile@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.9...@cosmos-kit/cosmostation-mobile@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.8...@cosmos-kit/cosmostation-mobile@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.7...@cosmos-kit/cosmostation-mobile@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.6...@cosmos-kit/cosmostation-mobile@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.5...@cosmos-kit/cosmostation-mobile@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.4...@cosmos-kit/cosmostation-mobile@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.3...@cosmos-kit/cosmostation-mobile@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.2...@cosmos-kit/cosmostation-mobile@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.1...@cosmos-kit/cosmostation-mobile@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.3.0...@cosmos-kit/cosmostation-mobile@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.2.1...@cosmos-kit/cosmostation-mobile@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.2.0...@cosmos-kit/cosmostation-mobile@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.12...@cosmos-kit/cosmostation-mobile@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.11...@cosmos-kit/cosmostation-mobile@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.10...@cosmos-kit/cosmostation-mobile@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.9...@cosmos-kit/cosmostation-mobile@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.8...@cosmos-kit/cosmostation-mobile@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.7...@cosmos-kit/cosmostation-mobile@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.6...@cosmos-kit/cosmostation-mobile@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.5...@cosmos-kit/cosmostation-mobile@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.4...@cosmos-kit/cosmostation-mobile@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.3...@cosmos-kit/cosmostation-mobile@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.2...@cosmos-kit/cosmostation-mobile@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.1...@cosmos-kit/cosmostation-mobile@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.1.0...@cosmos-kit/cosmostation-mobile@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.5...@cosmos-kit/cosmostation-mobile@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.4...@cosmos-kit/cosmostation-mobile@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.3...@cosmos-kit/cosmostation-mobile@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.2...@cosmos-kit/cosmostation-mobile@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1...@cosmos-kit/cosmostation-mobile@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.7...@cosmos-kit/cosmostation-mobile@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.6...@cosmos-kit/cosmostation-mobile@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.5...@cosmos-kit/cosmostation-mobile@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.4...@cosmos-kit/cosmostation-mobile@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.3...@cosmos-kit/cosmostation-mobile@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.2...@cosmos-kit/cosmostation-mobile@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.1...@cosmos-kit/cosmostation-mobile@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@2.0.1-beta.0...@cosmos-kit/cosmostation-mobile@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@1.0.0...@cosmos-kit/cosmostation-mobile@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2-beta.6...@cosmos-kit/cosmostation-mobile@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2-beta.5...@cosmos-kit/cosmostation-mobile@0.16.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2-beta.4...@cosmos-kit/cosmostation-mobile@0.16.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2-beta.3...@cosmos-kit/cosmostation-mobile@0.16.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2...@cosmos-kit/cosmostation-mobile@0.16.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.1...@cosmos-kit/cosmostation-mobile@0.16.2) (2023-06-30) + +## [0.16.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2-beta.1...@cosmos-kit/cosmostation-mobile@0.16.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.2-beta.0...@cosmos-kit/cosmostation-mobile@0.16.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.1...@cosmos-kit/cosmostation-mobile@0.16.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.16.0...@cosmos-kit/cosmostation-mobile@0.16.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.36...@cosmos-kit/cosmostation-mobile@0.16.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.15.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.35...@cosmos-kit/cosmostation-mobile@0.15.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.34...@cosmos-kit/cosmostation-mobile@0.15.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.33...@cosmos-kit/cosmostation-mobile@0.15.34) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.32...@cosmos-kit/cosmostation-mobile@0.15.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.31...@cosmos-kit/cosmostation-mobile@0.15.32) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.30...@cosmos-kit/cosmostation-mobile@0.15.31) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.29...@cosmos-kit/cosmostation-mobile@0.15.30) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.28...@cosmos-kit/cosmostation-mobile@0.15.29) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.27...@cosmos-kit/cosmostation-mobile@0.15.28) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.26...@cosmos-kit/cosmostation-mobile@0.15.27) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.25...@cosmos-kit/cosmostation-mobile@0.15.26) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.24...@cosmos-kit/cosmostation-mobile@0.15.25) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.23...@cosmos-kit/cosmostation-mobile@0.15.24) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.22...@cosmos-kit/cosmostation-mobile@0.15.23) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.21...@cosmos-kit/cosmostation-mobile@0.15.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.20...@cosmos-kit/cosmostation-mobile@0.15.21) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.19...@cosmos-kit/cosmostation-mobile@0.15.20) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.18...@cosmos-kit/cosmostation-mobile@0.15.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.17...@cosmos-kit/cosmostation-mobile@0.15.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.16...@cosmos-kit/cosmostation-mobile@0.15.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.15...@cosmos-kit/cosmostation-mobile@0.15.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.14...@cosmos-kit/cosmostation-mobile@0.15.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.13...@cosmos-kit/cosmostation-mobile@0.15.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.12...@cosmos-kit/cosmostation-mobile@0.15.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.11...@cosmos-kit/cosmostation-mobile@0.15.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.10...@cosmos-kit/cosmostation-mobile@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.9...@cosmos-kit/cosmostation-mobile@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.8...@cosmos-kit/cosmostation-mobile@0.15.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.7...@cosmos-kit/cosmostation-mobile@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.6...@cosmos-kit/cosmostation-mobile@0.15.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.5...@cosmos-kit/cosmostation-mobile@0.15.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.4...@cosmos-kit/cosmostation-mobile@0.15.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.3...@cosmos-kit/cosmostation-mobile@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.2...@cosmos-kit/cosmostation-mobile@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.1...@cosmos-kit/cosmostation-mobile@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.15.0...@cosmos-kit/cosmostation-mobile@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.33...@cosmos-kit/cosmostation-mobile@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.32...@cosmos-kit/cosmostation-mobile@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.31...@cosmos-kit/cosmostation-mobile@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.30...@cosmos-kit/cosmostation-mobile@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.29...@cosmos-kit/cosmostation-mobile@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.28...@cosmos-kit/cosmostation-mobile@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.27...@cosmos-kit/cosmostation-mobile@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.26...@cosmos-kit/cosmostation-mobile@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.25...@cosmos-kit/cosmostation-mobile@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.24...@cosmos-kit/cosmostation-mobile@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.23...@cosmos-kit/cosmostation-mobile@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.21...@cosmos-kit/cosmostation-mobile@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.20...@cosmos-kit/cosmostation-mobile@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.19...@cosmos-kit/cosmostation-mobile@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.18...@cosmos-kit/cosmostation-mobile@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.17...@cosmos-kit/cosmostation-mobile@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.16...@cosmos-kit/cosmostation-mobile@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation-mobile@0.14.15...@cosmos-kit/cosmostation-mobile@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## 0.14.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation-mobile + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.13...@cosmos-kit/cosmostation@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.12...@cosmos-kit/cosmostation@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.11...@cosmos-kit/cosmostation@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.10...@cosmos-kit/cosmostation@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.9...@cosmos-kit/cosmostation@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.8...@cosmos-kit/cosmostation@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.7...@cosmos-kit/cosmostation@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.6...@cosmos-kit/cosmostation@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.5...@cosmos-kit/cosmostation@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.4...@cosmos-kit/cosmostation@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.3...@cosmos-kit/cosmostation@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.2...@cosmos-kit/cosmostation@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.1...@cosmos-kit/cosmostation@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.0...@cosmos-kit/cosmostation@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.13.0...@cosmos-kit/cosmostation@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.2...@cosmos-kit/cosmostation@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.1...@cosmos-kit/cosmostation@0.12.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.0...@cosmos-kit/cosmostation@0.12.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.4...@cosmos-kit/cosmostation@0.12.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.3...@cosmos-kit/cosmostation@0.11.4) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.2...@cosmos-kit/cosmostation@0.11.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.1...@cosmos-kit/cosmostation@0.11.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.0...@cosmos-kit/cosmostation@0.11.1) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.10.1...@cosmos-kit/cosmostation@0.11.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.10.0...@cosmos-kit/cosmostation@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.9.1...@cosmos-kit/cosmostation@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.9.0...@cosmos-kit/cosmostation@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.8.1...@cosmos-kit/cosmostation@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.8.0...@cosmos-kit/cosmostation@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.7.0...@cosmos-kit/cosmostation@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.6.0...@cosmos-kit/cosmostation@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.5.0...@cosmos-kit/cosmostation@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.2...@cosmos-kit/cosmostation@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.1...@cosmos-kit/cosmostation@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.0...@cosmos-kit/cosmostation@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.3.0...@cosmos-kit/cosmostation@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.2...@cosmos-kit/cosmostation@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.1...@cosmos-kit/cosmostation@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.0...@cosmos-kit/cosmostation@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# 0.2.0 (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# 0.1.0 (2022-10-20) + +**Note:** First release! diff --git a/wallets/cosmostation-mobile/LICENSE b/wallets/cosmostation-mobile/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/cosmostation-mobile/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/cosmostation-mobile/README.md b/wallets/cosmostation-mobile/README.md new file mode 100644 index 000000000..6834d7034 --- /dev/null +++ b/wallets/cosmostation-mobile/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/cosmostation-mobile + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/cosmostation is the cosmostation integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/cosmostation-mobile/index.ts b/wallets/cosmostation-mobile/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/cosmostation-mobile/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/cosmostation-mobile/package.json b/wallets/cosmostation-mobile/package.json new file mode 100644 index 000000000..a1de0bad7 --- /dev/null +++ b/wallets/cosmostation-mobile/package.json @@ -0,0 +1,67 @@ +{ + "name": "@cosmos-kit/cosmostation-mobile", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "soaryong@stamper.network", + "contributors": [ + { + "name": "soaryong" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "cosmostation", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/cosmostation": "1.66.2", + "@cosmos-kit/core": "^2.13.1", + "@cosmos-kit/walletconnect": "^2.10.1" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/cosmostation-mobile/src/constant.ts b/wallets/cosmostation-mobile/src/constant.ts new file mode 100644 index 000000000..c972fcd41 --- /dev/null +++ b/wallets/cosmostation-mobile/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/cosmostation-mobile/src/cosmostation.ts b/wallets/cosmostation-mobile/src/cosmostation.ts new file mode 100644 index 000000000..c67fe8c68 --- /dev/null +++ b/wallets/cosmostation-mobile/src/cosmostation.ts @@ -0,0 +1,8 @@ +import { + cosmostationMobileInfo, + CosmostationMobileWallet, +} from './wallet-connect'; + +const cosmostationMobile = new CosmostationMobileWallet(cosmostationMobileInfo); + +export const wallets = [cosmostationMobile]; diff --git a/wallets/cosmostation-mobile/src/index.ts b/wallets/cosmostation-mobile/src/index.ts new file mode 100644 index 000000000..191170648 --- /dev/null +++ b/wallets/cosmostation-mobile/src/index.ts @@ -0,0 +1,2 @@ +export * from './cosmostation'; +export * from './wallet-connect'; diff --git a/wallets/cosmostation-mobile/src/wallet-connect/chain-wallet.ts b/wallets/cosmostation-mobile/src/wallet-connect/chain-wallet.ts new file mode 100644 index 000000000..9f6086468 --- /dev/null +++ b/wallets/cosmostation-mobile/src/wallet-connect/chain-wallet.ts @@ -0,0 +1,9 @@ +import { ChainRecord, Wallet } from '@cosmos-kit/core'; +import { ChainWC } from '@cosmos-kit/walletconnect'; +import { CosmostationClient } from './client'; + +export class ChainCosmostationMobile extends ChainWC { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo, CosmostationClient); + } +} diff --git a/wallets/cosmostation-mobile/src/wallet-connect/client.ts b/wallets/cosmostation-mobile/src/wallet-connect/client.ts new file mode 100644 index 000000000..a04ad44d7 --- /dev/null +++ b/wallets/cosmostation-mobile/src/wallet-connect/client.ts @@ -0,0 +1,8 @@ +import { Wallet } from '@cosmos-kit/core'; +import { WCClient } from '@cosmos-kit/walletconnect'; + +export class CosmostationClient extends WCClient { + constructor(walletInfo: Wallet) { + super(walletInfo); + } +} diff --git a/wallets/cosmostation-mobile/src/wallet-connect/index.ts b/wallets/cosmostation-mobile/src/wallet-connect/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/cosmostation-mobile/src/wallet-connect/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/cosmostation-mobile/src/wallet-connect/main-wallet.ts b/wallets/cosmostation-mobile/src/wallet-connect/main-wallet.ts new file mode 100644 index 000000000..17929591a --- /dev/null +++ b/wallets/cosmostation-mobile/src/wallet-connect/main-wallet.ts @@ -0,0 +1,15 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { WCWallet } from '@cosmos-kit/walletconnect'; + +import { ChainCosmostationMobile } from './chain-wallet'; +import { CosmostationClient } from './client'; + +export class CosmostationMobileWallet extends WCWallet { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainCosmostationMobile, CosmostationClient); + this.preferredEndpoints = preferredEndpoints; + } +} diff --git a/wallets/cosmostation-mobile/src/wallet-connect/registry.ts b/wallets/cosmostation-mobile/src/wallet-connect/registry.ts new file mode 100644 index 000000000..2cb94e320 --- /dev/null +++ b/wallets/cosmostation-mobile/src/wallet-connect/registry.ts @@ -0,0 +1,38 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const cosmostationMobileInfo: Wallet = { + name: 'cosmostation-mobile', + prettyName: 'Cosmostation Mobile', + logo: ICON, + mode: 'wallet-connect', + downloads: [ + { + device: 'mobile', + os: 'android', + link: + 'https://play.google.com/store/apps/details?id=wannabit.io.cosmostaion', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://apps.apple.com/kr/app/cosmostation/id1459830339', + }, + { + link: 'https://cosmostation.io/wallet/#extension', + }, + ], + mobileDisabled: () => 'cosmostation' in window || /Cosmostation/i.test(navigator.userAgent), + walletconnect: { + name: 'Cosmostation', + encoding: 'base64', + projectId: + 'feb6ff1fb426db18110f5a80c7adbde846d0a7e96b2bc53af4b73aaf32552bea', + formatNativeUrl: (appUrl: string, wcUri: string, _name: string): string => { + const plainAppUrl = appUrl.replaceAll('/', '').replaceAll(':', ''); + // const encodedWcUrl = encodeURIComponent(wcUri); + return `${plainAppUrl}://wc?${wcUri}`; + }, + }, +}; diff --git a/wallets/cosmostation-mobile/tsconfig.json b/wallets/cosmostation-mobile/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/cosmostation-mobile/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/cosmostation/.editorconfig b/wallets/cosmostation/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/cosmostation/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/cosmostation/.eslintignore b/wallets/cosmostation/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/cosmostation/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/cosmostation/.eslintrc.json b/wallets/cosmostation/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/cosmostation/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/cosmostation/.gitignore b/wallets/cosmostation/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/cosmostation/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/cosmostation/.npmignore b/wallets/cosmostation/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/cosmostation/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/cosmostation/.npmrc b/wallets/cosmostation/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/cosmostation/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/cosmostation/.prettierrc.json b/wallets/cosmostation/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/cosmostation/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/cosmostation/CHANGELOG.md b/wallets/cosmostation/CHANGELOG.md new file mode 100644 index 000000000..e6b970d5c --- /dev/null +++ b/wallets/cosmostation/CHANGELOG.md @@ -0,0 +1,796 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.11.2...@cosmos-kit/cosmostation@2.12.0) (2024-08-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.11.1...@cosmos-kit/cosmostation@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.11.0...@cosmos-kit/cosmostation@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.10.0...@cosmos-kit/cosmostation@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.9.0...@cosmos-kit/cosmostation@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.8.0...@cosmos-kit/cosmostation@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.7.3...@cosmos-kit/cosmostation@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.7.2...@cosmos-kit/cosmostation@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.7.1...@cosmos-kit/cosmostation@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.7.0...@cosmos-kit/cosmostation@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.10...@cosmos-kit/cosmostation@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.9...@cosmos-kit/cosmostation@2.6.10) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.8...@cosmos-kit/cosmostation@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.7...@cosmos-kit/cosmostation@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.6...@cosmos-kit/cosmostation@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.5...@cosmos-kit/cosmostation@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.4...@cosmos-kit/cosmostation@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.3...@cosmos-kit/cosmostation@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.2...@cosmos-kit/cosmostation@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.1...@cosmos-kit/cosmostation@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.6.0...@cosmos-kit/cosmostation@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.5.4...@cosmos-kit/cosmostation@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.5.3...@cosmos-kit/cosmostation@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.5.2...@cosmos-kit/cosmostation@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.5.1...@cosmos-kit/cosmostation@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.5.0...@cosmos-kit/cosmostation@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.14...@cosmos-kit/cosmostation@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.13...@cosmos-kit/cosmostation@2.4.14) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.12...@cosmos-kit/cosmostation@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.11...@cosmos-kit/cosmostation@2.4.12) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.10...@cosmos-kit/cosmostation@2.4.11) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.9...@cosmos-kit/cosmostation@2.4.10) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.8...@cosmos-kit/cosmostation@2.4.9) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.7...@cosmos-kit/cosmostation@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.6...@cosmos-kit/cosmostation@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.5...@cosmos-kit/cosmostation@2.4.6) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.4...@cosmos-kit/cosmostation@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.3...@cosmos-kit/cosmostation@2.4.4) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.2...@cosmos-kit/cosmostation@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.1...@cosmos-kit/cosmostation@2.4.2) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.4.0...@cosmos-kit/cosmostation@2.4.1) (2023-10-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.13...@cosmos-kit/cosmostation@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.12...@cosmos-kit/cosmostation@2.3.13) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.11...@cosmos-kit/cosmostation@2.3.12) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.10...@cosmos-kit/cosmostation@2.3.11) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.9...@cosmos-kit/cosmostation@2.3.10) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.8...@cosmos-kit/cosmostation@2.3.9) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.7...@cosmos-kit/cosmostation@2.3.8) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.6...@cosmos-kit/cosmostation@2.3.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.5...@cosmos-kit/cosmostation@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.4...@cosmos-kit/cosmostation@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.3...@cosmos-kit/cosmostation@2.3.4) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.2...@cosmos-kit/cosmostation@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.1...@cosmos-kit/cosmostation@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.3.0...@cosmos-kit/cosmostation@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.2.1...@cosmos-kit/cosmostation@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.2.0...@cosmos-kit/cosmostation@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.12...@cosmos-kit/cosmostation@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.11...@cosmos-kit/cosmostation@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.10...@cosmos-kit/cosmostation@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.9...@cosmos-kit/cosmostation@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.8...@cosmos-kit/cosmostation@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.7...@cosmos-kit/cosmostation@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.6...@cosmos-kit/cosmostation@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.5...@cosmos-kit/cosmostation@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.4...@cosmos-kit/cosmostation@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.3...@cosmos-kit/cosmostation@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.2...@cosmos-kit/cosmostation@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.1...@cosmos-kit/cosmostation@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.1.0...@cosmos-kit/cosmostation@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.5...@cosmos-kit/cosmostation@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.4...@cosmos-kit/cosmostation@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.3...@cosmos-kit/cosmostation@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.2...@cosmos-kit/cosmostation@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1...@cosmos-kit/cosmostation@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.7...@cosmos-kit/cosmostation@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.6...@cosmos-kit/cosmostation@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.5...@cosmos-kit/cosmostation@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.4...@cosmos-kit/cosmostation@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.3...@cosmos-kit/cosmostation@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.2...@cosmos-kit/cosmostation@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.1...@cosmos-kit/cosmostation@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@2.0.1-beta.0...@cosmos-kit/cosmostation@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@1.0.0...@cosmos-kit/cosmostation@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39-beta.6...@cosmos-kit/cosmostation@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39-beta.5...@cosmos-kit/cosmostation@0.15.39-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39-beta.4...@cosmos-kit/cosmostation@0.15.39-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39-beta.3...@cosmos-kit/cosmostation@0.15.39-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39...@cosmos-kit/cosmostation@0.15.39-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.38...@cosmos-kit/cosmostation@0.15.39) (2023-06-30) + +## [0.15.39-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39-beta.1...@cosmos-kit/cosmostation@0.15.39-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.39-beta.0...@cosmos-kit/cosmostation@0.15.39-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.39-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.38...@cosmos-kit/cosmostation@0.15.39-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.37...@cosmos-kit/cosmostation@0.15.38) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.36...@cosmos-kit/cosmostation@0.15.37) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.35...@cosmos-kit/cosmostation@0.15.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.34...@cosmos-kit/cosmostation@0.15.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.33...@cosmos-kit/cosmostation@0.15.34) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.32...@cosmos-kit/cosmostation@0.15.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.31...@cosmos-kit/cosmostation@0.15.32) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.30...@cosmos-kit/cosmostation@0.15.31) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.29...@cosmos-kit/cosmostation@0.15.30) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.28...@cosmos-kit/cosmostation@0.15.29) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.27...@cosmos-kit/cosmostation@0.15.28) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.26...@cosmos-kit/cosmostation@0.15.27) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.25...@cosmos-kit/cosmostation@0.15.26) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.24...@cosmos-kit/cosmostation@0.15.25) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.23...@cosmos-kit/cosmostation@0.15.24) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.22...@cosmos-kit/cosmostation@0.15.23) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.21...@cosmos-kit/cosmostation@0.15.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.20...@cosmos-kit/cosmostation@0.15.21) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.19...@cosmos-kit/cosmostation@0.15.20) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.18...@cosmos-kit/cosmostation@0.15.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.17...@cosmos-kit/cosmostation@0.15.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.16...@cosmos-kit/cosmostation@0.15.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.15...@cosmos-kit/cosmostation@0.15.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.14...@cosmos-kit/cosmostation@0.15.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.13...@cosmos-kit/cosmostation@0.15.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.12...@cosmos-kit/cosmostation@0.15.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.11...@cosmos-kit/cosmostation@0.15.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.10...@cosmos-kit/cosmostation@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.9...@cosmos-kit/cosmostation@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.8...@cosmos-kit/cosmostation@0.15.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.7...@cosmos-kit/cosmostation@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.6...@cosmos-kit/cosmostation@0.15.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.5...@cosmos-kit/cosmostation@0.15.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.4...@cosmos-kit/cosmostation@0.15.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.3...@cosmos-kit/cosmostation@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.2...@cosmos-kit/cosmostation@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.1...@cosmos-kit/cosmostation@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.15.0...@cosmos-kit/cosmostation@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.33...@cosmos-kit/cosmostation@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.32...@cosmos-kit/cosmostation@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.31...@cosmos-kit/cosmostation@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.30...@cosmos-kit/cosmostation@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.29...@cosmos-kit/cosmostation@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.28...@cosmos-kit/cosmostation@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.27...@cosmos-kit/cosmostation@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.26...@cosmos-kit/cosmostation@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.25...@cosmos-kit/cosmostation@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.24...@cosmos-kit/cosmostation@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.23...@cosmos-kit/cosmostation@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.21...@cosmos-kit/cosmostation@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.20...@cosmos-kit/cosmostation@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.19...@cosmos-kit/cosmostation@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.18...@cosmos-kit/cosmostation@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.17...@cosmos-kit/cosmostation@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.16...@cosmos-kit/cosmostation@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.15...@cosmos-kit/cosmostation@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.14...@cosmos-kit/cosmostation@0.14.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.13...@cosmos-kit/cosmostation@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.12...@cosmos-kit/cosmostation@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.11...@cosmos-kit/cosmostation@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.10...@cosmos-kit/cosmostation@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.9...@cosmos-kit/cosmostation@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.8...@cosmos-kit/cosmostation@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.7...@cosmos-kit/cosmostation@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.6...@cosmos-kit/cosmostation@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.5...@cosmos-kit/cosmostation@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.4...@cosmos-kit/cosmostation@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.3...@cosmos-kit/cosmostation@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.2...@cosmos-kit/cosmostation@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.1...@cosmos-kit/cosmostation@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.14.0...@cosmos-kit/cosmostation@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.13.0...@cosmos-kit/cosmostation@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.2...@cosmos-kit/cosmostation@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.1...@cosmos-kit/cosmostation@0.12.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.12.0...@cosmos-kit/cosmostation@0.12.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.4...@cosmos-kit/cosmostation@0.12.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.3...@cosmos-kit/cosmostation@0.11.4) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.2...@cosmos-kit/cosmostation@0.11.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.1...@cosmos-kit/cosmostation@0.11.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.11.0...@cosmos-kit/cosmostation@0.11.1) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.10.1...@cosmos-kit/cosmostation@0.11.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.10.0...@cosmos-kit/cosmostation@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.9.1...@cosmos-kit/cosmostation@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.9.0...@cosmos-kit/cosmostation@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.8.1...@cosmos-kit/cosmostation@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.8.0...@cosmos-kit/cosmostation@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.7.0...@cosmos-kit/cosmostation@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.6.0...@cosmos-kit/cosmostation@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.5.0...@cosmos-kit/cosmostation@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.2...@cosmos-kit/cosmostation@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.1...@cosmos-kit/cosmostation@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.4.0...@cosmos-kit/cosmostation@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.3.0...@cosmos-kit/cosmostation@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.2...@cosmos-kit/cosmostation@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.1...@cosmos-kit/cosmostation@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/cosmostation@0.2.0...@cosmos-kit/cosmostation@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# 0.2.0 (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/cosmostation + +# 0.1.0 (2022-10-20) + +**Note:** First release! diff --git a/wallets/cosmostation/LICENSE b/wallets/cosmostation/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/cosmostation/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/cosmostation/README.md b/wallets/cosmostation/README.md new file mode 100644 index 000000000..139531f20 --- /dev/null +++ b/wallets/cosmostation/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/cosmostation + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/cosmostation is the cosmostation integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/cosmostation/index.ts b/wallets/cosmostation/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/cosmostation/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/cosmostation/package.json b/wallets/cosmostation/package.json new file mode 100644 index 000000000..bcbb7e496 --- /dev/null +++ b/wallets/cosmostation/package.json @@ -0,0 +1,65 @@ +{ + "name": "@cosmos-kit/cosmostation", + "version": "2.12.0", + "description": "cosmos-kit wallet connector", + "author": "soaryong@stamper.network", + "contributors": [ + { + "name": "soaryong" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "cosmostation", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/cosmostation-extension": "^2.13.0", + "@cosmos-kit/cosmostation-mobile": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/cosmostation/src/index.ts b/wallets/cosmostation/src/index.ts new file mode 100644 index 000000000..ee115ec2c --- /dev/null +++ b/wallets/cosmostation/src/index.ts @@ -0,0 +1,6 @@ +import { + wallets as ext, +} from '@cosmos-kit/cosmostation-extension'; +import { wallets as mobile } from '@cosmos-kit/cosmostation-mobile'; + +export const wallets = [...ext, ...mobile]; diff --git a/wallets/cosmostation/tsconfig.json b/wallets/cosmostation/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/cosmostation/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/exodus-extension/.editorconfig b/wallets/exodus-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/exodus-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/exodus-extension/.eslintignore b/wallets/exodus-extension/.eslintignore new file mode 100644 index 000000000..14cc528b1 --- /dev/null +++ b/wallets/exodus-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts diff --git a/wallets/exodus-extension/.eslintrc.json b/wallets/exodus-extension/.eslintrc.json new file mode 100644 index 000000000..0ecaa20af --- /dev/null +++ b/wallets/exodus-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} diff --git a/wallets/exodus-extension/.gitignore b/wallets/exodus-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/exodus-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/exodus-extension/.npmignore b/wallets/exodus-extension/.npmignore new file mode 100644 index 000000000..19e526a9f --- /dev/null +++ b/wallets/exodus-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test diff --git a/wallets/exodus-extension/.npmrc b/wallets/exodus-extension/.npmrc new file mode 100644 index 000000000..5fca0d518 --- /dev/null +++ b/wallets/exodus-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/wallets/exodus-extension/.prettierrc.json b/wallets/exodus-extension/.prettierrc.json new file mode 100644 index 000000000..e49d6527b --- /dev/null +++ b/wallets/exodus-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} diff --git a/wallets/exodus-extension/CHANGELOG.md b/wallets/exodus-extension/CHANGELOG.md new file mode 100644 index 000000000..f0bae6b2d --- /dev/null +++ b/wallets/exodus-extension/CHANGELOG.md @@ -0,0 +1,386 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.10.1...@cosmos-kit/exodus-extension@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.10.0...@cosmos-kit/exodus-extension@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.9.0...@cosmos-kit/exodus-extension@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.8.0...@cosmos-kit/exodus-extension@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.7.0...@cosmos-kit/exodus-extension@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.6.3...@cosmos-kit/exodus-extension@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.6.2...@cosmos-kit/exodus-extension@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.6.1...@cosmos-kit/exodus-extension@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.6.0...@cosmos-kit/exodus-extension@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.9...@cosmos-kit/exodus-extension@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.8...@cosmos-kit/exodus-extension@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.7...@cosmos-kit/exodus-extension@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.6...@cosmos-kit/exodus-extension@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.5...@cosmos-kit/exodus-extension@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.4...@cosmos-kit/exodus-extension@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.3...@cosmos-kit/exodus-extension@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.2...@cosmos-kit/exodus-extension@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.1...@cosmos-kit/exodus-extension@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.5.0...@cosmos-kit/exodus-extension@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.14...@cosmos-kit/exodus-extension@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.13...@cosmos-kit/exodus-extension@2.4.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.12...@cosmos-kit/exodus-extension@2.4.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.11...@cosmos-kit/exodus-extension@2.4.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.10...@cosmos-kit/exodus-extension@2.4.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.9...@cosmos-kit/exodus-extension@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.8...@cosmos-kit/exodus-extension@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.7...@cosmos-kit/exodus-extension@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.6...@cosmos-kit/exodus-extension@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.5...@cosmos-kit/exodus-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.4...@cosmos-kit/exodus-extension@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.3...@cosmos-kit/exodus-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.2...@cosmos-kit/exodus-extension@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.1...@cosmos-kit/exodus-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.4.0...@cosmos-kit/exodus-extension@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.12...@cosmos-kit/exodus-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.11...@cosmos-kit/exodus-extension@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.10...@cosmos-kit/exodus-extension@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.9...@cosmos-kit/exodus-extension@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.8...@cosmos-kit/exodus-extension@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.7...@cosmos-kit/exodus-extension@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.6...@cosmos-kit/exodus-extension@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.5...@cosmos-kit/exodus-extension@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.4...@cosmos-kit/exodus-extension@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.3...@cosmos-kit/exodus-extension@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.2...@cosmos-kit/exodus-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.1...@cosmos-kit/exodus-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.3.0...@cosmos-kit/exodus-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.2.1...@cosmos-kit/exodus-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.2.0...@cosmos-kit/exodus-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.12...@cosmos-kit/exodus-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.11...@cosmos-kit/exodus-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.10...@cosmos-kit/exodus-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.9...@cosmos-kit/exodus-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.8...@cosmos-kit/exodus-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.7...@cosmos-kit/exodus-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.6...@cosmos-kit/exodus-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.5...@cosmos-kit/exodus-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.4...@cosmos-kit/exodus-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.3...@cosmos-kit/exodus-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.2...@cosmos-kit/exodus-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.1...@cosmos-kit/exodus-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.1.0...@cosmos-kit/exodus-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.5...@cosmos-kit/exodus-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.4...@cosmos-kit/exodus-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.3...@cosmos-kit/exodus-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.2...@cosmos-kit/exodus-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1...@cosmos-kit/exodus-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.6...@cosmos-kit/exodus-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.5...@cosmos-kit/exodus-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.4...@cosmos-kit/exodus-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.3...@cosmos-kit/exodus-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.2...@cosmos-kit/exodus-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.1...@cosmos-kit/exodus-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@2.0.1-beta.0...@cosmos-kit/exodus-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@1.0.0...@cosmos-kit/exodus-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2-beta.6...@cosmos-kit/exodus-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2-beta.5...@cosmos-kit/exodus-extension@0.1.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2-beta.4...@cosmos-kit/exodus-extension@0.1.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2-beta.3...@cosmos-kit/exodus-extension@0.1.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2...@cosmos-kit/exodus-extension@0.1.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.1...@cosmos-kit/exodus-extension@0.1.2) (2023-06-30) + +## [0.1.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2-beta.1...@cosmos-kit/exodus-extension@0.1.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.2-beta.0...@cosmos-kit/exodus-extension@0.1.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.1...@cosmos-kit/exodus-extension@0.1.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.1.0...@cosmos-kit/exodus-extension@0.1.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/exodus-extension + +# [0.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus-extension@0.0.2...@cosmos-kit/exodus-extension@0.1.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## 0.0.2 (2023-06-09) + +### Bug Fixes + +- formating and styling ([e40d490](https://github.com/cosmology-tech/cosmos-kit/commit/e40d4909ef9f18b61a0bcad0cae3ebb44d20ceae)) + +## [0.0.1] (2023-06-09) + +**Note:** First release diff --git a/wallets/exodus-extension/LICENSE b/wallets/exodus-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/exodus-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/exodus-extension/README.md b/wallets/exodus-extension/README.md new file mode 100644 index 000000000..253fb4e80 --- /dev/null +++ b/wallets/exodus-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/exodus-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/exodus-extension is the Exodus Web3 Wallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/exodus-extension/index.ts b/wallets/exodus-extension/index.ts new file mode 100644 index 000000000..f9f79b4a1 --- /dev/null +++ b/wallets/exodus-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; diff --git a/wallets/exodus-extension/package.json b/wallets/exodus-extension/package.json new file mode 100644 index 000000000..4c21a15ec --- /dev/null +++ b/wallets/exodus-extension/package.json @@ -0,0 +1,65 @@ +{ + "name": "@cosmos-kit/exodus-extension", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "devs@exodus.io", + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "exodus", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "react-icons": "4.4.0" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/exodus-extension/src/config.ts b/wallets/exodus-extension/src/config.ts new file mode 100644 index 000000000..06dd339ca --- /dev/null +++ b/wallets/exodus-extension/src/config.ts @@ -0,0 +1,7 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://atom4.a.exodus.io/api'], + }, +}; diff --git a/wallets/exodus-extension/src/constant.ts b/wallets/exodus-extension/src/constant.ts new file mode 100644 index 000000000..6ee23f4d8 --- /dev/null +++ b/wallets/exodus-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0yOTguMjAzIDgzLjc2NDVMMTcwLjQ0OSAwVjQ2LjgzMzJMMjUyLjQwNSAxMDAuMDg5TDI0Mi43NjMgMTMwLjU5OEgxNzAuNDQ5VjE2OS40MDJIMjQyLjc2M0wyNTIuNDA1IDE5OS45MTFMMTcwLjQ0OSAyNTMuMTY3VjMwMEwyOTguMjAzIDIxNi41MDNMMjc3LjMxMyAxNTAuMTM0TDI5OC4yMDMgODMuNzY0NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNjYxXzI5NSkiLz4KPHBhdGggZD0iTTU5LjMwMDcgMTY5LjQwMkgxMzEuMzQ2VjEzMC41OThINTkuMDMyOUw0OS42NTg5IDEwMC4wODlMMTMxLjM0NiA0Ni44MzMyVjBMMy41OTI1MyA4My43NjQ1TDI0LjQ4MzEgMTUwLjEzNEwzLjU5MjUzIDIxNi41MDNMMTMxLjYxNCAzMDBWMjUzLjE2N0w0OS42NTg5IDE5OS45MTFMNTkuMzAwNyAxNjkuNDAyWiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzE2NjFfMjk1KSIvPgo8bWFzayBpZD0ibWFzazBfMTY2MV8yOTUiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjMiIHk9IjAiIHdpZHRoPSIyOTYiIGhlaWdodD0iMzAwIj4KPHBhdGggZD0iTTI5OC4yMDQgODMuNzY0NUwxNzAuNDUgMFY0Ni44MzMyTDI1Mi40MDUgMTAwLjA4OUwyNDIuNzYzIDEzMC41OThIMTcwLjQ1VjE2OS40MDJIMjQyLjc2M0wyNTIuNDA1IDE5OS45MTFMMTcwLjQ1IDI1My4xNjdWMzAwTDI5OC4yMDQgMjE2LjUwM0wyNzcuMzEzIDE1MC4xMzRMMjk4LjIwNCA4My43NjQ1WiIgZmlsbD0idXJsKCNwYWludDJfbGluZWFyXzE2NjFfMjk1KSIvPgo8cGF0aCBkPSJNNTkuMzAxIDE2OS40MDJIMTMxLjM0N1YxMzAuNTk4SDU5LjAzMzJMNDkuNjU5MiAxMDAuMDg5TDEzMS4zNDcgNDYuODMzMlYwTDMuNTkyNzcgODMuNzY0NUwyNC40ODM0IDE1MC4xMzRMMy41OTI3NyAyMTYuNTAzTDEzMS42MTUgMzAwVjI1My4xNjdMNDkuNjU5MiAxOTkuOTExTDU5LjMwMSAxNjkuNDAyWiIgZmlsbD0idXJsKCNwYWludDNfbGluZWFyXzE2NjFfMjk1KSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazBfMTY2MV8yOTUpIj4KPHJlY3QgeD0iMy43NTAyNCIgd2lkdGg9IjI5Mi41IiBoZWlnaHQ9IjMwMCIgZmlsbD0idXJsKCNwYWludDRfbGluZWFyXzE2NjFfMjk1KSIvPgo8L2c+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTY2MV8yOTUiIHgxPSIyNTYuODc1IiB5MT0iMzIwLjYyNSIgeDI9IjE3MS4zIiB5Mj0iLTMyLjk0NTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzBCNDZGOSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCQkZCRTAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzE2NjFfMjk1IiB4MT0iMjU2Ljg3NSIgeTE9IjMyMC42MjUiIHgyPSIxNzEuMyIgeTI9Ii0zMi45NDU5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwQjQ2RjkiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkJGQkUwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQyX2xpbmVhcl8xNjYxXzI5NSIgeDE9IjI1Ni44NzUiIHkxPSIzMjAuNjI1IiB4Mj0iMTcxLjMiIHkyPSItMzIuOTQ1OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMEI0NkY5Ii8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0JCRkJFMCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50M19saW5lYXJfMTY2MV8yOTUiIHgxPSIyNTYuODc1IiB5MT0iMzIwLjYyNSIgeDI9IjE3MS4zIiB5Mj0iLTMyLjk0NTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzBCNDZGOSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCQkZCRTAiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDRfbGluZWFyXzE2NjFfMjk1IiB4MT0iMjIuNTAwMiIgeTE9IjY3LjUiIHgyPSIxNzAuNjI1IiB5Mj0iMTc4LjEyNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBvZmZzZXQ9IjAuMTE5NzkyIiBzdG9wLWNvbG9yPSIjODk1MkZGIiBzdG9wLW9wYWNpdHk9IjAuODciLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjREFCREZGIiBzdG9wLW9wYWNpdHk9IjAiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K'; diff --git a/wallets/exodus-extension/src/constants.ts b/wallets/exodus-extension/src/constants.ts new file mode 100644 index 000000000..714c31a27 --- /dev/null +++ b/wallets/exodus-extension/src/constants.ts @@ -0,0 +1,2 @@ +export const EXODUS_ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA4MCA4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8bWFzayBpZD0iYSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIj4KICAgIDxwYXRoIGQ9Ik03OS41MjEgMjIuMzM3IDQ1LjQ1MyAwdjEyLjQ4OUw2Ny4zMDggMjYuNjlsLTIuNTcxIDguMTM2SDQ1LjQ1M3YxMC4zNDhoMTkuMjg0bDIuNTcxIDguMTM2TDQ1LjQ1MyA2Ny41MVY4MGwzNC4wNjgtMjIuMjY2LTUuNTctMTcuNjk4IDUuNTctMTcuNjk5Wk0xNS44MTQgNDUuMTc0aDE5LjIxMlYzNC44MjZIMTUuNzQybC0yLjUtOC4xMzZMMzUuMDI2IDEyLjQ5VjBMLjk1OCAyMi4zMzdsNS41NyAxNy42OTktNS41NyAxNy42OThMMzUuMDk4IDgwVjY3LjUxMUwxMy4yNDIgNTMuMzFsMi41Ny04LjEzNloiIGZpbGw9IiMxRDFEMUIiLz4KICA8L21hc2s+CiAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNNzkuNTIxIDIyLjMzNyA0NS40NTMgMHYxMi40ODlMNjcuMzA4IDI2LjY5bC0yLjU3MSA4LjEzNkg0NS40NTN2MTAuMzQ4aDE5LjI4NGwyLjU3MSA4LjEzNkw0NS40NTMgNjcuNTFWODBsMzQuMDY4LTIyLjI2Ni01LjU3LTE3LjY5OCA1LjU3LTE3LjY5OVpNMTUuODE0IDQ1LjE3NGgxOS4yMTJWMzQuODI2SDE1Ljc0MmwtMi41LTguMTM2TDM1LjAyNiAxMi40OVYwTC45NTggMjIuMzM3bDUuNTcgMTcuNjk5LTUuNTcgMTcuNjk4TDM1LjA5OCA4MFY2Ny41MTFMMTMuMjQyIDUzLjMxbDIuNTctOC4xMzZaIiBmaWxsPSIjZmZmIi8+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMS4wNiAwaDg2Ljk1NXY4OC40NzdIMS4wNnoiLz4KICAgIDxlbGxpcHNlIGN4PSI1LjgyMiIgY3k9IjE3LjU0NCIgcng9Ijc2LjQ4NCIgcnk9IjgyLjkyNCIgdHJhbnNmb3JtPSJyb3RhdGUoLTMzLjkzIDUuODIyIDE3LjU0NCkiIGZpbGw9InVybCgjYykiLz4KICA8L2c+CiAgPGRlZnM+CiAgICA8cmFkaWFsR3JhZGllbnQgaWQ9ImMiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJyb3RhdGUoNzIuMjU2IC05LjEwNiAxMi43Nikgc2NhbGUoNjIuNzM5IDU4LjgwOTYpIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIuMTIiIHN0b3AtY29sb3I9IiM4OTUyRkYiIHN0b3Atb3BhY2l0eT0iLjg3Ii8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBQkRGRiIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNjguNjYyIiB5MT0iODUuODk3IiB4Mj0iNDUuNzUiIHkyPSItOC4yOTIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzBCNDZGOSIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNCQkZCRTAiLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgo8L3N2Zz4K'; diff --git a/wallets/exodus-extension/src/exodus.ts b/wallets/exodus-extension/src/exodus.ts new file mode 100644 index 000000000..380acc941 --- /dev/null +++ b/wallets/exodus-extension/src/exodus.ts @@ -0,0 +1,9 @@ +import { preferredEndpoints } from './config'; +import { exodusExtensionInfo, ExodusExtensionWallet } from './extension'; + +const exodusExtension = new ExodusExtensionWallet( + exodusExtensionInfo, + preferredEndpoints +); + +export const wallets = [exodusExtension]; diff --git a/wallets/exodus-extension/src/extension/chain-wallet.ts b/wallets/exodus-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..7671e66c8 --- /dev/null +++ b/wallets/exodus-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainExodusExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/exodus-extension/src/extension/client.ts b/wallets/exodus-extension/src/extension/client.ts new file mode 100644 index 000000000..771576b86 --- /dev/null +++ b/wallets/exodus-extension/src/extension/client.ts @@ -0,0 +1,62 @@ +import { BroadcastMode, DirectSignDoc, WalletClient } from '@cosmos-kit/core'; + +import type { + AccountData, + DirectSignResponse, + ExodusCosmosProvider, + StdSignDoc, +} from '../types'; + +export class ExodusClient implements WalletClient { + readonly client: ExodusCosmosProvider; + + constructor(client: ExodusCosmosProvider) { + this.client = client; + } + + async connect(chainId: string | string[]) { + await this.client.connect({ + chainId: Array.isArray(chainId) ? chainId[0] : chainId, + }); + } + + async getSimpleAccount(chainId: string) { + const { address } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + }; + } + + async getAccount(chainId: string) { + const response = await this.client.connect({ chainId }); + + return { + ...response, + pubkey: response.publicKey, + }; + } + + async getOfflineSigner(chainId: string) { + return { + getAccounts: async (): Promise => [ + await this.getAccount(chainId), + ], + signDirect: async ( + signer: string, + signDoc: DirectSignDoc + ): Promise => { + return this.client.signTransaction(signDoc); + }, + }; + } + + async signAmino(chainId: string, signer: string, signDoc: StdSignDoc) { + return this.client.signAminoTransaction(signDoc); + } + + async sendTx(chainId: string, transaction: Uint8Array, mode: BroadcastMode) { + return this.client.sendTx(chainId, transaction, mode); + } +} diff --git a/wallets/exodus-extension/src/extension/index.ts b/wallets/exodus-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/exodus-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/exodus-extension/src/extension/main-wallet.ts b/wallets/exodus-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..94c70f026 --- /dev/null +++ b/wallets/exodus-extension/src/extension/main-wallet.ts @@ -0,0 +1,30 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainExodusExtension } from './chain-wallet'; +import { ExodusClient } from './client'; +import { getExodusFromExtension } from './utils'; + +export class ExodusExtensionWallet extends MainWalletBase { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainExodusExtension); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient() { + this.initingClient(); + try { + const exodus = await getExodusFromExtension(); + if (!exodus?.cosmos) { + throw new Error('Exodus client does not support Cosmos provider'); + } + this.initClientDone(exodus ? new ExodusClient(exodus.cosmos) : undefined); + } catch (error: unknown) { + this.logger?.error(error); + this.initClientError(error as Error); + } + } +} diff --git a/wallets/exodus-extension/src/extension/registry.ts b/wallets/exodus-extension/src/extension/registry.ts new file mode 100644 index 000000000..6356cbea0 --- /dev/null +++ b/wallets/exodus-extension/src/extension/registry.ts @@ -0,0 +1,30 @@ +import { Wallet } from '@cosmos-kit/core'; +import { GoDesktopDownload } from 'react-icons/go'; +import { RiChromeFill } from 'react-icons/ri'; + +import { ICON } from '../constant'; + +export const exodusExtensionInfo: Wallet = { + name: 'exodus-extension', + prettyName: 'Exodus', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['exodus_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + icon: RiChromeFill, + link: + 'https://chrome.google.com/webstore/detail/exodus-web3-wallet/aholpfdialjgjfhomihkjbmgjidlcdno', + }, + { + icon: GoDesktopDownload, + link: 'https://www.exodus.com/download', + }, + ], +}; diff --git a/wallets/exodus-extension/src/extension/utils.ts b/wallets/exodus-extension/src/extension/utils.ts new file mode 100644 index 000000000..581828b72 --- /dev/null +++ b/wallets/exodus-extension/src/extension/utils.ts @@ -0,0 +1,43 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import type { Exodus, ExodusWindow } from '../types'; + +export const getExodusFromExtension: () => Promise< + Exodus | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const exodus = ((window as unknown) as ExodusWindow).exodus; + + if (exodus) { + return exodus; + } + + if (document.readyState === 'complete') { + if (exodus) { + return exodus; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (exodus) { + resolve(exodus); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/exodus-extension/src/index.ts b/wallets/exodus-extension/src/index.ts new file mode 100644 index 000000000..6f7fc0bc5 --- /dev/null +++ b/wallets/exodus-extension/src/index.ts @@ -0,0 +1,3 @@ +export * from './exodus'; +export * from './extension'; +export * from './extension/client'; diff --git a/wallets/exodus-extension/src/types.ts b/wallets/exodus-extension/src/types.ts new file mode 100644 index 000000000..bc2b6da18 --- /dev/null +++ b/wallets/exodus-extension/src/types.ts @@ -0,0 +1,40 @@ +import type { AminoSignResponse, StdSignDoc } from '@cosmjs/amino'; +import type { AccountData, DirectSignResponse } from '@cosmjs/proto-signing'; +import type { BroadcastMode, DirectSignDoc } from '@cosmos-kit/core'; + +type Chain = string; + +interface ConnectionOptions { + chainId: Chain; +} + +type Account = AccountData & { publicKey: Uint8Array }; + +export interface ExodusCosmosProvider { + connect: (options: ConnectionOptions) => Promise; + signTransaction: (transaction: DirectSignDoc) => Promise; + signAminoTransaction: ( + aminoTransaction: StdSignDoc + ) => Promise; + sendTx: ( + chainId: string, + rawTx: Uint8Array, + mode: BroadcastMode + ) => Promise; +} + +export interface Exodus { + cosmos: ExodusCosmosProvider; +} + +export interface ExodusWindow { + exodus: Exodus; +} + +export type { + AccountData, + BroadcastMode, + DirectSignDoc, + DirectSignResponse, + StdSignDoc, +}; diff --git a/wallets/exodus-extension/tsconfig.json b/wallets/exodus-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/exodus-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/exodus/.editorconfig b/wallets/exodus/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/exodus/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/exodus/.eslintignore b/wallets/exodus/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/exodus/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/exodus/.eslintrc.json b/wallets/exodus/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/exodus/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/exodus/.gitignore b/wallets/exodus/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/exodus/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/exodus/.prettierrc.json b/wallets/exodus/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/exodus/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/exodus/CHANGELOG.md b/wallets/exodus/CHANGELOG.md new file mode 100644 index 000000000..935b61405 --- /dev/null +++ b/wallets/exodus/CHANGELOG.md @@ -0,0 +1,374 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.10.1...@cosmos-kit/exodus@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.10.0...@cosmos-kit/exodus@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/exodus + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.9.0...@cosmos-kit/exodus@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/exodus + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.8.0...@cosmos-kit/exodus@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.7.0...@cosmos-kit/exodus@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/exodus + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.6.3...@cosmos-kit/exodus@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/exodus + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.6.2...@cosmos-kit/exodus@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.6.1...@cosmos-kit/exodus@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.6.0...@cosmos-kit/exodus@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.9...@cosmos-kit/exodus@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.8...@cosmos-kit/exodus@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.7...@cosmos-kit/exodus@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.6...@cosmos-kit/exodus@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.5...@cosmos-kit/exodus@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.4...@cosmos-kit/exodus@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.3...@cosmos-kit/exodus@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.2...@cosmos-kit/exodus@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.1...@cosmos-kit/exodus@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.5.0...@cosmos-kit/exodus@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.14...@cosmos-kit/exodus@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.13...@cosmos-kit/exodus@2.4.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.12...@cosmos-kit/exodus@2.4.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.11...@cosmos-kit/exodus@2.4.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.10...@cosmos-kit/exodus@2.4.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.9...@cosmos-kit/exodus@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.8...@cosmos-kit/exodus@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.7...@cosmos-kit/exodus@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.6...@cosmos-kit/exodus@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.5...@cosmos-kit/exodus@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.4...@cosmos-kit/exodus@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.3...@cosmos-kit/exodus@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.2...@cosmos-kit/exodus@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.1...@cosmos-kit/exodus@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.4.0...@cosmos-kit/exodus@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.12...@cosmos-kit/exodus@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.11...@cosmos-kit/exodus@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.10...@cosmos-kit/exodus@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.9...@cosmos-kit/exodus@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.8...@cosmos-kit/exodus@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.7...@cosmos-kit/exodus@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.6...@cosmos-kit/exodus@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.5...@cosmos-kit/exodus@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.4...@cosmos-kit/exodus@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.3...@cosmos-kit/exodus@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.2...@cosmos-kit/exodus@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.1...@cosmos-kit/exodus@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.3.0...@cosmos-kit/exodus@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.2.1...@cosmos-kit/exodus@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.2.0...@cosmos-kit/exodus@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.12...@cosmos-kit/exodus@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.11...@cosmos-kit/exodus@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.10...@cosmos-kit/exodus@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.9...@cosmos-kit/exodus@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.8...@cosmos-kit/exodus@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.7...@cosmos-kit/exodus@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.6...@cosmos-kit/exodus@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.5...@cosmos-kit/exodus@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.4...@cosmos-kit/exodus@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.3...@cosmos-kit/exodus@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.2...@cosmos-kit/exodus@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.1...@cosmos-kit/exodus@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.1.0...@cosmos-kit/exodus@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.5...@cosmos-kit/exodus@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.4...@cosmos-kit/exodus@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.3...@cosmos-kit/exodus@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.2...@cosmos-kit/exodus@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1...@cosmos-kit/exodus@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.6...@cosmos-kit/exodus@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.5...@cosmos-kit/exodus@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.4...@cosmos-kit/exodus@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.3...@cosmos-kit/exodus@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.2...@cosmos-kit/exodus@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.1...@cosmos-kit/exodus@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@2.0.1-beta.0...@cosmos-kit/exodus@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@1.0.0...@cosmos-kit/exodus@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/exodus + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5-beta.6...@cosmos-kit/exodus@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5-beta.5...@cosmos-kit/exodus@0.0.5-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5-beta.4...@cosmos-kit/exodus@0.0.5-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5-beta.3...@cosmos-kit/exodus@0.0.5-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5...@cosmos-kit/exodus@0.0.5-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.4...@cosmos-kit/exodus@0.0.5) (2023-06-30) + +## [0.0.5-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5-beta.1...@cosmos-kit/exodus@0.0.5-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.5-beta.0...@cosmos-kit/exodus@0.0.5-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.5-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.4...@cosmos-kit/exodus@0.0.5-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.3...@cosmos-kit/exodus@0.0.4) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## [0.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/exodus@0.0.2...@cosmos-kit/exodus@0.0.3) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/exodus + +## 0.0.2 (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/exodus diff --git a/wallets/exodus/README.md b/wallets/exodus/README.md new file mode 100644 index 000000000..6e9aa3020 --- /dev/null +++ b/wallets/exodus/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/exodus + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/exodus is the exodus integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/exodus/index.ts b/wallets/exodus/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/exodus/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/exodus/package.json b/wallets/exodus/package.json new file mode 100644 index 000000000..d43e96a61 --- /dev/null +++ b/wallets/exodus/package.json @@ -0,0 +1,54 @@ +{ + "name": "@cosmos-kit/exodus", + "version": "2.10.2", + "description": "@cosmos-kit/exodus is the Exodus integration for CosmosKit", + "author": "devs@exodus.io", + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "exodus", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/exodus-extension": "^2.10.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/exodus/src/index.ts b/wallets/exodus/src/index.ts new file mode 100644 index 000000000..0dfb19a42 --- /dev/null +++ b/wallets/exodus/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/exodus-extension'; + +export const wallets = [...ext]; diff --git a/wallets/exodus/tsconfig.json b/wallets/exodus/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/exodus/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/fin-extension/.editorconfig b/wallets/fin-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/fin-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/fin-extension/.eslintignore b/wallets/fin-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/fin-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/fin-extension/.eslintrc.json b/wallets/fin-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/fin-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/fin-extension/.gitignore b/wallets/fin-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/fin-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/fin-extension/.npmignore b/wallets/fin-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/fin-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/fin-extension/.npmrc b/wallets/fin-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/fin-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/fin-extension/.prettierrc.json b/wallets/fin-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/fin-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/fin-extension/CHANGELOG.md b/wallets/fin-extension/CHANGELOG.md new file mode 100644 index 000000000..59d9a6055 --- /dev/null +++ b/wallets/fin-extension/CHANGELOG.md @@ -0,0 +1,357 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.11.1...@cosmos-kit/fin-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.11.0...@cosmos-kit/fin-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.10.0...@cosmos-kit/fin-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.9.0...@cosmos-kit/fin-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.8.0...@cosmos-kit/fin-extension@2.9.0) (2024-05-22) + + +### Features + +* add sign arbitrary fin wallet ([f1ce3b9](https://github.com/cosmology-tech/cosmos-kit/commit/f1ce3b9c74873279bb8f98303a373578cf68182b)) + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.7.3...@cosmos-kit/fin-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.7.2...@cosmos-kit/fin-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.7.1...@cosmos-kit/fin-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.7.0...@cosmos-kit/fin-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.9...@cosmos-kit/fin-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.8...@cosmos-kit/fin-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.7...@cosmos-kit/fin-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.6...@cosmos-kit/fin-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.5...@cosmos-kit/fin-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.4...@cosmos-kit/fin-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.3...@cosmos-kit/fin-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.2...@cosmos-kit/fin-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.1...@cosmos-kit/fin-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.6.0...@cosmos-kit/fin-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.5.4...@cosmos-kit/fin-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.5.3...@cosmos-kit/fin-extension@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.5.2...@cosmos-kit/fin-extension@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.5.1...@cosmos-kit/fin-extension@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.5.0...@cosmos-kit/fin-extension@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.11...@cosmos-kit/fin-extension@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.10...@cosmos-kit/fin-extension@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.9...@cosmos-kit/fin-extension@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.8...@cosmos-kit/fin-extension@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.7...@cosmos-kit/fin-extension@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.6...@cosmos-kit/fin-extension@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.5...@cosmos-kit/fin-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.4...@cosmos-kit/fin-extension@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.3...@cosmos-kit/fin-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.2...@cosmos-kit/fin-extension@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.1...@cosmos-kit/fin-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.4.0...@cosmos-kit/fin-extension@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.14...@cosmos-kit/fin-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.13...@cosmos-kit/fin-extension@2.3.14) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.12...@cosmos-kit/fin-extension@2.3.13) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.11...@cosmos-kit/fin-extension@2.3.12) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.10...@cosmos-kit/fin-extension@2.3.11) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.9...@cosmos-kit/fin-extension@2.3.10) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.8...@cosmos-kit/fin-extension@2.3.9) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.7...@cosmos-kit/fin-extension@2.3.8) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.6...@cosmos-kit/fin-extension@2.3.7) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.5...@cosmos-kit/fin-extension@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.4...@cosmos-kit/fin-extension@2.3.5) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.3...@cosmos-kit/fin-extension@2.3.4) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.2...@cosmos-kit/fin-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.1...@cosmos-kit/fin-extension@2.3.2) (2023-08-23) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.3.0...@cosmos-kit/fin-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.2.1...@cosmos-kit/fin-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.2.0...@cosmos-kit/fin-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.12...@cosmos-kit/fin-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.11...@cosmos-kit/fin-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.10...@cosmos-kit/fin-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.9...@cosmos-kit/fin-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.8...@cosmos-kit/fin-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.7...@cosmos-kit/fin-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.6...@cosmos-kit/fin-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.5...@cosmos-kit/fin-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.4...@cosmos-kit/fin-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.3...@cosmos-kit/fin-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.2...@cosmos-kit/fin-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.1...@cosmos-kit/fin-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.1.0...@cosmos-kit/fin-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.5...@cosmos-kit/fin-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.4...@cosmos-kit/fin-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.3...@cosmos-kit/fin-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.2...@cosmos-kit/fin-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1...@cosmos-kit/fin-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.7...@cosmos-kit/fin-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.6...@cosmos-kit/fin-extension@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.5...@cosmos-kit/fin-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.4...@cosmos-kit/fin-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.3...@cosmos-kit/fin-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.2...@cosmos-kit/fin-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.1...@cosmos-kit/fin-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin-extension@2.0.1-beta.0...@cosmos-kit/fin-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +## 2.0.1-beta.0 (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/fin-extension + +# Change Log + +# 0.0.1 (2023-06-07) + +**Note:** First release! diff --git a/wallets/fin-extension/LICENSE b/wallets/fin-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/fin-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/fin-extension/README.md b/wallets/fin-extension/README.md new file mode 100644 index 000000000..4562dd53d --- /dev/null +++ b/wallets/fin-extension/README.md @@ -0,0 +1,26 @@ +# @cosmos-kit/fin-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/fin-extension is the fin integration for CosmosKit. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +Code built with the help of these related projects: + +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command ⚛️ +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry diff --git a/wallets/fin-extension/index.ts b/wallets/fin-extension/index.ts new file mode 100644 index 000000000..f9f79b4a1 --- /dev/null +++ b/wallets/fin-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; diff --git a/wallets/fin-extension/package.json b/wallets/fin-extension/package.json new file mode 100644 index 000000000..909a150d2 --- /dev/null +++ b/wallets/fin-extension/package.json @@ -0,0 +1,72 @@ +{ + "name": "@cosmos-kit/fin-extension", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "quangmv@coin98.finance", + "contributors": [ + { + "name": "Be Quang" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "typings": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "fin", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "main/", + "module/", + "types/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/fin-extension/src/config.ts b/wallets/fin-extension/src/config.ts new file mode 100644 index 000000000..2432ed5a3 --- /dev/null +++ b/wallets/fin-extension/src/config.ts @@ -0,0 +1,8 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + sei: { + rpc: ['https://rpc.atlantic-2.seinetwork.io/'], + rest: ['https://rest.atlantic-2.seinetwork.io/'], + }, +}; diff --git a/wallets/fin-extension/src/extension/chain-wallet.ts b/wallets/fin-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..54bb5ef25 --- /dev/null +++ b/wallets/fin-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainFinExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/fin-extension/src/extension/client.ts b/wallets/fin-extension/src/extension/client.ts new file mode 100644 index 000000000..a5e134699 --- /dev/null +++ b/wallets/fin-extension/src/extension/client.ts @@ -0,0 +1,148 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignDoc, StdSignature } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + WalletClient, +} from '@cosmos-kit/core'; + +import { Fin } from './types'; +import Long from 'long'; + +export class FinClient implements WalletClient { + readonly client: Fin; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Fin) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async connect(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async getSimpleAccount(chainId: string) { + await this.enable(chainId); + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + await this.enable(chainId); + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } +} diff --git a/wallets/fin-extension/src/extension/index.ts b/wallets/fin-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/fin-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/fin-extension/src/extension/main-wallet.ts b/wallets/fin-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..b03068410 --- /dev/null +++ b/wallets/fin-extension/src/extension/main-wallet.ts @@ -0,0 +1,26 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { FinClient } from './client'; +import { getFinFromExtension } from './utils'; +import { ChainFinExtension } from './chain-wallet'; + +export class FinExtensionWallet extends MainWalletBase { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainFinExtension); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient() { + this.initingClient(); + try { + const fin = await getFinFromExtension(); + this.initClientDone(fin ? new FinClient(fin) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/fin-extension/src/extension/registry.ts b/wallets/fin-extension/src/extension/registry.ts new file mode 100644 index 000000000..ab7d79cce --- /dev/null +++ b/wallets/fin-extension/src/extension/registry.ts @@ -0,0 +1,27 @@ +import { Wallet } from '@cosmos-kit/core'; + +export const FinExtensionInfo: Wallet = { + name: 'fin-extension', + logo: 'https://lh3.googleusercontent.com/oKvetnosutN7Q7daICbew7k9kLLB1unNlggkA-mZZZZIdNWp7vJFpz5q9MZ73Wlw5S5KrHV5mEQ0UEKYaDWz5qmacHw=w128-h128-e365-rj-sc0x00ffffff', + prettyName: 'Fin', + mode: 'extension', + //Enable for dapp browser + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: [ + 'accountsChanged', + 'networkChanged', + ], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/fin-wallet-for-sei/dbgnhckhnppddckangcjbkjnlddbjkna', + }, + { + link: 'https://finwallet.com/', + }, + ], +}; diff --git a/wallets/fin-extension/src/extension/types.ts b/wallets/fin-extension/src/extension/types.ts new file mode 100644 index 000000000..35cf95195 --- /dev/null +++ b/wallets/fin-extension/src/extension/types.ts @@ -0,0 +1,63 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; +import type { StdSignature } from '@cosmjs/amino'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export interface FinSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Fin { + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + suggestToken(chainId: string, contractAddress: string): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: FinSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: FinSignOptions + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + signArbitrary(chainId: string, signer: string, data: string | Uint8Array): StdSignature | PromiseLike; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/wallets/fin-extension/src/extension/utils.ts b/wallets/fin-extension/src/extension/utils.ts new file mode 100644 index 000000000..174e4863c --- /dev/null +++ b/wallets/fin-extension/src/extension/utils.ts @@ -0,0 +1,45 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; +import { Fin } from './types'; +// import { Keplr, Window as KeplrWindow } from '@keplr-wallet/types'; + +interface FinWindow { + fin?: Fin; +} + +export const getFinFromExtension: () => Promise = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const provider = (window as FinWindow).fin; + + if (provider) { + return provider; + } + + if (document.readyState === 'complete') { + if (provider) { + return provider; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (provider) { + resolve(provider); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/fin-extension/src/fin.ts b/wallets/fin-extension/src/fin.ts new file mode 100644 index 000000000..c0adbc46d --- /dev/null +++ b/wallets/fin-extension/src/fin.ts @@ -0,0 +1,9 @@ +import { preferredEndpoints } from './config'; +import { FinExtensionInfo, FinExtensionWallet } from './extension'; + +const finExtension = new FinExtensionWallet( + FinExtensionInfo, + preferredEndpoints +); + +export const wallets = [finExtension]; diff --git a/wallets/fin-extension/src/index.ts b/wallets/fin-extension/src/index.ts new file mode 100644 index 000000000..b65287e6c --- /dev/null +++ b/wallets/fin-extension/src/index.ts @@ -0,0 +1,3 @@ +export * from './extension'; +export * from './extension/client'; +export * from './fin'; diff --git a/wallets/fin-extension/tsconfig.json b/wallets/fin-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/fin-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/fin/.editorconfig b/wallets/fin/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/fin/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/fin/.eslintignore b/wallets/fin/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/fin/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/fin/.eslintrc.json b/wallets/fin/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/fin/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/fin/.gitignore b/wallets/fin/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/fin/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/fin/.npmignore b/wallets/fin/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/fin/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/fin/.npmrc b/wallets/fin/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/fin/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/fin/.prettierrc.json b/wallets/fin/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/fin/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/fin/CHANGELOG.md b/wallets/fin/CHANGELOG.md new file mode 100644 index 000000000..9b25d05e3 --- /dev/null +++ b/wallets/fin/CHANGELOG.md @@ -0,0 +1,354 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.11.1...@cosmos-kit/fin@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/fin + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.11.0...@cosmos-kit/fin@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/fin + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.10.0...@cosmos-kit/fin@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/fin + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.9.0...@cosmos-kit/fin@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/fin + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.8.0...@cosmos-kit/fin@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/fin + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.7.3...@cosmos-kit/fin@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/fin + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.7.2...@cosmos-kit/fin@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.7.1...@cosmos-kit/fin@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.7.0...@cosmos-kit/fin@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.9...@cosmos-kit/fin@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.8...@cosmos-kit/fin@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.7...@cosmos-kit/fin@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.6...@cosmos-kit/fin@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.5...@cosmos-kit/fin@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.4...@cosmos-kit/fin@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.3...@cosmos-kit/fin@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.2...@cosmos-kit/fin@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.1...@cosmos-kit/fin@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.6.0...@cosmos-kit/fin@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.5.4...@cosmos-kit/fin@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.5.3...@cosmos-kit/fin@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.5.2...@cosmos-kit/fin@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.5.1...@cosmos-kit/fin@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.5.0...@cosmos-kit/fin@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.11...@cosmos-kit/fin@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.10...@cosmos-kit/fin@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.9...@cosmos-kit/fin@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.8...@cosmos-kit/fin@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.7...@cosmos-kit/fin@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.6...@cosmos-kit/fin@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.5...@cosmos-kit/fin@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.4...@cosmos-kit/fin@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.3...@cosmos-kit/fin@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.2...@cosmos-kit/fin@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.1...@cosmos-kit/fin@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.4.0...@cosmos-kit/fin@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.14...@cosmos-kit/fin@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.13...@cosmos-kit/fin@2.3.14) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.12...@cosmos-kit/fin@2.3.13) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.11...@cosmos-kit/fin@2.3.12) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.10...@cosmos-kit/fin@2.3.11) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.9...@cosmos-kit/fin@2.3.10) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.8...@cosmos-kit/fin@2.3.9) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.7...@cosmos-kit/fin@2.3.8) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.6...@cosmos-kit/fin@2.3.7) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.5...@cosmos-kit/fin@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.4...@cosmos-kit/fin@2.3.5) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.3...@cosmos-kit/fin@2.3.4) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.2...@cosmos-kit/fin@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.1...@cosmos-kit/fin@2.3.2) (2023-08-23) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.3.0...@cosmos-kit/fin@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.2.1...@cosmos-kit/fin@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.2.0...@cosmos-kit/fin@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.12...@cosmos-kit/fin@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.11...@cosmos-kit/fin@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.10...@cosmos-kit/fin@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.9...@cosmos-kit/fin@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.8...@cosmos-kit/fin@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.7...@cosmos-kit/fin@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.6...@cosmos-kit/fin@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.5...@cosmos-kit/fin@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.4...@cosmos-kit/fin@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.3...@cosmos-kit/fin@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.2...@cosmos-kit/fin@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.1...@cosmos-kit/fin@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.1.0...@cosmos-kit/fin@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/fin + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.5...@cosmos-kit/fin@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.4...@cosmos-kit/fin@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.3...@cosmos-kit/fin@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.2...@cosmos-kit/fin@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1...@cosmos-kit/fin@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.7...@cosmos-kit/fin@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.6...@cosmos-kit/fin@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.5...@cosmos-kit/fin@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.4...@cosmos-kit/fin@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.3...@cosmos-kit/fin@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.2...@cosmos-kit/fin@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.1...@cosmos-kit/fin@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/fin + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/fin@2.0.1-beta.0...@cosmos-kit/fin@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/fin + +## 2.0.1-beta.0 (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/fin + +# Change Log + +# 0.0.1 (2023-06-07) + +**Note:** First release! diff --git a/wallets/fin/LICENSE b/wallets/fin/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/fin/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/fin/README.md b/wallets/fin/README.md new file mode 100644 index 000000000..0771a6438 --- /dev/null +++ b/wallets/fin/README.md @@ -0,0 +1,26 @@ +# @cosmos-kit/fin + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/fin is the Fin integration for CosmosKit. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +Code built with the help of these related projects: + +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command ⚛️ +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry diff --git a/wallets/fin/index.ts b/wallets/fin/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/fin/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/fin/package.json b/wallets/fin/package.json new file mode 100644 index 000000000..1b2262c50 --- /dev/null +++ b/wallets/fin/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/fin", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "quangmv@coin98.finance", + "contributors": [ + { + "name": "Be Quang" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "typings": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "fin", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/fin-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/fin/src/index.ts b/wallets/fin/src/index.ts new file mode 100644 index 000000000..38362ffca --- /dev/null +++ b/wallets/fin/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as fin } from '@cosmos-kit/fin-extension'; + +export const wallets = [...fin]; diff --git a/wallets/fin/tsconfig.json b/wallets/fin/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/fin/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/frontier-extension/.editorconfig b/wallets/frontier-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/frontier-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/frontier-extension/.eslintignore b/wallets/frontier-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/frontier-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/frontier-extension/.eslintrc.json b/wallets/frontier-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/frontier-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/frontier-extension/.gitignore b/wallets/frontier-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/frontier-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/frontier-extension/.npmignore b/wallets/frontier-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/frontier-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/frontier-extension/.npmrc b/wallets/frontier-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/frontier-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/frontier-extension/.prettierrc.json b/wallets/frontier-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/frontier-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/frontier-extension/CHANGELOG.md b/wallets/frontier-extension/CHANGELOG.md new file mode 100644 index 000000000..f9b1212e4 --- /dev/null +++ b/wallets/frontier-extension/CHANGELOG.md @@ -0,0 +1,543 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.10.1...@cosmos-kit/frontier-extension@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.10.0...@cosmos-kit/frontier-extension@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.9.0...@cosmos-kit/frontier-extension@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.8.0...@cosmos-kit/frontier-extension@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.7.0...@cosmos-kit/frontier-extension@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.6.3...@cosmos-kit/frontier-extension@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.6.2...@cosmos-kit/frontier-extension@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.6.1...@cosmos-kit/frontier-extension@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.6.0...@cosmos-kit/frontier-extension@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.9...@cosmos-kit/frontier-extension@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.8...@cosmos-kit/frontier-extension@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.7...@cosmos-kit/frontier-extension@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.6...@cosmos-kit/frontier-extension@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.5...@cosmos-kit/frontier-extension@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.4...@cosmos-kit/frontier-extension@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.3...@cosmos-kit/frontier-extension@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.2...@cosmos-kit/frontier-extension@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.1...@cosmos-kit/frontier-extension@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.5.0...@cosmos-kit/frontier-extension@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.15...@cosmos-kit/frontier-extension@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.14...@cosmos-kit/frontier-extension@2.4.15) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.13...@cosmos-kit/frontier-extension@2.4.14) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.12...@cosmos-kit/frontier-extension@2.4.13) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.11...@cosmos-kit/frontier-extension@2.4.12) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.10...@cosmos-kit/frontier-extension@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.9...@cosmos-kit/frontier-extension@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.8...@cosmos-kit/frontier-extension@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.7...@cosmos-kit/frontier-extension@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.6...@cosmos-kit/frontier-extension@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.5...@cosmos-kit/frontier-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.4...@cosmos-kit/frontier-extension@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.3...@cosmos-kit/frontier-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.2...@cosmos-kit/frontier-extension@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.1...@cosmos-kit/frontier-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.4.0...@cosmos-kit/frontier-extension@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.12...@cosmos-kit/frontier-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.11...@cosmos-kit/frontier-extension@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.10...@cosmos-kit/frontier-extension@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.9...@cosmos-kit/frontier-extension@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.8...@cosmos-kit/frontier-extension@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.7...@cosmos-kit/frontier-extension@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.6...@cosmos-kit/frontier-extension@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.5...@cosmos-kit/frontier-extension@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.4...@cosmos-kit/frontier-extension@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.3...@cosmos-kit/frontier-extension@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.2...@cosmos-kit/frontier-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.1...@cosmos-kit/frontier-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.3.0...@cosmos-kit/frontier-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.2.1...@cosmos-kit/frontier-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.2.0...@cosmos-kit/frontier-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.12...@cosmos-kit/frontier-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.11...@cosmos-kit/frontier-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.10...@cosmos-kit/frontier-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.9...@cosmos-kit/frontier-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.8...@cosmos-kit/frontier-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.7...@cosmos-kit/frontier-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.6...@cosmos-kit/frontier-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.5...@cosmos-kit/frontier-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.4...@cosmos-kit/frontier-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.3...@cosmos-kit/frontier-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.2...@cosmos-kit/frontier-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.1...@cosmos-kit/frontier-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.1.0...@cosmos-kit/frontier-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.5...@cosmos-kit/frontier-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.4...@cosmos-kit/frontier-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.3...@cosmos-kit/frontier-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.2...@cosmos-kit/frontier-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1...@cosmos-kit/frontier-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.6...@cosmos-kit/frontier-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.5...@cosmos-kit/frontier-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.4...@cosmos-kit/frontier-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.3...@cosmos-kit/frontier-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.2...@cosmos-kit/frontier-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.1...@cosmos-kit/frontier-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@2.0.1-beta.0...@cosmos-kit/frontier-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@1.0.0...@cosmos-kit/frontier-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2-beta.6...@cosmos-kit/frontier-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2-beta.5...@cosmos-kit/frontier-extension@0.2.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2-beta.4...@cosmos-kit/frontier-extension@0.2.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2-beta.3...@cosmos-kit/frontier-extension@0.2.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2...@cosmos-kit/frontier-extension@0.2.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.1...@cosmos-kit/frontier-extension@0.2.2) (2023-06-30) + +## [0.2.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2-beta.1...@cosmos-kit/frontier-extension@0.2.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.2-beta.0...@cosmos-kit/frontier-extension@0.2.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.1...@cosmos-kit/frontier-extension@0.2.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.2.0...@cosmos-kit/frontier-extension@0.2.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.33...@cosmos-kit/frontier-extension@0.2.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- add signArbitrary to Frontier extension ([2f3a5da](https://github.com/cosmology-tech/cosmos-kit/commit/2f3a5daa4779c17e0c3d152d81b065a86238e993)) +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.1.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.32...@cosmos-kit/frontier-extension@0.1.33) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.31...@cosmos-kit/frontier-extension@0.1.32) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.30...@cosmos-kit/frontier-extension@0.1.31) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.29...@cosmos-kit/frontier-extension@0.1.30) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.28...@cosmos-kit/frontier-extension@0.1.29) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.27...@cosmos-kit/frontier-extension@0.1.28) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.26...@cosmos-kit/frontier-extension@0.1.27) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.25...@cosmos-kit/frontier-extension@0.1.26) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.24...@cosmos-kit/frontier-extension@0.1.25) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.23...@cosmos-kit/frontier-extension@0.1.24) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.22...@cosmos-kit/frontier-extension@0.1.23) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.21...@cosmos-kit/frontier-extension@0.1.22) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.20...@cosmos-kit/frontier-extension@0.1.21) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.19...@cosmos-kit/frontier-extension@0.1.20) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.18...@cosmos-kit/frontier-extension@0.1.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.17...@cosmos-kit/frontier-extension@0.1.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.16...@cosmos-kit/frontier-extension@0.1.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.15...@cosmos-kit/frontier-extension@0.1.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.14...@cosmos-kit/frontier-extension@0.1.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.13...@cosmos-kit/frontier-extension@0.1.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.12...@cosmos-kit/frontier-extension@0.1.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.11...@cosmos-kit/frontier-extension@0.1.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.10...@cosmos-kit/frontier-extension@0.1.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.9...@cosmos-kit/frontier-extension@0.1.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.8...@cosmos-kit/frontier-extension@0.1.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.7...@cosmos-kit/frontier-extension@0.1.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.6...@cosmos-kit/frontier-extension@0.1.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.5...@cosmos-kit/frontier-extension@0.1.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.4...@cosmos-kit/frontier-extension@0.1.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.3...@cosmos-kit/frontier-extension@0.1.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.2...@cosmos-kit/frontier-extension@0.1.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.1...@cosmos-kit/frontier-extension@0.1.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.1.0...@cosmos-kit/frontier-extension@0.1.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +# [0.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.0.7...@cosmos-kit/frontier-extension@0.1.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.0.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.0.6...@cosmos-kit/frontier-extension@0.0.7) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.0.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.0.5...@cosmos-kit/frontier-extension@0.0.6) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.0.4...@cosmos-kit/frontier-extension@0.0.5) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.0.3...@cosmos-kit/frontier-extension@0.0.4) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## [0.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier-extension@0.0.2...@cosmos-kit/frontier-extension@0.0.3) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension + +## 0.0.2 (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/frontier-extension diff --git a/wallets/frontier-extension/LICENSE b/wallets/frontier-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/frontier-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/frontier-extension/README.md b/wallets/frontier-extension/README.md new file mode 100644 index 000000000..2a17e537e --- /dev/null +++ b/wallets/frontier-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/frontier-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/frontier-extension is the frontier integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/frontier-extension/index.ts b/wallets/frontier-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/frontier-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/frontier-extension/package.json b/wallets/frontier-extension/package.json new file mode 100644 index 000000000..4d3043bff --- /dev/null +++ b/wallets/frontier-extension/package.json @@ -0,0 +1,69 @@ +{ + "name": "@cosmos-kit/frontier-extension", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "mayank.yadav@leapwallet.io", + "contributors": [ + { + "name": "Mayank Yadav" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "leap", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/frontier-extension/src/constant.ts b/wallets/frontier-extension/src/constant.ts new file mode 100644 index 000000000..d15a8ad04 --- /dev/null +++ b/wallets/frontier-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/frontier-extension/src/extension/chain-wallet.ts b/wallets/frontier-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..4a2e72d0f --- /dev/null +++ b/wallets/frontier-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainFrontierExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/frontier-extension/src/extension/client.ts b/wallets/frontier-extension/src/extension/client.ts new file mode 100644 index 000000000..d37647597 --- /dev/null +++ b/wallets/frontier-extension/src/extension/client.ts @@ -0,0 +1,119 @@ +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { BroadcastMode, SignType } from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { Frontier } from './types'; +import Long from 'long'; + +export class FrontierClient implements WalletClient { + readonly client: Frontier; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Frontier) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async disconnect() { + await this.client.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/frontier-extension/src/extension/index.ts b/wallets/frontier-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/frontier-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/frontier-extension/src/extension/main-wallet.ts b/wallets/frontier-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..03fad96e6 --- /dev/null +++ b/wallets/frontier-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainFrontierExtension } from './chain-wallet'; +import { FrontierClient } from './client'; +import { getFrontierFromExtension } from './utils'; + +export class FrontierExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainFrontierExtension); + } + + async initClient() { + this.initingClient(); + try { + const frontier = await getFrontierFromExtension(); + this.initClientDone(frontier ? new FrontierClient(frontier) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/frontier-extension/src/extension/registry.ts b/wallets/frontier-extension/src/extension/registry.ts new file mode 100644 index 000000000..747e2a948 --- /dev/null +++ b/wallets/frontier-extension/src/extension/registry.ts @@ -0,0 +1,26 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const frontierExtensionInfo: Wallet = { + name: 'frontier-extension', + prettyName: 'Frontier', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/frontier-wallet/kppfdiipphfccemcignhifpjkapfbihd', + }, + { + link: + 'https://chrome.google.com/webstore/detail/frontier-wallet/kppfdiipphfccemcignhifpjkapfbihd', + }, + ], +}; diff --git a/wallets/frontier-extension/src/extension/types.ts b/wallets/frontier-extension/src/extension/types.ts new file mode 100644 index 000000000..efb6ec22d --- /dev/null +++ b/wallets/frontier-extension/src/extension/types.ts @@ -0,0 +1,56 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignDoc, + StdSignature, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode, Key } from '@cosmos-kit/core'; + +export interface FrontierSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Frontier { + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: FrontierSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: FrontierSignOptions + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; +} diff --git a/wallets/frontier-extension/src/extension/utils.ts b/wallets/frontier-extension/src/extension/utils.ts new file mode 100644 index 000000000..e31ce935f --- /dev/null +++ b/wallets/frontier-extension/src/extension/utils.ts @@ -0,0 +1,49 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Frontier } from './types'; + +interface FrontierWindow { + frontier?: { + cosmos: Frontier; + }; +} + +export const getFrontierFromExtension: () => Promise< + Frontier | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const frontier = (window as FrontierWindow).frontier?.cosmos; + + if (frontier) { + return frontier; + } + + if (document.readyState === 'complete') { + if (frontier) { + return frontier; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (frontier) { + resolve(frontier); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/frontier-extension/src/frontier.ts b/wallets/frontier-extension/src/frontier.ts new file mode 100644 index 000000000..e9f4f03f0 --- /dev/null +++ b/wallets/frontier-extension/src/frontier.ts @@ -0,0 +1,5 @@ +import { frontierExtensionInfo, FrontierExtensionWallet } from './extension'; + +const frontierExtension = new FrontierExtensionWallet(frontierExtensionInfo); + +export const wallets = [frontierExtension]; diff --git a/wallets/frontier-extension/src/index.ts b/wallets/frontier-extension/src/index.ts new file mode 100644 index 000000000..4faf0dfbd --- /dev/null +++ b/wallets/frontier-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './frontier'; diff --git a/wallets/frontier-extension/tsconfig.json b/wallets/frontier-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/frontier-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/frontier/.editorconfig b/wallets/frontier/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/frontier/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/frontier/.eslintignore b/wallets/frontier/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/frontier/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/frontier/.eslintrc.json b/wallets/frontier/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/frontier/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/frontier/.gitignore b/wallets/frontier/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/frontier/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/frontier/.npmignore b/wallets/frontier/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/frontier/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/frontier/.npmrc b/wallets/frontier/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/frontier/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/frontier/.prettierrc.json b/wallets/frontier/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/frontier/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/frontier/CHANGELOG.md b/wallets/frontier/CHANGELOG.md new file mode 100644 index 000000000..3ad508ebf --- /dev/null +++ b/wallets/frontier/CHANGELOG.md @@ -0,0 +1,780 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.10.1...@cosmos-kit/frontier@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.10.0...@cosmos-kit/frontier@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/frontier + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.9.0...@cosmos-kit/frontier@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.8.0...@cosmos-kit/frontier@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.7.0...@cosmos-kit/frontier@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/frontier + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.6.3...@cosmos-kit/frontier@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.6.2...@cosmos-kit/frontier@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.6.1...@cosmos-kit/frontier@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.6.0...@cosmos-kit/frontier@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.9...@cosmos-kit/frontier@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.8...@cosmos-kit/frontier@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.7...@cosmos-kit/frontier@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.6...@cosmos-kit/frontier@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.5...@cosmos-kit/frontier@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.4...@cosmos-kit/frontier@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.3...@cosmos-kit/frontier@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.2...@cosmos-kit/frontier@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.1...@cosmos-kit/frontier@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.5.0...@cosmos-kit/frontier@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.15...@cosmos-kit/frontier@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.14...@cosmos-kit/frontier@2.4.15) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.13...@cosmos-kit/frontier@2.4.14) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.12...@cosmos-kit/frontier@2.4.13) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.11...@cosmos-kit/frontier@2.4.12) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.10...@cosmos-kit/frontier@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.9...@cosmos-kit/frontier@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.8...@cosmos-kit/frontier@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.7...@cosmos-kit/frontier@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.6...@cosmos-kit/frontier@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.5...@cosmos-kit/frontier@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.4...@cosmos-kit/frontier@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.3...@cosmos-kit/frontier@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.2...@cosmos-kit/frontier@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.1...@cosmos-kit/frontier@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.4.0...@cosmos-kit/frontier@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.12...@cosmos-kit/frontier@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.11...@cosmos-kit/frontier@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.10...@cosmos-kit/frontier@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.9...@cosmos-kit/frontier@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.8...@cosmos-kit/frontier@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.7...@cosmos-kit/frontier@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.6...@cosmos-kit/frontier@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.5...@cosmos-kit/frontier@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.4...@cosmos-kit/frontier@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.3...@cosmos-kit/frontier@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.2...@cosmos-kit/frontier@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.1...@cosmos-kit/frontier@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.3.0...@cosmos-kit/frontier@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.2.1...@cosmos-kit/frontier@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.2.0...@cosmos-kit/frontier@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.12...@cosmos-kit/frontier@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.11...@cosmos-kit/frontier@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.10...@cosmos-kit/frontier@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.9...@cosmos-kit/frontier@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.8...@cosmos-kit/frontier@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.7...@cosmos-kit/frontier@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.6...@cosmos-kit/frontier@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.5...@cosmos-kit/frontier@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.4...@cosmos-kit/frontier@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.3...@cosmos-kit/frontier@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.2...@cosmos-kit/frontier@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.1...@cosmos-kit/frontier@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.1.0...@cosmos-kit/frontier@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.5...@cosmos-kit/frontier@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.4...@cosmos-kit/frontier@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.3...@cosmos-kit/frontier@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.2...@cosmos-kit/frontier@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1...@cosmos-kit/frontier@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.6...@cosmos-kit/frontier@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.5...@cosmos-kit/frontier@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.4...@cosmos-kit/frontier@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.3...@cosmos-kit/frontier@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.2...@cosmos-kit/frontier@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.1...@cosmos-kit/frontier@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@2.0.1-beta.0...@cosmos-kit/frontier@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@1.0.0...@cosmos-kit/frontier@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38-beta.6...@cosmos-kit/frontier@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38-beta.5...@cosmos-kit/frontier@0.1.38-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38-beta.4...@cosmos-kit/frontier@0.1.38-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38-beta.3...@cosmos-kit/frontier@0.1.38-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38...@cosmos-kit/frontier@0.1.38-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.37...@cosmos-kit/frontier@0.1.38) (2023-06-30) + +## [0.1.38-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38-beta.1...@cosmos-kit/frontier@0.1.38-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.38-beta.0...@cosmos-kit/frontier@0.1.38-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.38-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.37...@cosmos-kit/frontier@0.1.38-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.36...@cosmos-kit/frontier@0.1.37) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.35...@cosmos-kit/frontier@0.1.36) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.34...@cosmos-kit/frontier@0.1.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.33...@cosmos-kit/frontier@0.1.34) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.32...@cosmos-kit/frontier@0.1.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.31...@cosmos-kit/frontier@0.1.32) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.30...@cosmos-kit/frontier@0.1.31) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.29...@cosmos-kit/frontier@0.1.30) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.28...@cosmos-kit/frontier@0.1.29) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.27...@cosmos-kit/frontier@0.1.28) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.26...@cosmos-kit/frontier@0.1.27) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.25...@cosmos-kit/frontier@0.1.26) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.24...@cosmos-kit/frontier@0.1.25) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.23...@cosmos-kit/frontier@0.1.24) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.22...@cosmos-kit/frontier@0.1.23) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.21...@cosmos-kit/frontier@0.1.22) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.20...@cosmos-kit/frontier@0.1.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.19...@cosmos-kit/frontier@0.1.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.18...@cosmos-kit/frontier@0.1.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.17...@cosmos-kit/frontier@0.1.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.16...@cosmos-kit/frontier@0.1.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.15...@cosmos-kit/frontier@0.1.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.14...@cosmos-kit/frontier@0.1.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.13...@cosmos-kit/frontier@0.1.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.12...@cosmos-kit/frontier@0.1.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.11...@cosmos-kit/frontier@0.1.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.10...@cosmos-kit/frontier@0.1.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.9...@cosmos-kit/frontier@0.1.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.8...@cosmos-kit/frontier@0.1.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.7...@cosmos-kit/frontier@0.1.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.6...@cosmos-kit/frontier@0.1.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.5...@cosmos-kit/frontier@0.1.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.4...@cosmos-kit/frontier@0.1.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.3...@cosmos-kit/frontier@0.1.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.2...@cosmos-kit/frontier@0.1.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.1...@cosmos-kit/frontier@0.1.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.0...@cosmos-kit/frontier@0.1.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.0.3...@cosmos-kit/frontier@0.1.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.0.2...@cosmos-kit/frontier@0.0.3) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## 0.0.2 (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.30...@cosmos-kit/frontier@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.29...@cosmos-kit/frontier@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.28...@cosmos-kit/frontier@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.27...@cosmos-kit/frontier@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.26...@cosmos-kit/frontier@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.25...@cosmos-kit/frontier@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.24...@cosmos-kit/frontier@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.23...@cosmos-kit/frontier@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.21...@cosmos-kit/frontier@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.20...@cosmos-kit/frontier@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.19...@cosmos-kit/frontier@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.18...@cosmos-kit/frontier@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.17...@cosmos-kit/frontier@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.16...@cosmos-kit/frontier@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.15...@cosmos-kit/frontier@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.14...@cosmos-kit/frontier@0.13.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.13...@cosmos-kit/frontier@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.12...@cosmos-kit/frontier@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.11...@cosmos-kit/frontier@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.10...@cosmos-kit/frontier@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.9...@cosmos-kit/frontier@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.8...@cosmos-kit/frontier@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.7...@cosmos-kit/frontier@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.6...@cosmos-kit/frontier@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.5...@cosmos-kit/frontier@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.4...@cosmos-kit/frontier@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.3...@cosmos-kit/frontier@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.2...@cosmos-kit/frontier@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.1...@cosmos-kit/frontier@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.13.0...@cosmos-kit/frontier@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.12.0...@cosmos-kit/frontier@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.11.2...@cosmos-kit/frontier@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.11.1...@cosmos-kit/frontier@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.11.0...@cosmos-kit/frontier@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.6...@cosmos-kit/frontier@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.5...@cosmos-kit/frontier@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.4...@cosmos-kit/frontier@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.3...@cosmos-kit/frontier@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.2...@cosmos-kit/frontier@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.1...@cosmos-kit/frontier@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.10.0...@cosmos-kit/frontier@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.9.1...@cosmos-kit/frontier@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.9.0...@cosmos-kit/frontier@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.8.1...@cosmos-kit/frontier@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.8.0...@cosmos-kit/frontier@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.7.0...@cosmos-kit/frontier@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.6.0...@cosmos-kit/frontier@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.5.0...@cosmos-kit/frontier@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.4.2...@cosmos-kit/frontier@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.4.1...@cosmos-kit/frontier@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.4.0...@cosmos-kit/frontier@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.3.0...@cosmos-kit/frontier@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.2.2...@cosmos-kit/frontier@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.2.1...@cosmos-kit/frontier@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.2.0...@cosmos-kit/frontier@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.6...@cosmos-kit/frontier@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.5...@cosmos-kit/frontier@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.4...@cosmos-kit/frontier@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.3...@cosmos-kit/frontier@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.1...@cosmos-kit/frontier@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/frontier + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/frontier@0.1.0...@cosmos-kit/frontier@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/frontier + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/frontier/LICENSE b/wallets/frontier/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/frontier/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/frontier/README.md b/wallets/frontier/README.md new file mode 100644 index 000000000..679bd431c --- /dev/null +++ b/wallets/frontier/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/frontier + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/frontier is the frontier integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/frontier/index.ts b/wallets/frontier/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/frontier/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/frontier/package.json b/wallets/frontier/package.json new file mode 100644 index 000000000..e6e5e714c --- /dev/null +++ b/wallets/frontier/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/frontier", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "mayank.yadav@frontierwallet.io", + "contributors": [ + { + "name": "Mayank Yadav" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "frontier", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/frontier-extension": "^2.10.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/frontier/src/index.ts b/wallets/frontier/src/index.ts new file mode 100644 index 000000000..29922359d --- /dev/null +++ b/wallets/frontier/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/frontier-extension'; + +export const wallets = [...ext]; diff --git a/wallets/frontier/tsconfig.json b/wallets/frontier/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/frontier/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/galaxy-station-extension/.editorconfig b/wallets/galaxy-station-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/galaxy-station-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/galaxy-station-extension/.eslintignore b/wallets/galaxy-station-extension/.eslintignore new file mode 100644 index 000000000..14cc528b1 --- /dev/null +++ b/wallets/galaxy-station-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts diff --git a/wallets/galaxy-station-extension/.eslintrc.json b/wallets/galaxy-station-extension/.eslintrc.json new file mode 100644 index 000000000..0ecaa20af --- /dev/null +++ b/wallets/galaxy-station-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} diff --git a/wallets/galaxy-station-extension/.gitignore b/wallets/galaxy-station-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/galaxy-station-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/galaxy-station-extension/.npmignore b/wallets/galaxy-station-extension/.npmignore new file mode 100644 index 000000000..19e526a9f --- /dev/null +++ b/wallets/galaxy-station-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test diff --git a/wallets/galaxy-station-extension/.npmrc b/wallets/galaxy-station-extension/.npmrc new file mode 100644 index 000000000..5fca0d518 --- /dev/null +++ b/wallets/galaxy-station-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/wallets/galaxy-station-extension/.prettierrc.json b/wallets/galaxy-station-extension/.prettierrc.json new file mode 100644 index 000000000..e49d6527b --- /dev/null +++ b/wallets/galaxy-station-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} diff --git a/wallets/galaxy-station-extension/CHANGELOG.md b/wallets/galaxy-station-extension/CHANGELOG.md new file mode 100644 index 000000000..bceff5cdc --- /dev/null +++ b/wallets/galaxy-station-extension/CHANGELOG.md @@ -0,0 +1,474 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station-extension@2.11.1...@cosmos-kit/galaxy-station-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station-extension@2.11.0...@cosmos-kit/galaxy-station-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station-extension@2.10.0...@cosmos-kit/galaxy-station-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station-extension@2.9.0...@cosmos-kit/galaxy-station-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station-extension@2.8.0...@cosmos-kit/galaxy-station-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station-extension + + + + + +# 2.8.0 (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station-extension + + + + + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.7.1...@cosmos-kit/station-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.7.0...@cosmos-kit/station-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.10...@cosmos-kit/station-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.9...@cosmos-kit/station-extension@2.6.10) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.8...@cosmos-kit/station-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.7...@cosmos-kit/station-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.6...@cosmos-kit/station-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.5...@cosmos-kit/station-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.4...@cosmos-kit/station-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.3...@cosmos-kit/station-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.2...@cosmos-kit/station-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.1...@cosmos-kit/station-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.0...@cosmos-kit/station-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.14...@cosmos-kit/station-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.13...@cosmos-kit/station-extension@2.5.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.12...@cosmos-kit/station-extension@2.5.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.11...@cosmos-kit/station-extension@2.5.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.10...@cosmos-kit/station-extension@2.5.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.9...@cosmos-kit/station-extension@2.5.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.8...@cosmos-kit/station-extension@2.5.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.7...@cosmos-kit/station-extension@2.5.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.6...@cosmos-kit/station-extension@2.5.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.5...@cosmos-kit/station-extension@2.5.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.4...@cosmos-kit/station-extension@2.5.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.3...@cosmos-kit/station-extension@2.5.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.2...@cosmos-kit/station-extension@2.5.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.1...@cosmos-kit/station-extension@2.5.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.0...@cosmos-kit/station-extension@2.5.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.9...@cosmos-kit/station-extension@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.8...@cosmos-kit/station-extension@2.4.9) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.7...@cosmos-kit/station-extension@2.4.8) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.6...@cosmos-kit/station-extension@2.4.7) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.5...@cosmos-kit/station-extension@2.4.6) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.4...@cosmos-kit/station-extension@2.4.5) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.3...@cosmos-kit/station-extension@2.4.4) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.2...@cosmos-kit/station-extension@2.4.3) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.1...@cosmos-kit/station-extension@2.4.2) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.0...@cosmos-kit/station-extension@2.4.1) (2023-09-07) + +### Bug Fixes + +- terra initial connect ([ac29e95](https://github.com/cosmology-tech/cosmos-kit/commit/ac29e95d31764432c21c4ca3361ed28b3885a8e4)) + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.3...@cosmos-kit/station-extension@2.4.0) (2023-09-02) + +### Features + +- Add Missing Sign Methods to Wallet Clients ([#1](https://github.com/cosmology-tech/cosmos-kit/issues/1)) ([0657840](https://github.com/cosmology-tech/cosmos-kit/commit/06578403a64a210023943031c40a9caf70d49866)) + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.2...@cosmos-kit/station-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.1...@cosmos-kit/station-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.0...@cosmos-kit/station-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.2.1...@cosmos-kit/station-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.2.0...@cosmos-kit/station-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.12...@cosmos-kit/station-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.11...@cosmos-kit/station-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.10...@cosmos-kit/station-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.9...@cosmos-kit/station-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.8...@cosmos-kit/station-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.7...@cosmos-kit/station-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.6...@cosmos-kit/station-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.5...@cosmos-kit/station-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.4...@cosmos-kit/station-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.3...@cosmos-kit/station-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.2...@cosmos-kit/station-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.1...@cosmos-kit/station-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.0...@cosmos-kit/station-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.5...@cosmos-kit/station-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.4...@cosmos-kit/station-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.3...@cosmos-kit/station-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.2...@cosmos-kit/station-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1...@cosmos-kit/station-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.6...@cosmos-kit/station-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.5...@cosmos-kit/station-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.4...@cosmos-kit/station-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.3...@cosmos-kit/station-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.2...@cosmos-kit/station-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.1...@cosmos-kit/station-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.0...@cosmos-kit/station-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@1.0.0...@cosmos-kit/station-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.6...@cosmos-kit/station-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.5...@cosmos-kit/station-extension@0.8.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.4...@cosmos-kit/station-extension@0.8.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.3...@cosmos-kit/station-extension@0.8.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2...@cosmos-kit/station-extension@0.8.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.1...@cosmos-kit/station-extension@0.8.2) (2023-06-30) + +## [0.8.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.1...@cosmos-kit/station-extension@0.8.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.0...@cosmos-kit/station-extension@0.8.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.1...@cosmos-kit/station-extension@0.8.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.0...@cosmos-kit/station-extension@0.8.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.11...@cosmos-kit/station-extension@0.8.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.7.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.10...@cosmos-kit/station-extension@0.7.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.9...@cosmos-kit/station-extension@0.7.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.8...@cosmos-kit/station-extension@0.7.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.7...@cosmos-kit/station-extension@0.7.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.6...@cosmos-kit/station-extension@0.7.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.5...@cosmos-kit/station-extension@0.7.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.4...@cosmos-kit/station-extension@0.7.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.3...@cosmos-kit/station-extension@0.7.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.2...@cosmos-kit/station-extension@0.7.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.1...@cosmos-kit/station-extension@0.7.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.0...@cosmos-kit/station-extension@0.7.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.6.2...@cosmos-kit/station-extension@0.7.0) (2023-05-02) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.6.1...@cosmos-kit/station-extension@0.6.2) (2023-04-28) + +### Bug Fixes + +- get correct station address by chain id ([64ce69a](https://github.com/cosmology-tech/cosmos-kit/commit/64ce69ab79acd5aeb1c384fcb7a3722212194742)) + +## [0.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.6.0...@cosmos-kit/station-extension@0.6.1) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.5.1...@cosmos-kit/station-extension@0.6.0) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.5.0...@cosmos-kit/station-extension@0.5.1) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.4.0...@cosmos-kit/station-extension@0.5.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.3.0...@cosmos-kit/station-extension@0.4.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.2.0...@cosmos-kit/station-extension@0.3.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# 0.2.0 (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# 0.1.0 (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/terra-extension + +# 0.0.1 (2023-01-30) + +**Note:** First release! diff --git a/wallets/galaxy-station-extension/LICENSE b/wallets/galaxy-station-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/galaxy-station-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/galaxy-station-extension/README.md b/wallets/galaxy-station-extension/README.md new file mode 100644 index 000000000..de6f97172 --- /dev/null +++ b/wallets/galaxy-station-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/galaxy-station-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/galaxy-station-extension is the Galaxy Station integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/galaxy-station-extension/index.ts b/wallets/galaxy-station-extension/index.ts new file mode 100644 index 000000000..f9f79b4a1 --- /dev/null +++ b/wallets/galaxy-station-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; diff --git a/wallets/galaxy-station-extension/package.json b/wallets/galaxy-station-extension/package.json new file mode 100644 index 000000000..7f7ec2bf8 --- /dev/null +++ b/wallets/galaxy-station-extension/package.json @@ -0,0 +1,68 @@ +{ + "name": "@cosmos-kit/galaxy-station-extension", + "version": "2.11.2", + "description": "@cosmos-kit/galaxy-station-extension is the Galaxy Station integration for CosmosKit", + "author": "Hexxagon", + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "hexxagon", + "galaxy-station", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/types": "0.45.1", + "@cosmos-kit/core": "^2.13.1", + "@hexxagon/feather.js": "^1.0.9-beta.8", + "@hexxagon/station-connector": "^1.0.17" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/galaxy-station-extension/src/constant.ts b/wallets/galaxy-station-extension/src/constant.ts new file mode 100644 index 000000000..4a8bd0da1 --- /dev/null +++ b/wallets/galaxy-station-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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jfKFrMsK5y3OarnKmvfkLwzlteU012kNIY5FJJCECBlVbKAMC1HaNVJMpOg85uEfdPxJcsnk2gAjxzwqUCE5fvA/+D1bszA54SaFYkDni21/DAOBXaBRs+3vY9tunAD+Z+BKa/krdWDmk/RaS4scAb3bwMV1S5P3gMsdYOBJlwzJkfy0hEIBeD+jb8oBfbdAcNWdW/Mcpw9Ahma1dAMcHAIjRcpe83h3d/vc/u1pzu8HVyBynD8gfhoAAA0YaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmMyZjAyMTY3LTNjMjctNGRhZC1iMjUyLTMyMzY1MWU0ZjU2OCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjZTFiZGY0OC0xODdjLTQzNjAtYTBkZC1jYjhjZWI2MzEwNGEiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiN2NmZWZkNi1jNWM3LTQ0ZjQtYTg4Yy02MzJkOTM4MTNhNWIiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTY5NjU1NjQ3ODM3MjAxNCIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjMwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjc2ODIxZTEyLWZmMmQtNGM3Ni05OWY0LTVhYzJmNTE4ZTJhNCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMy0xMC0wNVQxODo0MToxOCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7oWeF2AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5woG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'; diff --git a/wallets/galaxy-station-extension/src/extension/chain-wallet.ts b/wallets/galaxy-station-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..a20f7c3c3 --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainStationExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/galaxy-station-extension/src/extension/client.ts b/wallets/galaxy-station-extension/src/extension/client.ts new file mode 100644 index 000000000..1d74a7aef --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/client.ts @@ -0,0 +1,83 @@ +/* eslint-disable no-unsafe-optional-chaining */ +import { AminoSignResponse, StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { SignOptions, WalletAccount, WalletClient } from '@cosmos-kit/core'; +import Station from '@hexxagon/station-connector'; + +export class GalaxyStationClient implements WalletClient { + readonly client: Station; + + constructor(client: Station) { + this.client = client; + } + + async disconnect() { + return; + } + + async getSimpleAccount(chainId: string) { + const { name, addresses } = await this.client.connect(); + + const address = addresses[chainId]; + + if (!address) + throw new Error( + `Requested chainId (${chainId}) is not available, try to switch network on the Galaxy Station extension.` + ); + + return { + namespace: 'cosmos', + chainId, + address, + username: name, + }; + } + + async getAccount(chainId: string): Promise { + const info = (await this.client.info())[chainId]; + if (!info) + throw new Error( + `The requested chainID (${chainId}) is not available, try to switch network on the Galaxy Station extension.` + ); + + let { name, addresses, pubkey: pubkeys } = await this.client.connect(); + if (!pubkeys) { + pubkeys = (await this.client.getPublicKey()).pubkey; + } + const pubkey = pubkeys?.[info.coinType]; + const address = addresses[chainId]; + + if (!address || !pubkey) + throw new Error( + 'The requested account is not available, try to use a different wallet on the Galaxy Station extension or to import it again.' + ); + + return { + address, + pubkey: Buffer.from(pubkey, 'base64'), + username: name, + isNanoLedger: true, + algo: 'secp256k1', + }; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + _signOptions?: SignOptions + ): Promise { + return await this.client.keplr.signAmino(chainId, signer, signDoc); + } + + async getOfflineSigner(chainId: string) { + return await this.client.getOfflineSigner(chainId); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.keplr.signArbitrary(chainId, signer, data); + } +} diff --git a/wallets/galaxy-station-extension/src/extension/index.ts b/wallets/galaxy-station-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/galaxy-station-extension/src/extension/main-wallet.ts b/wallets/galaxy-station-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..829180acf --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/main-wallet.ts @@ -0,0 +1,24 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainStationExtension } from './chain-wallet'; +import { GalaxyStationClient } from './client'; +import { getGalaxyStationFromExtension } from './utils'; + +export class GalaxyStationExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainStationExtension); + } + + async initClient() { + this.initingClient(); + try { + const galaxystation = await getGalaxyStationFromExtension(); + this.initClientDone( + galaxystation ? new GalaxyStationClient(galaxystation) : undefined + ); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/galaxy-station-extension/src/extension/registry.ts b/wallets/galaxy-station-extension/src/extension/registry.ts new file mode 100644 index 000000000..7037ce0f2 --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/registry.ts @@ -0,0 +1,25 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const galaxyStationExtensionInfo: Wallet = { + name: 'galaxy-station-extension', + prettyName: 'Galaxy Station', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + connectEventNamesOnWindow: [ + 'galaxy_station_wallet_change', + 'galaxy_station_network_change', + ], + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chromewebstore.google.com/detail/galaxy-station-wallet/akckefnapafjbpphkefbpkpcamkoaoai', + }, + ], +}; diff --git a/wallets/galaxy-station-extension/src/extension/types.ts b/wallets/galaxy-station-extension/src/extension/types.ts new file mode 100644 index 000000000..c2d190420 --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/types.ts @@ -0,0 +1,19 @@ +export type ChainId = string; + +export type Addresses = Record; + +export type CoinType = number; + +export type Pubkeys = Record; + +export interface NetworkInfo { + baseAsset: string; + chainID: string; + coinType: string; + gasAdjustment: number; + gasPrices: Record; + icon: string; + lcd: string; + name: string; + prefix: string; +} diff --git a/wallets/galaxy-station-extension/src/extension/utils.ts b/wallets/galaxy-station-extension/src/extension/utils.ts new file mode 100644 index 000000000..a91a443ef --- /dev/null +++ b/wallets/galaxy-station-extension/src/extension/utils.ts @@ -0,0 +1,47 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; +import Station from '@hexxagon/station-connector'; + +interface StationWindow { + galaxyStation?: Station; +} + +export const getGalaxyStationFromExtension: () => Promise< + Station | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const station = (window as StationWindow).galaxyStation; + + if (station) { + return station; + } + + if (document.readyState === 'complete') { + if (station) { + return station; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + const station = (window as StationWindow).galaxyStation; + if (station) { + resolve(station); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/galaxy-station-extension/src/galaxy-station.ts b/wallets/galaxy-station-extension/src/galaxy-station.ts new file mode 100644 index 000000000..2e3cbdee1 --- /dev/null +++ b/wallets/galaxy-station-extension/src/galaxy-station.ts @@ -0,0 +1,10 @@ +import { + galaxyStationExtensionInfo, + GalaxyStationExtensionWallet, +} from './extension'; + +const galaxyStationExtension = new GalaxyStationExtensionWallet( + galaxyStationExtensionInfo +); + +export const wallets = [galaxyStationExtension]; diff --git a/wallets/galaxy-station-extension/src/index.ts b/wallets/galaxy-station-extension/src/index.ts new file mode 100644 index 000000000..411519998 --- /dev/null +++ b/wallets/galaxy-station-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './galaxy-station'; diff --git a/wallets/galaxy-station-extension/tsconfig.json b/wallets/galaxy-station-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/galaxy-station-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/galaxy-station/.editorconfig b/wallets/galaxy-station/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/galaxy-station/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/galaxy-station/.eslintignore b/wallets/galaxy-station/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/galaxy-station/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/galaxy-station/.eslintrc.json b/wallets/galaxy-station/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/galaxy-station/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/galaxy-station/.gitignore b/wallets/galaxy-station/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/galaxy-station/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/galaxy-station/.prettierrc.json b/wallets/galaxy-station/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/galaxy-station/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/galaxy-station/CHANGELOG.md b/wallets/galaxy-station/CHANGELOG.md new file mode 100644 index 000000000..c7a8ed640 --- /dev/null +++ b/wallets/galaxy-station/CHANGELOG.md @@ -0,0 +1,686 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station@2.10.1...@cosmos-kit/galaxy-station@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station@2.10.0...@cosmos-kit/galaxy-station@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station@2.9.0...@cosmos-kit/galaxy-station@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station@2.8.0...@cosmos-kit/galaxy-station@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/galaxy-station@2.7.0...@cosmos-kit/galaxy-station@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station + + + + + +# 2.7.0 (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/galaxy-station + + + + + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.6.1...@cosmos-kit/station@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.6.0...@cosmos-kit/station@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.10...@cosmos-kit/station@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.9...@cosmos-kit/station@2.5.10) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.8...@cosmos-kit/station@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.7...@cosmos-kit/station@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.6...@cosmos-kit/station@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.5...@cosmos-kit/station@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.4...@cosmos-kit/station@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.3...@cosmos-kit/station@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.2...@cosmos-kit/station@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.1...@cosmos-kit/station@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.0...@cosmos-kit/station@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.14...@cosmos-kit/station@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.13...@cosmos-kit/station@2.4.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.12...@cosmos-kit/station@2.4.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.11...@cosmos-kit/station@2.4.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.10...@cosmos-kit/station@2.4.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.9...@cosmos-kit/station@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.8...@cosmos-kit/station@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.7...@cosmos-kit/station@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.6...@cosmos-kit/station@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.5...@cosmos-kit/station@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.4...@cosmos-kit/station@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.3...@cosmos-kit/station@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.2...@cosmos-kit/station@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.1...@cosmos-kit/station@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.0...@cosmos-kit/station@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.13...@cosmos-kit/station@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.12...@cosmos-kit/station@2.3.13) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.11...@cosmos-kit/station@2.3.12) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.10...@cosmos-kit/station@2.3.11) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.9...@cosmos-kit/station@2.3.10) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.8...@cosmos-kit/station@2.3.9) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.7...@cosmos-kit/station@2.3.8) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.6...@cosmos-kit/station@2.3.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.5...@cosmos-kit/station@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.4...@cosmos-kit/station@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.3...@cosmos-kit/station@2.3.4) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.2...@cosmos-kit/station@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.1...@cosmos-kit/station@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.0...@cosmos-kit/station@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.2.1...@cosmos-kit/station@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.2.0...@cosmos-kit/station@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.12...@cosmos-kit/station@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.11...@cosmos-kit/station@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.10...@cosmos-kit/station@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.9...@cosmos-kit/station@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.8...@cosmos-kit/station@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.7...@cosmos-kit/station@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.6...@cosmos-kit/station@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.5...@cosmos-kit/station@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.4...@cosmos-kit/station@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.3...@cosmos-kit/station@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.2...@cosmos-kit/station@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.1...@cosmos-kit/station@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.0...@cosmos-kit/station@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.5...@cosmos-kit/station@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.4...@cosmos-kit/station@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.3...@cosmos-kit/station@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.2...@cosmos-kit/station@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1...@cosmos-kit/station@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.6...@cosmos-kit/station@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.5...@cosmos-kit/station@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.4...@cosmos-kit/station@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.3...@cosmos-kit/station@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.2...@cosmos-kit/station@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.1...@cosmos-kit/station@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.0...@cosmos-kit/station@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@1.0.0...@cosmos-kit/station@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.6...@cosmos-kit/station@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.5...@cosmos-kit/station@0.7.15-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.4...@cosmos-kit/station@0.7.15-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.3...@cosmos-kit/station@0.7.15-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15...@cosmos-kit/station@0.7.15-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.14...@cosmos-kit/station@0.7.15) (2023-06-30) + +## [0.7.15-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.1...@cosmos-kit/station@0.7.15-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.0...@cosmos-kit/station@0.7.15-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.14...@cosmos-kit/station@0.7.15-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.13...@cosmos-kit/station@0.7.14) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.12...@cosmos-kit/station@0.7.13) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.11...@cosmos-kit/station@0.7.12) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.10...@cosmos-kit/station@0.7.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.9...@cosmos-kit/station@0.7.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.8...@cosmos-kit/station@0.7.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.7...@cosmos-kit/station@0.7.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.6...@cosmos-kit/station@0.7.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.5...@cosmos-kit/station@0.7.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.4...@cosmos-kit/station@0.7.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.3...@cosmos-kit/station@0.7.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.2...@cosmos-kit/station@0.7.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.1...@cosmos-kit/station@0.7.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.0...@cosmos-kit/station@0.7.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.6.2...@cosmos-kit/station@0.7.0) (2023-05-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.6.1...@cosmos-kit/station@0.6.2) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.6.0...@cosmos-kit/station@0.6.1) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.5.1...@cosmos-kit/station@0.6.0) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.5.0...@cosmos-kit/station@0.5.1) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.4.0...@cosmos-kit/station@0.5.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.3.0...@cosmos-kit/station@0.4.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.2.0...@cosmos-kit/station@0.3.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# 0.2.0 (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.6...@cosmos-kit/terrastation@0.1.7) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.5...@cosmos-kit/terrastation@0.1.6) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.4...@cosmos-kit/terrastation@0.1.5) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.3...@cosmos-kit/terrastation@0.1.4) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.2...@cosmos-kit/terrastation@0.1.3) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.1...@cosmos-kit/terrastation@0.1.2) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## 0.1.1 (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.11...@cosmos-kit/station@0.15.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.10...@cosmos-kit/station@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.9...@cosmos-kit/station@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.8...@cosmos-kit/station@0.15.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.7...@cosmos-kit/station@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.6...@cosmos-kit/station@0.15.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.5...@cosmos-kit/station@0.15.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.4...@cosmos-kit/station@0.15.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.3...@cosmos-kit/station@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.2...@cosmos-kit/station@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.1...@cosmos-kit/station@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.0...@cosmos-kit/station@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.33...@cosmos-kit/station@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.32...@cosmos-kit/station@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.31...@cosmos-kit/station@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.30...@cosmos-kit/station@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.29...@cosmos-kit/station@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.28...@cosmos-kit/station@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.27...@cosmos-kit/station@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.26...@cosmos-kit/station@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.25...@cosmos-kit/station@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.24...@cosmos-kit/station@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.23...@cosmos-kit/station@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.21...@cosmos-kit/station@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.20...@cosmos-kit/station@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.19...@cosmos-kit/station@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.18...@cosmos-kit/station@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.17...@cosmos-kit/station@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.16...@cosmos-kit/station@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.15...@cosmos-kit/station@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.14...@cosmos-kit/station@0.14.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.13...@cosmos-kit/station@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.12...@cosmos-kit/station@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.11...@cosmos-kit/station@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.10...@cosmos-kit/station@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.9...@cosmos-kit/station@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.8...@cosmos-kit/station@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.7...@cosmos-kit/station@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.6...@cosmos-kit/station@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.5...@cosmos-kit/station@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.4...@cosmos-kit/station@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.3...@cosmos-kit/station@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.2...@cosmos-kit/station@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.1...@cosmos-kit/station@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.0...@cosmos-kit/station@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.13.0...@cosmos-kit/station@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.12.1...@cosmos-kit/station@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.12.0...@cosmos-kit/station@0.12.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/station + +# 0.12.0 (2022-11-30) + +### Features + +- station wallet integration ([471b656](https://github.com/cosmology-tech/cosmos-kit/commit/471b65678d2df1a074a6d91e9899df5e86454cb2)) diff --git a/wallets/galaxy-station/README.md b/wallets/galaxy-station/README.md new file mode 100644 index 000000000..7d446e510 --- /dev/null +++ b/wallets/galaxy-station/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/galaxy-station + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/galaxy-station is the Galaxy Station integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/galaxy-station/index.ts b/wallets/galaxy-station/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/galaxy-station/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/galaxy-station/package.json b/wallets/galaxy-station/package.json new file mode 100644 index 000000000..19b588f24 --- /dev/null +++ b/wallets/galaxy-station/package.json @@ -0,0 +1,54 @@ +{ + "name": "@cosmos-kit/galaxy-station", + "version": "2.10.2", + "description": "@cosmos-kit/station is the Galaxy Station integration for CosmosKit", + "author": "Hexxagon", + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "galaxy-station", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/galaxy-station-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/galaxy-station/src/index.ts b/wallets/galaxy-station/src/index.ts new file mode 100644 index 000000000..1eaf1dec7 --- /dev/null +++ b/wallets/galaxy-station/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/galaxy-station-extension'; + +export const wallets = [...ext]; diff --git a/wallets/galaxy-station/tsconfig.json b/wallets/galaxy-station/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/galaxy-station/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/initia-extension/.editorconfig b/wallets/initia-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/initia-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/initia-extension/.eslintignore b/wallets/initia-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/initia-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/initia-extension/.eslintrc.json b/wallets/initia-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/initia-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/initia-extension/.gitignore b/wallets/initia-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/initia-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/initia-extension/.npmignore b/wallets/initia-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/initia-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/initia-extension/.npmrc b/wallets/initia-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/initia-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/initia-extension/.prettierrc.json b/wallets/initia-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/initia-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/initia-extension/CHANGELOG.md b/wallets/initia-extension/CHANGELOG.md new file mode 100644 index 000000000..e46c58aaa --- /dev/null +++ b/wallets/initia-extension/CHANGELOG.md @@ -0,0 +1,126 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.8.1...@cosmos-kit/initia-extension@0.8.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + + + + + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.8.0...@cosmos-kit/initia-extension@0.8.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + + + + + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.7.0...@cosmos-kit/initia-extension@0.8.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + + + + + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.6.0...@cosmos-kit/initia-extension@0.7.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + + + + + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.5.0...@cosmos-kit/initia-extension@0.6.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + + + + + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.4.2...@cosmos-kit/initia-extension@0.5.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + + + + + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.4.1...@cosmos-kit/initia-extension@0.4.2) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.4.0...@cosmos-kit/initia-extension@0.4.1) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.3.0...@cosmos-kit/initia-extension@0.4.0) (2024-04-27) + +### Features + +- migrate initia package to the maintained one ([bd826e8](https://github.com/cosmology-tech/cosmos-kit/commit/bd826e84494e4ccf8867a5a24e7c5dd45e7e8ac0)) + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.9...@cosmos-kit/initia-extension@0.3.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.8...@cosmos-kit/initia-extension@0.2.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.7...@cosmos-kit/initia-extension@0.2.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.6...@cosmos-kit/initia-extension@0.2.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.5...@cosmos-kit/initia-extension@0.2.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.4...@cosmos-kit/initia-extension@0.2.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.3...@cosmos-kit/initia-extension@0.2.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.2...@cosmos-kit/initia-extension@0.2.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.1...@cosmos-kit/initia-extension@0.2.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.2.0...@cosmos-kit/initia-extension@0.2.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia-extension@0.1.0...@cosmos-kit/initia-extension@0.2.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/initia-extension + +# 0.1.0 (2023-12-26) + +### Bug Fixes + +- icon ([068b79b](https://github.com/cosmology-tech/cosmos-kit/commit/068b79bfb66a030ec11578a8d351107732030811)) +- remove unused section and add initia logo ([78c75dc](https://github.com/cosmology-tech/cosmos-kit/commit/78c75dcd9c46aee2fb9b07c479540b0e43c5ab15)) + +### Features + +- add initia-extension ([76cf97a](https://github.com/cosmology-tech/cosmos-kit/commit/76cf97a048c6e5a45e4729b81b3c0caba0a3d5b7)) +- initia package ([ced0ef8](https://github.com/cosmology-tech/cosmos-kit/commit/ced0ef8f4d2e0b1f6dd815003dc351f8eda39d6a)) + +# 0.0.1 (2023-12-20) + +**Note:** First release! diff --git a/wallets/initia-extension/LICENSE b/wallets/initia-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/initia-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/initia-extension/README.md b/wallets/initia-extension/README.md new file mode 100644 index 000000000..f3b3e91e2 --- /dev/null +++ b/wallets/initia-extension/README.md @@ -0,0 +1,36 @@ +# @cosmos-kit/initia-extension + +

+ +

+ +

+ + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/initia is the Initia integration for CosmosKit. + +## Related + +Checkout these related projects: + +- [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +- [@cosmology/telescope](https://github.com/cosmology-tech/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs. +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry. +- [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️ +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +- [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/initia-extension/index.ts b/wallets/initia-extension/index.ts new file mode 100644 index 000000000..e31be21f6 --- /dev/null +++ b/wallets/initia-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development. +export * from './src'; diff --git a/wallets/initia-extension/package.json b/wallets/initia-extension/package.json new file mode 100644 index 000000000..d9a1d119c --- /dev/null +++ b/wallets/initia-extension/package.json @@ -0,0 +1,77 @@ +{ + "name": "@cosmos-kit/initia-extension", + "version": "0.8.2", + "description": "@cosmos-kit/initia-extension is the Initia integration for CosmosKit", + "author": "kanisorn@alleslabs.com", + "contributors": [ + { + "name": "Kanisorn", + "email": "kanisorn@alleslabs.com" + }, + { + "name": "Songwong", + "email": "songwong@alleslabs.com" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "initia", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1", + "@initia/initia-registry-types": "^0.0.17", + "@initia/initia.proto": "^0.1.33" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/initia-extension/src/constant.ts b/wallets/initia-extension/src/constant.ts new file mode 100644 index 000000000..8dc74d430 --- /dev/null +++ b/wallets/initia-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQ5IiBoZWlnaHQ9IjE0OCIgdmlld0JveD0iMCAwIDE0OSAxNDgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik03NC4xMDggMTQ4QzExNS4wMzcgMTQ4IDE0OC4yMTYgMTE0Ljg2OSAxNDguMjE2IDc0QzE0OC4yMTYgMzMuMTMwOSAxMTUuMDM3IDAgNzQuMTA4IDBDMzMuMTc5MyAwIDAgMzMuMTMwOSAwIDc0QzAgMTE0Ljg2OSAzMy4xNzkzIDE0OCA3NC4xMDggMTQ4WiIgZmlsbD0iIzFFMUUxRSIvPgo8cGF0aCBkPSJNODAuMzM4NSA1Ny45NjI3QzgwLjQ0MjQgNTEuNTY4NSA4NC45NzY5IDQ2LjE3NjYgOTEuMTcyNyA0NC45NjdWMzIuNDU1MUM4NC44Mzg0IDMzLjExMTggNzguOTU0IDM2LjA4NDIgNzQuNjI3NCA0MC44NTM5TDc0LjE0MjcgNDEuNDA2OUw3My42NTgyIDQwLjg1MzlDNjkuMzMxNCAzNi4wNDk2IDYzLjQ4MTcgMzMuMTExOCA1Ny4xMTI4IDMyLjQ1NTFWNDQuOTY3QzYzLjMwODYgNDYuMTc2NiA2Ny44NDMgNTEuNTY4NSA2Ny45NDY5IDU3LjkyODJWOTAuMDM3NEM2Ny44NDMgOTYuNDMxNiA2My4zMDg2IDEwMS44MjQgNTcuMTEyOCAxMDMuMDMzVjExNS41NDZDNjMuNDQ3MSAxMTQuODg4IDY5LjMzMTQgMTExLjkxNiA3My42NTgyIDEwNy4xNDZMNzQuMTQyNyAxMDYuNTkzTDc0LjYyNzQgMTA3LjE0NkM3OC45NTQgMTExLjk1IDg0LjgwMzggMTE0Ljg4OCA5MS4xNzI3IDExNS41NDZWMTAzLjAzM0M4NC45NzY5IDEwMS44MjQgODAuNDQyNCA5Ni40MzE3IDgwLjMzODUgOTAuMDcyVjU3Ljk2MjdaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K'; diff --git a/wallets/initia-extension/src/extension/chain-wallet.ts b/wallets/initia-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..3ff033267 --- /dev/null +++ b/wallets/initia-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainInitiaExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/initia-extension/src/extension/client.ts b/wallets/initia-extension/src/extension/client.ts new file mode 100644 index 000000000..6a9eea15d --- /dev/null +++ b/wallets/initia-extension/src/extension/client.ts @@ -0,0 +1,60 @@ +import { Algo } from '@cosmjs/proto-signing'; +import { + DirectSignDoc, + SignOptions, + WalletAccount, + WalletClient, +} from '@cosmos-kit/core'; + +import { InitiaWallet } from './type'; + +export class InitiaClient implements WalletClient { + readonly client: InitiaWallet; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: InitiaWallet) { + this.client = client; + } + + async getSimpleAccount(chainId: string) { + const address = await this.client.getAddress(chainId); + return { + namespace: 'cosmos', + chainId, + address, + }; + } + + getOfflineSigner(chainId: string) { + return this.client.getOfflineSigner(chainId); + } + + async getAccount(chainId: string): Promise { + const offlineSigner = this.getOfflineSigner(chainId); + const key = (await offlineSigner.getAccounts())[0]; + + return { + address: key.address, + algo: key.algo as Algo, + pubkey: key.pubkey, + }; + } + + async signDirect(chainId: string, signer: string, signDoc: DirectSignDoc) { + const offlineSigner = this.getOfflineSigner(chainId); + + return await offlineSigner.signDirect(signer, signDoc); + } +} diff --git a/wallets/initia-extension/src/extension/index.ts b/wallets/initia-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/initia-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/initia-extension/src/extension/main-wallet.ts b/wallets/initia-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..e94eb6c43 --- /dev/null +++ b/wallets/initia-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainInitiaExtension } from './chain-wallet'; +import { InitiaClient } from './client'; +import { getInitiaFromExtension } from './utils'; + +export class InitiaExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainInitiaExtension); + } + + async initClient() { + this.initingClient(); + try { + const initia = await getInitiaFromExtension(); + this.initClientDone(initia ? new InitiaClient(initia) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/initia-extension/src/extension/registry.ts b/wallets/initia-extension/src/extension/registry.ts new file mode 100644 index 000000000..c4fec1474 --- /dev/null +++ b/wallets/initia-extension/src/extension/registry.ts @@ -0,0 +1,25 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const initiaExtensionInfo: Wallet = { + name: 'initia-extension', + prettyName: 'Initia', + logo: ICON, + mode: 'extension', + // In the Initia Mobile in-app browser, Initia is available in window.initia, + // similar to the extension on a desktop browser. For this reason, we must + // check what mode the window.initia client is in once it's available. + mobileDisabled: () => !('initia' in window), + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['initia_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chromewebstore.google.com/detail/initia-wallet/ffbceckpkpbcmgiaehlloocglmijnpmp', + }, + ], +}; diff --git a/wallets/initia-extension/src/extension/type.ts b/wallets/initia-extension/src/extension/type.ts new file mode 100644 index 000000000..cdf1200f3 --- /dev/null +++ b/wallets/initia-extension/src/extension/type.ts @@ -0,0 +1,19 @@ +import type { OfflineDirectSigner } from '@cosmjs/proto-signing'; +import type { DeliverTxResponse } from '@cosmjs/stargate'; +import type { Chain } from '@initia/initia-registry-types'; + +export interface InitiaWallet { + version: string; + getAddress: (chainId: string) => Promise; + signAndBroadcast: ( + chainId: string, + txBody: Uint8Array + ) => Promise; + getOfflineSigner: (chainId: string) => OfflineDirectSigner; + requestAddInitiaLayer: (chain: Partial) => Promise; + signArbitrary: (data: string | Uint8Array) => Promise; + verifyArbitrary: ( + data: string | Uint8Array, + signature: string + ) => Promise; +} diff --git a/wallets/initia-extension/src/extension/utils.ts b/wallets/initia-extension/src/extension/utils.ts new file mode 100644 index 000000000..884c4dff6 --- /dev/null +++ b/wallets/initia-extension/src/extension/utils.ts @@ -0,0 +1,48 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { InitiaWallet } from './type'; + +interface InitiaWindow { + initia?: InitiaWallet; +} + +export const getInitiaFromExtension: () => Promise< + InitiaWallet | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const initia = (window as InitiaWindow).initia; + + if (initia) { + return initia; + } + + if (document.readyState === 'complete') { + if (initia) { + return initia; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + const initia = (window as InitiaWindow).initia; + if (initia) { + resolve(initia); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/initia-extension/src/index.ts b/wallets/initia-extension/src/index.ts new file mode 100644 index 000000000..cd8d1b5b3 --- /dev/null +++ b/wallets/initia-extension/src/index.ts @@ -0,0 +1,3 @@ +export * from './extension'; +export * from './extension/client'; +export * from './initia'; diff --git a/wallets/initia-extension/src/initia.ts b/wallets/initia-extension/src/initia.ts new file mode 100644 index 000000000..876af6277 --- /dev/null +++ b/wallets/initia-extension/src/initia.ts @@ -0,0 +1,5 @@ +import { initiaExtensionInfo, InitiaExtensionWallet } from './extension'; + +const initiaExtension = new InitiaExtensionWallet(initiaExtensionInfo); + +export const wallets = [initiaExtension]; diff --git a/wallets/initia-extension/tsconfig.json b/wallets/initia-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/initia-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/initia/.editorconfig b/wallets/initia/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/initia/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/initia/.eslintignore b/wallets/initia/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/initia/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/initia/.eslintrc.json b/wallets/initia/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/initia/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/initia/.gitignore b/wallets/initia/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/initia/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/initia/.npmignore b/wallets/initia/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/initia/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/initia/.npmrc b/wallets/initia/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/initia/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/initia/.prettierrc.json b/wallets/initia/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/initia/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/initia/CHANGELOG.md b/wallets/initia/CHANGELOG.md new file mode 100644 index 000000000..abea15465 --- /dev/null +++ b/wallets/initia/CHANGELOG.md @@ -0,0 +1,125 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.8.1...@cosmos-kit/initia@0.8.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/initia + + + + + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.8.0...@cosmos-kit/initia@0.8.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/initia + + + + + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.7.0...@cosmos-kit/initia@0.8.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/initia + + + + + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.6.0...@cosmos-kit/initia@0.7.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/initia + + + + + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.5.0...@cosmos-kit/initia@0.6.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/initia + + + + + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.4.2...@cosmos-kit/initia@0.5.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/initia + + + + + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.4.1...@cosmos-kit/initia@0.4.2) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.4.0...@cosmos-kit/initia@0.4.1) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/initia + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.3.0...@cosmos-kit/initia@0.4.0) (2024-04-27) + +### Features + +- migrate initia package to the maintained one ([bd826e8](https://github.com/cosmology-tech/cosmos-kit/commit/bd826e84494e4ccf8867a5a24e7c5dd45e7e8ac0)) + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.9...@cosmos-kit/initia@0.3.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.8...@cosmos-kit/initia@0.2.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.7...@cosmos-kit/initia@0.2.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.6...@cosmos-kit/initia@0.2.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.5...@cosmos-kit/initia@0.2.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.4...@cosmos-kit/initia@0.2.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.3...@cosmos-kit/initia@0.2.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.2...@cosmos-kit/initia@0.2.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.1...@cosmos-kit/initia@0.2.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/initia + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.2.0...@cosmos-kit/initia@0.2.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/initia + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/initia@0.1.0...@cosmos-kit/initia@0.2.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/initia + +# 0.1.0 (2023-12-26) + +### Bug Fixes + +- icon ([068b79b](https://github.com/cosmology-tech/cosmos-kit/commit/068b79bfb66a030ec11578a8d351107732030811)) +- package name ([bcf32a7](https://github.com/cosmology-tech/cosmos-kit/commit/bcf32a7e60ca74ff19c222f7dc01aabe877d665a)) + +### Features + +- initia package ([ced0ef8](https://github.com/cosmology-tech/cosmos-kit/commit/ced0ef8f4d2e0b1f6dd815003dc351f8eda39d6a)) + +# 0.0.1 (2023-12-20) + +**Note:** First release! diff --git a/wallets/initia/LICENSE b/wallets/initia/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/initia/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/initia/README.md b/wallets/initia/README.md new file mode 100644 index 000000000..742214f89 --- /dev/null +++ b/wallets/initia/README.md @@ -0,0 +1,36 @@ +# @cosmos-kit/initia + +

+ +

+ +

+ + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/initia is the Initia integration for CosmosKit. + +## Related + +Checkout these related projects: + +- [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +- [@cosmology/telescope](https://github.com/cosmology-tech/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs. +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry. +- [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️ +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +- [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/initia/index.ts b/wallets/initia/index.ts new file mode 100644 index 000000000..e31be21f6 --- /dev/null +++ b/wallets/initia/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development. +export * from './src'; diff --git a/wallets/initia/package.json b/wallets/initia/package.json new file mode 100644 index 000000000..e2a29cb13 --- /dev/null +++ b/wallets/initia/package.json @@ -0,0 +1,65 @@ +{ + "name": "@cosmos-kit/initia", + "version": "0.8.2", + "description": "@cosmos-kit/initia is the Initia integration for CosmosKit", + "author": "songwong@alleslabs.com", + "contributors": [ + { + "name": "Songwong", + "email": "songwong@alleslabs.com" + }, + { + "name": "Kanisorn", + "email": "kanisorn@alleslabs.com" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "initia", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/initia-extension": "^0.8.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/initia/src/index.ts b/wallets/initia/src/index.ts new file mode 100644 index 000000000..19437fb79 --- /dev/null +++ b/wallets/initia/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/initia-extension'; + +export const wallets = [...ext]; diff --git a/wallets/initia/tsconfig.json b/wallets/initia/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/initia/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/keplr-extension/.editorconfig b/wallets/keplr-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/keplr-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/keplr-extension/.eslintignore b/wallets/keplr-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/keplr-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/keplr-extension/.eslintrc.json b/wallets/keplr-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/keplr-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/keplr-extension/.gitignore b/wallets/keplr-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/keplr-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/keplr-extension/.npmignore b/wallets/keplr-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/keplr-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/keplr-extension/.npmrc b/wallets/keplr-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/keplr-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/keplr-extension/.prettierrc.json b/wallets/keplr-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/keplr-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/keplr-extension/LICENSE b/wallets/keplr-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/keplr-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/keplr-extension/index.ts b/wallets/keplr-extension/index.ts new file mode 100644 index 000000000..e31be21f6 --- /dev/null +++ b/wallets/keplr-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development. +export * from './src'; diff --git a/wallets/keplr-extension/src/config.ts b/wallets/keplr-extension/src/config.ts new file mode 100644 index 000000000..4a7681189 --- /dev/null +++ b/wallets/keplr-extension/src/config.ts @@ -0,0 +1,208 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://rpc-osmosis.keplr.app/'], + rest: ['https://lcd-osmosis.keplr.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.keplr.app'], + rest: ['https://lcd-cosmoshub.keplr.app'], + }, + terra: { + rpc: ['https://rpc-columbus.keplr.app'], + rest: ['https://lcd-columbus.keplr.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.keplr.app'], + rest: ['https://lcd-secret.keplr.app'], + }, + akash: { + rpc: ['https://rpc-akash.keplr.app'], + rest: ['https://lcd-akash.keplr.app'], + }, + regen: { + rpc: ['https://rpc-regen.keplr.app'], + rest: ['https://lcd-regen.keplr.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.keplr.app'], + rest: ['https://lcd-sentinel.keplr.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.keplr.app'], + rest: ['https://lcd-persistence.keplr.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.keplr.app'], + rest: ['https://lcd-iris.keplr.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.keplr.app/'], + rest: ['https://lcd-crypto-org.keplr.app/'], + }, + starname: { + rpc: ['https://rpc-iov.keplr.app'], + rest: ['https://lcd-iov.keplr.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.keplr.app'], + rest: ['https://lcd-emoney.keplr.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.keplr.app'], + rest: ['https://lcd-microtick.keplr.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.keplr.app'], + rest: ['https://lcd-impacthub.keplr.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.keplr.app'], + rest: ['https://lcd-sommelier.keplr.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.keplr.app/'], + rest: ['https://lcd-evmos.keplr.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.keplr.app'], + rest: ['https://lcd-kava.keplr.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/keplr-extension/src/extension/chain-wallet.ts b/wallets/keplr-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..fd2c70bab --- /dev/null +++ b/wallets/keplr-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainKeplrExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/keplr-extension/src/extension/client.ts b/wallets/keplr-extension/src/extension/client.ts new file mode 100644 index 000000000..c1e1b4bec --- /dev/null +++ b/wallets/keplr-extension/src/extension/client.ts @@ -0,0 +1,214 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { OfflineAminoSigner, StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + SuggestToken, + WalletAccount, + WalletClient, +} from '@cosmos-kit/core'; +import { BroadcastMode, Keplr } from '@keplr-wallet/types'; +import Long from 'long'; + +import { ExpiringLocalStorage } from './session'; + +export class KeplrClient implements WalletClient { + readonly client: Keplr; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Keplr) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress, viewingKey } of tokens) { + await this.client.suggestToken(chainId, contractAddress, viewingKey); + } + } + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string): Promise { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string): OfflineAminoSigner { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signAmino: async (signerAddress, signDoc) => { + return this.signAmino( + chainId, + signerAddress, + signDoc, + this.defaultSignOptions + ); + }, + }; + // return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string): OfflineDirectSigner { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signDirect: async (signerAddress, signDoc) => { + const resp = await this.signDirect( + chainId, + signerAddress, + signDoc, + this.defaultSignOptions + ); + return { + ...resp, + signed: { + ...resp.signed, + accountNumber: BigInt(resp.signed.accountNumber.toString()), + }, + }; + }, + }; + // return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async addChain(chainInfo: ChainRecord) { + // TODO later allow walletInfo getter to be available here + // make this more generic + const chainsAlreadyAdded = ExpiringLocalStorage.getItems( + 'cosmos-kit@2:keplr/supported-chain' + ); + if (chainsAlreadyAdded && chainsAlreadyAdded.length > 0) { + if (chainsAlreadyAdded.includes(chainInfo.name)) { + return; + } + } + + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + try { + await this.client.experimentalSuggestChain(suggestChain); + ExpiringLocalStorage.addItem( + 'cosmos-kit@2:keplr/supported-chain', + chainInfo.name, + 1000 * 60 + ); + } catch (error) { + console.log('Error while adding chain', error); + throw error; + } + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + const resp = await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + return { + ...resp, + signed: { + ...resp.signed, + accountNumber: BigInt(resp.signed.accountNumber.toString()), + }, + }; + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/keplr-extension/src/extension/index.ts b/wallets/keplr-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/keplr-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/keplr-extension/src/extension/main-wallet.ts b/wallets/keplr-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..76ce36a6a --- /dev/null +++ b/wallets/keplr-extension/src/extension/main-wallet.ts @@ -0,0 +1,26 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; +import { Keplr } from '@keplr-wallet/provider-extension'; + +import { ChainKeplrExtension } from './chain-wallet'; +import { KeplrClient } from './client'; + +export class KeplrExtensionWallet extends MainWalletBase { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainKeplrExtension); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient() { + this.initingClient(); + try { + const keplr = await Keplr.getKeplr(); + this.initClientDone(keplr ? new KeplrClient(keplr) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/keplr-extension/src/extension/registry.ts b/wallets/keplr-extension/src/extension/registry.ts new file mode 100644 index 000000000..e68dd4ce9 --- /dev/null +++ b/wallets/keplr-extension/src/extension/registry.ts @@ -0,0 +1,78 @@ +import { Wallet } from '@cosmos-kit/core'; +import { Window as KeplrWindow } from '@keplr-wallet/types'; + +import { ICON } from '../constant'; + +export const keplrExtensionInfo: Wallet = { + name: 'keplr-extension', + prettyName: 'Keplr', + logo: ICON, + mode: 'extension', + // In the Keplr Mobile in-app browser, Keplr is available in window.keplr, + // similar to the extension on a desktop browser. For this reason, we must + // check what mode the window.keplr client is in once it's available. + mobileDisabled: () => + !( + typeof document !== 'undefined' && + document.readyState === 'complete' && + (window as KeplrWindow).keplr && + (window as KeplrWindow).keplr.mode === 'mobile-web' + ), + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['keplr_keystorechange'], + supportedChains: [ + 'agoric', + 'akash', + 'archway', + 'axelar', + 'bostrom', + 'celestia', + 'certik', + 'comdex', + 'cosmoshub', + 'cryptoorgchain', + 'dymension', + 'emoney', + 'evmos', + 'gravitybridge', + 'injective', + 'irisnet', + 'ixo', + 'juno', + 'kava', + 'kujira', + 'noble', + 'nois', + 'osmosis', + 'persistence', + 'quicksilver', + 'regen', + 'secretnetwork', + 'sentinel', + 'sifchain', + 'sommelier', + 'stargaze', + 'starname', + 'stride', + 'terra2', + 'tgrade', + 'umee', + ], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap?hl=en', + }, + { + device: 'desktop', + browser: 'firefox', + link: 'https://addons.mozilla.org/en-US/firefox/addon/keplr/', + }, + { + link: 'https://www.keplr.app/download', + }, + ], +}; diff --git a/wallets/keplr-extension/src/extension/session.ts b/wallets/keplr-extension/src/extension/session.ts new file mode 100644 index 000000000..8fe4982dd --- /dev/null +++ b/wallets/keplr-extension/src/extension/session.ts @@ -0,0 +1,99 @@ +export class ExpiringLocalStorage { + /** + * Add an item to an array in local storage with an expiration time. + * @param {string} key - The key under which the array is stored. + * @param {*} value - The value to be added. + * @param {number} ttl - Time to live in milliseconds. + */ + static addItem(key, value, ttl) { + const now = new Date(); + + // Create a new item with value and expiry + const newItem = { + value: value, + expiry: now.getTime() + ttl, + }; + + // Get existing items from local storage + const itemStr = localStorage.getItem(key); + const items = itemStr ? JSON.parse(itemStr) : []; + + // Add the new item to the array + items.push(newItem); + + // Store the updated array in local storage + localStorage.setItem(key, JSON.stringify(items)); + } + + /** + * Get all valid (non-expired) items from an array in local storage. + * @param {string} key - The key of the array to retrieve. + * @returns {Array} An array of valid items. + */ + static getItems(key) { + const itemStr = localStorage.getItem(key); + + // If the item doesn't exist, return an empty array + if (!itemStr) { + return []; + } + + const items = JSON.parse(itemStr); + const now = new Date(); + const validItems = []; + + // Filter out expired items + for (const item of items) { + if (now.getTime() <= item.expiry) { + validItems.push(item.value); + } + } + + // Update local storage with only valid items + localStorage.setItem( + key, + JSON.stringify( + validItems.map((value) => ({ + value, + expiry: items.find((item) => item.value === value).expiry, + })) + ) + ); + + return validItems; + } + + /** + * Remove a specific item from the array in local storage. + * @param {string} key - The key of the array. + * @param {*} value - The value to be removed. + */ + static removeItem(key, value) { + const itemStr = localStorage.getItem(key); + + // If the item doesn't exist, return + if (!itemStr) { + return; + } + + let items = JSON.parse(itemStr); + + // Filter out the item to be removed + items = items.filter((item) => item.value !== value); + + // Update local storage with the remaining items + localStorage.setItem(key, JSON.stringify(items)); + } +} + +// Usage example: + +// Add items with different TTLs +// ExpiringLocalStorage.addItem('myArray', 'item1', 10000); // Expires in 10 seconds +// ExpiringLocalStorage.addItem('myArray', 'item2', 20000); // Expires in 20 seconds + +// Get all valid items (non-expired) +// console.log(ExpiringLocalStorage.getItems('myArray')); + +// Remove a specific item +// ExpiringLocalStorage.removeItem('myArray', 'item1'); diff --git a/wallets/keplr-extension/src/index.ts b/wallets/keplr-extension/src/index.ts index 3fbb47955..29abed577 100644 --- a/wallets/keplr-extension/src/index.ts +++ b/wallets/keplr-extension/src/index.ts @@ -6,4 +6,4 @@ export * from './registry' const keplrWallet = new KeplrWallet(keplrExtensionInfo); -export { keplrWallet } \ No newline at end of file +export { keplrWallet } diff --git a/wallets/keplr-extension/src/keplr.ts b/wallets/keplr-extension/src/keplr.ts new file mode 100644 index 000000000..5f6fef367 --- /dev/null +++ b/wallets/keplr-extension/src/keplr.ts @@ -0,0 +1,9 @@ +import { preferredEndpoints } from './config'; +import { keplrExtensionInfo, KeplrExtensionWallet } from './extension'; + +const keplrExtension = new KeplrExtensionWallet( + keplrExtensionInfo, + preferredEndpoints +); + +export const wallets = [keplrExtension]; diff --git a/wallets/keplr-mobile/.editorconfig b/wallets/keplr-mobile/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/keplr-mobile/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/keplr-mobile/.eslintignore b/wallets/keplr-mobile/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/keplr-mobile/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/keplr-mobile/.eslintrc.json b/wallets/keplr-mobile/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/keplr-mobile/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/keplr-mobile/.gitignore b/wallets/keplr-mobile/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/keplr-mobile/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/keplr-mobile/.npmignore b/wallets/keplr-mobile/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/keplr-mobile/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/keplr-mobile/.npmrc b/wallets/keplr-mobile/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/keplr-mobile/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/keplr-mobile/.prettierrc.json b/wallets/keplr-mobile/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/keplr-mobile/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/keplr-mobile/LICENSE b/wallets/keplr-mobile/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/keplr-mobile/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/keplr-mobile/index.ts b/wallets/keplr-mobile/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/keplr-mobile/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/keplr-mobile/src/config.ts b/wallets/keplr-mobile/src/config.ts new file mode 100644 index 000000000..4a7681189 --- /dev/null +++ b/wallets/keplr-mobile/src/config.ts @@ -0,0 +1,208 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://rpc-osmosis.keplr.app/'], + rest: ['https://lcd-osmosis.keplr.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.keplr.app'], + rest: ['https://lcd-cosmoshub.keplr.app'], + }, + terra: { + rpc: ['https://rpc-columbus.keplr.app'], + rest: ['https://lcd-columbus.keplr.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.keplr.app'], + rest: ['https://lcd-secret.keplr.app'], + }, + akash: { + rpc: ['https://rpc-akash.keplr.app'], + rest: ['https://lcd-akash.keplr.app'], + }, + regen: { + rpc: ['https://rpc-regen.keplr.app'], + rest: ['https://lcd-regen.keplr.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.keplr.app'], + rest: ['https://lcd-sentinel.keplr.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.keplr.app'], + rest: ['https://lcd-persistence.keplr.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.keplr.app'], + rest: ['https://lcd-iris.keplr.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.keplr.app/'], + rest: ['https://lcd-crypto-org.keplr.app/'], + }, + starname: { + rpc: ['https://rpc-iov.keplr.app'], + rest: ['https://lcd-iov.keplr.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.keplr.app'], + rest: ['https://lcd-emoney.keplr.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.keplr.app'], + rest: ['https://lcd-microtick.keplr.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.keplr.app'], + rest: ['https://lcd-impacthub.keplr.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.keplr.app'], + rest: ['https://lcd-sommelier.keplr.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.keplr.app/'], + rest: ['https://lcd-evmos.keplr.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.keplr.app'], + rest: ['https://lcd-kava.keplr.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/keplr-mobile/src/index.ts b/wallets/keplr-mobile/src/index.ts index cb7d0c4b4..00ae6d368 100644 --- a/wallets/keplr-mobile/src/index.ts +++ b/wallets/keplr-mobile/src/index.ts @@ -7,4 +7,4 @@ export class KeplrMobile extends WCWallet { } const keplrMobile = new KeplrMobile(keplrMobileInfo); -export { keplrMobile }; \ No newline at end of file +export { keplrMobile }; diff --git a/wallets/keplr-mobile/src/keplr.ts b/wallets/keplr-mobile/src/keplr.ts new file mode 100644 index 000000000..99fa817a1 --- /dev/null +++ b/wallets/keplr-mobile/src/keplr.ts @@ -0,0 +1,6 @@ +import { preferredEndpoints } from './config'; +import { keplrMobileInfo, KeplrMobileWallet } from './wallet-connect'; + +const keplrMobile = new KeplrMobileWallet(keplrMobileInfo, preferredEndpoints); + +export const wallets = [keplrMobile]; diff --git a/wallets/keplr-mobile/src/wallet-connect/chain-wallet.ts b/wallets/keplr-mobile/src/wallet-connect/chain-wallet.ts new file mode 100644 index 000000000..298e2098e --- /dev/null +++ b/wallets/keplr-mobile/src/wallet-connect/chain-wallet.ts @@ -0,0 +1,12 @@ +import { ChainRecord, Wallet } from '@cosmos-kit/core'; +import { ChainWC } from '@cosmos-kit/walletconnect'; + +import { KeplrClient } from './client'; + +export class ChainKeplrMobile extends ChainWC { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + super(walletInfo, chainInfo, KeplrClient); + } +} diff --git a/wallets/keplr-mobile/src/wallet-connect/client.ts b/wallets/keplr-mobile/src/wallet-connect/client.ts new file mode 100644 index 000000000..612508870 --- /dev/null +++ b/wallets/keplr-mobile/src/wallet-connect/client.ts @@ -0,0 +1,289 @@ +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + DirectSignDoc, + ExpiredError, + RejectedError, + SignOptions, + SignType, + SimpleAccount, + State, + Wallet, + WalletAccount, +} from '@cosmos-kit/core'; +import { WCClient } from '@cosmos-kit/walletconnect'; +import { Keplr } from '@keplr-wallet/types'; +import SignClient from '@walletconnect/sign-client'; +import type { EngineTypes } from '@walletconnect/types'; +import { ProposalTypes } from '@walletconnect/types'; +import Long from 'long'; +import { KeplrWalletConnectV2 } from '@keplr-wallet/wc-client'; + +export class KeplrClient extends WCClient { + keplr: Keplr | undefined = undefined; + + constructor(walletInfo: Wallet) { + super(walletInfo); + } + + initKeplrWCClient( + signClient: SignClient, + options: { + sessionProperties?: ProposalTypes.SessionProperties; + } + ) { + this.keplr = new KeplrWalletConnectV2( + signClient, + options + ) as unknown as Keplr; + + // This is for Keplr App Deep Linking + // https://github.com/chainapsis/keplr-wallet/blob/120a7a32b54a0976ea3d386b3105e2c41eaf41bf/packages/wc-client/src/index.ts#L209 + localStorage.setItem( + 'wallet-connect-v2-mobile-link', + JSON.stringify( + this.env?.os === 'android' + ? { + name: 'Keplr', + href: 'intent://wcV2#Intent;package=com.chainapsis.keplr;scheme=keplrwallet;end;', + } + : { + name: 'Keplr', + href: `keplrwallet://wcV2`, + } + ) + ); + } + + async connect( + chainIds: string | string[], + options?: EngineTypes.ConnectParams + ) { + if (typeof this.signClient === 'undefined') { + await this.init(); + // throw new Error('WalletConnect is not initialized'); + } + + if (this.qrUrl.state !== 'Init') { + this.setQRState(State.Init); + } + + const chainIdsWithNS = + typeof chainIds === 'string' + ? [`cosmos:${chainIds}`] + : chainIds.map((chainId) => `cosmos:${chainId}`); + + this.restorePairings(); + const pairing = this.pairing; + this.logger?.debug('Restored active pairing topic is:', pairing?.topic); + + // If the pairing topic is already set, try to connect to the session + if (this.signClient && pairing?.topic) { + const allSessions = this.signClient.session.getAll(); + const currentSession = allSessions.find( + (session) => session.pairingTopic === pairing.topic + ); + + if (allSessions.length > 0 && currentSession) { + this.initKeplrWCClient(this.signClient, { + sessionProperties: currentSession.sessionProperties, + }); + return; + } + } + + if (this.displayQRCode) this.setQRState(State.Pending); + + const requiredNamespaces = { + cosmos: { + methods: [ + 'cosmos_getAccounts', + 'cosmos_signAmino', + 'cosmos_signDirect', + ...(this.requiredNamespaces?.methods ?? []), + ], + chains: chainIdsWithNS, + events: [ + 'chainChanged', + 'accountsChanged', + ...(this.requiredNamespaces?.events ?? []), + ], + }, + }; + let connectResp: any; + try { + this.logger?.debug('Connecting chains:', chainIdsWithNS); + connectResp = await this.signClient?.connect({ + pairingTopic: pairing?.topic, + requiredNamespaces, + ...options, + }); + + // https://github.com/cosmology-tech/projects-issues/issues/349 + // Commented out because of the issue above. + // if (typeof connectResp.uri === 'undefined') { + // throw new Error('Failed to generate WalletConnect URI!'); + // } + this.qrUrl.data = connectResp.uri; + this.logger?.debug('Using QR URI:', connectResp.uri); + if (this.displayQRCode) this.setQRState(State.Done); + } catch (error) { + this.logger?.error('Client connect error: ', error); + if (this.displayQRCode) this.setQRError(error); + return; + } + + if (this.redirect) this.openApp(); + + try { + const session = await connectResp.approval(); + this.logger?.debug('Established session:', session); + this.sessions.push(session); + this.restorePairings(); + + if (this.signClient) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this.initKeplrWCClient(this.signClient, { + sessionProperties: session.sessionProperties, + }); + } + } catch (error) { + this.logger?.error('Session approval error: ', error); + await this.deleteInactivePairings(); + if (!error) { + if (this.displayQRCode) this.setQRError(ExpiredError); + throw new Error('Proposal Expired'); + } else if (error.code == 5001) { + throw RejectedError; + } else { + throw error; + } + } finally { + if (!pairing && this.qrUrl.message !== ExpiredError.message) { + this.setQRState(State.Init); + } + } + } + + async enable(chainIds: string | string[]): Promise { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + await this.keplr.enable(chainIds); + } + + async getSimpleAccount(chainId: string): Promise { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + await this.enable(chainId); + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string): Promise { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + const key = await this.keplr.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + async getOfflineSigner(chainId: string, preferredSignType?: SignType) { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + } + + getOfflineSignerAmino(chainId: string) { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + return this.keplr.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + return this.keplr.getOfflineSigner( + chainId + ) as unknown as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + return await this.keplr.signAmino(chainId, signer, signDoc, signOptions); + } + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + return await this.keplr.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString( + signDoc.accountNumber?.toString() ?? '0' + ), + }, + signOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + if (!this.keplr) { + throw new Error('Keplr Wallet is not initialized'); + } + + return await this.keplr.signArbitrary(chainId, signer, data); + } +} diff --git a/wallets/keplr-mobile/src/wallet-connect/index.ts b/wallets/keplr-mobile/src/wallet-connect/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/keplr-mobile/src/wallet-connect/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/keplr-mobile/src/wallet-connect/main-wallet.ts b/wallets/keplr-mobile/src/wallet-connect/main-wallet.ts new file mode 100644 index 000000000..46c06c6cc --- /dev/null +++ b/wallets/keplr-mobile/src/wallet-connect/main-wallet.ts @@ -0,0 +1,46 @@ +import { + EndpointOptions, + Wallet, + WalletConnectOptions, +} from '@cosmos-kit/core'; +import { KeplrClient as ExtensionKeplrClient } from '@cosmos-kit/keplr-extension'; +import { WCWallet } from '@cosmos-kit/walletconnect'; +import { Keplr } from '@keplr-wallet/provider-extension'; + +import { ChainKeplrMobile } from './chain-wallet'; +import { KeplrClient } from './client'; + +export class KeplrMobileWallet extends WCWallet { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + super(walletInfo, ChainKeplrMobile, KeplrClient); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient(options?: WalletConnectOptions): Promise { + try { + const keplr = await Keplr.getKeplr(); + const userAgent: string | undefined = window.navigator.userAgent; + if (keplr && userAgent.includes('KeplrWalletMobile')) { + this.initClientDone( + keplr ? new ExtensionKeplrClient(keplr) : undefined + ); + } else { + await super.initClient(options); + } + } catch (error) { + if (error instanceof Error) { + if (error.message === 'Client Not Exist!') { + await super.initClient(options); + return; + } + + this.initClientError(error); + } + } + } +} diff --git a/wallets/keplr-mobile/src/wallet-connect/registry.ts b/wallets/keplr-mobile/src/wallet-connect/registry.ts new file mode 100644 index 000000000..a81d38f4e --- /dev/null +++ b/wallets/keplr-mobile/src/wallet-connect/registry.ts @@ -0,0 +1,110 @@ +import { OS, Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const keplrMobileInfo: Wallet = { + name: 'keplr-mobile', + prettyName: 'Keplr Mobile', + logo: ICON, + mode: 'wallet-connect', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'mobile', + os: 'android', + link: 'https://play.google.com/store/apps/details?id=com.chainapsis.keplr&hl=en&gl=US&pli=1', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://apps.apple.com/us/app/keplr-wallet/id1567851089', + }, + { + link: 'https://www.keplr.app/download', + }, + ], + connectEventNamesOnWindow: ['keplr_keystorechange'], + supportedChains: [ + 'agoric', + 'akash', + 'axelar', + 'bitcanna', + 'bitsong', + 'bostrom', + 'certik', + 'cheqd', + 'chihuahua', + 'comdex', + 'cosmoshub', + 'cryptoorgchain', + 'desmos', + 'dig', + 'emoney', + 'evmos', + 'gravitybridge', + 'injective', + 'irisnet', + 'ixo', + 'juno', + 'ki', + 'likecoin', + 'lumnetwork', + 'osmosis', + 'panacea', + 'persistence', + 'regen', + 'secretnetwork', + 'sentinel', + 'sifchain', + 'sommelier', + 'stargaze', + 'starname', + 'terra', + 'tick', + 'umee', + 'vidulum', + ], + walletconnect: { + name: 'Keplr', + projectId: + '6adb6082c909901b9e7189af3a4a0223102cd6f8d5c39e39f3d49acb92b578bb', + encoding: 'base64', + requiredNamespaces: { + methods: [ + 'keplr_getKey', + 'keplr_signAmino', + 'keplr_signDirect', + 'keplr_signArbitrary', + 'keplr_enable', + 'keplr_signEthereum', + ], + events: ['keplr_accountsChanged'], + }, + mobile: { + native: { + ios: 'keplrwallet:', + android: 'intent:', + }, + }, + formatNativeUrl: ( + appUrl: string, + wcUri: string, + os: OS | undefined, + _name: string + ): string => { + const plainAppUrl = appUrl.split(':')[0]; + const encodedWcUrl = encodeURIComponent(wcUri); + switch (os) { + case 'ios': + return `${plainAppUrl}://wcV2?${encodedWcUrl}`; + case 'android': + return `intent://wcV2?${encodedWcUrl}#Intent;package=com.chainapsis.keplr;scheme=keplrwallet;end;`; + default: + return `${plainAppUrl}://wcV2?${encodedWcUrl}`; + } + }, + }, +}; diff --git a/wallets/keplr/.editorconfig b/wallets/keplr/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/keplr/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/keplr/.eslintignore b/wallets/keplr/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/keplr/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/keplr/.eslintrc.json b/wallets/keplr/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/keplr/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/keplr/.gitignore b/wallets/keplr/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/keplr/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/keplr/.npmignore b/wallets/keplr/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/keplr/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/keplr/.npmrc b/wallets/keplr/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/keplr/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/keplr/.prettierrc.json b/wallets/keplr/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/keplr/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/keplr/CHANGELOG.md b/wallets/keplr/CHANGELOG.md new file mode 100644 index 000000000..6f2132ba1 --- /dev/null +++ b/wallets/keplr/CHANGELOG.md @@ -0,0 +1,957 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.12.1...@cosmos-kit/keplr@2.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.12.0...@cosmos-kit/keplr@2.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.11.0...@cosmos-kit/keplr@2.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.10.1...@cosmos-kit/keplr@2.11.0) (2024-06-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.10.0...@cosmos-kit/keplr@2.10.1) (2024-05-29) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.9.0...@cosmos-kit/keplr@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.8.0...@cosmos-kit/keplr@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.7.3...@cosmos-kit/keplr@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.7.2...@cosmos-kit/keplr@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.7.1...@cosmos-kit/keplr@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.7.0...@cosmos-kit/keplr@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.9...@cosmos-kit/keplr@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.8...@cosmos-kit/keplr@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.7...@cosmos-kit/keplr@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.6...@cosmos-kit/keplr@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.5...@cosmos-kit/keplr@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.4...@cosmos-kit/keplr@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.3...@cosmos-kit/keplr@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.2...@cosmos-kit/keplr@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.1...@cosmos-kit/keplr@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.6.0...@cosmos-kit/keplr@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.5.4...@cosmos-kit/keplr@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.5.3...@cosmos-kit/keplr@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.5.2...@cosmos-kit/keplr@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.5.1...@cosmos-kit/keplr@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.5.0...@cosmos-kit/keplr@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.15...@cosmos-kit/keplr@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.14...@cosmos-kit/keplr@2.4.15) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.13...@cosmos-kit/keplr@2.4.14) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.12...@cosmos-kit/keplr@2.4.13) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.11...@cosmos-kit/keplr@2.4.12) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.10...@cosmos-kit/keplr@2.4.11) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.9...@cosmos-kit/keplr@2.4.10) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.8...@cosmos-kit/keplr@2.4.9) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.7...@cosmos-kit/keplr@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.6...@cosmos-kit/keplr@2.4.7) (2023-11-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.5...@cosmos-kit/keplr@2.4.6) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.4...@cosmos-kit/keplr@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.3...@cosmos-kit/keplr@2.4.4) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.2...@cosmos-kit/keplr@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.1...@cosmos-kit/keplr@2.4.2) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.4.0...@cosmos-kit/keplr@2.4.1) (2023-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.15...@cosmos-kit/keplr@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.14...@cosmos-kit/keplr@2.3.15) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.13...@cosmos-kit/keplr@2.3.14) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.12...@cosmos-kit/keplr@2.3.13) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.11...@cosmos-kit/keplr@2.3.12) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.10...@cosmos-kit/keplr@2.3.11) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.9...@cosmos-kit/keplr@2.3.10) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.8...@cosmos-kit/keplr@2.3.9) (2023-09-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.7...@cosmos-kit/keplr@2.3.8) (2023-09-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.6...@cosmos-kit/keplr@2.3.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.5...@cosmos-kit/keplr@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.4...@cosmos-kit/keplr@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.3...@cosmos-kit/keplr@2.3.4) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.2...@cosmos-kit/keplr@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.1...@cosmos-kit/keplr@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.3.0...@cosmos-kit/keplr@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.2.1...@cosmos-kit/keplr@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.2.0...@cosmos-kit/keplr@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.12...@cosmos-kit/keplr@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.11...@cosmos-kit/keplr@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.10...@cosmos-kit/keplr@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.9...@cosmos-kit/keplr@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.8...@cosmos-kit/keplr@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.7...@cosmos-kit/keplr@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.6...@cosmos-kit/keplr@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.5...@cosmos-kit/keplr@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.4...@cosmos-kit/keplr@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.3...@cosmos-kit/keplr@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.2...@cosmos-kit/keplr@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.1...@cosmos-kit/keplr@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.1.0...@cosmos-kit/keplr@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.5...@cosmos-kit/keplr@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.4...@cosmos-kit/keplr@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.3...@cosmos-kit/keplr@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.2...@cosmos-kit/keplr@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1...@cosmos-kit/keplr@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.6...@cosmos-kit/keplr@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.5...@cosmos-kit/keplr@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.4...@cosmos-kit/keplr@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.3...@cosmos-kit/keplr@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.2...@cosmos-kit/keplr@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.1...@cosmos-kit/keplr@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@2.0.1-beta.0...@cosmos-kit/keplr@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@1.0.0...@cosmos-kit/keplr@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41-beta.6...@cosmos-kit/keplr@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41-beta.5...@cosmos-kit/keplr@0.33.41-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41-beta.4...@cosmos-kit/keplr@0.33.41-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41-beta.3...@cosmos-kit/keplr@0.33.41-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41...@cosmos-kit/keplr@0.33.41-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.40...@cosmos-kit/keplr@0.33.41) (2023-06-30) + +## [0.33.41-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41-beta.1...@cosmos-kit/keplr@0.33.41-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.41-beta.0...@cosmos-kit/keplr@0.33.41-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.41-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.40...@cosmos-kit/keplr@0.33.41-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.40](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.39...@cosmos-kit/keplr@0.33.40) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.39](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.38...@cosmos-kit/keplr@0.33.39) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.37...@cosmos-kit/keplr@0.33.38) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.36...@cosmos-kit/keplr@0.33.37) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.35...@cosmos-kit/keplr@0.33.36) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.34...@cosmos-kit/keplr@0.33.35) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.33...@cosmos-kit/keplr@0.33.34) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.32...@cosmos-kit/keplr@0.33.33) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.31...@cosmos-kit/keplr@0.33.32) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.30...@cosmos-kit/keplr@0.33.31) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.29...@cosmos-kit/keplr@0.33.30) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.28...@cosmos-kit/keplr@0.33.29) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.27...@cosmos-kit/keplr@0.33.28) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.26...@cosmos-kit/keplr@0.33.27) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.25...@cosmos-kit/keplr@0.33.26) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.24...@cosmos-kit/keplr@0.33.25) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.23...@cosmos-kit/keplr@0.33.24) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.22...@cosmos-kit/keplr@0.33.23) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.21...@cosmos-kit/keplr@0.33.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.20...@cosmos-kit/keplr@0.33.21) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.19...@cosmos-kit/keplr@0.33.20) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.18...@cosmos-kit/keplr@0.33.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.17...@cosmos-kit/keplr@0.33.18) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.16...@cosmos-kit/keplr@0.33.17) (2023-04-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.15...@cosmos-kit/keplr@0.33.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.14...@cosmos-kit/keplr@0.33.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.13...@cosmos-kit/keplr@0.33.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.12...@cosmos-kit/keplr@0.33.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.11...@cosmos-kit/keplr@0.33.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.10...@cosmos-kit/keplr@0.33.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.9...@cosmos-kit/keplr@0.33.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.8...@cosmos-kit/keplr@0.33.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.7...@cosmos-kit/keplr@0.33.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.6...@cosmos-kit/keplr@0.33.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.5...@cosmos-kit/keplr@0.33.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.4...@cosmos-kit/keplr@0.33.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.3...@cosmos-kit/keplr@0.33.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.2...@cosmos-kit/keplr@0.33.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.1...@cosmos-kit/keplr@0.33.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.0...@cosmos-kit/keplr@0.33.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.33.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.33...@cosmos-kit/keplr@0.33.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.32.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.32...@cosmos-kit/keplr@0.32.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.31...@cosmos-kit/keplr@0.32.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.30...@cosmos-kit/keplr@0.32.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.29...@cosmos-kit/keplr@0.32.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.28...@cosmos-kit/keplr@0.32.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.27...@cosmos-kit/keplr@0.32.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.26...@cosmos-kit/keplr@0.32.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.25...@cosmos-kit/keplr@0.32.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.24...@cosmos-kit/keplr@0.32.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.23...@cosmos-kit/keplr@0.32.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.21...@cosmos-kit/keplr@0.32.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.20...@cosmos-kit/keplr@0.32.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.19...@cosmos-kit/keplr@0.32.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.18...@cosmos-kit/keplr@0.32.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.17...@cosmos-kit/keplr@0.32.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.16...@cosmos-kit/keplr@0.32.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.15...@cosmos-kit/keplr@0.32.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.14...@cosmos-kit/keplr@0.32.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.13...@cosmos-kit/keplr@0.32.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.12...@cosmos-kit/keplr@0.32.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.11...@cosmos-kit/keplr@0.32.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.10...@cosmos-kit/keplr@0.32.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.9...@cosmos-kit/keplr@0.32.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.8...@cosmos-kit/keplr@0.32.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.7...@cosmos-kit/keplr@0.32.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.6...@cosmos-kit/keplr@0.32.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.5...@cosmos-kit/keplr@0.32.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.4...@cosmos-kit/keplr@0.32.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.3...@cosmos-kit/keplr@0.32.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.2...@cosmos-kit/keplr@0.32.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.1...@cosmos-kit/keplr@0.32.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.0...@cosmos-kit/keplr@0.32.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.31.0...@cosmos-kit/keplr@0.32.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.2...@cosmos-kit/keplr@0.31.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.1...@cosmos-kit/keplr@0.30.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.0...@cosmos-kit/keplr@0.30.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.5...@cosmos-kit/keplr@0.30.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.4...@cosmos-kit/keplr@0.29.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.3...@cosmos-kit/keplr@0.29.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.2...@cosmos-kit/keplr@0.29.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.1...@cosmos-kit/keplr@0.29.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.0...@cosmos-kit/keplr@0.29.1) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.28.1...@cosmos-kit/keplr@0.29.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.28.0...@cosmos-kit/keplr@0.28.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.27.1...@cosmos-kit/keplr@0.28.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.27.0...@cosmos-kit/keplr@0.27.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.26.1...@cosmos-kit/keplr@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.26.0...@cosmos-kit/keplr@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.25.0...@cosmos-kit/keplr@0.26.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.24.0...@cosmos-kit/keplr@0.25.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.23.0...@cosmos-kit/keplr@0.24.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.2...@cosmos-kit/keplr@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.1...@cosmos-kit/keplr@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.0...@cosmos-kit/keplr@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.21.0...@cosmos-kit/keplr@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.2...@cosmos-kit/keplr@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.1...@cosmos-kit/keplr@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.0...@cosmos-kit/keplr@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.7...@cosmos-kit/keplr@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.6...@cosmos-kit/keplr@0.19.7) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.5...@cosmos-kit/keplr@0.19.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.4...@cosmos-kit/keplr@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.3...@cosmos-kit/keplr@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.2...@cosmos-kit/keplr@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.1...@cosmos-kit/keplr@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.0...@cosmos-kit/keplr@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.18.1...@cosmos-kit/keplr@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.18.0...@cosmos-kit/keplr@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.17.1...@cosmos-kit/keplr@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.17.0...@cosmos-kit/keplr@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.2...@cosmos-kit/keplr@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.1...@cosmos-kit/keplr@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.0...@cosmos-kit/keplr@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.15.0...@cosmos-kit/keplr@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.14.0...@cosmos-kit/keplr@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.13.2...@cosmos-kit/keplr@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.3...@cosmos-kit/keplr@0.13.2) (2022-09-22) + +## 0.12.7 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.2...@cosmos-kit/keplr@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.11.0...@cosmos-kit/keplr@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.0...@cosmos-kit/keplr@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# 0.12.0 (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/keplr/LICENSE b/wallets/keplr/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/keplr/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/keplr/README.md b/wallets/keplr/README.md new file mode 100644 index 000000000..8f7c69869 --- /dev/null +++ b/wallets/keplr/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/keplr + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/keplr is the Keplr integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/keplr/index.ts b/wallets/keplr/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/keplr/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/keplr/package.json b/wallets/keplr/package.json new file mode 100644 index 000000000..558304301 --- /dev/null +++ b/wallets/keplr/package.json @@ -0,0 +1,72 @@ +{ + "name": "@cosmos-kit/keplr", + "version": "2.12.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "keplr", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/keplr-extension": "^2.12.2", + "@cosmos-kit/keplr-mobile": "^2.12.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/keplr/src/index.ts b/wallets/keplr/src/index.ts new file mode 100644 index 000000000..6aa40e7ea --- /dev/null +++ b/wallets/keplr/src/index.ts @@ -0,0 +1,6 @@ +import { + wallets as ext, +} from '@cosmos-kit/keplr-extension'; +import { wallets as mobile } from '@cosmos-kit/keplr-mobile'; + +export const wallets = [...ext, ...mobile]; diff --git a/wallets/keplr/tsconfig.json b/wallets/keplr/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/keplr/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/leap-capsule-social-login/.editorconfig b/wallets/leap-capsule-social-login/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/leap-capsule-social-login/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/leap-capsule-social-login/.eslintignore b/wallets/leap-capsule-social-login/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/leap-capsule-social-login/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/.eslintrc.json b/wallets/leap-capsule-social-login/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/leap-capsule-social-login/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/.gitignore b/wallets/leap-capsule-social-login/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/leap-capsule-social-login/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/leap-capsule-social-login/.npmignore b/wallets/leap-capsule-social-login/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/leap-capsule-social-login/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/.npmrc b/wallets/leap-capsule-social-login/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/leap-capsule-social-login/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/.prettierrc.json b/wallets/leap-capsule-social-login/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/leap-capsule-social-login/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/CHANGELOG.md b/wallets/leap-capsule-social-login/CHANGELOG.md new file mode 100644 index 000000000..3dfaf06bd --- /dev/null +++ b/wallets/leap-capsule-social-login/CHANGELOG.md @@ -0,0 +1,764 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.10.1...@cosmos-kit/leap-capsule-social-login@0.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.10.0...@cosmos-kit/leap-capsule-social-login@0.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.9.0...@cosmos-kit/leap-capsule-social-login@0.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.8.0...@cosmos-kit/leap-capsule-social-login@0.9.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.7.0...@cosmos-kit/leap-capsule-social-login@0.8.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.6.0...@cosmos-kit/leap-capsule-social-login@0.7.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.5.0...@cosmos-kit/leap-capsule-social-login@0.6.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.4.3...@cosmos-kit/leap-capsule-social-login@0.5.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + + + + + +## [0.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.4.2...@cosmos-kit/leap-capsule-social-login@0.4.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.4.1...@cosmos-kit/leap-capsule-social-login@0.4.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.4.0...@cosmos-kit/leap-capsule-social-login@0.4.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.3.14...@cosmos-kit/leap-capsule-social-login@0.4.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## [0.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.3.13...@cosmos-kit/leap-capsule-social-login@0.3.14) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## [0.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.3.12...@cosmos-kit/leap-capsule-social-login@0.3.13) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## [0.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-capsule-social-login@0.3.11...@cosmos-kit/leap-capsule-social-login@0.3.12) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## 0.3.11 (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/leap-capsule-social-login + +## [0.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.9...@cosmos-kit/leap-metamask-cosmos-snap@0.3.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.8...@cosmos-kit/leap-metamask-cosmos-snap@0.3.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.7...@cosmos-kit/leap-metamask-cosmos-snap@0.3.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.6...@cosmos-kit/leap-metamask-cosmos-snap@0.3.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.5...@cosmos-kit/leap-metamask-cosmos-snap@0.3.6) (2023-11-02) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.4...@cosmos-kit/leap-metamask-cosmos-snap@0.3.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.3...@cosmos-kit/leap-metamask-cosmos-snap@0.3.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.2...@cosmos-kit/leap-metamask-cosmos-snap@0.3.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.1...@cosmos-kit/leap-metamask-cosmos-snap@0.3.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.0...@cosmos-kit/leap-metamask-cosmos-snap@0.3.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.7...@cosmos-kit/leap-metamask-cosmos-snap@0.3.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.6...@cosmos-kit/leap-metamask-cosmos-snap@0.2.7) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.5...@cosmos-kit/leap-metamask-cosmos-snap@0.2.6) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.4...@cosmos-kit/leap-metamask-cosmos-snap@0.2.5) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.3...@cosmos-kit/leap-metamask-cosmos-snap@0.2.4) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.2...@cosmos-kit/leap-metamask-cosmos-snap@0.2.3) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.1...@cosmos-kit/leap-metamask-cosmos-snap@0.2.2) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.0...@cosmos-kit/leap-metamask-cosmos-snap@0.2.1) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.1.1...@cosmos-kit/leap-metamask-cosmos-snap@0.2.0) (2023-09-12) + +### Features + +- metamask snaps support ([6c66a08](https://github.com/cosmology-tech/cosmos-kit/commit/6c66a080b07fef10ec7da021713f59084bdb3c54)) + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.1.0...@cosmos-kit/leap-metamask-cosmos-snap@0.1.1) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.0.2...@cosmos-kit/leap-metamask-cosmos-snap@0.1.0) (2023-09-07) + +### Features + +- new metamask_snap field ([2ac61ce](https://github.com/cosmology-tech/cosmos-kit/commit/2ac61cebb8fa885cb129484d0c852acd2ec1ea73)) + +## 0.0.2 (2023-08-25) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.3.1...@cosmos-kit/leap-extension@2.4.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.3.0...@cosmos-kit/leap-extension@2.3.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.7...@cosmos-kit/leap-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.6...@cosmos-kit/leap-extension@2.2.7) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.5...@cosmos-kit/leap-extension@2.2.6) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.4...@cosmos-kit/leap-extension@2.2.5) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.3...@cosmos-kit/leap-extension@2.2.4) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.2...@cosmos-kit/leap-extension@2.2.3) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.1...@cosmos-kit/leap-extension@2.2.2) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.0...@cosmos-kit/leap-extension@2.2.1) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.4...@cosmos-kit/leap-extension@2.2.0) (2023-08-03) + +### Features + +- add platformEnabledWallets ([a48ffab](https://github.com/cosmology-tech/cosmos-kit/commit/a48ffabd6108363b24b5bdecb6a156a669758e4a)) + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.3...@cosmos-kit/leap-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.2...@cosmos-kit/leap-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.1...@cosmos-kit/leap-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.0...@cosmos-kit/leap-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.5...@cosmos-kit/leap-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.4...@cosmos-kit/leap-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.3...@cosmos-kit/leap-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.2...@cosmos-kit/leap-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1...@cosmos-kit/leap-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.6...@cosmos-kit/leap-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.5...@cosmos-kit/leap-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.4...@cosmos-kit/leap-extension@2.0.1-beta.5) (2023-07-18) + +### Features + +- add leap mobile webview support ([14b0d45](https://github.com/cosmology-tech/cosmos-kit/commit/14b0d45d88a809d2b95f45d56b5c745418e1dd21)) + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.3...@cosmos-kit/leap-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.2...@cosmos-kit/leap-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.1...@cosmos-kit/leap-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.0...@cosmos-kit/leap-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@1.0.0...@cosmos-kit/leap-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.6...@cosmos-kit/leap-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.5...@cosmos-kit/leap-extension@0.17.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.4...@cosmos-kit/leap-extension@0.17.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.3...@cosmos-kit/leap-extension@0.17.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2...@cosmos-kit/leap-extension@0.17.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.1...@cosmos-kit/leap-extension@0.17.2) (2023-06-30) + +## [0.17.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.1...@cosmos-kit/leap-extension@0.17.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.0...@cosmos-kit/leap-extension@0.17.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.1...@cosmos-kit/leap-extension@0.17.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.0...@cosmos-kit/leap-extension@0.17.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.11...@cosmos-kit/leap-extension@0.17.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.16.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.10...@cosmos-kit/leap-extension@0.16.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.9...@cosmos-kit/leap-extension@0.16.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.8...@cosmos-kit/leap-extension@0.16.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.7...@cosmos-kit/leap-extension@0.16.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.6...@cosmos-kit/leap-extension@0.16.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.5...@cosmos-kit/leap-extension@0.16.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.4...@cosmos-kit/leap-extension@0.16.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.3...@cosmos-kit/leap-extension@0.16.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.2...@cosmos-kit/leap-extension@0.16.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.1...@cosmos-kit/leap-extension@0.16.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.0...@cosmos-kit/leap-extension@0.16.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.15.0...@cosmos-kit/leap-extension@0.16.0) (2023-05-04) + +### Features + +- Add leap suggest chain ([5bc26db](https://github.com/cosmology-tech/cosmos-kit/commit/5bc26db2f15681ad16d0e6830cef5de170cb36fe)) + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.21...@cosmos-kit/leap-extension@0.15.0) (2023-04-28) + +### Features + +- :sparkles: add leap ext suggest token ([ebf87aa](https://github.com/cosmology-tech/cosmos-kit/commit/ebf87aaef7c3c7971b444d42fa86db6b50ec50fd)) +- :sparkles: add leap ext types ([b945f47](https://github.com/cosmology-tech/cosmos-kit/commit/b945f471fc56664954eca4987bd9b94785111232)) +- :sparkles: improve suggest token types ([dc06b79](https://github.com/cosmology-tech/cosmos-kit/commit/dc06b79d56a5153b2d5f955d919fffc8232fdcd4)) + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.20...@cosmos-kit/leap-extension@0.14.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.19...@cosmos-kit/leap-extension@0.14.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.18...@cosmos-kit/leap-extension@0.14.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.17...@cosmos-kit/leap-extension@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.16...@cosmos-kit/leap-extension@0.14.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.15...@cosmos-kit/leap-extension@0.14.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.14...@cosmos-kit/leap-extension@0.14.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.13...@cosmos-kit/leap-extension@0.14.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.12...@cosmos-kit/leap-extension@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.11...@cosmos-kit/leap-extension@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.10...@cosmos-kit/leap-extension@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.9...@cosmos-kit/leap-extension@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.8...@cosmos-kit/leap-extension@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.7...@cosmos-kit/leap-extension@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.6...@cosmos-kit/leap-extension@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.5...@cosmos-kit/leap-extension@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.4...@cosmos-kit/leap-extension@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.3...@cosmos-kit/leap-extension@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.2...@cosmos-kit/leap-extension@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.1...@cosmos-kit/leap-extension@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.0...@cosmos-kit/leap-extension@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.33...@cosmos-kit/leap-extension@0.14.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.32...@cosmos-kit/leap-extension@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.31...@cosmos-kit/leap-extension@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.30...@cosmos-kit/leap-extension@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.29...@cosmos-kit/leap-extension@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.28...@cosmos-kit/leap-extension@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.27...@cosmos-kit/leap-extension@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.26...@cosmos-kit/leap-extension@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.25...@cosmos-kit/leap-extension@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.24...@cosmos-kit/leap-extension@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.23...@cosmos-kit/leap-extension@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.21...@cosmos-kit/leap-extension@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.20...@cosmos-kit/leap-extension@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.19...@cosmos-kit/leap-extension@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.18...@cosmos-kit/leap-extension@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.17...@cosmos-kit/leap-extension@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.16...@cosmos-kit/leap-extension@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.15...@cosmos-kit/leap-extension@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## 0.13.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.13...@cosmos-kit/leap@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.12...@cosmos-kit/leap@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.11...@cosmos-kit/leap@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.10...@cosmos-kit/leap@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.9...@cosmos-kit/leap@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.8...@cosmos-kit/leap@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.7...@cosmos-kit/leap@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.6...@cosmos-kit/leap@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.5...@cosmos-kit/leap@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.4...@cosmos-kit/leap@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.3...@cosmos-kit/leap@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.2...@cosmos-kit/leap@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.1...@cosmos-kit/leap@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.0...@cosmos-kit/leap@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.12.0...@cosmos-kit/leap@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.2...@cosmos-kit/leap@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.1...@cosmos-kit/leap@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.0...@cosmos-kit/leap@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.6...@cosmos-kit/leap@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.5...@cosmos-kit/leap@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.4...@cosmos-kit/leap@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.3...@cosmos-kit/leap@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.2...@cosmos-kit/leap@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.1...@cosmos-kit/leap@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.0...@cosmos-kit/leap@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.1...@cosmos-kit/leap@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.0...@cosmos-kit/leap@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.1...@cosmos-kit/leap@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.0...@cosmos-kit/leap@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.7.0...@cosmos-kit/leap@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.6.0...@cosmos-kit/leap@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.5.0...@cosmos-kit/leap@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.2...@cosmos-kit/leap@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.1...@cosmos-kit/leap@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.0...@cosmos-kit/leap@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.3.0...@cosmos-kit/leap@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.2...@cosmos-kit/leap@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.1...@cosmos-kit/leap@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.0...@cosmos-kit/leap@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.6...@cosmos-kit/leap@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.5...@cosmos-kit/leap@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.4...@cosmos-kit/leap@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.3...@cosmos-kit/leap@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.1...@cosmos-kit/leap@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.0...@cosmos-kit/leap@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/leap-capsule-social-login/LICENSE b/wallets/leap-capsule-social-login/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/leap-capsule-social-login/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/leap-capsule-social-login/README.md b/wallets/leap-capsule-social-login/README.md new file mode 100644 index 000000000..bc038d514 --- /dev/null +++ b/wallets/leap-capsule-social-login/README.md @@ -0,0 +1,153 @@ +# @cosmos-kit/leap-capsule-social-login + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +`@cosmos-kit/leap-capsule-social-login` is the social login integration for CosmosKit using `@leapwallet/cosmos-social-login-capsule-provider` + +> You need install [@leapwallet/cosmos-social-login-capsule-provider-ui](https://www.npmjs.com/package/@leapwallet/cosmos-social-login-capsule-provider-ui) package for UI. + +> This plugin uses [Capsule](https://usecapsule.com/) for MPC based key management. In order to make this work, you'll need an API key which you can request [here](https://usecapsule.com/api) + +> Once you have an API Key, include it in `CAPSULE_API_KEY`. `CAPSULE_ENV` will be `BETA` for Development and Testing, and `PROD` for Production. Once you are ready to release to Production, ping the Capsule team to get a separate API Key for Production. + +## NextJS + +For nextjs we recommend to load the module dynamic or async as it is not yet supporting SSR. + +> When you build it, please include environment variables `NEXT_PUBLIC_CAPSULE_API_KEY` and `NEXT_PUBLIC_CAPSULE_ENV` as mentioned above. For further reference on Capsule, please reference the [Capsule Developer Documentation](https://docs.usecapsule.com/) + +### In next.config.js + +transpilePackages: ["@cosmos-kit/leap-social-login", "@leapwallet/capsule-web-sdk-lite", "@leapwallet/cosmos-social-login-capsule-provider"], + +### For example + +```jsx + +function MyApp({ Component, pageProps }: AppProps) { + const defaultWallets: MainWalletBase[] = [...keplrWallets, ...leapWallets]; + const [wallets, setWallets] = useState(defaultWallets) + const [loadingWallets, setLoadingWallet] = useState(false); + + useEffect(() => { + setLoadingWallet(true) + import("@cosmos-kit/leap-capsule-social-login").then( + (CapsuleModule) => { + return CapsuleModule.wallets; + }, + ).then((leapSocialLogin) => { + setWallets([...keplrWallets, ...leapWallets, ...leapSocialLogin]) + setLoadingWallet(false); + }) + }, []) + + + if (loadingWallets) { + return <>Loading... + } + + + return ( + + + + + + + ); +} + +export default MyApp; + + +const LeapSocialLogin = dynamic( + () => + import("@leapwallet/cosmos-social-login-capsule-provider-ui").then( + (m) => m.CustomCapsuleModalView, + ), + { ssr: false }, +); + +export function CustomCapsuleModalViewX() { + const [showCapsuleModal, setShowCapsuleModal] = useState(false); + + useEffect(() => { + window.openCapsuleModal = () => { + setShowCapsuleModal(true); + } + }, []) + + return ( + <> + { + window.successFromCapsuleModal(); + }} + onLoginFailure={ + () => { + window.failureFromCapsuleModal(); + } + } + /> + + ); +} +``` + +## Related + +Checkout these related projects: + +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️ +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +* [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.tech/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/leap-capsule-social-login/index.ts b/wallets/leap-capsule-social-login/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/leap-capsule-social-login/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/package.json b/wallets/leap-capsule-social-login/package.json new file mode 100644 index 000000000..caaa40aa8 --- /dev/null +++ b/wallets/leap-capsule-social-login/package.json @@ -0,0 +1,71 @@ +{ + "name": "@cosmos-kit/leap-capsule-social-login", + "version": "0.10.2", + "description": "cosmos-kit wallet connector", + "author": "samvel@leapwallet.io", + "contributors": [ + { + "name": "SamvelRaja" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "leap", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1", + "@leapwallet/cosmos-social-login-capsule-provider": "0.0.39" + }, + "peerDependencies": { + "@cosmjs/amino": ">= 0.28", + "@cosmjs/proto-signing": ">= 0.28" + }, + "gitHead": "4e5a90510271d84165d456fece16ab0b2b4b3ee5" +} diff --git a/wallets/leap-capsule-social-login/src/chain-wallet.ts b/wallets/leap-capsule-social-login/src/chain-wallet.ts new file mode 100644 index 000000000..1a7dd54a9 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainCosmosSocial extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/leap-capsule-social-login/src/client.ts b/wallets/leap-capsule-social-login/src/client.ts new file mode 100644 index 000000000..959d4c663 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/client.ts @@ -0,0 +1,74 @@ +/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF + +import { StdSignDoc } from '@cosmjs/amino'; +import { SignOptions, SignType } from '@cosmos-kit/core'; +import { DirectSignDoc, WalletClient } from '@cosmos-kit/core'; +import { CapsuleProvider } from '@leapwallet/cosmos-social-login-capsule-provider'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +export class CosmosCapsuleClient implements WalletClient { + readonly loginProvider: CapsuleProvider; + + constructor(options: { loginProvider: CapsuleProvider }) { + this.loginProvider = options.loginProvider; + } + + async disconnect() { + await this.loginProvider.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async enable() { + await this.handleConnect(); + } + + async handleConnect() { + await this.loginProvider.handleConnect(); + } + + async getAccount(chainId: string) { + return this.loginProvider.getAccount(chainId); + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + return this.loginProvider.getOfflineSigner(chainId, preferredSignType); + } + + getOfflineSignerAmino(chainId: string): any { + return this.loginProvider.getOfflineSignerAmino(chainId); + } + + getOfflineSignerDirect(chainId: string): any { + return this.loginProvider.getOfflineSignerDirect(chainId); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return this.loginProvider.signAmino(chainId, signer, signDoc, signOptions); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc + ): Promise { + return this.loginProvider.signDirect( + chainId, + signer, + signDoc as unknown as SignDoc + ); + } +} diff --git a/wallets/leap-capsule-social-login/src/constant.ts b/wallets/leap-capsule-social-login/src/constant.ts new file mode 100644 index 000000000..d4c9b22b9 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/constant.ts @@ -0,0 +1,2 @@ +export const LEAP_SOCIAL_LOGIN_LOGO = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNTYiIHZpZXdCb3g9IjAgMCA1NiA1NiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iMTAiIGZpbGw9IiNBM0Y1QkIiLz4KPHBhdGggZD0iTTEzLjYgNDIuNDAwMUMxMi42MSA0Mi40MDAxIDExLjc2MjUgNDIuMDQ3NiAxMS4wNTc1IDQxLjM0MjZDMTAuMzUyNSA0MC42Mzc2IDEwIDM5Ljc5MDEgMTAgMzguODAwMVYxNy4yMDAxQzEwIDE2LjIxMDEgMTAuMzUyNSAxNS4zNjI2IDExLjA1NzUgMTQuNjU3NkMxMS43NjI1IDEzLjk1MjYgMTIuNjEgMTMuNjAwMSAxMy42IDEzLjYwMDFINDIuNEM0My4zOSAxMy42MDAxIDQ0LjIzNzUgMTMuOTUyNiA0NC45NDI1IDE0LjY1NzZDNDUuNjQ3NSAxNS4zNjI2IDQ2IDE2LjIxMDEgNDYgMTcuMjAwMVYzOC44MDAxQzQ2IDM5Ljc5MDEgNDUuNjQ3NSA0MC42Mzc2IDQ0Ljk0MjUgNDEuMzQyNkM0NC4yMzc1IDQyLjA0NzYgNDMuMzkgNDIuNDAwMSA0Mi40IDQyLjQwMDFIMTMuNlpNMjggMjkuODAwMUwxMy42IDIwLjgwMDFWMzguODAwMUg0Mi40VjIwLjgwMDFMMjggMjkuODAwMVpNMjggMjYuMjAwMUw0Mi40IDE3LjIwMDFIMTMuNkwyOCAyNi4yMDAxWk0xMy42IDIwLjgwMDFWMTcuMjAwMVYzOC44MDAxVjIwLjgwMDFaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K'; \ No newline at end of file diff --git a/wallets/leap-capsule-social-login/src/index.ts b/wallets/leap-capsule-social-login/src/index.ts new file mode 100644 index 000000000..4cf70d934 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/index.ts @@ -0,0 +1,5 @@ +export * from './chain-wallet'; +export * from './client'; +export * from './constant'; +export * from './leap-social'; +export * from './main-wallet'; diff --git a/wallets/leap-capsule-social-login/src/leap-social.ts b/wallets/leap-capsule-social-login/src/leap-social.ts new file mode 100644 index 000000000..e8d851b11 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/leap-social.ts @@ -0,0 +1,7 @@ +import { LeapCapsuleInfo } from '@leapwallet/cosmos-social-login-capsule-provider'; + +import { LeapCapsuleWallet } from './main-wallet'; + +const leapSocial = new LeapCapsuleWallet(LeapCapsuleInfo); + +export const wallets = [leapSocial]; diff --git a/wallets/leap-capsule-social-login/src/main-wallet.ts b/wallets/leap-capsule-social-login/src/main-wallet.ts new file mode 100644 index 000000000..820ecb03e --- /dev/null +++ b/wallets/leap-capsule-social-login/src/main-wallet.ts @@ -0,0 +1,35 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; +import { + CapsuleEnvironment, + CapsuleProvider, +} from '@leapwallet/cosmos-social-login-capsule-provider'; + +import { ChainCosmosSocial } from './chain-wallet'; +import { CosmosCapsuleClient } from './client'; + +export class LeapCapsuleWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainCosmosSocial); + } + + async initClient() { + this.initingClient(); + try { + this.initClientDone( + new CosmosCapsuleClient({ + loginProvider: new CapsuleProvider({ + apiKey: + process.env.CAPSULE_KEY || process.env.NEXT_PUBLIC_CAPSULE_KEY, + env: + process.env.CAPSULE_ENV || + (process.env + .NEXT_PUBLIC_CAPSULE_ENV as unknown as CapsuleEnvironment), + }), + }) + ); + } catch (error) { + this.initClientError(error as Error); + } + } +} diff --git a/wallets/leap-capsule-social-login/src/registry.ts b/wallets/leap-capsule-social-login/src/registry.ts new file mode 100644 index 000000000..4b176ff78 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/registry.ts @@ -0,0 +1,15 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { LEAP_SOCIAL_LOGIN_LOGO } from './constant'; + +export const LeapSocialLoginInfo: Wallet = { + name: 'leap-capsule-social-login', + prettyName: 'Sign In with Email', + logo: `${LEAP_SOCIAL_LOGIN_LOGO}`, + mode: 'extension', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [], +}; diff --git a/wallets/leap-capsule-social-login/src/types.ts b/wallets/leap-capsule-social-login/src/types.ts new file mode 100644 index 000000000..20ef96090 --- /dev/null +++ b/wallets/leap-capsule-social-login/src/types.ts @@ -0,0 +1,45 @@ +import { OfflineAminoSigner, StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +export interface LeapAccount { + address: string; + algo: string; + bech32Address: string; + isNanoLedger: boolean; + name: string; + pubKey: string; +} + +export type capsuleOptions = { + apiKey: string; +}; + +export type CosmosCapsule = { + enable: (chainIds: string[] | string) => Promise; + suggestToken: (chainId: string, contractAddress: string) => Promise; + experimentalSuggestChain: (chainInfo: unknown) => Promise; + disconnect: () => Promise; + getKey: (chainId: string) => Promise; + getOfflineSignerOnlyAmino: (chainId: string) => Promise; + getOfflineSigner: (chainId: string) => Promise; + signAmino: ( + chainId: string, + signer: string, + signDoc: StdSignDoc + ) => Promise; + signArbitrary: ( + chainId: string, + signer: string, + data: string | Uint8Array + ) => Promise; + signDirect: ( + chainId: string, + signer: string, + signDoc: SignDoc + ) => Promise; + getOfflineSignerAuto: (chainId: string) => OfflineDirectSigner; + getOfflineSignerDirect: (chainId: string) => OfflineDirectSigner; + getOfflineSignerAmino: (chainId: string) => OfflineAminoSigner; + request: unknown; +}; diff --git a/wallets/leap-capsule-social-login/tsconfig.json b/wallets/leap-capsule-social-login/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/leap-capsule-social-login/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/leap-extension/.editorconfig b/wallets/leap-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/leap-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/leap-extension/.eslintignore b/wallets/leap-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/leap-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/leap-extension/.eslintrc.json b/wallets/leap-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/leap-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/leap-extension/.gitignore b/wallets/leap-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/leap-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/leap-extension/.npmignore b/wallets/leap-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/leap-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/leap-extension/.npmrc b/wallets/leap-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/leap-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/leap-extension/.prettierrc.json b/wallets/leap-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/leap-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/leap-extension/LICENSE b/wallets/leap-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/leap-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/leap-extension/index.ts b/wallets/leap-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/leap-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/leap-extension/src/extension/chain-wallet.ts b/wallets/leap-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..399f55409 --- /dev/null +++ b/wallets/leap-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainLeapExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/leap-extension/src/extension/client.ts b/wallets/leap-extension/src/extension/client.ts new file mode 100644 index 000000000..cdde92a0e --- /dev/null +++ b/wallets/leap-extension/src/extension/client.ts @@ -0,0 +1,154 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + ExtendedHttpEndpoint, + SignType, + SuggestToken, +} from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; +import Long from 'long'; + +import { Leap } from './types'; + +export class LeapClient implements WalletClient { + readonly client: Leap; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Leap) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress } of tokens) { + await this.client.suggestCW20Token(chainId, contractAddress); + } + } + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async disconnect() { + await this.client.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/leap-extension/src/extension/index.ts b/wallets/leap-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/leap-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/leap-extension/src/extension/main-wallet.ts b/wallets/leap-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..da3bfcc25 --- /dev/null +++ b/wallets/leap-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainLeapExtension } from './chain-wallet'; +import { LeapClient } from './client'; +import { getLeapFromExtension } from './utils'; + +export class LeapExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainLeapExtension); + } + + async initClient() { + this.initingClient(); + try { + const leap = await getLeapFromExtension(); + this.initClientDone(leap ? new LeapClient(leap) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/leap-extension/src/extension/registry.ts b/wallets/leap-extension/src/extension/registry.ts new file mode 100644 index 000000000..9673be623 --- /dev/null +++ b/wallets/leap-extension/src/extension/registry.ts @@ -0,0 +1,26 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const leapExtensionInfo: Wallet = { + name: 'leap-extension', + prettyName: 'Leap', + logo: ICON, + mode: 'extension', + mobileDisabled: () => + !('leap' in window || /LeapCosmos/i.test(navigator.userAgent)), + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['leap_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/leap-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }, + { + link: 'https://chrome.google.com/webstore/detail/leap-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }, + ], +}; diff --git a/wallets/leap-extension/src/extension/types.ts b/wallets/leap-extension/src/extension/types.ts new file mode 100644 index 000000000..7a0df13b8 --- /dev/null +++ b/wallets/leap-extension/src/extension/types.ts @@ -0,0 +1,86 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export interface LeapSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Leap { + defaultOptions: { + sign?: LeapSignOptions; + }; + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + suggestToken(chainId: string, contractAddress: string): Promise; + suggestCW20Token(chainId: string, contractAddress: string): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: LeapSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: LeapSignOptions + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + getEnigmaPubKey(chainId: string): Promise; + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/wallets/leap-extension/src/extension/utils.ts b/wallets/leap-extension/src/extension/utils.ts new file mode 100644 index 000000000..d0ebce4c6 --- /dev/null +++ b/wallets/leap-extension/src/extension/utils.ts @@ -0,0 +1,47 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Leap } from './types'; + +interface LeapWindow { + leap?: Leap; +} + +export const getLeapFromExtension: () => Promise< + Leap | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const leap = (window as LeapWindow).leap; + + if (leap) { + return leap; + } + + if (document.readyState === 'complete') { + if (leap) { + return leap; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (leap) { + resolve(leap); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/leap-extension/src/index.ts b/wallets/leap-extension/src/index.ts index 9da7f4d53..df4c990a4 100644 --- a/wallets/leap-extension/src/index.ts +++ b/wallets/leap-extension/src/index.ts @@ -4,4 +4,4 @@ import { leapExtensionInfo } from "./registry"; const leapWallet = new LeapWallet(leapExtensionInfo); -export { leapWallet } \ No newline at end of file +export { leapWallet } diff --git a/wallets/leap-extension/src/leap.ts b/wallets/leap-extension/src/leap.ts new file mode 100644 index 000000000..5db5d6ca2 --- /dev/null +++ b/wallets/leap-extension/src/leap.ts @@ -0,0 +1,5 @@ +import { leapExtensionInfo, LeapExtensionWallet } from './extension'; + +const leapExtension = new LeapExtensionWallet(leapExtensionInfo); + +export const wallets = [leapExtension]; diff --git a/wallets/leap-metamask-cosmos-snap/.editorconfig b/wallets/leap-metamask-cosmos-snap/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/leap-metamask-cosmos-snap/.eslintignore b/wallets/leap-metamask-cosmos-snap/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/.eslintrc.json b/wallets/leap-metamask-cosmos-snap/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/.gitignore b/wallets/leap-metamask-cosmos-snap/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/leap-metamask-cosmos-snap/.npmignore b/wallets/leap-metamask-cosmos-snap/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/.npmrc b/wallets/leap-metamask-cosmos-snap/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/.prettierrc.json b/wallets/leap-metamask-cosmos-snap/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/CHANGELOG.md b/wallets/leap-metamask-cosmos-snap/CHANGELOG.md new file mode 100644 index 000000000..293b7501f --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/CHANGELOG.md @@ -0,0 +1,822 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.12.1...@cosmos-kit/leap-metamask-cosmos-snap@0.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.12.0...@cosmos-kit/leap-metamask-cosmos-snap@0.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.11.0...@cosmos-kit/leap-metamask-cosmos-snap@0.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.10.0...@cosmos-kit/leap-metamask-cosmos-snap@0.11.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.9.0...@cosmos-kit/leap-metamask-cosmos-snap@0.10.0) (2024-05-23) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.8.0...@cosmos-kit/leap-metamask-cosmos-snap@0.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.7.3...@cosmos-kit/leap-metamask-cosmos-snap@0.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + + + + + +## [0.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.7.2...@cosmos-kit/leap-metamask-cosmos-snap@0.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.7.1...@cosmos-kit/leap-metamask-cosmos-snap@0.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.7.0...@cosmos-kit/leap-metamask-cosmos-snap@0.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.6.2...@cosmos-kit/leap-metamask-cosmos-snap@0.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.6.1...@cosmos-kit/leap-metamask-cosmos-snap@0.6.2) (2024-02-29) + +### Bug Fixes + +- Metamask snaps signDirect issue ([7b577cf](https://github.com/cosmology-tech/cosmos-kit/commit/7b577cf84956906b44f6dfd1e84ccca51d02fd58)) + +## [0.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.6.0...@cosmos-kit/leap-metamask-cosmos-snap@0.6.1) (2024-02-28) + +### Bug Fixes + +- typo in leap-metamask-cosmos-snap detection ([7937415](https://github.com/cosmology-tech/cosmos-kit/commit/79374152414301653c24918dbd031e7184b151ee)) + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.8...@cosmos-kit/leap-metamask-cosmos-snap@0.6.0) (2024-01-31) + +### Features + +- add metamask detection to leap-metamask-cosmos-snap ([10f794f](https://github.com/cosmology-tech/cosmos-kit/commit/10f794f90d3fc812e2c438965288396baf880be7)) + +## [0.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.7...@cosmos-kit/leap-metamask-cosmos-snap@0.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.6...@cosmos-kit/leap-metamask-cosmos-snap@0.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.5...@cosmos-kit/leap-metamask-cosmos-snap@0.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.4...@cosmos-kit/leap-metamask-cosmos-snap@0.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.3...@cosmos-kit/leap-metamask-cosmos-snap@0.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.2...@cosmos-kit/leap-metamask-cosmos-snap@0.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.1...@cosmos-kit/leap-metamask-cosmos-snap@0.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.5.0...@cosmos-kit/leap-metamask-cosmos-snap@0.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.4.4...@cosmos-kit/leap-metamask-cosmos-snap@0.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.4.3...@cosmos-kit/leap-metamask-cosmos-snap@0.4.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.4.2...@cosmos-kit/leap-metamask-cosmos-snap@0.4.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.4.1...@cosmos-kit/leap-metamask-cosmos-snap@0.4.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.4.0...@cosmos-kit/leap-metamask-cosmos-snap@0.4.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.12...@cosmos-kit/leap-metamask-cosmos-snap@0.4.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.11...@cosmos-kit/leap-metamask-cosmos-snap@0.3.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.10...@cosmos-kit/leap-metamask-cosmos-snap@0.3.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.9...@cosmos-kit/leap-metamask-cosmos-snap@0.3.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.8...@cosmos-kit/leap-metamask-cosmos-snap@0.3.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.7...@cosmos-kit/leap-metamask-cosmos-snap@0.3.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.6...@cosmos-kit/leap-metamask-cosmos-snap@0.3.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.5...@cosmos-kit/leap-metamask-cosmos-snap@0.3.6) (2023-11-02) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.4...@cosmos-kit/leap-metamask-cosmos-snap@0.3.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.3...@cosmos-kit/leap-metamask-cosmos-snap@0.3.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.2...@cosmos-kit/leap-metamask-cosmos-snap@0.3.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.1...@cosmos-kit/leap-metamask-cosmos-snap@0.3.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.3.0...@cosmos-kit/leap-metamask-cosmos-snap@0.3.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.7...@cosmos-kit/leap-metamask-cosmos-snap@0.3.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.6...@cosmos-kit/leap-metamask-cosmos-snap@0.2.7) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.5...@cosmos-kit/leap-metamask-cosmos-snap@0.2.6) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.4...@cosmos-kit/leap-metamask-cosmos-snap@0.2.5) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.3...@cosmos-kit/leap-metamask-cosmos-snap@0.2.4) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.2...@cosmos-kit/leap-metamask-cosmos-snap@0.2.3) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.1...@cosmos-kit/leap-metamask-cosmos-snap@0.2.2) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.2.0...@cosmos-kit/leap-metamask-cosmos-snap@0.2.1) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.1.1...@cosmos-kit/leap-metamask-cosmos-snap@0.2.0) (2023-09-12) + +### Features + +- metamask snaps support ([6c66a08](https://github.com/cosmology-tech/cosmos-kit/commit/6c66a080b07fef10ec7da021713f59084bdb3c54)) + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.1.0...@cosmos-kit/leap-metamask-cosmos-snap@0.1.1) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [0.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-metamask-cosmos-snap@0.0.2...@cosmos-kit/leap-metamask-cosmos-snap@0.1.0) (2023-09-07) + +### Features + +- new metamask_snap field ([2ac61ce](https://github.com/cosmology-tech/cosmos-kit/commit/2ac61cebb8fa885cb129484d0c852acd2ec1ea73)) + +## 0.0.2 (2023-08-25) + +**Note:** Version bump only for package @cosmos-kit/leap-metamask-cosmos-snap + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.3.1...@cosmos-kit/leap-extension@2.4.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.3.0...@cosmos-kit/leap-extension@2.3.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.7...@cosmos-kit/leap-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.6...@cosmos-kit/leap-extension@2.2.7) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.5...@cosmos-kit/leap-extension@2.2.6) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.4...@cosmos-kit/leap-extension@2.2.5) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.3...@cosmos-kit/leap-extension@2.2.4) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.2...@cosmos-kit/leap-extension@2.2.3) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.1...@cosmos-kit/leap-extension@2.2.2) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.2.0...@cosmos-kit/leap-extension@2.2.1) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.4...@cosmos-kit/leap-extension@2.2.0) (2023-08-03) + +### Features + +- add platformEnabledWallets ([a48ffab](https://github.com/cosmology-tech/cosmos-kit/commit/a48ffabd6108363b24b5bdecb6a156a669758e4a)) + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.3...@cosmos-kit/leap-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.2...@cosmos-kit/leap-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.1...@cosmos-kit/leap-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.1.0...@cosmos-kit/leap-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.5...@cosmos-kit/leap-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.4...@cosmos-kit/leap-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.3...@cosmos-kit/leap-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.2...@cosmos-kit/leap-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1...@cosmos-kit/leap-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.6...@cosmos-kit/leap-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.5...@cosmos-kit/leap-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.4...@cosmos-kit/leap-extension@2.0.1-beta.5) (2023-07-18) + +### Features + +- add leap mobile webview support ([14b0d45](https://github.com/cosmology-tech/cosmos-kit/commit/14b0d45d88a809d2b95f45d56b5c745418e1dd21)) + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.3...@cosmos-kit/leap-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.2...@cosmos-kit/leap-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.1...@cosmos-kit/leap-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@2.0.1-beta.0...@cosmos-kit/leap-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@1.0.0...@cosmos-kit/leap-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.6...@cosmos-kit/leap-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.5...@cosmos-kit/leap-extension@0.17.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.4...@cosmos-kit/leap-extension@0.17.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.3...@cosmos-kit/leap-extension@0.17.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2...@cosmos-kit/leap-extension@0.17.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.1...@cosmos-kit/leap-extension@0.17.2) (2023-06-30) + +## [0.17.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.1...@cosmos-kit/leap-extension@0.17.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.2-beta.0...@cosmos-kit/leap-extension@0.17.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.1...@cosmos-kit/leap-extension@0.17.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.17.0...@cosmos-kit/leap-extension@0.17.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.11...@cosmos-kit/leap-extension@0.17.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.16.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.10...@cosmos-kit/leap-extension@0.16.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.9...@cosmos-kit/leap-extension@0.16.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.8...@cosmos-kit/leap-extension@0.16.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.7...@cosmos-kit/leap-extension@0.16.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.6...@cosmos-kit/leap-extension@0.16.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.5...@cosmos-kit/leap-extension@0.16.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.4...@cosmos-kit/leap-extension@0.16.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.3...@cosmos-kit/leap-extension@0.16.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.2...@cosmos-kit/leap-extension@0.16.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.1...@cosmos-kit/leap-extension@0.16.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.16.0...@cosmos-kit/leap-extension@0.16.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.15.0...@cosmos-kit/leap-extension@0.16.0) (2023-05-04) + +### Features + +- Add leap suggest chain ([5bc26db](https://github.com/cosmology-tech/cosmos-kit/commit/5bc26db2f15681ad16d0e6830cef5de170cb36fe)) + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.21...@cosmos-kit/leap-extension@0.15.0) (2023-04-28) + +### Features + +- :sparkles: add leap ext suggest token ([ebf87aa](https://github.com/cosmology-tech/cosmos-kit/commit/ebf87aaef7c3c7971b444d42fa86db6b50ec50fd)) +- :sparkles: add leap ext types ([b945f47](https://github.com/cosmology-tech/cosmos-kit/commit/b945f471fc56664954eca4987bd9b94785111232)) +- :sparkles: improve suggest token types ([dc06b79](https://github.com/cosmology-tech/cosmos-kit/commit/dc06b79d56a5153b2d5f955d919fffc8232fdcd4)) + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.20...@cosmos-kit/leap-extension@0.14.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.19...@cosmos-kit/leap-extension@0.14.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.18...@cosmos-kit/leap-extension@0.14.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.17...@cosmos-kit/leap-extension@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.16...@cosmos-kit/leap-extension@0.14.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.15...@cosmos-kit/leap-extension@0.14.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.14...@cosmos-kit/leap-extension@0.14.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.13...@cosmos-kit/leap-extension@0.14.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.12...@cosmos-kit/leap-extension@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.11...@cosmos-kit/leap-extension@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.10...@cosmos-kit/leap-extension@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.9...@cosmos-kit/leap-extension@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.8...@cosmos-kit/leap-extension@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.7...@cosmos-kit/leap-extension@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.6...@cosmos-kit/leap-extension@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.5...@cosmos-kit/leap-extension@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.4...@cosmos-kit/leap-extension@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.3...@cosmos-kit/leap-extension@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.2...@cosmos-kit/leap-extension@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.1...@cosmos-kit/leap-extension@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.14.0...@cosmos-kit/leap-extension@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.33...@cosmos-kit/leap-extension@0.14.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.32...@cosmos-kit/leap-extension@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.31...@cosmos-kit/leap-extension@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.30...@cosmos-kit/leap-extension@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.29...@cosmos-kit/leap-extension@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.28...@cosmos-kit/leap-extension@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.27...@cosmos-kit/leap-extension@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.26...@cosmos-kit/leap-extension@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.25...@cosmos-kit/leap-extension@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.24...@cosmos-kit/leap-extension@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.23...@cosmos-kit/leap-extension@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.21...@cosmos-kit/leap-extension@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.20...@cosmos-kit/leap-extension@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.19...@cosmos-kit/leap-extension@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.18...@cosmos-kit/leap-extension@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.17...@cosmos-kit/leap-extension@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.16...@cosmos-kit/leap-extension@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap-extension@0.13.15...@cosmos-kit/leap-extension@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## 0.13.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/leap-extension + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.13...@cosmos-kit/leap@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.12...@cosmos-kit/leap@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.11...@cosmos-kit/leap@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.10...@cosmos-kit/leap@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.9...@cosmos-kit/leap@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.8...@cosmos-kit/leap@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.7...@cosmos-kit/leap@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.6...@cosmos-kit/leap@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.5...@cosmos-kit/leap@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.4...@cosmos-kit/leap@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.3...@cosmos-kit/leap@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.2...@cosmos-kit/leap@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.1...@cosmos-kit/leap@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.0...@cosmos-kit/leap@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.12.0...@cosmos-kit/leap@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.2...@cosmos-kit/leap@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.1...@cosmos-kit/leap@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.0...@cosmos-kit/leap@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.6...@cosmos-kit/leap@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.5...@cosmos-kit/leap@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.4...@cosmos-kit/leap@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.3...@cosmos-kit/leap@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.2...@cosmos-kit/leap@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.1...@cosmos-kit/leap@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.0...@cosmos-kit/leap@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.1...@cosmos-kit/leap@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.0...@cosmos-kit/leap@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.1...@cosmos-kit/leap@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.0...@cosmos-kit/leap@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.7.0...@cosmos-kit/leap@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.6.0...@cosmos-kit/leap@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.5.0...@cosmos-kit/leap@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.2...@cosmos-kit/leap@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.1...@cosmos-kit/leap@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.0...@cosmos-kit/leap@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.3.0...@cosmos-kit/leap@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.2...@cosmos-kit/leap@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.1...@cosmos-kit/leap@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.0...@cosmos-kit/leap@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.6...@cosmos-kit/leap@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.5...@cosmos-kit/leap@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.4...@cosmos-kit/leap@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.3...@cosmos-kit/leap@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.1...@cosmos-kit/leap@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.0...@cosmos-kit/leap@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/leap-metamask-cosmos-snap/LICENSE b/wallets/leap-metamask-cosmos-snap/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/leap-metamask-cosmos-snap/README.md b/wallets/leap-metamask-cosmos-snap/README.md new file mode 100644 index 000000000..0258c9c28 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/leap-metamask-cosmos-snap + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/leap-metamask-cosmos-snap is the metamask integration for CosmosKit using leap-metamask-cosmos-snap. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/leap-metamask-cosmos-snap/index.ts b/wallets/leap-metamask-cosmos-snap/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/package.json b/wallets/leap-metamask-cosmos-snap/package.json new file mode 100644 index 000000000..a1b1bfae3 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/package.json @@ -0,0 +1,73 @@ +{ + "name": "@cosmos-kit/leap-metamask-cosmos-snap", + "version": "0.12.2", + "description": "cosmos-kit wallet connector", + "author": "mayank.yadav@leapwallet.io", + "contributors": [ + { + "name": "Mayank Yadav" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "leap", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1", + "@leapwallet/cosmos-snap-provider": "0.1.26", + "@metamask/providers": "^11.1.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3", + "cosmjs-types": ">=0.9.0" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/leap-metamask-cosmos-snap/src/constant.ts b/wallets/leap-metamask-cosmos-snap/src/constant.ts new file mode 100644 index 000000000..9ad4d9891 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/constant.ts @@ -0,0 +1,5 @@ +export const LEAP_LOGO = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzQzIiBoZWlnaHQ9IjM0MyIgdmlld0JveD0iMCAwIDM0MyAzNDMiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNzEuNzUgMzQyLjc1QzI2Ni4xOTEgMzQyLjc1IDM0Mi43NSAyNjYuMTkxIDM0Mi43NSAxNzEuNzVDMzQyLjc1IDc3LjMwOTMgMjY2LjE5MSAwLjc1IDE3MS43NSAwLjc1Qzc3LjMwOTMgMC43NSAwLjc1IDc3LjMwOTMgMC43NSAxNzEuNzVDMC43NSAyNjYuMTkxIDc3LjMwOTMgMzQyLjc1IDE3MS43NSAzNDIuNzVaIiBmaWxsPSIjMDUzMzE4Ii8+CjxwYXRoIGQ9Ik0yNjUuNjU0IDIwMC42NjlDMjY1LjY1NCAyMzQuMjM3IDIyNC42OSAyNDcuODgyIDE3My44MjYgMjQ3Ljg4MkMxMjIuOTYyIDI0Ny44ODIgODEuMzk4NCAyMzQuMjM3IDgxLjM5ODQgMjAwLjY2OUM4MS4zOTg0IDE2Ny4xMDEgMTIyLjY2MiAxMzkuOTM4IDE3My41MjYgMTM5LjkzOEMyMjQuMzkgMTM5LjkzOCAyNjUuNjU0IDE2Ny4xNjEgMjY1LjY1NCAyMDAuNjY5WiIgZmlsbD0iIzI0QTk1QSIvPgo8cGF0aCBkPSJNMjU2LjMxNSAxMjcuNTA4QzI1Ni4zMTUgMTA5LjgzNiAyNDEuODg3IDk1LjQ4NDQgMjI0LjExNSA5NS40ODQ0QzIxNC44NzUgOTUuNDg0NCAyMDYuNTUxIDk5LjM2ODQgMjAwLjY4MyAxMDUuNTUyQzIwMC4yNCAxMDYuMDMyIDE5OS42ODIgMTA2LjM5MSAxOTkuMDYyIDEwNi41OTVDMTk4LjQ0MiAxMDYuOCAxOTcuNzggMTA2Ljg0MyAxOTcuMTM5IDEwNi43MkMxODkuNDMyIDEwNS4xNjYgMTgxLjU4OSAxMDQuMzgyIDE3My43MjcgMTA0LjM4QzE2NS44NjUgMTA0LjM1OCAxNTguMDIyIDEwNS4xMzggMTUwLjMxOSAxMDYuNzA4QzE0OS42NzcgMTA2LjgzMyAxNDkuMDE1IDEwNi43OTMgMTQ4LjM5NCAxMDYuNTkyQzE0Ny43NzIgMTA2LjM5IDE0Ny4yMTIgMTA2LjAzNCAxNDYuNzY3IDEwNS41NTZDMTQzLjc0OCAxMDIuMzc5IDE0MC4xMTUgOTkuODQ4IDEzNi4wODggOTguMTE2N0MxMzIuMDYyIDk2LjM4NTQgMTI3LjcyNSA5NS40ODk4IDEyMy4zNDMgOTUuNDg0NEMxMDUuNTcxIDk1LjQ4NDQgOTEuMTQyNiAxMDkuODM2IDkxLjE0MjYgMTI3LjUwOEM5MS4xMzQ4IDEzMi40NjQgOTIuMjg2OCAxMzcuMzUzIDk0LjUwNjYgMTQxLjc4NEM5NC43NjM2IDE0Mi4yOTMgOTQuOTA3NSAxNDIuODUyIDk0LjkyODIgMTQzLjQyMUM5NC45NDg5IDE0My45OTEgOTQuODQ2IDE0NC41NTggOTQuNjI2NiAxNDUuMDg0QzkyLjUzMDIgMTUwLjAzMyA5MS40NDYyIDE1NS4zNSA5MS40Mzg2IDE2MC43MjRDOTEuNDM4NiAxOTEuODYgMTI4LjI5MSAyMTcuMDY4IDE3My43MjcgMjE3LjA2OEMyMTkuMTY3IDIxNy4wNjggMjU2LjAxOSAxOTEuODYgMjU2LjAxOSAxNjAuNzI0QzI1Ni4wMTEgMTU1LjM1IDI1NC45MjcgMTUwLjAzMyAyNTIuODMxIDE0NS4wODRDMjUyLjYxMSAxNDQuNTU4IDI1Mi41MDggMTQzLjk5MSAyNTIuNTI5IDE0My40MjFDMjUyLjU1IDE0Mi44NTIgMjUyLjY5NCAxNDIuMjkzIDI1Mi45NTEgMTQxLjc4NEMyNTUuMTY5IDEzNy4zNTMgMjU2LjMyMSAxMzIuNDY0IDI1Ni4zMTUgMTI3LjUwOFoiIGZpbGw9IiMzMkRBNkQiLz4KPHBhdGggZD0iTTEyMC43MjcgMTQ1LjI2OUMxMzEuNTk1IDE0NS4yNjkgMTQwLjQwMyAxMzYuNTA1IDE0MC40MDMgMTI1LjY5N0MxNDAuNDAzIDExNC44ODUgMTMxLjU5NSAxMDYuMTI1IDEyMC43MjcgMTA2LjEyNUMxMDkuODU5IDEwNi4xMjUgMTAxLjA0NyAxMTQuODg1IDEwMS4wNDcgMTI1LjY5N0MxMDEuMDQ3IDEzNi41MDUgMTA5Ljg1OSAxNDUuMjY5IDEyMC43MjcgMTQ1LjI2OVpNMjI1LjY5NSAxNDUuMjY5QzIzNi41NjMgMTQ1LjI2OSAyNDUuMzcxIDEzNi41MDUgMjQ1LjM3MSAxMjUuNjk3QzI0NS4zNzEgMTE0Ljg4NSAyMzYuNTYzIDEwNi4xMjUgMjI1LjY5NSAxMDYuMTI1QzIxNC44MjcgMTA2LjEyNSAyMDYuMDE1IDExNC44ODUgMjA2LjAxNSAxMjUuNjk3QzIwNi4wMTUgMTM2LjUwNSAyMTQuODI3IDE0NS4yNjkgMjI1LjY5NSAxNDUuMjY5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTExMC4yODEgMjQ1LjQ1N0MxMTQuNTE3IDI0NS40NTcgMTE3Ljg1NyAyNDEuNzc3IDExNy4zNzcgMjM3LjYyNUMxMTUuNjQ5IDIyMi45MTcgMTA4LjMxMyAxOTEuMDY5IDc2LjA1NzQgMTcxLjkxM0M0MC43MDE0IDE1MC45MTMgNTcuNTA5NCAyMDYuNzI1IDY0LjU0MTQgMjI3LjA4NUM2NS4yNDM5IDIyOS4wODIgNjUuMjI3NSAyMzEuMjYxIDY0LjQ5NTEgMjMzLjI0N0M2My43NjI3IDIzNS4yMzQgNjIuMzYwMiAyMzYuOTAyIDYwLjUyOTUgMjM3Ljk2NUw1OC4yMjU0IDIzOS4yODlDNTUuMjQ1NCAyNDEuMDA5IDU2LjQ5NzQgMjQ1LjQ1NyA1OS44OTc0IDI0NS40NTdIMTEwLjI4MVpNMjM4LjQxNyAyNDUuNDU3QzIzNC42MDEgMjQ1LjQ1NyAyMzEuNjIxIDI0MS43NzcgMjMyLjAzNyAyMzcuNjI1QzIzMy41MjkgMjIyLjk3NyAyNDAuMjA5IDE5MS4wNjkgMjY5LjMwNSAxNzEuOTEzQzMwMS41MjEgMTUwLjc0OSAyODUuODUzIDIwNy41OTcgMjc5LjU4OSAyMjcuNTUzQzI3OC45ODIgMjI5LjQ1NyAyNzkuMDIxIDIzMS41MDggMjc5LjcwMSAyMzMuMzg3QzI4MC4zOCAyMzUuMjY3IDI4MS42NjEgMjM2Ljg2OSAyODMuMzQ1IDIzNy45NDVMMjg1LjQ2NSAyMzkuMjg5QzI4OC4xNDkgMjQxLjAwOSAyODcuMDE3IDI0NS40NTcgMjgzLjk3NyAyNDUuNDU3SDIzOC40MTdaIiBmaWxsPSIjMzJEQTZEIi8+CjxwYXRoIGQ9Ik0xMjAuNzIyIDEzNy40MDJDMTIzLjgzNiAxMzcuNDAyIDEyNi44MjIgMTM2LjE2NSAxMjkuMDI0IDEzMy45NjNDMTMxLjIyNiAxMzEuNzYyIDEzMi40NjIgMTI4Ljc3NiAxMzIuNDYyIDEyNS42NjJDMTMyLjQ2MiAxMjIuNTQ4IDEzMS4yMjYgMTE5LjU2MiAxMjkuMDI0IDExNy4zNkMxMjYuODIyIDExNS4xNTkgMTIzLjgzNiAxMTMuOTIyIDEyMC43MjIgMTEzLjkyMkMxMTcuNjA5IDExMy45MjIgMTE0LjYyMyAxMTUuMTU5IDExMi40MjEgMTE3LjM2QzExMC4yMTkgMTE5LjU2MiAxMDguOTgyIDEyMi41NDggMTA4Ljk4MiAxMjUuNjYyQzEwOC45ODIgMTI4Ljc3NiAxMTAuMjE5IDEzMS43NjIgMTEyLjQyMSAxMzMuOTYzQzExNC42MjMgMTM2LjE2NSAxMTcuNjA5IDEzNy40MDIgMTIwLjcyMiAxMzcuNDAyWk0yMjUuNjk0IDEzNy40MDJDMjI3LjIzNiAxMzcuNDAyIDIyOC43NjMgMTM3LjA5OCAyMzAuMTg3IDEzNi41MDdDMjMxLjYxMSAxMzUuOTE3IDIzMi45MDUgMTM1LjA1MiAyMzMuOTk1IDEzMy45NjJDMjM1LjA4NSAxMzIuODcyIDIzNS45NSAxMzEuNTc3IDIzNi41NCAxMzAuMTUzQzIzNy4xMjkgMTI4LjcyOCAyMzcuNDMzIDEyNy4yMDIgMjM3LjQzMiAxMjUuNjZDMjM3LjQzMiAxMjQuMTE4IDIzNy4xMjggMTIyLjU5MiAyMzYuNTM4IDEyMS4xNjdDMjM1Ljk0OCAxMTkuNzQzIDIzNS4wODMgMTE4LjQ0OSAyMzMuOTkyIDExNy4zNTlDMjMyLjkwMiAxMTYuMjY5IDIzMS42MDggMTE1LjQwNSAyMzAuMTgzIDExNC44MTVDMjI4Ljc1OSAxMTQuMjI1IDIyNy4yMzIgMTEzLjkyMiAyMjUuNjkgMTEzLjkyMkMyMjIuNTc3IDExMy45MjIgMjE5LjU5MSAxMTUuMTYgMjE3LjM5IDExNy4zNjJDMjE1LjE4OCAxMTkuNTY0IDIxMy45NTIgMTIyLjU1IDIxMy45NTIgMTI1LjY2NEMyMTMuOTUzIDEyOC43NzggMjE1LjE5IDEzMS43NjMgMjE3LjM5MiAxMzMuOTY1QzIxOS41OTQgMTM2LjE2NiAyMjIuNTgxIDEzNy40MDIgMjI1LjY5NCAxMzcuNDAyWk0xOTkuMzQ2IDE3MC40OTRDMjAyLjI2MiAxNzAuNzQ2IDIwNC40NyAxNzMuMzM0IDIwMy43MzQgMTc2LjE3QzIwMi4wOTMgMTgyLjUyMSAxOTguNTEyIDE4OC4yMDIgMTkzLjQ5IDE5Mi40MjJDMTg3LjA3NiAxOTcuODE0IDE3OC43ODQgMjAwLjQ0MiAxNzAuNDM0IDE5OS43M0MxNjQuMjA2IDE5OS4xOTUgMTU4LjI3NyAxOTYuODI0IDE1My4zOTcgMTkyLjkxOEMxNDguNTE2IDE4OS4wMTIgMTQ0LjkwNSAxODMuNzQ2IDE0My4wMTggMTc3Ljc4NkMxNDIuMTIgMTc0Ljk2MiAxNDEuNjI2IDE3Mi4wMjUgMTQxLjU1IDE2OS4wNjJDMTQxLjQ5OCAxNjcuMTEgMTQzLjIzNCAxNjUuNjY2IDE0NS4xNzggMTY1LjgzNEwxNzMuMTQyIDE2OC4yNDJMMTk5LjM0NiAxNzAuNDk0WiIgZmlsbD0iIzA5MjUxMSIvPgo8L3N2Zz4K'; + +export const METAMASK_LOGO = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEwIiBoZWlnaHQ9IjIxMCIgdmlld0JveD0iMCAwIDIxMCAyMTAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNzguMzQ0IDE0Ljk2NDhMMTE0LjkzOSA2My41NTU4TDEyNi42NjQgMzQuODg3OEwxNzguMzQ0IDE0Ljk2NDhaIiBmaWxsPSIjRTI3NjFCIiBzdHJva2U9IiNFMjc2MUIiIHN0cm9rZS13aWR0aD0iMC42MzkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMzEuOTcxOCAxNC45NjQ4TDk0Ljg2NjggNjQuMDE2OEw4My43MTQ4IDM0Ljg4NzhMMzEuOTcxOCAxNC45NjQ4Wk0xNTUuNTMxIDEyNy42TDEzOC42NDQgMTU0LjI5NkwxNzQuNzc1IDE2NC41NTNMMTg1LjE2MiAxMjguMTkyTDE1NS41MzEgMTI3LjZaTTI1LjI4MDggMTI4LjE5MkwzNS42MDM4IDE2NC41NTNMNzEuNzM0OCAxNTQuMjk2TDU0Ljg0OTggMTI3LjZMMjUuMjgwOCAxMjguMTkyWiIgZmlsbD0iI0U0NzYxQiIgc3Ryb2tlPSIjRTQ3NjFCIiBzdHJva2Utd2lkdGg9IjAuNjM5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTY5LjY5NjkgODIuNDkxNEw1OS42Mjk5IDk4LjIwNjRMOTUuNTA1OSA5OS44NTA0TDk0LjIzMTkgNjAuMDcwNEw2OS42OTY5IDgyLjQ5MTRaTTE0MC42MjEgODIuNDkxNEwxMTUuNzY5IDU5LjYwOTRMMTE0Ljk0IDk5Ljg1MDRMMTUwLjc1MyA5OC4yMDY0TDE0MC42MjEgODIuNDkxNFpNNzEuNzM1OSAxNTQuMjk0TDkzLjI3NDkgMTQzLjQ0NEw3NC42NjY5IDEyOC40NTNMNzEuNzM1OSAxNTQuMjk0Wk0xMTcuMDQzIDE0My40NDRMMTM4LjY0NSAxNTQuMjk0TDEzNS42NSAxMjguNDUzTDExNy4wNDMgMTQzLjQ0NFoiIGZpbGw9IiNFNDc2MUIiIHN0cm9rZT0iI0U0NzYxQiIgc3Ryb2tlLXdpZHRoPSIwLjYzOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzguNjQzIDE1NC4yOTVMMTE3LjA0MSAxNDMuNDQ1TDExOC43NjIgMTU3Ljk3N0wxMTguNTcxIDE2NC4wOTJMMTM4LjY0MyAxNTQuMjk1Wk03MS43MzM5IDE1NC4yOTVMOTEuODA2OSAxNjQuMDkyTDkxLjY3OTkgMTU3Ljk3N0w5My4yNzI5IDE0My40NDVMNzEuNzMzOSAxNTQuMjk1WiIgZmlsbD0iI0Q3QzFCMyIgc3Ryb2tlPSIjRDdDMUIzIiBzdHJva2Utd2lkdGg9IjAuNjM5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTkyLjEyNTggMTE4Ljg1NUw3NC4xNTU4IDExMy4zOThMODYuODM2OCAxMDcuNDE0TDkyLjEyNTggMTE4Ljg1NVpNMTE4LjE4OSAxMTguODU1TDEyMy40NzggMTA3LjQxNEwxMzYuMjIyIDExMy4zOThMMTE4LjE4OSAxMTguODU1WiIgZmlsbD0iIzIzMzQ0NyIgc3Ryb2tlPSIjMjMzNDQ3IiBzdHJva2Utd2lkdGg9IjAuNjM5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTcxLjczNjEgMTU0LjI5NEw3NC43OTUxIDEyNy41OTlMNTQuODUwMSAxMjguMTlMNzEuNzM2MSAxNTQuMjk0Wk0xMzUuNTg3IDEyNy41OTlMMTM4LjY0NSAxNTQuMjk0TDE1NS41MzIgMTI4LjE5TDEzNS41ODcgMTI3LjU5OVpNMTUwLjc1MyA5OC4yMDdMMTE0Ljk0IDk5Ljg1MUwxMTguMjU0IDExOC44NTNMMTIzLjU0MyAxMDcuNDEyTDEzNi4yODggMTEzLjM5NkwxNTAuNzUzIDk4LjIwN1pNNzQuMTU4MSAxMTMuMzk2TDg2LjkwMjEgMTA3LjQxMkw5Mi4xMjcxIDExOC44NTNMOTUuNTA1MSA5OS44NTFMNTkuNjI5MSA5OC4yMDdMNzQuMTU4MSAxMTMuMzk2WiIgZmlsbD0iI0NENjExNiIgc3Ryb2tlPSIjQ0Q2MTE2IiBzdHJva2Utd2lkdGg9IjAuNjM5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTU5LjYyODkgOTguMjEwOUw3NC42Njc5IDEyOC40NTdMNzQuMTU3OSAxMTMuNEw1OS42Mjc5IDk4LjIxMDlINTkuNjI4OVpNMTM2LjI4OCAxMTMuNEwxMzUuNjUgMTI4LjQ1N0wxNTAuNzUzIDk4LjIxMDlMMTM2LjI4OCAxMTMuNFpNOTUuNTA0OSA5OS44NTQ5TDkyLjEyNzkgMTE4Ljg1N0w5Ni4zMzI5IDE0MS4yNzlMOTcuMjg4OSAxMTEuNzU2TDk1LjUwNDkgOTkuODU0OVpNMTE0Ljk0IDk5Ljg1NDlMMTEzLjIyIDExMS42OUwxMTMuOTg1IDE0MS4yNzlMMTE4LjI1NCAxMTguODU3TDExNC45NCA5OS44NTQ5WiIgZmlsbD0iI0U0NzUxRiIgc3Ryb2tlPSIjRTQ3NTFGIiBzdHJva2Utd2lkdGg9IjAuNjM5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExOC4yNTMgMTE4Ljg1M0wxMTMuOTgzIDE0MS4yNzVMMTE3LjA0MiAxNDMuNDQ1TDEzNS42NDkgMTI4LjQ1M0wxMzYuMjg2IDExMy4zOTVMMTE4LjI1MyAxMTguODUzWk03NC4xNTU4IDExMy4zOTVMNzQuNjY1OCAxMjguNDUzTDkzLjI3MjggMTQzLjQ0NUw5Ni4zMzE4IDE0MS4yNzVMOTIuMTI1OCAxMTguODUzTDc0LjE1NTggMTEzLjM5NVoiIGZpbGw9IiNGNjg1MUIiIHN0cm9rZT0iI0Y2ODUxQiIgc3Ryb2tlLXdpZHRoPSIwLjYzOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMTguNTcxIDE2NC4wOTRMMTE4Ljc2MiAxNTcuOTc5TDExNy4xNjkgMTU2LjUzMkg5My4xNDQ5TDkxLjY3OTkgMTU3Ljk3OUw5MS44MDY5IDE2NC4wOTRMNzEuNzMzOSAxNTQuMjk3TDc4Ljc0MzkgMTYwLjIxNUw5Mi45NTM5IDE3MC40MDZIMTE3LjM2TDEzMS42MzQgMTYwLjIxNUwxMzguNjQzIDE1NC4yOTdMMTE4LjU3MSAxNjQuMDk0WiIgZmlsbD0iI0MwQUQ5RSIgc3Ryb2tlPSIjQzBBRDlFIiBzdHJva2Utd2lkdGg9IjAuNjM5IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPHBhdGggZD0iTTExNy4wNDEgMTQzLjQ0N0wxMTMuOTgzIDE0MS4yNzdIOTYuMzMyMkw5My4yNzIyIDE0My40NDdMOTEuNjgwMiAxNTcuOTc5TDkzLjE0NTIgMTU2LjUzMkgxMTcuMTY5TDExOC43NjIgMTU3Ljk3OUwxMTcuMDQxIDE0My40NDdaIiBmaWxsPSIjMTYxNjE2IiBzdHJva2U9IiMxNjE2MTYiIHN0cm9rZS13aWR0aD0iMC42MzkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTgxLjAyIDY2LjcxMjhMMTg2LjQzNyAzOS44ODQ4TDE3OC4zNDQgMTQuOTY0OEwxMTcuMDQzIDYxLjkxMThMMTQwLjYyIDgyLjQ5MjhMMTczLjk0NyA5Mi41NTI4TDE4MS4zMzkgODMuNjc2OEwxNzguMTUzIDgxLjMwOThMMTgzLjI1MSA3Ni41MDk4TDE3OS4zIDczLjM1MzhMMTg0LjM5OCA2OS4zNDI4TDE4MS4wMiA2Ni43MTI4Wk0yMy45NDI5IDM5Ljg4NDhMMjkuMzU5OSA2Ni43MTI4TDI1LjkxODkgNjkuMzQyOEwzMS4wMTY5IDczLjM1MjhMMjcuMTI5OSA3Ni41MDk4TDMyLjIyNjkgODEuMzA5OEwyOS4wNDA5IDgzLjY3NjhMMzYuMzY4OSA5Mi41NTI4TDY5LjY5NTkgODIuNDkyOEw5My4yNzM5IDYxLjkxMjhMMzEuOTcxOSAxNC45NjQ4TDIzLjk0MjkgMzkuODg0OFoiIGZpbGw9IiM3NjNEMTYiIHN0cm9rZT0iIzc2M0QxNiIgc3Ryb2tlLXdpZHRoPSIwLjYzOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNzMuOTQ3IDkyLjU1MTdMMTQwLjYyIDgyLjQ5MTdMMTUwLjc1MiA5OC4yMDY3TDEzNS42NDkgMTI4LjQ1M0wxNTUuNTMxIDEyOC4xOUgxODUuMTYyTDE3My45NDcgOTIuNTUxN1pNNjkuNjk2OCA4Mi40OTE3TDM2LjM2ODggOTIuNTUxN0wyNS4yODA4IDEyOC4xOUg1NC44NDk4TDc0LjY2NzggMTI4LjQ1M0w1OS42Mjc4IDk4LjIwNjdMNjkuNjk2OCA4Mi40OTE3Wk0xMTQuOTM5IDk5Ljg1MDdMMTE3LjA0MiA2MS45MTA3TDEyNi43MjggMzQuODg2N0g4My43MTQ4TDkzLjI3MzggNjEuOTEwN0w5NS41MDM4IDk5Ljg1MDdMOTYuMjY4OCAxMTEuODE4TDk2LjMzMTggMTQxLjI3NUgxMTMuOTg0TDExNC4xMTEgMTExLjgxOEwxMTQuOTM5IDk5Ljg1MDdaIiBmaWxsPSIjRjY4NTFCIiBzdHJva2U9IiNGNjg1MUIiIHN0cm9rZS13aWR0aD0iMC42MzkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K'; diff --git a/wallets/leap-metamask-cosmos-snap/src/extension/chain-wallet.ts b/wallets/leap-metamask-cosmos-snap/src/extension/chain-wallet.ts new file mode 100644 index 000000000..949760cba --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainMetamaskCosmosSnap extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/src/extension/client.ts b/wallets/leap-metamask-cosmos-snap/src/extension/client.ts new file mode 100644 index 000000000..8ab02242c --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/extension/client.ts @@ -0,0 +1,160 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { Algo, DirectSignResponse } from '@cosmjs/proto-signing'; +import { ChainRecord, DirectSignDoc, SignType } from '@cosmos-kit/core'; +import { SignOptions, WalletClient } from '@cosmos-kit/core'; +import { + ChainInfo, + CosmjsOfflineSigner, + experimentalSuggestChain, + signArbitrary, +} from '@leapwallet/cosmos-snap-provider'; +import { + connectSnap, + getKey, + getSnap, + requestSignAmino, + requestSignature, +} from '@leapwallet/cosmos-snap-provider'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; +import Long from 'long'; + +export class CosmosSnapClient implements WalletClient { + readonly snapInstalled: boolean = false; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor() { + this.snapInstalled = localStorage.getItem('snapInstalled') === 'true'; + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async handleConnect() { + const installedSnap = await getSnap(); + if (!installedSnap) { + await connectSnap(); + } + } + + async getAccount(chainId: string) { + await this.handleConnect(); + const key = await getKey(chainId); + return { + username: key?.address, + address: key.address, + algo: key.algo as Algo, + pubkey: key.pubkey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + } + + getOfflineSignerAmino(chainId: string) { + return new CosmjsOfflineSigner(chainId) as unknown as OfflineAminoSigner; + } + + getOfflineSignerDirect(chainId: string) { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signDirect: (signerAddress: string, signDoc: SignDoc) => + this.signDirect(chainId, signerAddress, signDoc), + }; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ): Promise { + return requestSignAmino(chainId, signer, signDoc); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc + ): Promise { + const _accountNumber = Long.fromString(signDoc.accountNumber.toString()); + const signature = (await requestSignature(chainId, signer, { + ...signDoc, + // @ts-ignore + accountNumber: _accountNumber, + })) as unknown as DirectSignResponse; + + const modifiedAccountNumber = new Long( + _accountNumber!.low, + _accountNumber!.high, + _accountNumber!.unsigned + ); + + return { + signature: signature.signature, + signed: { + ...signature.signed, + accountNumber: BigInt(modifiedAccountNumber.toString()), + authInfoBytes: new Uint8Array( + Object.values(signature.signed.authInfoBytes) + ), + bodyBytes: new Uint8Array(Object.values(signature.signed.bodyBytes)), + }, + }; + } + + async signArbitrary( + chainId: string, + signer: string, + data: string + ): Promise { + return (await signArbitrary( + chainId, + signer, + data + )) as unknown as StdSignature; + } + + async addChain(chainRecord: ChainRecord): Promise { + const chainInfo: ChainInfo = { + chainId: chainRecord?.chain?.chain_id, + chainName: chainRecord?.chain?.chain_name, + bip44: { coinType: chainRecord?.chain?.slip44 }, + bech32Config: { bech32PrefixAccAddr: chainRecord?.chain?.bech32_prefix }, + }; + await experimentalSuggestChain(chainInfo, {}); + } +} diff --git a/wallets/leap-metamask-cosmos-snap/src/extension/index.ts b/wallets/leap-metamask-cosmos-snap/src/extension/index.ts new file mode 100644 index 000000000..9b58ac6b5 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; \ No newline at end of file diff --git a/wallets/leap-metamask-cosmos-snap/src/extension/main-wallet.ts b/wallets/leap-metamask-cosmos-snap/src/extension/main-wallet.ts new file mode 100644 index 000000000..9a0a8e101 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainMetamaskCosmosSnap } from './chain-wallet'; +import { CosmosSnapClient } from './client'; +import { isMetamaskInstalled } from './utils'; + +export class MetamaskCosmosSnapWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainMetamaskCosmosSnap); + } + + async initClient() { + this.initingClient(); + try { + const installed = await isMetamaskInstalled(); + this.initClientDone(installed ? new CosmosSnapClient() : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/leap-metamask-cosmos-snap/src/extension/registry.ts b/wallets/leap-metamask-cosmos-snap/src/extension/registry.ts new file mode 100644 index 000000000..d15e212e9 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/extension/registry.ts @@ -0,0 +1,29 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { LEAP_LOGO, METAMASK_LOGO } from '../constant'; + +export const metamaskCosmosSnapInfo: Wallet = { + name: 'leap-metamask-cosmos-snap', + description: + 'The Leap Cosmos MetaMask Snap allows signing of Cosmos transactions using MetaMask.', + prettyName: 'Leap Cosmos MetaMask', + logo: { major: METAMASK_LOGO, minor: LEAP_LOGO }, + mode: 'extension', + extends: 'MetaMask', + mobileDisabled: () => !('ethereum' in window), + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn', + }, + { + link: + 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn', + }, + ], +}; diff --git a/wallets/leap-metamask-cosmos-snap/src/extension/utils.ts b/wallets/leap-metamask-cosmos-snap/src/extension/utils.ts new file mode 100644 index 000000000..f4b1717ab --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/extension/utils.ts @@ -0,0 +1,45 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +interface MetamaskWindow { + ethereum?: { + isMetaMask?: boolean; + }; +} + +export const isMetamaskInstalled: () => Promise = async () => { + if (typeof window === 'undefined') { + return false; + } + + const ethereum = (window as MetamaskWindow).ethereum; + + if (ethereum?.isMetaMask) { + return true; + } + + if (document.readyState === 'complete') { + if (ethereum?.isMetaMask) { + return true; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (ethereum?.isMetaMask) { + resolve(true); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/leap-metamask-cosmos-snap/src/index.ts b/wallets/leap-metamask-cosmos-snap/src/index.ts new file mode 100644 index 000000000..bff31c4c4 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './leap-metamask-cosmos-snap'; diff --git a/wallets/leap-metamask-cosmos-snap/src/leap-metamask-cosmos-snap.ts b/wallets/leap-metamask-cosmos-snap/src/leap-metamask-cosmos-snap.ts new file mode 100644 index 000000000..0263cfb13 --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/src/leap-metamask-cosmos-snap.ts @@ -0,0 +1,5 @@ +import { metamaskCosmosSnapInfo, MetamaskCosmosSnapWallet } from './extension'; + +const metamaskCosmosSnap = new MetamaskCosmosSnapWallet(metamaskCosmosSnapInfo); + +export const wallets = [metamaskCosmosSnap]; diff --git a/wallets/leap-metamask-cosmos-snap/tsconfig.json b/wallets/leap-metamask-cosmos-snap/tsconfig.json new file mode 100644 index 000000000..df6a75ffd --- /dev/null +++ b/wallets/leap-metamask-cosmos-snap/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/wallets/leap-mobile/.editorconfig b/wallets/leap-mobile/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/leap-mobile/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/leap-mobile/.eslintignore b/wallets/leap-mobile/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/leap-mobile/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/leap-mobile/.eslintrc.json b/wallets/leap-mobile/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/leap-mobile/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/leap-mobile/.gitignore b/wallets/leap-mobile/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/leap-mobile/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/leap-mobile/.npmignore b/wallets/leap-mobile/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/leap-mobile/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/leap-mobile/.npmrc b/wallets/leap-mobile/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/leap-mobile/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/leap-mobile/.prettierrc.json b/wallets/leap-mobile/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/leap-mobile/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/leap-mobile/LICENSE b/wallets/leap-mobile/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/leap-mobile/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/leap-mobile/index.ts b/wallets/leap-mobile/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/leap-mobile/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/leap-mobile/src/index.ts b/wallets/leap-mobile/src/index.ts index a971bea01..312efec56 100644 --- a/wallets/leap-mobile/src/index.ts +++ b/wallets/leap-mobile/src/index.ts @@ -5,4 +5,4 @@ export class LeapMobile extends WCWallet { } const leapMobile = new LeapMobile(LeapMobileInfo); -export { leapMobile }; \ No newline at end of file +export { leapMobile }; diff --git a/wallets/leap-mobile/src/leap.ts b/wallets/leap-mobile/src/leap.ts new file mode 100644 index 000000000..a8c507c4d --- /dev/null +++ b/wallets/leap-mobile/src/leap.ts @@ -0,0 +1,5 @@ +import { LeapMobileInfo, LeapMobileWallet } from './wallet-connect'; + +const leapMobile = new LeapMobileWallet(LeapMobileInfo); + +export const wallets = [leapMobile]; diff --git a/wallets/leap-mobile/src/wallet-connect/chain-wallet.ts b/wallets/leap-mobile/src/wallet-connect/chain-wallet.ts new file mode 100644 index 000000000..d5b10e1cc --- /dev/null +++ b/wallets/leap-mobile/src/wallet-connect/chain-wallet.ts @@ -0,0 +1,9 @@ +import { ChainRecord, Wallet } from '@cosmos-kit/core' +import { ChainWC } from '@cosmos-kit/walletconnect' +import { LeapClient } from './client' + +export class ChainLeapMobile extends ChainWC { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo, LeapClient) + } +} diff --git a/wallets/leap-mobile/src/wallet-connect/client.ts b/wallets/leap-mobile/src/wallet-connect/client.ts new file mode 100644 index 000000000..4a68bda6d --- /dev/null +++ b/wallets/leap-mobile/src/wallet-connect/client.ts @@ -0,0 +1,8 @@ +import { Wallet } from '@cosmos-kit/core' +import { WCClient } from '@cosmos-kit/walletconnect' + +export class LeapClient extends WCClient { + constructor(walletInfo: Wallet) { + super(walletInfo) + } +} diff --git a/wallets/leap-mobile/src/wallet-connect/index.ts b/wallets/leap-mobile/src/wallet-connect/index.ts new file mode 100644 index 000000000..883beafac --- /dev/null +++ b/wallets/leap-mobile/src/wallet-connect/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet' +export * from './main-wallet' +export * from './registry' diff --git a/wallets/leap-mobile/src/wallet-connect/main-wallet.ts b/wallets/leap-mobile/src/wallet-connect/main-wallet.ts new file mode 100644 index 000000000..da16c0035 --- /dev/null +++ b/wallets/leap-mobile/src/wallet-connect/main-wallet.ts @@ -0,0 +1,12 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core' +import { WCWallet } from '@cosmos-kit/walletconnect' + +import { ChainLeapMobile } from './chain-wallet' +import { LeapClient } from './client' + +export class LeapMobileWallet extends WCWallet { + constructor(walletInfo: Wallet, preferredEndpoints?: EndpointOptions['endpoints']) { + super(walletInfo, ChainLeapMobile, LeapClient) + this.preferredEndpoints = preferredEndpoints + } +} diff --git a/wallets/leap-mobile/src/wallet-connect/registry.ts b/wallets/leap-mobile/src/wallet-connect/registry.ts new file mode 100644 index 000000000..d8d3fc4b0 --- /dev/null +++ b/wallets/leap-mobile/src/wallet-connect/registry.ts @@ -0,0 +1,61 @@ +import { OS, Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const LeapMobileInfo: Wallet = { + name: 'leap-cosmos-mobile', + prettyName: 'Leap Mobile', + logo: ICON, + mode: 'wallet-connect', + mobileDisabled: () => 'leap' in window && /LeapCosmos/i.test(navigator.userAgent), + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'mobile', + os: 'android', + link: + 'https://play.google.com/store/apps/details?id=io.leapwallet.cosmos', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://apps.apple.com/in/app/leap-cosmos/id1642465549', + }, + { + link: + 'https://chrome.google.com/webstore/detail/leap-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }, + ], + connectEventNamesOnWindow: ['leap_keystorechange'], + walletconnect: { + name: 'Leap Cosmos Wallet', + projectId: + '3ed8cc046c6211a798dc5ec70f1302b43e07db9639fd287de44a9aa115a21ed6', + encoding: 'base64', + mobile: { + native: { + ios: 'leapcosmos:', + android: 'intent:', + }, + }, + formatNativeUrl: ( + appUrl: string, + wcUri: string, + os: OS | undefined, + _name: string + ): string => { + const plainAppUrl = appUrl.split(':')[0]; + const encodedWcUrl = encodeURIComponent(wcUri); + switch (os) { + case 'ios': + return `${plainAppUrl}://wcV2?${encodedWcUrl}`; + case 'android': + return `${plainAppUrl}://wcV2?${encodedWcUrl}#Intent;package=io.leapwallet.cosmos;scheme=leapwallet;end;`; + default: + return `${plainAppUrl}://wcV2?${encodedWcUrl}`; + } + }, + }, +}; diff --git a/wallets/leap-mobile/src/wallet-connect/types.ts b/wallets/leap-mobile/src/wallet-connect/types.ts new file mode 100644 index 000000000..868916f2e --- /dev/null +++ b/wallets/leap-mobile/src/wallet-connect/types.ts @@ -0,0 +1,8 @@ +export interface LeapAccount { + address: string + algo: string + bech32Address: string + isNanoLedger: boolean + name: string + pubKey: string +} diff --git a/wallets/leap/.editorconfig b/wallets/leap/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/leap/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/leap/.eslintignore b/wallets/leap/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/leap/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/leap/.eslintrc.json b/wallets/leap/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/leap/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/leap/.gitignore b/wallets/leap/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/leap/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/leap/.npmignore b/wallets/leap/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/leap/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/leap/.npmrc b/wallets/leap/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/leap/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/leap/.prettierrc.json b/wallets/leap/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/leap/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/leap/CHANGELOG.md b/wallets/leap/CHANGELOG.md new file mode 100644 index 000000000..38af1d864 --- /dev/null +++ b/wallets/leap/CHANGELOG.md @@ -0,0 +1,842 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.12.1...@cosmos-kit/leap@2.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.12.0...@cosmos-kit/leap@2.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.11.0...@cosmos-kit/leap@2.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.10.0...@cosmos-kit/leap@2.11.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.9.0...@cosmos-kit/leap@2.10.0) (2024-05-23) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.8.0...@cosmos-kit/leap@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.7.3...@cosmos-kit/leap@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/leap + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.7.2...@cosmos-kit/leap@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.7.1...@cosmos-kit/leap@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.7.0...@cosmos-kit/leap@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.12...@cosmos-kit/leap@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.11...@cosmos-kit/leap@2.6.12) (2024-03-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.10...@cosmos-kit/leap@2.6.11) (2024-02-29) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.9...@cosmos-kit/leap@2.6.10) (2024-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.8...@cosmos-kit/leap@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.7...@cosmos-kit/leap@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.6...@cosmos-kit/leap@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.5...@cosmos-kit/leap@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.4...@cosmos-kit/leap@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.3...@cosmos-kit/leap@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.2...@cosmos-kit/leap@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.1...@cosmos-kit/leap@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.6.0...@cosmos-kit/leap@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.5.4...@cosmos-kit/leap@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.5.3...@cosmos-kit/leap@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.5.2...@cosmos-kit/leap@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.5.1...@cosmos-kit/leap@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.5.0...@cosmos-kit/leap@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.16...@cosmos-kit/leap@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.15...@cosmos-kit/leap@2.4.16) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.14...@cosmos-kit/leap@2.4.15) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.13...@cosmos-kit/leap@2.4.14) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.12...@cosmos-kit/leap@2.4.13) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.11...@cosmos-kit/leap@2.4.12) (2023-11-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.10...@cosmos-kit/leap@2.4.11) (2023-11-23) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.9...@cosmos-kit/leap@2.4.10) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.8...@cosmos-kit/leap@2.4.9) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.7...@cosmos-kit/leap@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.6...@cosmos-kit/leap@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.5...@cosmos-kit/leap@2.4.6) (2023-11-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.4...@cosmos-kit/leap@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.3...@cosmos-kit/leap@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.2...@cosmos-kit/leap@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.1...@cosmos-kit/leap@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.4.0...@cosmos-kit/leap@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.13...@cosmos-kit/leap@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.12...@cosmos-kit/leap@2.3.13) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.11...@cosmos-kit/leap@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.10...@cosmos-kit/leap@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.9...@cosmos-kit/leap@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.8...@cosmos-kit/leap@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.7...@cosmos-kit/leap@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.6...@cosmos-kit/leap@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.5...@cosmos-kit/leap@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.4...@cosmos-kit/leap@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.3...@cosmos-kit/leap@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.2...@cosmos-kit/leap@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.1...@cosmos-kit/leap@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.3.0...@cosmos-kit/leap@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.2.1...@cosmos-kit/leap@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.2.0...@cosmos-kit/leap@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.12...@cosmos-kit/leap@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.11...@cosmos-kit/leap@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.10...@cosmos-kit/leap@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.9...@cosmos-kit/leap@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.8...@cosmos-kit/leap@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.7...@cosmos-kit/leap@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.6...@cosmos-kit/leap@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.5...@cosmos-kit/leap@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.4...@cosmos-kit/leap@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.3...@cosmos-kit/leap@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.2...@cosmos-kit/leap@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.1...@cosmos-kit/leap@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.1.0...@cosmos-kit/leap@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.5...@cosmos-kit/leap@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.4...@cosmos-kit/leap@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.3...@cosmos-kit/leap@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.2...@cosmos-kit/leap@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1...@cosmos-kit/leap@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.7...@cosmos-kit/leap@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.6...@cosmos-kit/leap@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.5...@cosmos-kit/leap@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.4...@cosmos-kit/leap@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.3...@cosmos-kit/leap@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.2...@cosmos-kit/leap@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.1...@cosmos-kit/leap@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@2.0.1-beta.0...@cosmos-kit/leap@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@1.0.0...@cosmos-kit/leap@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11-beta.6...@cosmos-kit/leap@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11-beta.5...@cosmos-kit/leap@0.15.11-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11-beta.4...@cosmos-kit/leap@0.15.11-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11-beta.3...@cosmos-kit/leap@0.15.11-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11...@cosmos-kit/leap@0.15.11-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.10...@cosmos-kit/leap@0.15.11) (2023-06-30) + +## [0.15.11-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11-beta.1...@cosmos-kit/leap@0.15.11-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.11-beta.0...@cosmos-kit/leap@0.15.11-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.11-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.10...@cosmos-kit/leap@0.15.11-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.9...@cosmos-kit/leap@0.15.10) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.8...@cosmos-kit/leap@0.15.9) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.7...@cosmos-kit/leap@0.15.8) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.6...@cosmos-kit/leap@0.15.7) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.5...@cosmos-kit/leap@0.15.6) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.4...@cosmos-kit/leap@0.15.5) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.3...@cosmos-kit/leap@0.15.4) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.2...@cosmos-kit/leap@0.15.3) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.1...@cosmos-kit/leap@0.15.2) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.15.0...@cosmos-kit/leap@0.15.1) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.28...@cosmos-kit/leap@0.15.0) (2023-05-23) + +### Features + +- remove icons from leap mobile registry and add missing dep ([75ba29b](https://github.com/cosmology-tech/cosmos-kit/commit/75ba29bc771388bf16fc7d4e79c00afcd796e7f6)) + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.27...@cosmos-kit/leap@0.14.28) (2023-05-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.26...@cosmos-kit/leap@0.14.27) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.25...@cosmos-kit/leap@0.14.26) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.24...@cosmos-kit/leap@0.14.25) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.23...@cosmos-kit/leap@0.14.24) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.22...@cosmos-kit/leap@0.14.23) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.21...@cosmos-kit/leap@0.14.22) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.20...@cosmos-kit/leap@0.14.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.19...@cosmos-kit/leap@0.14.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.18...@cosmos-kit/leap@0.14.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.17...@cosmos-kit/leap@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.16...@cosmos-kit/leap@0.14.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.15...@cosmos-kit/leap@0.14.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.14...@cosmos-kit/leap@0.14.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.13...@cosmos-kit/leap@0.14.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.12...@cosmos-kit/leap@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.11...@cosmos-kit/leap@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.10...@cosmos-kit/leap@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.9...@cosmos-kit/leap@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.8...@cosmos-kit/leap@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.7...@cosmos-kit/leap@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.6...@cosmos-kit/leap@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.5...@cosmos-kit/leap@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.4...@cosmos-kit/leap@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.3...@cosmos-kit/leap@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.2...@cosmos-kit/leap@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.1...@cosmos-kit/leap@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.14.0...@cosmos-kit/leap@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.33...@cosmos-kit/leap@0.14.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.32...@cosmos-kit/leap@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.31...@cosmos-kit/leap@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.30...@cosmos-kit/leap@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.29...@cosmos-kit/leap@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.28...@cosmos-kit/leap@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.27...@cosmos-kit/leap@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.26...@cosmos-kit/leap@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.25...@cosmos-kit/leap@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.24...@cosmos-kit/leap@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.23...@cosmos-kit/leap@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.21...@cosmos-kit/leap@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.20...@cosmos-kit/leap@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.19...@cosmos-kit/leap@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.18...@cosmos-kit/leap@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.17...@cosmos-kit/leap@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.16...@cosmos-kit/leap@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.15...@cosmos-kit/leap@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.14...@cosmos-kit/leap@0.13.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.13...@cosmos-kit/leap@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.12...@cosmos-kit/leap@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.11...@cosmos-kit/leap@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.10...@cosmos-kit/leap@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.9...@cosmos-kit/leap@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.8...@cosmos-kit/leap@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.7...@cosmos-kit/leap@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.6...@cosmos-kit/leap@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.5...@cosmos-kit/leap@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.4...@cosmos-kit/leap@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.3...@cosmos-kit/leap@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.2...@cosmos-kit/leap@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.1...@cosmos-kit/leap@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.13.0...@cosmos-kit/leap@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.12.0...@cosmos-kit/leap@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.2...@cosmos-kit/leap@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.1...@cosmos-kit/leap@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.11.0...@cosmos-kit/leap@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.6...@cosmos-kit/leap@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.5...@cosmos-kit/leap@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.4...@cosmos-kit/leap@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.3...@cosmos-kit/leap@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.2...@cosmos-kit/leap@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.1...@cosmos-kit/leap@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.10.0...@cosmos-kit/leap@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.1...@cosmos-kit/leap@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.9.0...@cosmos-kit/leap@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.1...@cosmos-kit/leap@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.8.0...@cosmos-kit/leap@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.7.0...@cosmos-kit/leap@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.6.0...@cosmos-kit/leap@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.5.0...@cosmos-kit/leap@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.2...@cosmos-kit/leap@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.1...@cosmos-kit/leap@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.4.0...@cosmos-kit/leap@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.3.0...@cosmos-kit/leap@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.2...@cosmos-kit/leap@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.1...@cosmos-kit/leap@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.2.0...@cosmos-kit/leap@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/leap + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.6...@cosmos-kit/leap@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.5...@cosmos-kit/leap@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.4...@cosmos-kit/leap@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.3...@cosmos-kit/leap@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.1...@cosmos-kit/leap@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/leap + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/leap@0.1.0...@cosmos-kit/leap@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/leap + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/leap/LICENSE b/wallets/leap/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/leap/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/leap/README.md b/wallets/leap/README.md new file mode 100644 index 000000000..3ad5ff13d --- /dev/null +++ b/wallets/leap/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/leap + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/leap is the leap integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/leap/index.ts b/wallets/leap/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/leap/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/leap/package.json b/wallets/leap/package.json new file mode 100644 index 000000000..c5d5162fa --- /dev/null +++ b/wallets/leap/package.json @@ -0,0 +1,61 @@ +{ + "name": "@cosmos-kit/leap", + "version": "2.12.2", + "description": "cosmos-kit wallet connector", + "author": "mayank.yadav@leapwallet.io", + "contributors": [ + { + "name": "Mayank Yadav" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "leap", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/leap-extension": "^2.12.2", + "@cosmos-kit/leap-metamask-cosmos-snap": "^0.12.2", + "@cosmos-kit/leap-mobile": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/leap/src/index.ts b/wallets/leap/src/index.ts new file mode 100644 index 000000000..19f94560e --- /dev/null +++ b/wallets/leap/src/index.ts @@ -0,0 +1,5 @@ +import { wallets as ext } from '@cosmos-kit/leap-extension'; +import { wallets as snap } from '@cosmos-kit/leap-metamask-cosmos-snap'; +import { wallets as mobile } from '@cosmos-kit/leap-mobile'; + +export const wallets = [...ext, ...mobile, ...snap]; diff --git a/wallets/leap/tsconfig.json b/wallets/leap/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/leap/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/ledger/.editorconfig b/wallets/ledger/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/ledger/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/ledger/.eslintignore b/wallets/ledger/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/ledger/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/ledger/.eslintrc.json b/wallets/ledger/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/ledger/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/ledger/.gitignore b/wallets/ledger/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/ledger/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/ledger/.npmignore b/wallets/ledger/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/ledger/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/ledger/.npmrc b/wallets/ledger/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/ledger/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/ledger/.prettierrc.json b/wallets/ledger/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/ledger/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/ledger/LICENSE b/wallets/ledger/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/ledger/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/ledger/index.ts b/wallets/ledger/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/ledger/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/ledger/src/ledger.ts b/wallets/ledger/src/ledger.ts new file mode 100644 index 000000000..99da392d1 --- /dev/null +++ b/wallets/ledger/src/ledger.ts @@ -0,0 +1,6 @@ +import { LedgerMainWallet, LedgerInfo } from './web-usb-hid'; + +// export const ledgerHID = new LedgerMainWallet(LedgerInfo, undefined, 'WebHID'); +export const ledgerUSB = new LedgerMainWallet(LedgerInfo, undefined, 'WebUSB'); + +export const wallets = [ledgerUSB]; diff --git a/wallets/ledger/src/web-usb-hid/chain-wallet.ts b/wallets/ledger/src/web-usb-hid/chain-wallet.ts new file mode 100644 index 000000000..e62e83e16 --- /dev/null +++ b/wallets/ledger/src/web-usb-hid/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class LedgerChianWallet extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} \ No newline at end of file diff --git a/wallets/ledger/src/web-usb-hid/client.ts b/wallets/ledger/src/web-usb-hid/client.ts new file mode 100644 index 000000000..a3bffa7a4 --- /dev/null +++ b/wallets/ledger/src/web-usb-hid/client.ts @@ -0,0 +1,54 @@ +import { StdSignDoc } from '@cosmjs/amino'; +import { Algo } from '@cosmjs/proto-signing'; +import { WalletClient } from '@cosmos-kit/core'; +import Cosmos from '@ledgerhq/hw-app-cosmos'; + +import { ChainIdToBech32Prefix, getCosmosApp, getCosmosPath } from './utils'; +export class LedgerClient implements WalletClient { + client: Cosmos; + + constructor(client?: Cosmos) { + this.client = client; + } + + async initClient() { + if (!this.client) { + this.client = await getCosmosApp(); + } + } + + async getSimpleAccount(chainId: string, accountIndex = 0) { + const { address, username } = await this.getAccount(chainId, accountIndex); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string, accountIndex = 0, username?: string) { + const prefix = ChainIdToBech32Prefix[chainId]; + if (!prefix) throw new Error(`Unsupported chainId: ${chainId}`); + + if (!this.client) await this.initClient(); + + const path = getCosmosPath(accountIndex); + const { address, publicKey } = await this.client.getAddress(path, prefix); + return { + username: username ?? path, + address, + algo: 'secp256k1' as Algo, + pubkey: new TextEncoder().encode(publicKey), + isNanoLedger: true, + }; + } + + async sign(signDoc: StdSignDoc, accountIndex = 0) { + if (!this.client) await this.initClient(); + return await this.client.sign( + getCosmosPath(accountIndex), + JSON.stringify(signDoc) + ); + } +} diff --git a/wallets/ledger/src/web-usb-hid/index.ts b/wallets/ledger/src/web-usb-hid/index.ts new file mode 100644 index 000000000..c9a7fcb27 --- /dev/null +++ b/wallets/ledger/src/web-usb-hid/index.ts @@ -0,0 +1,4 @@ +export * from './registry'; +export * from './client'; +export * from './main-wallet'; +export * from './chain-wallet'; diff --git a/wallets/ledger/src/web-usb-hid/main-wallet.ts b/wallets/ledger/src/web-usb-hid/main-wallet.ts new file mode 100644 index 000000000..09cb7eea3 --- /dev/null +++ b/wallets/ledger/src/web-usb-hid/main-wallet.ts @@ -0,0 +1,27 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; +import { LedgerChianWallet } from './chain-wallet'; +import { LedgerClient } from './client'; +import { TransportType } from './utils'; + +export class LedgerMainWallet extends MainWalletBase { + transportType: TransportType; + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'], + transportType: TransportType = 'WebUSB' + ) { + super(walletInfo, LedgerChianWallet); + this.preferredEndpoints = preferredEndpoints; + this.transportType = transportType; + } + + async initClient() { + this.initingClient(); + try { + this.initClientDone(new LedgerClient()); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/ledger/src/web-usb-hid/registry.ts b/wallets/ledger/src/web-usb-hid/registry.ts new file mode 100644 index 000000000..b5bc6ebad --- /dev/null +++ b/wallets/ledger/src/web-usb-hid/registry.ts @@ -0,0 +1,13 @@ +import { Wallet } from '@cosmos-kit/core'; +import { ICON } from '../constant'; + +export const LedgerInfo: Wallet = { + name: 'ledger-web-usb-hid', + prettyName: 'Ledger', + logo: ICON, + mode: 'ledger', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, +}; diff --git a/wallets/ledger/src/web-usb-hid/utils.ts b/wallets/ledger/src/web-usb-hid/utils.ts new file mode 100644 index 000000000..9b3600e75 --- /dev/null +++ b/wallets/ledger/src/web-usb-hid/utils.ts @@ -0,0 +1,25 @@ +import { chains } from 'chain-registry' +import Cosmos from "@ledgerhq/hw-app-cosmos"; +import TransportWebUSB from '@ledgerhq/hw-transport-webusb'; +import TransportWebHID from '@ledgerhq/hw-transport-webhid' + +export type TransportType = 'WebUSB' | 'WebHID' + +export async function getCosmosApp(type: TransportType = 'WebUSB') { + if (type === 'WebUSB') { + return new Cosmos(await TransportWebUSB.create()) + } + if (type === 'WebHID') { + return new Cosmos(await TransportWebHID.create()) + } + throw new Error(`Unknown transport type: ${type}`) +} + +export function getCosmosPath(accountIndex = 0) { + return `44'/118'/${accountIndex}'/0/0` +} + +export const ChainIdToBech32Prefix = {} as { [k: string]: string } +for (const chain of chains) { + ChainIdToBech32Prefix[chain.chain_id] = chain.bech32_prefix +} \ No newline at end of file diff --git a/wallets/ninji-extension/.editorconfig b/wallets/ninji-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/ninji-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/ninji-extension/.eslintignore b/wallets/ninji-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/ninji-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/ninji-extension/.eslintrc.json b/wallets/ninji-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/ninji-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/ninji-extension/.gitignore b/wallets/ninji-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/ninji-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/ninji-extension/.npmignore b/wallets/ninji-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/ninji-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/ninji-extension/.npmrc b/wallets/ninji-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/ninji-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/ninji-extension/.prettierrc.json b/wallets/ninji-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/ninji-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/ninji-extension/CHANGELOG.md b/wallets/ninji-extension/CHANGELOG.md new file mode 100644 index 000000000..3d3c70e1c --- /dev/null +++ b/wallets/ninji-extension/CHANGELOG.md @@ -0,0 +1,144 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.12.1...@cosmos-kit/ninji-extension@2.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.12.0...@cosmos-kit/ninji-extension@2.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.11.0...@cosmos-kit/ninji-extension@2.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.10.0...@cosmos-kit/ninji-extension@2.11.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.9.0...@cosmos-kit/ninji-extension@2.10.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.8.3...@cosmos-kit/ninji-extension@2.9.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + + + + + +## [2.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.8.2...@cosmos-kit/ninji-extension@2.8.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.8.1...@cosmos-kit/ninji-extension@2.8.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.8.0...@cosmos-kit/ninji-extension@2.8.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.9...@cosmos-kit/ninji-extension@2.8.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.8...@cosmos-kit/ninji-extension@2.7.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.7...@cosmos-kit/ninji-extension@2.7.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.6...@cosmos-kit/ninji-extension@2.7.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.5...@cosmos-kit/ninji-extension@2.7.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.4...@cosmos-kit/ninji-extension@2.7.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.3...@cosmos-kit/ninji-extension@2.7.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.2...@cosmos-kit/ninji-extension@2.7.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.1...@cosmos-kit/ninji-extension@2.7.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.7.0...@cosmos-kit/ninji-extension@2.7.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.6.4...@cosmos-kit/ninji-extension@2.7.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.6.3...@cosmos-kit/ninji-extension@2.6.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.6.2...@cosmos-kit/ninji-extension@2.6.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.6.1...@cosmos-kit/ninji-extension@2.6.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.6.0...@cosmos-kit/ninji-extension@2.6.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.5.12...@cosmos-kit/ninji-extension@2.6.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.5.11...@cosmos-kit/ninji-extension@2.5.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.5.10...@cosmos-kit/ninji-extension@2.5.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji-extension@2.5.9...@cosmos-kit/ninji-extension@2.5.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension + +## 2.5.9 (2023-11-23) + +**Note:** Version bump only for package @cosmos-kit/ninji-extension diff --git a/wallets/ninji-extension/LICENSE b/wallets/ninji-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/ninji-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/ninji-extension/README.md b/wallets/ninji-extension/README.md new file mode 100644 index 000000000..bc0c7cb2b --- /dev/null +++ b/wallets/ninji-extension/README.md @@ -0,0 +1,38 @@ +# @cosmos-kit/ninji-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/ninji-extension is the ninji integration for CosmosKit. + +## Related + +Checkout these related projects: + +- [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +- [@cosmology/telescope](https://github.com/cosmology-tech/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs. +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry. +- [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️ +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +- [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/ninji-extension/index.ts b/wallets/ninji-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/ninji-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/ninji-extension/package.json b/wallets/ninji-extension/package.json new file mode 100644 index 000000000..42826ca57 --- /dev/null +++ b/wallets/ninji-extension/package.json @@ -0,0 +1,70 @@ +{ + "name": "@cosmos-kit/ninji-extension", + "version": "2.12.2", + "description": "cosmos-kit wallet connector", + "author": "quangmv@coin98.finance", + "contributors": [ + { + "name": "Be Quang" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "ninji", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/ninji-extension/src/constant.ts b/wallets/ninji-extension/src/constant.ts new file mode 100644 index 000000000..7475a8c11 --- /dev/null +++ b/wallets/ninji-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjEyMDAiIHZpZXdCb3g9IjAgMCAxMjAwIDEyMDAiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojZjMwO308L3N0eWxlPjwvZGVmcz48cG9seWdvbiBjbGFzcz0iY2xzLTEiIHBvaW50cz0iNC42OSA0MDMuNzEgMTYzLjE4IDU2MS4yNCA0MDAuODkgNTYxLjI0IDQwMC44OSAxMDM1LjUxIDU1OS4wOSAxMTk1LjE3IDU1OS4wOSA1NjEuNjggNDAyLjAxIDQwMy43MSA0LjY5IDQwMy43MSIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIxMTk1LjMxIDY0MS4yNCA3OTYuNjIgNjQxLjI0IDc5Ni42MiAxNjUuMDggNjM4LjQyIDQuODMgNjM4LjQyIDY0MC44IDc5Ny45OSA3OTguNzcgMTAzNS42IDc5OC43NyAxMTk1LjMxIDY0MS4yNCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMSIgcG9pbnRzPSIzNjguODUgNjgzLjE5IDM2OC44NSA2ODMuMTkgMzY4Ljg1IDY4My4xOSAzNjguODUgNjgzLjE5Ii8+PC9zdmc+'; diff --git a/wallets/ninji-extension/src/extension/chain-wallet.ts b/wallets/ninji-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..399ef1f7e --- /dev/null +++ b/wallets/ninji-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainNinjiExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/ninji-extension/src/extension/client.ts b/wallets/ninji-extension/src/extension/client.ts new file mode 100644 index 000000000..2d897c233 --- /dev/null +++ b/wallets/ninji-extension/src/extension/client.ts @@ -0,0 +1,142 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + ExtendedHttpEndpoint, + SignType, + SuggestToken, +} from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { Ninji } from './types'; +import Long from 'long'; + +export class NinjiClient implements WalletClient { + readonly client: Ninji; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Ninji) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress } of tokens) { + await this.client.suggestToken(chainId, contractAddress); + } + } + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/ninji-extension/src/extension/index.ts b/wallets/ninji-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/ninji-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/ninji-extension/src/extension/main-wallet.ts b/wallets/ninji-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..8a548669a --- /dev/null +++ b/wallets/ninji-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainNinjiExtension } from './chain-wallet'; +import { NinjiClient } from './client'; +import { getNinjiFromExtension } from './utils'; + +export class NinjiExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainNinjiExtension); + } + + async initClient() { + this.initingClient(); + try { + const ninji = await getNinjiFromExtension(); + this.initClientDone(ninji ? new NinjiClient(ninji) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/ninji-extension/src/extension/registry.ts b/wallets/ninji-extension/src/extension/registry.ts new file mode 100644 index 000000000..f6a3a055e --- /dev/null +++ b/wallets/ninji-extension/src/extension/registry.ts @@ -0,0 +1,26 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const ninjiExtensionInfo: Wallet = { + name: 'ninji-extension', + prettyName: 'Ninji', + logo: ICON, + mode: 'extension', + mobileDisabled: () => + !('ninji' in window || /NinjiCosmos/i.test(navigator.userAgent)), + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['accountsChanged', 'networkChanged'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chromewebstore.google.com/detail/ninji-wallet/kkpllbgjhchghjapjbinnoddmciocphm', + }, + { + link: 'https://ninji.xyz/#download', + }, + ], +}; diff --git a/wallets/ninji-extension/src/extension/types.ts b/wallets/ninji-extension/src/extension/types.ts new file mode 100644 index 000000000..7628b8037 --- /dev/null +++ b/wallets/ninji-extension/src/extension/types.ts @@ -0,0 +1,61 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export interface NinjiSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Ninji { + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + suggestToken(chainId: string, contractAddress: string): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: NinjiSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: NinjiSignOptions + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/wallets/ninji-extension/src/extension/utils.ts b/wallets/ninji-extension/src/extension/utils.ts new file mode 100644 index 000000000..c2f7bb070 --- /dev/null +++ b/wallets/ninji-extension/src/extension/utils.ts @@ -0,0 +1,47 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Ninji } from './types'; + +interface NinjiWindow { + ninji?: Ninji; +} + +export const getNinjiFromExtension: () => Promise< + Ninji | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const ninji = (window as NinjiWindow).ninji; + + if (ninji) { + return ninji; + } + + if (document.readyState === 'complete') { + if (ninji) { + return ninji; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (ninji) { + resolve(ninji); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/ninji-extension/src/index.ts b/wallets/ninji-extension/src/index.ts new file mode 100644 index 000000000..2b78fc844 --- /dev/null +++ b/wallets/ninji-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './ninji'; diff --git a/wallets/ninji-extension/src/ninji.ts b/wallets/ninji-extension/src/ninji.ts new file mode 100644 index 000000000..bd5be8b3a --- /dev/null +++ b/wallets/ninji-extension/src/ninji.ts @@ -0,0 +1,5 @@ +import { ninjiExtensionInfo, NinjiExtensionWallet } from './extension'; + +const ninjiExtension = new NinjiExtensionWallet(ninjiExtensionInfo); + +export const wallets = [ninjiExtension]; diff --git a/wallets/ninji-extension/tsconfig.json b/wallets/ninji-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/ninji-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/ninji/.editorconfig b/wallets/ninji/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/ninji/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/ninji/.eslintignore b/wallets/ninji/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/ninji/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/ninji/.eslintrc.json b/wallets/ninji/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/ninji/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/ninji/.gitignore b/wallets/ninji/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/ninji/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/ninji/.npmignore b/wallets/ninji/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/ninji/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/ninji/.npmrc b/wallets/ninji/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/ninji/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/ninji/.prettierrc.json b/wallets/ninji/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/ninji/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/ninji/CHANGELOG.md b/wallets/ninji/CHANGELOG.md new file mode 100644 index 000000000..da962cee6 --- /dev/null +++ b/wallets/ninji/CHANGELOG.md @@ -0,0 +1,144 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.11.1...@cosmos-kit/ninji@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/ninji + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.11.0...@cosmos-kit/ninji@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/ninji + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.10.0...@cosmos-kit/ninji@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/ninji + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.9.0...@cosmos-kit/ninji@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/ninji + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.8.0...@cosmos-kit/ninji@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/ninji + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.7.3...@cosmos-kit/ninji@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/ninji + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.7.2...@cosmos-kit/ninji@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.7.1...@cosmos-kit/ninji@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.7.0...@cosmos-kit/ninji@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/ninji + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.9...@cosmos-kit/ninji@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.8...@cosmos-kit/ninji@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.7...@cosmos-kit/ninji@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.6...@cosmos-kit/ninji@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.5...@cosmos-kit/ninji@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.4...@cosmos-kit/ninji@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.3...@cosmos-kit/ninji@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.2...@cosmos-kit/ninji@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.1...@cosmos-kit/ninji@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.6.0...@cosmos-kit/ninji@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/ninji + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.5.4...@cosmos-kit/ninji@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.5.3...@cosmos-kit/ninji@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.5.2...@cosmos-kit/ninji@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.5.1...@cosmos-kit/ninji@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.5.0...@cosmos-kit/ninji@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/ninji + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.4.12...@cosmos-kit/ninji@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.4.11...@cosmos-kit/ninji@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.4.10...@cosmos-kit/ninji@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/ninji@2.4.9...@cosmos-kit/ninji@2.4.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/ninji + +## 2.4.9 (2023-11-23) + +**Note:** Version bump only for package @cosmos-kit/ninji diff --git a/wallets/ninji/LICENSE b/wallets/ninji/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/ninji/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/ninji/README.md b/wallets/ninji/README.md new file mode 100644 index 000000000..78eb18aa8 --- /dev/null +++ b/wallets/ninji/README.md @@ -0,0 +1,38 @@ +# @cosmos-kit/ninji + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/ninji is the ninji integration for CosmosKit. + +## Related + +Checkout these related projects: + +- [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +- [@cosmology/telescope](https://github.com/cosmology-tech/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs. +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry. +- [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️ +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +- [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/ninji/index.ts b/wallets/ninji/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/ninji/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/ninji/package.json b/wallets/ninji/package.json new file mode 100644 index 000000000..9e6233a86 --- /dev/null +++ b/wallets/ninji/package.json @@ -0,0 +1,60 @@ +{ + "name": "@cosmos-kit/ninji", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "quangmv@coin98.finance", + "contributors": [ + { + "name": "Be Quang" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "typings": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "injective", + "ninji", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/ninji-extension": "^2.12.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/ninji/src/index.ts b/wallets/ninji/src/index.ts new file mode 100644 index 000000000..1719d54ae --- /dev/null +++ b/wallets/ninji/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/ninji-extension'; + +export const wallets = [...ext]; diff --git a/wallets/ninji/tsconfig.json b/wallets/ninji/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/ninji/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/okto-extension/.editorconfig b/wallets/okto-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/okto-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/okto-extension/.eslintignore b/wallets/okto-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/okto-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/okto-extension/.eslintrc.json b/wallets/okto-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/okto-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/okto-extension/.gitignore b/wallets/okto-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/okto-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/okto-extension/.npmignore b/wallets/okto-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/okto-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/okto-extension/.npmrc b/wallets/okto-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/okto-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/okto-extension/.prettierrc.json b/wallets/okto-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/okto-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/okto-extension/CHANGELOG.md b/wallets/okto-extension/CHANGELOG.md new file mode 100644 index 000000000..fa786b760 --- /dev/null +++ b/wallets/okto-extension/CHANGELOG.md @@ -0,0 +1,754 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# 2.8.0 (2024-07-25) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + + + + + +## [2.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.8...@cosmos-kit/okto-extension@2.7.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.7...@cosmos-kit/okto-extension@2.7.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.6...@cosmos-kit/okto-extension@2.7.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.5...@cosmos-kit/okto-extension@2.7.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.4...@cosmos-kit/okto-extension@2.7.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.3...@cosmos-kit/okto-extension@2.7.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.2...@cosmos-kit/okto-extension@2.7.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.1...@cosmos-kit/okto-extension@2.7.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.7.0...@cosmos-kit/okto-extension@2.7.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.6.4...@cosmos-kit/okto-extension@2.7.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.6.3...@cosmos-kit/okto-extension@2.6.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.6.2...@cosmos-kit/okto-extension@2.6.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.6.1...@cosmos-kit/okto-extension@2.6.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.6.0...@cosmos-kit/okto-extension@2.6.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.13...@cosmos-kit/okto-extension@2.6.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.12...@cosmos-kit/okto-extension@2.5.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.11...@cosmos-kit/okto-extension@2.5.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.10...@cosmos-kit/okto-extension@2.5.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.9...@cosmos-kit/okto-extension@2.5.10) (2023-11-24) + +### Bug Fixes + +- update suggestToken with suggestCW20Token for okto-extension ([f8d44ef](https://github.com/cosmology-tech/cosmos-kit/commit/f8d44ef1a0c1af2dd507e11a576e3c21cab46953)) + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.8...@cosmos-kit/okto-extension@2.5.9) (2023-11-23) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.7...@cosmos-kit/okto-extension@2.5.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.6...@cosmos-kit/okto-extension@2.5.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.5...@cosmos-kit/okto-extension@2.5.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.4...@cosmos-kit/okto-extension@2.5.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.3...@cosmos-kit/okto-extension@2.5.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.2...@cosmos-kit/okto-extension@2.5.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.1...@cosmos-kit/okto-extension@2.5.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.5.0...@cosmos-kit/okto-extension@2.5.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.13...@cosmos-kit/okto-extension@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.12...@cosmos-kit/okto-extension@2.4.13) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.11...@cosmos-kit/okto-extension@2.4.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.10...@cosmos-kit/okto-extension@2.4.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.9...@cosmos-kit/okto-extension@2.4.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.8...@cosmos-kit/okto-extension@2.4.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.7...@cosmos-kit/okto-extension@2.4.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.6...@cosmos-kit/okto-extension@2.4.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.5...@cosmos-kit/okto-extension@2.4.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.4...@cosmos-kit/okto-extension@2.4.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.3...@cosmos-kit/okto-extension@2.4.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.2...@cosmos-kit/okto-extension@2.4.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.1...@cosmos-kit/okto-extension@2.4.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.4.0...@cosmos-kit/okto-extension@2.4.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.3.1...@cosmos-kit/okto-extension@2.4.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.3.0...@cosmos-kit/okto-extension@2.3.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.7...@cosmos-kit/okto-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.6...@cosmos-kit/okto-extension@2.2.7) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.5...@cosmos-kit/okto-extension@2.2.6) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.4...@cosmos-kit/okto-extension@2.2.5) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.3...@cosmos-kit/okto-extension@2.2.4) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.2...@cosmos-kit/okto-extension@2.2.3) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.1...@cosmos-kit/okto-extension@2.2.2) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.2.0...@cosmos-kit/okto-extension@2.2.1) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.1.4...@cosmos-kit/okto-extension@2.2.0) (2023-08-03) + +### Features + +- add platformEnabledWallets ([a48ffab](https://github.com/cosmology-tech/cosmos-kit/commit/a48ffabd6108363b24b5bdecb6a156a669758e4a)) + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.1.3...@cosmos-kit/okto-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.1.2...@cosmos-kit/okto-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.1.1...@cosmos-kit/okto-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.1.0...@cosmos-kit/okto-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.5...@cosmos-kit/okto-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.4...@cosmos-kit/okto-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.3...@cosmos-kit/okto-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.2...@cosmos-kit/okto-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1...@cosmos-kit/okto-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.6...@cosmos-kit/okto-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.5...@cosmos-kit/okto-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.4...@cosmos-kit/okto-extension@2.0.1-beta.5) (2023-07-18) + +### Features + +- add okto mobile webview support ([14b0d45](https://github.com/cosmology-tech/cosmos-kit/commit/14b0d45d88a809d2b95f45d56b5c745418e1dd21)) + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.3...@cosmos-kit/okto-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.2...@cosmos-kit/okto-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.1...@cosmos-kit/okto-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@2.0.1-beta.0...@cosmos-kit/okto-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@1.0.0...@cosmos-kit/okto-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2-beta.6...@cosmos-kit/okto-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2-beta.5...@cosmos-kit/okto-extension@0.17.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2-beta.4...@cosmos-kit/okto-extension@0.17.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2-beta.3...@cosmos-kit/okto-extension@0.17.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2...@cosmos-kit/okto-extension@0.17.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.1...@cosmos-kit/okto-extension@0.17.2) (2023-06-30) + +## [0.17.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2-beta.1...@cosmos-kit/okto-extension@0.17.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.2-beta.0...@cosmos-kit/okto-extension@0.17.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.1...@cosmos-kit/okto-extension@0.17.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.17.0...@cosmos-kit/okto-extension@0.17.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.11...@cosmos-kit/okto-extension@0.17.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.16.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.10...@cosmos-kit/okto-extension@0.16.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.9...@cosmos-kit/okto-extension@0.16.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.8...@cosmos-kit/okto-extension@0.16.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.7...@cosmos-kit/okto-extension@0.16.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.6...@cosmos-kit/okto-extension@0.16.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.5...@cosmos-kit/okto-extension@0.16.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.4...@cosmos-kit/okto-extension@0.16.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.3...@cosmos-kit/okto-extension@0.16.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.2...@cosmos-kit/okto-extension@0.16.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.1...@cosmos-kit/okto-extension@0.16.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.16.0...@cosmos-kit/okto-extension@0.16.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.15.0...@cosmos-kit/okto-extension@0.16.0) (2023-05-04) + +### Features + +- Add okto suggest chain ([5bc26db](https://github.com/cosmology-tech/cosmos-kit/commit/5bc26db2f15681ad16d0e6830cef5de170cb36fe)) + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.21...@cosmos-kit/okto-extension@0.15.0) (2023-04-28) + +### Features + +- :sparkles: add okto ext suggest token ([ebf87aa](https://github.com/cosmology-tech/cosmos-kit/commit/ebf87aaef7c3c7971b444d42fa86db6b50ec50fd)) +- :sparkles: add okto ext types ([b945f47](https://github.com/cosmology-tech/cosmos-kit/commit/b945f471fc56664954eca4987bd9b94785111232)) +- :sparkles: improve suggest token types ([dc06b79](https://github.com/cosmology-tech/cosmos-kit/commit/dc06b79d56a5153b2d5f955d919fffc8232fdcd4)) + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.20...@cosmos-kit/okto-extension@0.14.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.19...@cosmos-kit/okto-extension@0.14.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.18...@cosmos-kit/okto-extension@0.14.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.17...@cosmos-kit/okto-extension@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.16...@cosmos-kit/okto-extension@0.14.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.15...@cosmos-kit/okto-extension@0.14.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.14...@cosmos-kit/okto-extension@0.14.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.13...@cosmos-kit/okto-extension@0.14.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.12...@cosmos-kit/okto-extension@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.11...@cosmos-kit/okto-extension@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.10...@cosmos-kit/okto-extension@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.9...@cosmos-kit/okto-extension@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.8...@cosmos-kit/okto-extension@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.7...@cosmos-kit/okto-extension@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.6...@cosmos-kit/okto-extension@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.5...@cosmos-kit/okto-extension@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.4...@cosmos-kit/okto-extension@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.3...@cosmos-kit/okto-extension@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.2...@cosmos-kit/okto-extension@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.1...@cosmos-kit/okto-extension@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.14.0...@cosmos-kit/okto-extension@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.33...@cosmos-kit/okto-extension@0.14.0) (2023-02-27) + +### Features + +- okto account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.32...@cosmos-kit/okto-extension@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.31...@cosmos-kit/okto-extension@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.30...@cosmos-kit/okto-extension@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.29...@cosmos-kit/okto-extension@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.28...@cosmos-kit/okto-extension@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.27...@cosmos-kit/okto-extension@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.26...@cosmos-kit/okto-extension@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.25...@cosmos-kit/okto-extension@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.24...@cosmos-kit/okto-extension@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.23...@cosmos-kit/okto-extension@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.21...@cosmos-kit/okto-extension@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.20...@cosmos-kit/okto-extension@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.19...@cosmos-kit/okto-extension@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.18...@cosmos-kit/okto-extension@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.17...@cosmos-kit/okto-extension@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.16...@cosmos-kit/okto-extension@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto-extension@0.13.15...@cosmos-kit/okto-extension@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## 0.13.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/okto-extension + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.13...@cosmos-kit/okto@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.12...@cosmos-kit/okto@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.11...@cosmos-kit/okto@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.10...@cosmos-kit/okto@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.9...@cosmos-kit/okto@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.8...@cosmos-kit/okto@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.7...@cosmos-kit/okto@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.6...@cosmos-kit/okto@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.5...@cosmos-kit/okto@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.4...@cosmos-kit/okto@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.3...@cosmos-kit/okto@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.2...@cosmos-kit/okto@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.1...@cosmos-kit/okto@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.13.0...@cosmos-kit/okto@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.12.0...@cosmos-kit/okto@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.11.2...@cosmos-kit/okto@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.11.1...@cosmos-kit/okto@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.11.0...@cosmos-kit/okto@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.6...@cosmos-kit/okto@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.5...@cosmos-kit/okto@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.4...@cosmos-kit/okto@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.3...@cosmos-kit/okto@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.2...@cosmos-kit/okto@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.1...@cosmos-kit/okto@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.10.0...@cosmos-kit/okto@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.9.1...@cosmos-kit/okto@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.9.0...@cosmos-kit/okto@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.8.1...@cosmos-kit/okto@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.8.0...@cosmos-kit/okto@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.7.0...@cosmos-kit/okto@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.6.0...@cosmos-kit/okto@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.5.0...@cosmos-kit/okto@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.4.2...@cosmos-kit/okto@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.4.1...@cosmos-kit/okto@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.4.0...@cosmos-kit/okto@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.3.0...@cosmos-kit/okto@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.2.2...@cosmos-kit/okto@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.2.1...@cosmos-kit/okto@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.2.0...@cosmos-kit/okto@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/okto + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.1.6...@cosmos-kit/okto@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.1.5...@cosmos-kit/okto@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.1.4...@cosmos-kit/okto@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.1.3...@cosmos-kit/okto@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.1.1...@cosmos-kit/okto@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/okto + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okto@0.1.0...@cosmos-kit/okto@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/okto + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/okto + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/okto-extension/LICENSE b/wallets/okto-extension/LICENSE new file mode 100644 index 000000000..bfcca3529 --- /dev/null +++ b/wallets/okto-extension/LICENSE @@ -0,0 +1,32 @@ +The Clear BSD License + +Copyright (c) 2022 CosmosKit Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/okto-extension/README.md b/wallets/okto-extension/README.md new file mode 100644 index 000000000..220b60db0 --- /dev/null +++ b/wallets/okto-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/okto-extension + +

+ +

+ +

+ + + + + +

+ +CosmosKit is a wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/okto-extension is the okto integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/okto-extension/index.ts b/wallets/okto-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/okto-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/okto-extension/package.json b/wallets/okto-extension/package.json new file mode 100644 index 000000000..623bf9f82 --- /dev/null +++ b/wallets/okto-extension/package.json @@ -0,0 +1,69 @@ +{ + "name": "@cosmos-kit/okto-extension", + "version": "2.8.0", + "description": "cosmos-kit wallet connector", + "author": "mayank.yadav@oktowallet.io", + "contributors": [ + { + "name": "Mayank Yadav" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "okto", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.2", + "@cosmjs/proto-signing": ">=0.32.2" + } +} diff --git a/wallets/okto-extension/src/constant.ts b/wallets/okto-extension/src/constant.ts new file mode 100644 index 000000000..6f5b74c23 --- /dev/null +++ b/wallets/okto-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/okto-extension/src/extension/chain-wallet.ts b/wallets/okto-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..3f61cbc2f --- /dev/null +++ b/wallets/okto-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainOktoExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/okto-extension/src/extension/client.ts b/wallets/okto-extension/src/extension/client.ts new file mode 100644 index 000000000..fc570e36c --- /dev/null +++ b/wallets/okto-extension/src/extension/client.ts @@ -0,0 +1,152 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + BroadcastMode, + ChainRecord, + ExtendedHttpEndpoint, + SignType, + SuggestToken, +} from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { Okto } from './types'; +import Long from 'long'; + +export class OktoClient implements WalletClient { + readonly client: Okto; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Okto) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress } of tokens) { + await this.client.suggestCW20Token(chainId, contractAddress); + } + } + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async disconnect() { + await this.client.disconnect(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + console.log("getAccount from dApp", chainId); + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/okto-extension/src/extension/index.ts b/wallets/okto-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/okto-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/okto-extension/src/extension/main-wallet.ts b/wallets/okto-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..dca5d9cfc --- /dev/null +++ b/wallets/okto-extension/src/extension/main-wallet.ts @@ -0,0 +1,23 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainOktoExtension } from './chain-wallet'; +import { OktoClient } from './client'; +import { getOktoFromExtension } from './utils'; + +export class OktoExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainOktoExtension); + } + + async initClient() { + console.log("init Client from dApp") + this.initingClient(); + try { + const okto = await getOktoFromExtension(); + this.initClientDone(okto ? new OktoClient(okto) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/okto-extension/src/extension/registry.ts b/wallets/okto-extension/src/extension/registry.ts new file mode 100644 index 000000000..0ff95c88f --- /dev/null +++ b/wallets/okto-extension/src/extension/registry.ts @@ -0,0 +1,19 @@ +import { Wallet } from '@cosmos-kit/core'; +import { ICON } from '../constant'; + +export const oktoExtensionInfo: Wallet = { + name: 'okto-extension', + prettyName: 'Okto', + logo: ICON, + mode: 'extension', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['okto_keystorechange'], + downloads: [ + { + link: 'https://www.okto.tech', + }, + ], +}; diff --git a/wallets/okto-extension/src/extension/types.ts b/wallets/okto-extension/src/extension/types.ts new file mode 100644 index 000000000..26728d0d4 --- /dev/null +++ b/wallets/okto-extension/src/extension/types.ts @@ -0,0 +1,105 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { + OfflineDirectSigner, + OfflineSigner, + DirectSignResponse, +} from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} + +export interface OktoSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface Okto { + + defaultOptions: { + sign?: OktoSignOptions; + }; + + disconnect(): Promise; + + enable(chainIds: string | string[]): Promise; + + suggestToken(chainId: string, contractAddress: string): Promise; + + suggestCW20Token(chainId: string, contractAddress: string): Promise; + + mode: 'extension'; + + getKey(chainId: string): Promise; + + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + + getOfflineSignerAuto(chainId: string): Promise; + + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: OktoSignOptions + ): Promise; + + signDirect( + chainId: string, + signer: string, + signDoc: { + bodyBytes?: Uint8Array | null; + authInfoBytes?: Uint8Array | null; + chainId?: string | null; + accountNumber?: Long | null; + }, + signOptions?: OktoSignOptions + ): Promise; + + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + + getEnigmaPubKey(chainId: string): Promise; + + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + + experimentalSuggestChain(chainInfo: ChainInfo): Promise; +} diff --git a/wallets/okto-extension/src/extension/utils.ts b/wallets/okto-extension/src/extension/utils.ts new file mode 100644 index 000000000..0b7f5f431 --- /dev/null +++ b/wallets/okto-extension/src/extension/utils.ts @@ -0,0 +1,47 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Okto } from './types'; + +interface OktoWindow { + okto?: Okto; +} + +export const getOktoFromExtension: () => Promise< + Okto | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const okto = (window as OktoWindow).okto; + + if (okto) { + return okto; + } + + if (document.readyState === 'complete') { + if (okto) { + return okto; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (okto) { + resolve(okto); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/okto-extension/src/index.ts b/wallets/okto-extension/src/index.ts new file mode 100644 index 000000000..f37e1a6c6 --- /dev/null +++ b/wallets/okto-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './okto'; diff --git a/wallets/okto-extension/src/okto.ts b/wallets/okto-extension/src/okto.ts new file mode 100644 index 000000000..1183c10bb --- /dev/null +++ b/wallets/okto-extension/src/okto.ts @@ -0,0 +1,5 @@ +import { oktoExtensionInfo, OktoExtensionWallet } from './extension'; + +const oktoExtension = new OktoExtensionWallet(oktoExtensionInfo); + +export const wallets = [oktoExtension]; diff --git a/wallets/okto-extension/tsconfig.json b/wallets/okto-extension/tsconfig.json new file mode 100644 index 000000000..4ee2faadb --- /dev/null +++ b/wallets/okto-extension/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "esModuleInterop": true, + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/okxwallet-extension/.editorconfig b/wallets/okxwallet-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/okxwallet-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/okxwallet-extension/.eslintignore b/wallets/okxwallet-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/okxwallet-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/okxwallet-extension/.eslintrc.json b/wallets/okxwallet-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/okxwallet-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/okxwallet-extension/.gitignore b/wallets/okxwallet-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/okxwallet-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/okxwallet-extension/.npmignore b/wallets/okxwallet-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/okxwallet-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/okxwallet-extension/.npmrc b/wallets/okxwallet-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/okxwallet-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/okxwallet-extension/.prettierrc.json b/wallets/okxwallet-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/okxwallet-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/okxwallet-extension/CHANGELOG.md b/wallets/okxwallet-extension/CHANGELOG.md new file mode 100644 index 000000000..a74245600 --- /dev/null +++ b/wallets/okxwallet-extension/CHANGELOG.md @@ -0,0 +1,297 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.11.1...@cosmos-kit/okxwallet-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.11.0...@cosmos-kit/okxwallet-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.10.0...@cosmos-kit/okxwallet-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.9.0...@cosmos-kit/okxwallet-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.8.0...@cosmos-kit/okxwallet-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.7.3...@cosmos-kit/okxwallet-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.7.2...@cosmos-kit/okxwallet-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.7.1...@cosmos-kit/okxwallet-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.7.0...@cosmos-kit/okxwallet-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.9...@cosmos-kit/okxwallet-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.8...@cosmos-kit/okxwallet-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.7...@cosmos-kit/okxwallet-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.6...@cosmos-kit/okxwallet-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.5...@cosmos-kit/okxwallet-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.4...@cosmos-kit/okxwallet-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.3...@cosmos-kit/okxwallet-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.2...@cosmos-kit/okxwallet-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.1...@cosmos-kit/okxwallet-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.6.0...@cosmos-kit/okxwallet-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.15...@cosmos-kit/okxwallet-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.14...@cosmos-kit/okxwallet-extension@2.5.15) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.13...@cosmos-kit/okxwallet-extension@2.5.14) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.12...@cosmos-kit/okxwallet-extension@2.5.13) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.11...@cosmos-kit/okxwallet-extension@2.5.12) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.10...@cosmos-kit/okxwallet-extension@2.5.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.9...@cosmos-kit/okxwallet-extension@2.5.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.8...@cosmos-kit/okxwallet-extension@2.5.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.7...@cosmos-kit/okxwallet-extension@2.5.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.6...@cosmos-kit/okxwallet-extension@2.5.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.5...@cosmos-kit/okxwallet-extension@2.5.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.4...@cosmos-kit/okxwallet-extension@2.5.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.3...@cosmos-kit/okxwallet-extension@2.5.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.2...@cosmos-kit/okxwallet-extension@2.5.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.1...@cosmos-kit/okxwallet-extension@2.5.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.5.0...@cosmos-kit/okxwallet-extension@2.5.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.6...@cosmos-kit/okxwallet-extension@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.5...@cosmos-kit/okxwallet-extension@2.4.6) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.4...@cosmos-kit/okxwallet-extension@2.4.5) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.3...@cosmos-kit/okxwallet-extension@2.4.4) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.2...@cosmos-kit/okxwallet-extension@2.4.3) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.1...@cosmos-kit/okxwallet-extension@2.4.2) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.4.0...@cosmos-kit/okxwallet-extension@2.4.1) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.3.2...@cosmos-kit/okxwallet-extension@2.4.0) (2023-09-12) + +### Features + +- change `okxwallet` name to `OKX Wallet` ([d7cc243](https://github.com/cosmology-tech/cosmos-kit/commit/d7cc2433c8d25e42579a381bf5cba4a83874ec50)) + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.3.1...@cosmos-kit/okxwallet-extension@2.3.2) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.3.0...@cosmos-kit/okxwallet-extension@2.3.1) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.2.3...@cosmos-kit/okxwallet-extension@2.3.0) (2023-09-02) + +### Features + +- Add Missing Sign Methods to Wallet Clients ([#1](https://github.com/cosmology-tech/cosmos-kit/issues/1)) ([0657840](https://github.com/cosmology-tech/cosmos-kit/commit/06578403a64a210023943031c40a9caf70d49866)) +- add signArbitrary to OKX ([804d6b1](https://github.com/cosmology-tech/cosmos-kit/commit/804d6b157bd8728337c288306c0d901f29970273)) + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.2.2...@cosmos-kit/okxwallet-extension@2.2.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.2.1...@cosmos-kit/okxwallet-extension@2.2.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.2.0...@cosmos-kit/okxwallet-extension@2.2.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.1.1...@cosmos-kit/okxwallet-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.1.0...@cosmos-kit/okxwallet-extension@2.1.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.13...@cosmos-kit/okxwallet-extension@2.1.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.12...@cosmos-kit/okxwallet-extension@2.0.13) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.11...@cosmos-kit/okxwallet-extension@2.0.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.10...@cosmos-kit/okxwallet-extension@2.0.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.9...@cosmos-kit/okxwallet-extension@2.0.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.8...@cosmos-kit/okxwallet-extension@2.0.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.7...@cosmos-kit/okxwallet-extension@2.0.8) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.6...@cosmos-kit/okxwallet-extension@2.0.7) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.5...@cosmos-kit/okxwallet-extension@2.0.6) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.4...@cosmos-kit/okxwallet-extension@2.0.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.3...@cosmos-kit/okxwallet-extension@2.0.4) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet-extension@2.0.2...@cosmos-kit/okxwallet-extension@2.0.3) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## 2.0.2 (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +## 1.0.1 (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet-extension + +# 1.0.0 (2022-07-31) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/okxwallet-extension/LICENSE b/wallets/okxwallet-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/okxwallet-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/okxwallet-extension/README.md b/wallets/okxwallet-extension/README.md new file mode 100644 index 000000000..fa382d6dc --- /dev/null +++ b/wallets/okxwallet-extension/README.md @@ -0,0 +1,41 @@ +# @cosmos-kit/okxwallet-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/okxwallet is the okxWallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. + diff --git a/wallets/okxwallet-extension/index.ts b/wallets/okxwallet-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/okxwallet-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/okxwallet-extension/package.json b/wallets/okxwallet-extension/package.json new file mode 100644 index 000000000..a4b31bf54 --- /dev/null +++ b/wallets/okxwallet-extension/package.json @@ -0,0 +1,69 @@ +{ + "name": "@cosmos-kit/okxwallet-extension", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "okxwallet" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "okxwallet", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/okxwallet-extension/src/config.ts b/wallets/okxwallet-extension/src/config.ts new file mode 100644 index 000000000..4a7681189 --- /dev/null +++ b/wallets/okxwallet-extension/src/config.ts @@ -0,0 +1,208 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://rpc-osmosis.keplr.app/'], + rest: ['https://lcd-osmosis.keplr.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.keplr.app'], + rest: ['https://lcd-cosmoshub.keplr.app'], + }, + terra: { + rpc: ['https://rpc-columbus.keplr.app'], + rest: ['https://lcd-columbus.keplr.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.keplr.app'], + rest: ['https://lcd-secret.keplr.app'], + }, + akash: { + rpc: ['https://rpc-akash.keplr.app'], + rest: ['https://lcd-akash.keplr.app'], + }, + regen: { + rpc: ['https://rpc-regen.keplr.app'], + rest: ['https://lcd-regen.keplr.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.keplr.app'], + rest: ['https://lcd-sentinel.keplr.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.keplr.app'], + rest: ['https://lcd-persistence.keplr.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.keplr.app'], + rest: ['https://lcd-iris.keplr.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.keplr.app/'], + rest: ['https://lcd-crypto-org.keplr.app/'], + }, + starname: { + rpc: ['https://rpc-iov.keplr.app'], + rest: ['https://lcd-iov.keplr.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.keplr.app'], + rest: ['https://lcd-emoney.keplr.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.keplr.app'], + rest: ['https://lcd-microtick.keplr.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.keplr.app'], + rest: ['https://lcd-impacthub.keplr.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.keplr.app'], + rest: ['https://lcd-sommelier.keplr.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.keplr.app/'], + rest: ['https://lcd-evmos.keplr.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.keplr.app'], + rest: ['https://lcd-kava.keplr.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/okxwallet-extension/src/constant.ts b/wallets/okxwallet-extension/src/constant.ts new file mode 100644 index 000000000..411b44daf --- /dev/null +++ b/wallets/okxwallet-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAU4SURBVHgB7dnRTRxLGkDhYiMYIvCEABmQgUMwGeAM7AyACDARGEcAGUAGkAGTQS9jefdh915rhWTtVJ/vk37R4qmo6T7d9ByNMZYBJP1jAFkCAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGECAGGJAFxeXo7X19exLMs0s1/zWlxcXEy3/9+/fx/b7XYULGuetwtpmdV+7TPt9V/N+fn5MqvHx8ep9vo9c/TrYLXePscxq91uN46Pj8fM7u/vx9nZ2ZjV6enpeHp6GmvlHcAB22w2Y3azP0av4TP4HQGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAMAGAsNUHYLfbDf5/Xl5eBodr9QG4vb0ds7q+vh6zm3n/9/F6eHgYa7esfa6urpaZvL6+/lzzTHv8u/n69evy/Py8zOT+/n7ZbrdT7fM7Z6rFJufi4mKqC+jx8XG5vLycao/DM9Vic3N+fr7M6ubmZqq9Ls7RrwMO1NvddJycnIxZHR8fexF7wHwNeOA2m82Y2czxKhAACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMACBMA/qjdbjc4XAJw4G5vb8esXl5extPT0+CwLeaw5+rqapnN/f39st1up9rn4hz9Oli18/Pz8enTp/F2Qo4Z7O+c+zv/t2/f/v27zWbzc2ax/xv+5eTkZHz58uXnzxns1353dzeur69HwTS1es+8nXjLrD5//jzVXv/V7J8CZnVzczPVXr9nVv8E8Pz8PM2d/z/tX6AdHx+Pme3vpB8/fhyzOj09XfV7jNW/BJz14t+b6ZH/73z48GHMbA2fwe/4FoA/au0X0OwEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEAMIEgD9qt9sNDtfqA/Dw8DBmdXd3N2b348ePMauXl5epz5//1bLm2W63y/Pz8zKbp6enn2ufaa//bq6urpbZvL6+LicnJ1Pt83vm6NfB6p2dnY1Z7B+b3wIw1uTtYhqbzWbMYL//+7t/4d+XTACA/+YlIIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIQJAIT9E9kyaBHlxZP4AAAAAElFTkSuQmCC'; diff --git a/wallets/okxwallet-extension/src/extension/chain-wallet.ts b/wallets/okxwallet-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..b962ec3cb --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainOkxwalletExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/okxwallet-extension/src/extension/client.ts b/wallets/okxwallet-extension/src/extension/client.ts new file mode 100644 index 000000000..be7af261d --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/client.ts @@ -0,0 +1,94 @@ +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo } from '@cosmjs/proto-signing'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { Okxwallet } from './types'; +import Long from 'long'; + +export class OkxwalletClient implements WalletClient { + readonly client: Okxwallet; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Okxwallet) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + getOfflineSigner(chainId: string) { + return this.client.getOfflineSigner(chainId); + } +} diff --git a/wallets/okxwallet-extension/src/extension/index.ts b/wallets/okxwallet-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/okxwallet-extension/src/extension/main-wallet.ts b/wallets/okxwallet-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..e805838fa --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/main-wallet.ts @@ -0,0 +1,24 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainOkxwalletExtension } from './chain-wallet'; +import { OkxwalletClient } from './client'; +import { getOkxwalletFromExtension } from './utils'; + +export class OkxwalletExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainOkxwalletExtension); + } + + async initClient() { + this.initingClient(); + try { + const okxwallet = await getOkxwalletFromExtension(); + this.initClientDone( + okxwallet ? new OkxwalletClient(okxwallet) : undefined + ); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/okxwallet-extension/src/extension/registry.ts b/wallets/okxwallet-extension/src/extension/registry.ts new file mode 100644 index 000000000..cc44ad1c0 --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/registry.ts @@ -0,0 +1,30 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const OkxwalletExtensionInfo: Wallet = { + name: 'okxwallet-extension', + prettyName: 'OKX Wallet', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['okxwallet_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge', + }, + { + device: 'desktop', + browser: 'firefox', + link: 'https://addons.mozilla.org/zh-CN/firefox/addon/okexwallet/', + }, + { + link: 'https://www.okx.com/download', + }, + ], +}; diff --git a/wallets/okxwallet-extension/src/extension/types.ts b/wallets/okxwallet-extension/src/extension/types.ts new file mode 100644 index 000000000..99d50144f --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/types.ts @@ -0,0 +1,47 @@ +import { AminoSignResponse, StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { SignOptions } from '@cosmos-kit/core'; +import { BroadcastMode, Key, StdTx } from '@keplr-wallet/types'; + +export interface Okxwallet { + enable(chainIds: string | string[]): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineSigner; + getOfflineSignerAuto( + chainId: string + ): Promise; + signAmino( + chainId: string, + signerAddress: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ): Promise; + signDirect( + chainId: string, + signerAddress: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: SignOptions + ): Promise; + signArbitrary: ( + chainId: string, + signer: string, + data: string | Uint8Array + ) => Promise; + sendTx( + chainId: string, + tx: StdTx | Uint8Array, + mode: BroadcastMode + ): Promise; +} diff --git a/wallets/okxwallet-extension/src/extension/utils.ts b/wallets/okxwallet-extension/src/extension/utils.ts new file mode 100644 index 000000000..3b803ba8a --- /dev/null +++ b/wallets/okxwallet-extension/src/extension/utils.ts @@ -0,0 +1,51 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Okxwallet } from './types'; + +interface OkxwalltWindow { + okxwallet?: OkxwalletExtension; +} + +interface OkxwalletExtension { + keplr?: Okxwallet; +} + +export const getOkxwalletFromExtension: () => Promise< + Okxwallet | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const okxwallet = (window as OkxwalltWindow).okxwallet?.keplr; + + if (okxwallet) { + return okxwallet; + } + + if (document.readyState === 'complete') { + if (okxwallet) { + return okxwallet; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (okxwallet) { + resolve(okxwallet); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/okxwallet-extension/src/index.ts b/wallets/okxwallet-extension/src/index.ts new file mode 100644 index 000000000..4a6b92151 --- /dev/null +++ b/wallets/okxwallet-extension/src/index.ts @@ -0,0 +1,3 @@ +export * from './extension'; +export * from './extension/client'; +export * from './okxwallet'; diff --git a/wallets/okxwallet-extension/src/okxwallet.ts b/wallets/okxwallet-extension/src/okxwallet.ts new file mode 100644 index 000000000..027f640cd --- /dev/null +++ b/wallets/okxwallet-extension/src/okxwallet.ts @@ -0,0 +1,5 @@ +import { OkxwalletExtensionInfo, OkxwalletExtensionWallet } from './extension'; + +const okxwalletExtension = new OkxwalletExtensionWallet(OkxwalletExtensionInfo); + +export const wallets = [okxwalletExtension]; diff --git a/wallets/okxwallet-extension/tsconfig.json b/wallets/okxwallet-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/okxwallet-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/okxwallet/.editorconfig b/wallets/okxwallet/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/okxwallet/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/okxwallet/.eslintignore b/wallets/okxwallet/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/okxwallet/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/okxwallet/.eslintrc.json b/wallets/okxwallet/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/okxwallet/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/okxwallet/.gitignore b/wallets/okxwallet/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/okxwallet/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/okxwallet/.npmignore b/wallets/okxwallet/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/okxwallet/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/okxwallet/.npmrc b/wallets/okxwallet/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/okxwallet/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/okxwallet/.prettierrc.json b/wallets/okxwallet/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/okxwallet/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/okxwallet/CHANGELOG.md b/wallets/okxwallet/CHANGELOG.md new file mode 100644 index 000000000..022f61290 --- /dev/null +++ b/wallets/okxwallet/CHANGELOG.md @@ -0,0 +1,294 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.9.1...@cosmos-kit/okxwallet@2.9.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + + + + + +## [2.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.9.0...@cosmos-kit/okxwallet@2.9.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.8.0...@cosmos-kit/okxwallet@2.9.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.7.0...@cosmos-kit/okxwallet@2.8.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.6.0...@cosmos-kit/okxwallet@2.7.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + + + + + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.5.3...@cosmos-kit/okxwallet@2.6.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + + + + + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.5.2...@cosmos-kit/okxwallet@2.5.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.5.1...@cosmos-kit/okxwallet@2.5.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.5.0...@cosmos-kit/okxwallet@2.5.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.9...@cosmos-kit/okxwallet@2.5.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.8...@cosmos-kit/okxwallet@2.4.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.7...@cosmos-kit/okxwallet@2.4.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.6...@cosmos-kit/okxwallet@2.4.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.5...@cosmos-kit/okxwallet@2.4.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.4...@cosmos-kit/okxwallet@2.4.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.3...@cosmos-kit/okxwallet@2.4.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.2...@cosmos-kit/okxwallet@2.4.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.1...@cosmos-kit/okxwallet@2.4.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.4.0...@cosmos-kit/okxwallet@2.4.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.15...@cosmos-kit/okxwallet@2.4.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.14...@cosmos-kit/okxwallet@2.3.15) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.13...@cosmos-kit/okxwallet@2.3.14) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.12...@cosmos-kit/okxwallet@2.3.13) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.11...@cosmos-kit/okxwallet@2.3.12) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.10...@cosmos-kit/okxwallet@2.3.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.9...@cosmos-kit/okxwallet@2.3.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.8...@cosmos-kit/okxwallet@2.3.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.7...@cosmos-kit/okxwallet@2.3.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.6...@cosmos-kit/okxwallet@2.3.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.5...@cosmos-kit/okxwallet@2.3.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.4...@cosmos-kit/okxwallet@2.3.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.3...@cosmos-kit/okxwallet@2.3.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.2...@cosmos-kit/okxwallet@2.3.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.1...@cosmos-kit/okxwallet@2.3.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.3.0...@cosmos-kit/okxwallet@2.3.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.13...@cosmos-kit/okxwallet@2.3.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.12...@cosmos-kit/okxwallet@2.2.13) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.11...@cosmos-kit/okxwallet@2.2.12) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.10...@cosmos-kit/okxwallet@2.2.11) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.9...@cosmos-kit/okxwallet@2.2.10) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.8...@cosmos-kit/okxwallet@2.2.9) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.7...@cosmos-kit/okxwallet@2.2.8) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.6...@cosmos-kit/okxwallet@2.2.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.5...@cosmos-kit/okxwallet@2.2.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.4...@cosmos-kit/okxwallet@2.2.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.3...@cosmos-kit/okxwallet@2.2.4) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.2...@cosmos-kit/okxwallet@2.2.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.1...@cosmos-kit/okxwallet@2.2.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.2.0...@cosmos-kit/okxwallet@2.2.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.1.1...@cosmos-kit/okxwallet@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.1.0...@cosmos-kit/okxwallet@2.1.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.13...@cosmos-kit/okxwallet@2.1.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.12...@cosmos-kit/okxwallet@2.0.13) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.11...@cosmos-kit/okxwallet@2.0.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.10...@cosmos-kit/okxwallet@2.0.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.9...@cosmos-kit/okxwallet@2.0.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.8...@cosmos-kit/okxwallet@2.0.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.7...@cosmos-kit/okxwallet@2.0.8) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.6...@cosmos-kit/okxwallet@2.0.7) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.5...@cosmos-kit/okxwallet@2.0.6) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.4...@cosmos-kit/okxwallet@2.0.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.3...@cosmos-kit/okxwallet@2.0.4) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/okxwallet@2.0.2...@cosmos-kit/okxwallet@2.0.3) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## 2.0.2 (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +## 1.0.1 (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/okxwallet + +**Note:** Version bump only for package @cosmos-kit/trust + +# 1.0.0 (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/okxwallet/LICENSE b/wallets/okxwallet/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/okxwallet/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/okxwallet/README.md b/wallets/okxwallet/README.md new file mode 100644 index 000000000..392ec3627 --- /dev/null +++ b/wallets/okxwallet/README.md @@ -0,0 +1,41 @@ +# @cosmos-kit/okxwallet + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/okxwallet is the okxWallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. + diff --git a/wallets/okxwallet/index.ts b/wallets/okxwallet/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/okxwallet/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/okxwallet/package.json b/wallets/okxwallet/package.json new file mode 100644 index 000000000..649759c94 --- /dev/null +++ b/wallets/okxwallet/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/okxwallet", + "version": "2.9.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "okxwallet" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "okxwallet", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/okxwallet-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/okxwallet/src/index.ts b/wallets/okxwallet/src/index.ts new file mode 100644 index 000000000..a1ebeae7f --- /dev/null +++ b/wallets/okxwallet/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/okxwallet-extension'; + +export const wallets = [...ext]; diff --git a/wallets/okxwallet/tsconfig.json b/wallets/okxwallet/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/okxwallet/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/omni-mobile/.editorconfig b/wallets/omni-mobile/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/omni-mobile/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/omni-mobile/.eslintignore b/wallets/omni-mobile/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/omni-mobile/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/omni-mobile/.eslintrc.json b/wallets/omni-mobile/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/omni-mobile/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/omni-mobile/.gitignore b/wallets/omni-mobile/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/omni-mobile/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/omni-mobile/.npmignore b/wallets/omni-mobile/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/omni-mobile/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/omni-mobile/.npmrc b/wallets/omni-mobile/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/omni-mobile/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/omni-mobile/.prettierrc.json b/wallets/omni-mobile/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/omni-mobile/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/omni-mobile/CHANGELOG.md b/wallets/omni-mobile/CHANGELOG.md new file mode 100644 index 000000000..21481f3b8 --- /dev/null +++ b/wallets/omni-mobile/CHANGELOG.md @@ -0,0 +1,917 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.10.1...@cosmos-kit/omni-mobile@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.10.0...@cosmos-kit/omni-mobile@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.9.0...@cosmos-kit/omni-mobile@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.8.0...@cosmos-kit/omni-mobile@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.7.0...@cosmos-kit/omni-mobile@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.6.3...@cosmos-kit/omni-mobile@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.6.2...@cosmos-kit/omni-mobile@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.6.1...@cosmos-kit/omni-mobile@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.6.0...@cosmos-kit/omni-mobile@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.9...@cosmos-kit/omni-mobile@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.8...@cosmos-kit/omni-mobile@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.7...@cosmos-kit/omni-mobile@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.6...@cosmos-kit/omni-mobile@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.5...@cosmos-kit/omni-mobile@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.4...@cosmos-kit/omni-mobile@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.3...@cosmos-kit/omni-mobile@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.2...@cosmos-kit/omni-mobile@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.1...@cosmos-kit/omni-mobile@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.5.0...@cosmos-kit/omni-mobile@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.17...@cosmos-kit/omni-mobile@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.16...@cosmos-kit/omni-mobile@2.4.17) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.15...@cosmos-kit/omni-mobile@2.4.16) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.14...@cosmos-kit/omni-mobile@2.4.15) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.13...@cosmos-kit/omni-mobile@2.4.14) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.12...@cosmos-kit/omni-mobile@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.11...@cosmos-kit/omni-mobile@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.10...@cosmos-kit/omni-mobile@2.4.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.9...@cosmos-kit/omni-mobile@2.4.10) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.8...@cosmos-kit/omni-mobile@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.7...@cosmos-kit/omni-mobile@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.6...@cosmos-kit/omni-mobile@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.5...@cosmos-kit/omni-mobile@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.4...@cosmos-kit/omni-mobile@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.3...@cosmos-kit/omni-mobile@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.2...@cosmos-kit/omni-mobile@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.1...@cosmos-kit/omni-mobile@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.4.0...@cosmos-kit/omni-mobile@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.12...@cosmos-kit/omni-mobile@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.11...@cosmos-kit/omni-mobile@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.10...@cosmos-kit/omni-mobile@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.9...@cosmos-kit/omni-mobile@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.8...@cosmos-kit/omni-mobile@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.7...@cosmos-kit/omni-mobile@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.6...@cosmos-kit/omni-mobile@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.5...@cosmos-kit/omni-mobile@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.4...@cosmos-kit/omni-mobile@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.3...@cosmos-kit/omni-mobile@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.2...@cosmos-kit/omni-mobile@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.1...@cosmos-kit/omni-mobile@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.3.0...@cosmos-kit/omni-mobile@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.2.1...@cosmos-kit/omni-mobile@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.2.0...@cosmos-kit/omni-mobile@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.12...@cosmos-kit/omni-mobile@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.11...@cosmos-kit/omni-mobile@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.10...@cosmos-kit/omni-mobile@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.9...@cosmos-kit/omni-mobile@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.8...@cosmos-kit/omni-mobile@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.7...@cosmos-kit/omni-mobile@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.6...@cosmos-kit/omni-mobile@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.5...@cosmos-kit/omni-mobile@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.4...@cosmos-kit/omni-mobile@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.3...@cosmos-kit/omni-mobile@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.2...@cosmos-kit/omni-mobile@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.1...@cosmos-kit/omni-mobile@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.1.0...@cosmos-kit/omni-mobile@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.5...@cosmos-kit/omni-mobile@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.4...@cosmos-kit/omni-mobile@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.3...@cosmos-kit/omni-mobile@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.2...@cosmos-kit/omni-mobile@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1...@cosmos-kit/omni-mobile@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.6...@cosmos-kit/omni-mobile@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.5...@cosmos-kit/omni-mobile@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.4...@cosmos-kit/omni-mobile@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.3...@cosmos-kit/omni-mobile@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.2...@cosmos-kit/omni-mobile@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.1...@cosmos-kit/omni-mobile@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@2.0.1-beta.0...@cosmos-kit/omni-mobile@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@1.0.0...@cosmos-kit/omni-mobile@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2-beta.6...@cosmos-kit/omni-mobile@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2-beta.5...@cosmos-kit/omni-mobile@0.3.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2-beta.4...@cosmos-kit/omni-mobile@0.3.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2-beta.3...@cosmos-kit/omni-mobile@0.3.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2...@cosmos-kit/omni-mobile@0.3.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.1...@cosmos-kit/omni-mobile@0.3.2) (2023-06-30) + +## [0.3.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2-beta.1...@cosmos-kit/omni-mobile@0.3.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.2-beta.0...@cosmos-kit/omni-mobile@0.3.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.3.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.1...@cosmos-kit/omni-mobile@0.3.2-beta.0) (2023-06-28) + +### Features + +- migrate beta ([f1b11b4](https://github.com/cosmology-tech/cosmos-kit/commit/f1b11b45621e114ae17e7bf2c957f314a532410c)) + +## [0.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.3.0...@cosmos-kit/omni-mobile@0.3.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.36...@cosmos-kit/omni-mobile@0.3.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.2.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.35...@cosmos-kit/omni-mobile@0.2.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.34...@cosmos-kit/omni-mobile@0.2.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.33...@cosmos-kit/omni-mobile@0.2.34) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.32...@cosmos-kit/omni-mobile@0.2.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.31...@cosmos-kit/omni-mobile@0.2.32) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.30...@cosmos-kit/omni-mobile@0.2.31) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.29...@cosmos-kit/omni-mobile@0.2.30) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.28...@cosmos-kit/omni-mobile@0.2.29) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.27...@cosmos-kit/omni-mobile@0.2.28) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.26...@cosmos-kit/omni-mobile@0.2.27) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.25...@cosmos-kit/omni-mobile@0.2.26) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.24...@cosmos-kit/omni-mobile@0.2.25) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.23...@cosmos-kit/omni-mobile@0.2.24) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.22...@cosmos-kit/omni-mobile@0.2.23) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.21...@cosmos-kit/omni-mobile@0.2.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.20...@cosmos-kit/omni-mobile@0.2.21) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.19...@cosmos-kit/omni-mobile@0.2.20) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.18...@cosmos-kit/omni-mobile@0.2.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.17...@cosmos-kit/omni-mobile@0.2.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.16...@cosmos-kit/omni-mobile@0.2.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.15...@cosmos-kit/omni-mobile@0.2.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.14...@cosmos-kit/omni-mobile@0.2.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.13...@cosmos-kit/omni-mobile@0.2.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.12...@cosmos-kit/omni-mobile@0.2.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.11...@cosmos-kit/omni-mobile@0.2.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.10...@cosmos-kit/omni-mobile@0.2.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.9...@cosmos-kit/omni-mobile@0.2.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.8...@cosmos-kit/omni-mobile@0.2.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.7...@cosmos-kit/omni-mobile@0.2.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.6...@cosmos-kit/omni-mobile@0.2.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.5...@cosmos-kit/omni-mobile@0.2.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.4...@cosmos-kit/omni-mobile@0.2.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.3...@cosmos-kit/omni-mobile@0.2.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.2...@cosmos-kit/omni-mobile@0.2.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.1...@cosmos-kit/omni-mobile@0.2.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.2.0...@cosmos-kit/omni-mobile@0.2.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.20...@cosmos-kit/omni-mobile@0.2.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.1.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.19...@cosmos-kit/omni-mobile@0.1.20) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.18...@cosmos-kit/omni-mobile@0.1.19) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.17...@cosmos-kit/omni-mobile@0.1.18) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.16...@cosmos-kit/omni-mobile@0.1.17) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.15...@cosmos-kit/omni-mobile@0.1.16) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.14...@cosmos-kit/omni-mobile@0.1.15) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.13...@cosmos-kit/omni-mobile@0.1.14) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.12...@cosmos-kit/omni-mobile@0.1.13) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.11...@cosmos-kit/omni-mobile@0.1.12) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.10...@cosmos-kit/omni-mobile@0.1.11) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.8...@cosmos-kit/omni-mobile@0.1.10) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.7...@cosmos-kit/omni-mobile@0.1.8) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.6...@cosmos-kit/omni-mobile@0.1.7) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.5...@cosmos-kit/omni-mobile@0.1.6) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.4...@cosmos-kit/omni-mobile@0.1.5) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.3...@cosmos-kit/omni-mobile@0.1.4) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni-mobile@0.1.2...@cosmos-kit/omni-mobile@0.1.3) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## 0.1.2 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/omni-mobile + +## [0.32.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.13...@cosmos-kit/omni@0.32.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.12...@cosmos-kit/omni@0.32.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.11...@cosmos-kit/omni@0.32.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## 0.32.11 (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.9...@cosmos-kit/omni@0.32.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.8...@cosmos-kit/omni@0.32.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.7...@cosmos-kit/omni@0.32.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.6...@cosmos-kit/omni@0.32.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.5...@cosmos-kit/omni@0.32.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.4...@cosmos-kit/omni@0.32.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.3...@cosmos-kit/omni@0.32.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.2...@cosmos-kit/omni@0.32.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.1...@cosmos-kit/omni@0.32.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.0...@cosmos-kit/omni@0.32.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.31.0...@cosmos-kit/omni@0.32.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.30.2...@cosmos-kit/omni@0.31.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.30.1...@cosmos-kit/omni@0.30.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.30.0...@cosmos-kit/omni@0.30.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.5...@cosmos-kit/omni@0.30.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.4...@cosmos-kit/omni@0.29.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.3...@cosmos-kit/omni@0.29.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.2...@cosmos-kit/omni@0.29.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.1...@cosmos-kit/omni@0.29.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.0...@cosmos-kit/omni@0.29.1) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.28.1...@cosmos-kit/omni@0.29.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.28.0...@cosmos-kit/omni@0.28.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.27.1...@cosmos-kit/omni@0.28.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.27.0...@cosmos-kit/omni@0.27.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.26.1...@cosmos-kit/omni@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.26.0...@cosmos-kit/omni@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.25.0...@cosmos-kit/omni@0.26.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.24.0...@cosmos-kit/omni@0.25.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.23.0...@cosmos-kit/omni@0.24.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.22.2...@cosmos-kit/omni@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.22.1...@cosmos-kit/omni@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.22.0...@cosmos-kit/omni@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.21.0...@cosmos-kit/omni@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.20.2...@cosmos-kit/omni@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.20.1...@cosmos-kit/omni@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.20.0...@cosmos-kit/omni@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.7...@cosmos-kit/omni@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.6...@cosmos-kit/omni@0.19.7) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.5...@cosmos-kit/omni@0.19.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.4...@cosmos-kit/omni@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.3...@cosmos-kit/omni@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.2...@cosmos-kit/omni@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.1...@cosmos-kit/omni@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.0...@cosmos-kit/omni@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.18.1...@cosmos-kit/omni@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.18.0...@cosmos-kit/omni@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.17.1...@cosmos-kit/omni@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.17.0...@cosmos-kit/omni@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.16.2...@cosmos-kit/omni@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.16.1...@cosmos-kit/omni@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.16.0...@cosmos-kit/omni@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.15.0...@cosmos-kit/omni@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.14.0...@cosmos-kit/omni@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.13.2...@cosmos-kit/omni@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.12.3...@cosmos-kit/omni@0.13.2) (2022-09-22) + +## 0.12.7 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.12.2...@cosmos-kit/omni@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.11.0...@cosmos-kit/omni@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.12.0...@cosmos-kit/omni@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +# 0.12.0 (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/omni-mobile/LICENSE b/wallets/omni-mobile/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/omni-mobile/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/omni-mobile/README.md b/wallets/omni-mobile/README.md new file mode 100644 index 000000000..97b6a8692 --- /dev/null +++ b/wallets/omni-mobile/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/omni-mobile + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/omni-mobile is the Omni integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/omni-mobile/index.ts b/wallets/omni-mobile/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/omni-mobile/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/omni-mobile/package.json b/wallets/omni-mobile/package.json new file mode 100644 index 000000000..b1c76a8d7 --- /dev/null +++ b/wallets/omni-mobile/package.json @@ -0,0 +1,82 @@ +{ + "name": "@cosmos-kit/omni-mobile", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "omni", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "@cosmos-kit/walletconnect": "^2.10.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/omni-mobile/src/config.ts b/wallets/omni-mobile/src/config.ts new file mode 100644 index 000000000..68711c81e --- /dev/null +++ b/wallets/omni-mobile/src/config.ts @@ -0,0 +1,208 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://rpc-osmosis.omni.app/'], + rest: ['https://lcd-osmosis.omni.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.omni.app'], + rest: ['https://lcd-cosmoshub.omni.app'], + }, + terra: { + rpc: ['https://rpc-columbus.omni.app'], + rest: ['https://lcd-columbus.omni.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.omni.app'], + rest: ['https://lcd-secret.omni.app'], + }, + akash: { + rpc: ['https://rpc-akash.omni.app'], + rest: ['https://lcd-akash.omni.app'], + }, + regen: { + rpc: ['https://rpc-regen.omni.app'], + rest: ['https://lcd-regen.omni.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.omni.app'], + rest: ['https://lcd-sentinel.omni.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.omni.app'], + rest: ['https://lcd-persistence.omni.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.omni.app'], + rest: ['https://lcd-iris.omni.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.omni.app/'], + rest: ['https://lcd-crypto-org.omni.app/'], + }, + starname: { + rpc: ['https://rpc-iov.omni.app'], + rest: ['https://lcd-iov.omni.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.omni.app'], + rest: ['https://lcd-emoney.omni.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.omni.app'], + rest: ['https://lcd-microtick.omni.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.omni.app'], + rest: ['https://lcd-impacthub.omni.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.omni.app'], + rest: ['https://lcd-sommelier.omni.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.omni.app/'], + rest: ['https://lcd-evmos.omni.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.omni.app'], + rest: ['https://lcd-kava.omni.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/omni-mobile/src/constant.ts b/wallets/omni-mobile/src/constant.ts new file mode 100644 index 000000000..36549bc52 --- /dev/null +++ b/wallets/omni-mobile/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/omni-mobile/src/index.ts b/wallets/omni-mobile/src/index.ts new file mode 100644 index 000000000..86ca3e8e9 --- /dev/null +++ b/wallets/omni-mobile/src/index.ts @@ -0,0 +1,2 @@ +export * from './omni'; +export * from './wallet-connect'; diff --git a/wallets/omni-mobile/src/omni.ts b/wallets/omni-mobile/src/omni.ts new file mode 100644 index 000000000..1469d664e --- /dev/null +++ b/wallets/omni-mobile/src/omni.ts @@ -0,0 +1,6 @@ +import { preferredEndpoints } from './config'; +import { omniMobileInfo, OmniMobileWallet } from './wallet-connect'; + +const omniMobile = new OmniMobileWallet(omniMobileInfo, preferredEndpoints); + +export const wallets = [omniMobile]; diff --git a/wallets/omni-mobile/src/wallet-connect/chain-wallet.ts b/wallets/omni-mobile/src/wallet-connect/chain-wallet.ts new file mode 100644 index 000000000..91e47436c --- /dev/null +++ b/wallets/omni-mobile/src/wallet-connect/chain-wallet.ts @@ -0,0 +1,9 @@ +import { ChainRecord, Wallet } from '@cosmos-kit/core'; +import { ChainWC } from '@cosmos-kit/walletconnect'; +import { OmniClient } from './client'; + +export class ChainOmniMobile extends ChainWC { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo, OmniClient); + } +} diff --git a/wallets/omni-mobile/src/wallet-connect/client.ts b/wallets/omni-mobile/src/wallet-connect/client.ts new file mode 100644 index 000000000..3f12aab81 --- /dev/null +++ b/wallets/omni-mobile/src/wallet-connect/client.ts @@ -0,0 +1,46 @@ +import { AminoSignResponse, StdSignDoc } from '@cosmjs/amino'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { DirectSignDoc, SignOptions, Wallet } from '@cosmos-kit/core'; +import { WCClient } from '@cosmos-kit/walletconnect'; + +export class OmniClient extends WCClient { + constructor(walletInfo: Wallet) { + super(walletInfo); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ): Promise { + const { signDoc: signed, signature } = (await this._signAmino( + chainId, + signer, + signDoc, + signOptions + )) as any; + return { + signed, + signature, + }; + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ): Promise { + const { signDoc: signed, signature } = (await this._signDirect( + chainId, + signer, + signDoc, + signOptions + )) as any; + return { + signed, + signature, + }; + } +} diff --git a/wallets/omni-mobile/src/wallet-connect/index.ts b/wallets/omni-mobile/src/wallet-connect/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/omni-mobile/src/wallet-connect/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/omni-mobile/src/wallet-connect/main-wallet.ts b/wallets/omni-mobile/src/wallet-connect/main-wallet.ts new file mode 100644 index 000000000..d7cda1264 --- /dev/null +++ b/wallets/omni-mobile/src/wallet-connect/main-wallet.ts @@ -0,0 +1,15 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { WCWallet } from '@cosmos-kit/walletconnect'; + +import { ChainOmniMobile } from './chain-wallet'; +import { OmniClient } from './client'; + +export class OmniMobileWallet extends WCWallet { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainOmniMobile, OmniClient); + this.preferredEndpoints = preferredEndpoints; + } +} diff --git a/wallets/omni-mobile/src/wallet-connect/registry.ts b/wallets/omni-mobile/src/wallet-connect/registry.ts new file mode 100644 index 000000000..e1c05d4d3 --- /dev/null +++ b/wallets/omni-mobile/src/wallet-connect/registry.ts @@ -0,0 +1,36 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const omniMobileInfo: Wallet = { + name: 'omni-mobile', + prettyName: 'Omni Mobile', + logo: ICON, + mode: 'wallet-connect', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'mobile', + os: 'android', + link: + 'https://play.google.com/store/apps/details?id=com.chainapsis.omni&hl=en&gl=US&pli=1', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://apps.apple.com/us/app/omni-wallet/id1567851089', + }, + { + link: 'https://www.omni.app/download', + }, + ], + connectEventNamesOnWindow: ['omni_keystorechange'], + walletconnect: { + name: 'Omni', + projectId: + 'afbd95522f4041c71dd4f1a065f971fd32372865b416f95a0b1db759ae33f2a7', + }, +}; diff --git a/wallets/omni-mobile/tsconfig.json b/wallets/omni-mobile/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/omni-mobile/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/omni/.editorconfig b/wallets/omni/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/omni/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/omni/.eslintignore b/wallets/omni/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/omni/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/omni/.eslintrc.json b/wallets/omni/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/omni/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/omni/.gitignore b/wallets/omni/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/omni/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/omni/.npmignore b/wallets/omni/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/omni/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/omni/.npmrc b/wallets/omni/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/omni/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/omni/.prettierrc.json b/wallets/omni/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/omni/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/omni/CHANGELOG.md b/wallets/omni/CHANGELOG.md new file mode 100644 index 000000000..24841af79 --- /dev/null +++ b/wallets/omni/CHANGELOG.md @@ -0,0 +1,915 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.10.1...@cosmos-kit/omni@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/omni + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.10.0...@cosmos-kit/omni@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/omni + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.9.0...@cosmos-kit/omni@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/omni + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.8.0...@cosmos-kit/omni@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/omni + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.7.0...@cosmos-kit/omni@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/omni + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.6.3...@cosmos-kit/omni@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/omni + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.6.2...@cosmos-kit/omni@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.6.1...@cosmos-kit/omni@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.6.0...@cosmos-kit/omni@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.9...@cosmos-kit/omni@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.8...@cosmos-kit/omni@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.7...@cosmos-kit/omni@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.6...@cosmos-kit/omni@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.5...@cosmos-kit/omni@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.4...@cosmos-kit/omni@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.3...@cosmos-kit/omni@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.2...@cosmos-kit/omni@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.1...@cosmos-kit/omni@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.5.0...@cosmos-kit/omni@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.17...@cosmos-kit/omni@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.16...@cosmos-kit/omni@2.4.17) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.15...@cosmos-kit/omni@2.4.16) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.14...@cosmos-kit/omni@2.4.15) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.13...@cosmos-kit/omni@2.4.14) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.12...@cosmos-kit/omni@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.11...@cosmos-kit/omni@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.10...@cosmos-kit/omni@2.4.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.9...@cosmos-kit/omni@2.4.10) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.8...@cosmos-kit/omni@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.7...@cosmos-kit/omni@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.6...@cosmos-kit/omni@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.5...@cosmos-kit/omni@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.4...@cosmos-kit/omni@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.3...@cosmos-kit/omni@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.2...@cosmos-kit/omni@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.1...@cosmos-kit/omni@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.4.0...@cosmos-kit/omni@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.12...@cosmos-kit/omni@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.11...@cosmos-kit/omni@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.10...@cosmos-kit/omni@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.9...@cosmos-kit/omni@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.8...@cosmos-kit/omni@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.7...@cosmos-kit/omni@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.6...@cosmos-kit/omni@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.5...@cosmos-kit/omni@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.4...@cosmos-kit/omni@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.3...@cosmos-kit/omni@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.2...@cosmos-kit/omni@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.1...@cosmos-kit/omni@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.3.0...@cosmos-kit/omni@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.2.1...@cosmos-kit/omni@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.2.0...@cosmos-kit/omni@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.12...@cosmos-kit/omni@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.11...@cosmos-kit/omni@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.10...@cosmos-kit/omni@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.9...@cosmos-kit/omni@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.8...@cosmos-kit/omni@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.7...@cosmos-kit/omni@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.6...@cosmos-kit/omni@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.5...@cosmos-kit/omni@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.4...@cosmos-kit/omni@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.3...@cosmos-kit/omni@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.2...@cosmos-kit/omni@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.1...@cosmos-kit/omni@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.1.0...@cosmos-kit/omni@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.5...@cosmos-kit/omni@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.4...@cosmos-kit/omni@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.3...@cosmos-kit/omni@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.2...@cosmos-kit/omni@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1...@cosmos-kit/omni@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.6...@cosmos-kit/omni@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.5...@cosmos-kit/omni@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.4...@cosmos-kit/omni@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.3...@cosmos-kit/omni@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.2...@cosmos-kit/omni@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.1...@cosmos-kit/omni@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@2.0.1-beta.0...@cosmos-kit/omni@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@1.0.0...@cosmos-kit/omni@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39-beta.6...@cosmos-kit/omni@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39-beta.5...@cosmos-kit/omni@0.33.39-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39-beta.4...@cosmos-kit/omni@0.33.39-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39-beta.3...@cosmos-kit/omni@0.33.39-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39...@cosmos-kit/omni@0.33.39-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.38...@cosmos-kit/omni@0.33.39) (2023-06-30) + +## [0.33.39-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39-beta.1...@cosmos-kit/omni@0.33.39-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.39-beta.0...@cosmos-kit/omni@0.33.39-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.39-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.38...@cosmos-kit/omni@0.33.39-beta.0) (2023-06-28) + +### Bug Fixes + +- bundle ([235645d](https://github.com/cosmology-tech/cosmos-kit/commit/235645d56bb53e4036cf961a147557296d0823ad)) + +## [0.33.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.37...@cosmos-kit/omni@0.33.38) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.36...@cosmos-kit/omni@0.33.37) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.35...@cosmos-kit/omni@0.33.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.35...@cosmos-kit/omni@0.33.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.34...@cosmos-kit/omni@0.33.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.33...@cosmos-kit/omni@0.33.34) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.32...@cosmos-kit/omni@0.33.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.31...@cosmos-kit/omni@0.33.32) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.30...@cosmos-kit/omni@0.33.31) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.29...@cosmos-kit/omni@0.33.30) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.28...@cosmos-kit/omni@0.33.29) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.27...@cosmos-kit/omni@0.33.28) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.26...@cosmos-kit/omni@0.33.27) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.25...@cosmos-kit/omni@0.33.26) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.24...@cosmos-kit/omni@0.33.25) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.23...@cosmos-kit/omni@0.33.24) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.22...@cosmos-kit/omni@0.33.23) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.21...@cosmos-kit/omni@0.33.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.20...@cosmos-kit/omni@0.33.21) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.19...@cosmos-kit/omni@0.33.20) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.18...@cosmos-kit/omni@0.33.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.17...@cosmos-kit/omni@0.33.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.16...@cosmos-kit/omni@0.33.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.15...@cosmos-kit/omni@0.33.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.14...@cosmos-kit/omni@0.33.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.13...@cosmos-kit/omni@0.33.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.12...@cosmos-kit/omni@0.33.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.11...@cosmos-kit/omni@0.33.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.10...@cosmos-kit/omni@0.33.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.9...@cosmos-kit/omni@0.33.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.8...@cosmos-kit/omni@0.33.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.7...@cosmos-kit/omni@0.33.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.6...@cosmos-kit/omni@0.33.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.5...@cosmos-kit/omni@0.33.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.4...@cosmos-kit/omni@0.33.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.3...@cosmos-kit/omni@0.33.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.2...@cosmos-kit/omni@0.33.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.1...@cosmos-kit/omni@0.33.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.33.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.33.0...@cosmos-kit/omni@0.33.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.33.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.33...@cosmos-kit/omni@0.33.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.32.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.32...@cosmos-kit/omni@0.32.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.31...@cosmos-kit/omni@0.32.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.30...@cosmos-kit/omni@0.32.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.29...@cosmos-kit/omni@0.32.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.28...@cosmos-kit/omni@0.32.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.27...@cosmos-kit/omni@0.32.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.26...@cosmos-kit/omni@0.32.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.25...@cosmos-kit/omni@0.32.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.24...@cosmos-kit/omni@0.32.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.23...@cosmos-kit/omni@0.32.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.21...@cosmos-kit/omni@0.32.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.20...@cosmos-kit/omni@0.32.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.19...@cosmos-kit/omni@0.32.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.18...@cosmos-kit/omni@0.32.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.17...@cosmos-kit/omni@0.32.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.16...@cosmos-kit/omni@0.32.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.15...@cosmos-kit/omni@0.32.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.14...@cosmos-kit/omni@0.32.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.13...@cosmos-kit/omni@0.32.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.12...@cosmos-kit/omni@0.32.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.11...@cosmos-kit/omni@0.32.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## 0.32.11 (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.9...@cosmos-kit/omni@0.32.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.8...@cosmos-kit/omni@0.32.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.7...@cosmos-kit/omni@0.32.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.6...@cosmos-kit/omni@0.32.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.5...@cosmos-kit/omni@0.32.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.4...@cosmos-kit/omni@0.32.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.3...@cosmos-kit/omni@0.32.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.2...@cosmos-kit/omni@0.32.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.1...@cosmos-kit/omni@0.32.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.32.0...@cosmos-kit/omni@0.32.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.31.0...@cosmos-kit/omni@0.32.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.30.2...@cosmos-kit/omni@0.31.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.30.1...@cosmos-kit/omni@0.30.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.30.0...@cosmos-kit/omni@0.30.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.5...@cosmos-kit/omni@0.30.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.4...@cosmos-kit/omni@0.29.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.3...@cosmos-kit/omni@0.29.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.2...@cosmos-kit/omni@0.29.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.1...@cosmos-kit/omni@0.29.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.29.0...@cosmos-kit/omni@0.29.1) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.28.1...@cosmos-kit/omni@0.29.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.28.0...@cosmos-kit/omni@0.28.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.27.1...@cosmos-kit/omni@0.28.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.27.0...@cosmos-kit/omni@0.27.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.26.1...@cosmos-kit/omni@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.26.0...@cosmos-kit/omni@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.25.0...@cosmos-kit/omni@0.26.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.24.0...@cosmos-kit/omni@0.25.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.23.0...@cosmos-kit/omni@0.24.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.22.2...@cosmos-kit/omni@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.22.1...@cosmos-kit/omni@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.22.0...@cosmos-kit/omni@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.21.0...@cosmos-kit/omni@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.20.2...@cosmos-kit/omni@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.20.1...@cosmos-kit/omni@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.20.0...@cosmos-kit/omni@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.7...@cosmos-kit/omni@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.6...@cosmos-kit/omni@0.19.7) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.5...@cosmos-kit/omni@0.19.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.4...@cosmos-kit/omni@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.3...@cosmos-kit/omni@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.2...@cosmos-kit/omni@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.1...@cosmos-kit/omni@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.19.0...@cosmos-kit/omni@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.18.1...@cosmos-kit/omni@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.18.0...@cosmos-kit/omni@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.17.1...@cosmos-kit/omni@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.17.0...@cosmos-kit/omni@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.16.2...@cosmos-kit/omni@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.16.1...@cosmos-kit/omni@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.16.0...@cosmos-kit/omni@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.15.0...@cosmos-kit/omni@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.14.0...@cosmos-kit/omni@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.13.2...@cosmos-kit/omni@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.12.3...@cosmos-kit/omni@0.13.2) (2022-09-22) + +## 0.12.7 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.12.2...@cosmos-kit/omni@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.11.0...@cosmos-kit/omni@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/omni + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/omni@0.12.0...@cosmos-kit/omni@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/omni + +# 0.12.0 (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/omni + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/omni/LICENSE b/wallets/omni/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/omni/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/omni/README.md b/wallets/omni/README.md new file mode 100644 index 000000000..efffb60d1 --- /dev/null +++ b/wallets/omni/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/omni + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/omni is the Omni integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/omni/index.ts b/wallets/omni/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/omni/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/omni/package.json b/wallets/omni/package.json new file mode 100644 index 000000000..0a7e6e342 --- /dev/null +++ b/wallets/omni/package.json @@ -0,0 +1,71 @@ +{ + "name": "@cosmos-kit/omni", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "omni", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/omni-mobile": "^2.10.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/omni/src/index.ts b/wallets/omni/src/index.ts new file mode 100644 index 000000000..97c412870 --- /dev/null +++ b/wallets/omni/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as mobile } from '@cosmos-kit/omni-mobile'; + +export const wallets = [...mobile]; diff --git a/wallets/omni/tsconfig.json b/wallets/omni/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/omni/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/owallet-extension/.editorconfig b/wallets/owallet-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/owallet-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/owallet-extension/.eslintignore b/wallets/owallet-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/owallet-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/owallet-extension/.eslintrc.json b/wallets/owallet-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/owallet-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/owallet-extension/.gitignore b/wallets/owallet-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/owallet-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/owallet-extension/.npmignore b/wallets/owallet-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/owallet-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/owallet-extension/.npmrc b/wallets/owallet-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/owallet-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/owallet-extension/.prettierrc.json b/wallets/owallet-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/owallet-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/owallet-extension/CHANGELOG.md b/wallets/owallet-extension/CHANGELOG.md new file mode 100644 index 000000000..3a6dffabf --- /dev/null +++ b/wallets/owallet-extension/CHANGELOG.md @@ -0,0 +1,72 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.12.1...@cosmos-kit/owallet-extension@2.12.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + + + + + +## [2.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.12.0...@cosmos-kit/owallet-extension@2.12.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + + + + + +# [2.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.11.0...@cosmos-kit/owallet-extension@2.12.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.10.0...@cosmos-kit/owallet-extension@2.11.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.9.0...@cosmos-kit/owallet-extension@2.10.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.8.3...@cosmos-kit/owallet-extension@2.9.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + + + + + +## [2.8.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.8.2...@cosmos-kit/owallet-extension@2.8.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + +## [2.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.8.1...@cosmos-kit/owallet-extension@2.8.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + +## [2.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.8.0...@cosmos-kit/owallet-extension@2.8.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet-extension@2.7.10...@cosmos-kit/owallet-extension@2.8.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension + +## 2.7.10 (2024-03-07) + +**Note:** Version bump only for package @cosmos-kit/owallet-extension diff --git a/wallets/owallet-extension/LICENSE b/wallets/owallet-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/owallet-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/owallet-extension/README.md b/wallets/owallet-extension/README.md new file mode 100644 index 000000000..bb638983a --- /dev/null +++ b/wallets/owallet-extension/README.md @@ -0,0 +1,39 @@ +# @cosmos-kit/owallet-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/owallet-extension is the OWallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/owallet-extension/index.ts b/wallets/owallet-extension/index.ts new file mode 100644 index 000000000..e31be21f6 --- /dev/null +++ b/wallets/owallet-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development. +export * from './src'; diff --git a/wallets/owallet-extension/package.json b/wallets/owallet-extension/package.json new file mode 100644 index 000000000..cc5d9acd5 --- /dev/null +++ b/wallets/owallet-extension/package.json @@ -0,0 +1,83 @@ +{ + "name": "@cosmos-kit/owallet-extension", + "version": "2.12.2", + "description": "cosmos-kit wallet connector", + "author": "defi@orai.io", + "contributors": [ + { + "name": "Toan Dang" + }, + { + "name": "Tu Pham " + }, + { + "name": "Son Lai" + }, + { + "name": "Hau Nguyen" + }, + { + "name": "Tu Chu" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "owallet", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1", + "@keplr-wallet/types": "^0.12.90" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/owallet-extension/src/config.ts b/wallets/owallet-extension/src/config.ts new file mode 100644 index 000000000..5cdbea552 --- /dev/null +++ b/wallets/owallet-extension/src/config.ts @@ -0,0 +1,212 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + osmosis: { + rpc: ['https://rpc-osmosis.keplr.app/'], + rest: ['https://lcd-osmosis.keplr.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.keplr.app'], + rest: ['https://lcd-cosmoshub.keplr.app'], + }, + oraichain: { + rpc: ['https://rpc.orai.io'], + rest: ['https://lcd.orai.io'], + }, + terra: { + rpc: ['https://rpc-columbus.keplr.app'], + rest: ['https://lcd-columbus.keplr.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.keplr.app'], + rest: ['https://lcd-secret.keplr.app'], + }, + akash: { + rpc: ['https://rpc-akash.keplr.app'], + rest: ['https://lcd-akash.keplr.app'], + }, + regen: { + rpc: ['https://rpc-regen.keplr.app'], + rest: ['https://lcd-regen.keplr.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.keplr.app'], + rest: ['https://lcd-sentinel.keplr.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.keplr.app'], + rest: ['https://lcd-persistence.keplr.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.keplr.app'], + rest: ['https://lcd-iris.keplr.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.keplr.app/'], + rest: ['https://lcd-crypto-org.keplr.app/'], + }, + starname: { + rpc: ['https://rpc-iov.keplr.app'], + rest: ['https://lcd-iov.keplr.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.keplr.app'], + rest: ['https://lcd-emoney.keplr.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.keplr.app'], + rest: ['https://lcd-microtick.keplr.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.keplr.app'], + rest: ['https://lcd-impacthub.keplr.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.keplr.app'], + rest: ['https://lcd-sommelier.keplr.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.keplr.app/'], + rest: ['https://lcd-evmos.keplr.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.keplr.app'], + rest: ['https://lcd-kava.keplr.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/owallet-extension/src/constant.ts b/wallets/owallet-extension/src/constant.ts new file mode 100644 index 000000000..541cbbf2a --- /dev/null +++ b/wallets/owallet-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/owallet-extension/src/extension/chain-wallet.ts b/wallets/owallet-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..8208cfd40 --- /dev/null +++ b/wallets/owallet-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainOwalletExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/owallet-extension/src/extension/client.ts b/wallets/owallet-extension/src/extension/client.ts new file mode 100644 index 000000000..08347991c --- /dev/null +++ b/wallets/owallet-extension/src/extension/client.ts @@ -0,0 +1,191 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { OfflineAminoSigner, StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + SuggestToken, + WalletAccount, + WalletClient, +} from '@cosmos-kit/core'; +import { BroadcastMode, Keplr } from '@keplr-wallet/types'; +import Long from 'long'; + +export class OwalletClient implements WalletClient { + readonly client: Keplr; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Keplr) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress, viewingKey } of tokens) { + await this.client.suggestToken(chainId, contractAddress, viewingKey); + } + } + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string): Promise { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + isNanoLedger: key.isNanoLedger, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string): OfflineAminoSigner { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signAmino: async (signerAddress, signDoc) => { + return this.signAmino( + chainId, + signerAddress, + signDoc, + this.defaultSignOptions + ); + }, + }; + // return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string): OfflineDirectSigner { + return { + getAccounts: async () => { + return [await this.getAccount(chainId)]; + }, + signDirect: async (signerAddress, signDoc) => { + const resp = await this.signDirect( + chainId, + signerAddress, + signDoc, + this.defaultSignOptions + ); + return { + ...resp, + signed: { + ...resp.signed, + accountNumber: BigInt(resp.signed.accountNumber.toString()), + }, + }; + }, + }; + // return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + const resp = await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + return { + ...resp, + signed: { + ...resp.signed, + accountNumber: BigInt(resp.signed.accountNumber.toString()), + }, + }; + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/owallet-extension/src/extension/index.ts b/wallets/owallet-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/owallet-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/owallet-extension/src/extension/main-wallet.ts b/wallets/owallet-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..cf5fa1627 --- /dev/null +++ b/wallets/owallet-extension/src/extension/main-wallet.ts @@ -0,0 +1,26 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainOwalletExtension } from './chain-wallet'; +import { OwalletClient } from './client'; +import { getOWalletFromExtension } from './utils'; + +export class OwalletExtensionWallet extends MainWalletBase { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainOwalletExtension); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient() { + this.initingClient(); + try { + const owallet = await getOWalletFromExtension(); + this.initClientDone(owallet ? new OwalletClient(owallet) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/owallet-extension/src/extension/registry.ts b/wallets/owallet-extension/src/extension/registry.ts new file mode 100644 index 000000000..e228b8837 --- /dev/null +++ b/wallets/owallet-extension/src/extension/registry.ts @@ -0,0 +1,37 @@ +import { Wallet } from '@cosmos-kit/core'; +import { Window as OWalletWindow } from '@keplr-wallet/types'; + +import { ICON } from '../constant'; + +export const owalletExtensionInfo: Wallet = { + name: 'owallet-extension', + prettyName: 'OWallet', + logo: ICON, + mode: 'extension', + // In the Owallet Mobile in-app browser, Owallet is available in window.owallet, + // similar to the extension on a desktop browser. For this reason, we must + // check what mode the window.owallet client is in once it's available. + mobileDisabled: () => + !( + typeof document !== 'undefined' && + document.readyState === 'complete' && + //@ts-ignore + (window as OWalletWindow).owallet && + //@ts-ignore + (window as OWalletWindow).owallet.mode === 'mobile-web' + ), + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['keplr_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chromewebstore.google.com/detail/owallet/hhejbopdnpbjgomhpmegemnjogflenga', + }, + { + link: 'https://owallet.dev', + }, + ], +}; diff --git a/wallets/owallet-extension/src/extension/utils.ts b/wallets/owallet-extension/src/extension/utils.ts new file mode 100644 index 000000000..bdc534607 --- /dev/null +++ b/wallets/owallet-extension/src/extension/utils.ts @@ -0,0 +1,44 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; +import { Keplr, Window as OWalletWindow } from '@keplr-wallet/types'; + +export const getOWalletFromExtension: () => Promise< + Keplr | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + //@ts-ignore + const owallet = (window as OWalletWindow).owallet; + + if (owallet) { + return owallet; + } + + if (document.readyState === 'complete') { + if (owallet) { + return owallet; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + //@ts-ignore + const owallet = (window as OWalletWindow).owallet; + if (owallet) { + resolve(owallet); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/owallet-extension/src/index.ts b/wallets/owallet-extension/src/index.ts new file mode 100644 index 000000000..20d28774f --- /dev/null +++ b/wallets/owallet-extension/src/index.ts @@ -0,0 +1,4 @@ +export * from './config'; +export * from './extension'; +export * from './extension/client'; +export * from './owallet'; diff --git a/wallets/owallet-extension/src/owallet.ts b/wallets/owallet-extension/src/owallet.ts new file mode 100644 index 000000000..adb6acac7 --- /dev/null +++ b/wallets/owallet-extension/src/owallet.ts @@ -0,0 +1,9 @@ +import { preferredEndpoints } from './config'; +import { owalletExtensionInfo, OwalletExtensionWallet } from './extension'; + +const owalletExtension = new OwalletExtensionWallet( + owalletExtensionInfo, + preferredEndpoints +); + +export const wallets = [owalletExtension]; diff --git a/wallets/owallet-extension/tsconfig.json b/wallets/owallet-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/owallet-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/owallet/.editorconfig b/wallets/owallet/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/owallet/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/owallet/.eslintignore b/wallets/owallet/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/owallet/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/owallet/.eslintrc.json b/wallets/owallet/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/owallet/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/owallet/.gitignore b/wallets/owallet/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/owallet/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/owallet/.npmignore b/wallets/owallet/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/owallet/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/owallet/.npmrc b/wallets/owallet/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/owallet/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/owallet/.prettierrc.json b/wallets/owallet/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/owallet/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/owallet/CHANGELOG.md b/wallets/owallet/CHANGELOG.md new file mode 100644 index 000000000..08e24d59d --- /dev/null +++ b/wallets/owallet/CHANGELOG.md @@ -0,0 +1,72 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.11.1...@cosmos-kit/owallet@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/owallet + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.11.0...@cosmos-kit/owallet@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/owallet + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.10.0...@cosmos-kit/owallet@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/owallet + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.9.0...@cosmos-kit/owallet@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/owallet + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.8.0...@cosmos-kit/owallet@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/owallet + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.7.3...@cosmos-kit/owallet@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/owallet + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.7.2...@cosmos-kit/owallet@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/owallet + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.7.1...@cosmos-kit/owallet@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/owallet + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.7.0...@cosmos-kit/owallet@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/owallet + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/owallet@2.6.10...@cosmos-kit/owallet@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/owallet + +## 2.6.10 (2024-03-07) + +**Note:** Version bump only for package @cosmos-kit/owallet diff --git a/wallets/owallet/LICENSE b/wallets/owallet/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/owallet/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/owallet/README.md b/wallets/owallet/README.md new file mode 100644 index 000000000..e51a315e7 --- /dev/null +++ b/wallets/owallet/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/owallet + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/owallet is the OWallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/owallet/index.ts b/wallets/owallet/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/owallet/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/owallet/package.json b/wallets/owallet/package.json new file mode 100644 index 000000000..f3f554077 --- /dev/null +++ b/wallets/owallet/package.json @@ -0,0 +1,71 @@ +{ + "name": "@cosmos-kit/owallet", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "defi@orai.io", + "contributors": [ + { + "name": "Toan Dang" + }, + { + "name": "Tu Pham " + }, + { + "name": "Son Lai" + }, + { + "name": "Hau Nguyen" + }, + { + "name": "Tu Chu" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "owallet", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/owallet-extension": "^2.12.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/owallet/src/index.ts b/wallets/owallet/src/index.ts new file mode 100644 index 000000000..b1e221777 --- /dev/null +++ b/wallets/owallet/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/owallet-extension'; + +export const wallets = [...ext]; diff --git a/wallets/owallet/tsconfig.json b/wallets/owallet/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/owallet/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/shell-extension/.editorconfig b/wallets/shell-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/shell-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/shell-extension/.eslintignore b/wallets/shell-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/shell-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/shell-extension/.eslintrc.json b/wallets/shell-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/shell-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/shell-extension/.gitignore b/wallets/shell-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/shell-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/shell-extension/.npmignore b/wallets/shell-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/shell-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/shell-extension/.npmrc b/wallets/shell-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/shell-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/shell-extension/.prettierrc.json b/wallets/shell-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/shell-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/shell-extension/CHANGELOG.md b/wallets/shell-extension/CHANGELOG.md new file mode 100644 index 000000000..846e764ac --- /dev/null +++ b/wallets/shell-extension/CHANGELOG.md @@ -0,0 +1,895 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.11.1...@cosmos-kit/shell-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.11.0...@cosmos-kit/shell-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.10.0...@cosmos-kit/shell-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.9.0...@cosmos-kit/shell-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.8.0...@cosmos-kit/shell-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.7.3...@cosmos-kit/shell-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.7.2...@cosmos-kit/shell-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.7.1...@cosmos-kit/shell-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.7.0...@cosmos-kit/shell-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.9...@cosmos-kit/shell-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.8...@cosmos-kit/shell-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.7...@cosmos-kit/shell-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.6...@cosmos-kit/shell-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.5...@cosmos-kit/shell-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.4...@cosmos-kit/shell-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.3...@cosmos-kit/shell-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.2...@cosmos-kit/shell-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.1...@cosmos-kit/shell-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.6.0...@cosmos-kit/shell-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.5.4...@cosmos-kit/shell-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.5.3...@cosmos-kit/shell-extension@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.5.2...@cosmos-kit/shell-extension@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.5.1...@cosmos-kit/shell-extension@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.5.0...@cosmos-kit/shell-extension@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.11...@cosmos-kit/shell-extension@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.10...@cosmos-kit/shell-extension@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.9...@cosmos-kit/shell-extension@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.8...@cosmos-kit/shell-extension@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.7...@cosmos-kit/shell-extension@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.6...@cosmos-kit/shell-extension@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.5...@cosmos-kit/shell-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.4...@cosmos-kit/shell-extension@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.3...@cosmos-kit/shell-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.2...@cosmos-kit/shell-extension@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.1...@cosmos-kit/shell-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.4.0...@cosmos-kit/shell-extension@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.12...@cosmos-kit/shell-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.11...@cosmos-kit/shell-extension@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.10...@cosmos-kit/shell-extension@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.9...@cosmos-kit/shell-extension@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.8...@cosmos-kit/shell-extension@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.7...@cosmos-kit/shell-extension@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.6...@cosmos-kit/shell-extension@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.5...@cosmos-kit/shell-extension@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.4...@cosmos-kit/shell-extension@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.3...@cosmos-kit/shell-extension@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.2...@cosmos-kit/shell-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.1...@cosmos-kit/shell-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.3.0...@cosmos-kit/shell-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.2.1...@cosmos-kit/shell-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.2.0...@cosmos-kit/shell-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.12...@cosmos-kit/shell-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.11...@cosmos-kit/shell-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.10...@cosmos-kit/shell-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.9...@cosmos-kit/shell-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.8...@cosmos-kit/shell-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.7...@cosmos-kit/shell-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.6...@cosmos-kit/shell-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.5...@cosmos-kit/shell-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.4...@cosmos-kit/shell-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.3...@cosmos-kit/shell-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.2...@cosmos-kit/shell-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.1...@cosmos-kit/shell-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.1.0...@cosmos-kit/shell-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.5...@cosmos-kit/shell-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.4...@cosmos-kit/shell-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.3...@cosmos-kit/shell-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.2...@cosmos-kit/shell-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1...@cosmos-kit/shell-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.6...@cosmos-kit/shell-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.5...@cosmos-kit/shell-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.4...@cosmos-kit/shell-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.3...@cosmos-kit/shell-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.2...@cosmos-kit/shell-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.1...@cosmos-kit/shell-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@2.0.1-beta.0...@cosmos-kit/shell-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@1.0.0...@cosmos-kit/shell-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@0.2.5-beta.3...@cosmos-kit/shell-extension@1.0.0) (2023-07-05) + +### Bug Fixes + +- mismatch version ([fcdf7ab](https://github.com/cosmology-tech/cosmos-kit/commit/fcdf7abdeee579ff6bff72af5fa88f175f75f470)) + +## [0.2.5-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@0.2.5-beta.2...@cosmos-kit/shell-extension@0.2.5-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [0.2.5-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@0.2.5-beta.1...@cosmos-kit/shell-extension@0.2.5-beta.2) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [0.2.5-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@0.2.5-beta.0...@cosmos-kit/shell-extension@0.2.5-beta.1) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +## [0.2.5-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell-extension@0.2.4...@cosmos-kit/shell-extension@0.2.5-beta.0) (2023-06-30) + +### Bug Fixes + +- docs and merge conflicts ([090bdf1](https://github.com/cosmology-tech/cosmos-kit/commit/090bdf1d98249d50bbded69af7d4689bce674af3)) + +## 0.2.4 (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell-extension + +# [0.36.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.9...@cosmos-kit/keplr-extension@0.36.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.35.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.8...@cosmos-kit/keplr-extension@0.35.9) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.7...@cosmos-kit/keplr-extension@0.35.8) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.6...@cosmos-kit/keplr-extension@0.35.7) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.5...@cosmos-kit/keplr-extension@0.35.6) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.4...@cosmos-kit/keplr-extension@0.35.5) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.3...@cosmos-kit/keplr-extension@0.35.4) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.2...@cosmos-kit/keplr-extension@0.35.3) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.1...@cosmos-kit/keplr-extension@0.35.2) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.35.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.35.0...@cosmos-kit/keplr-extension@0.35.1) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +# [0.35.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.34.1...@cosmos-kit/keplr-extension@0.35.0) (2023-05-15) + +### Features + +- update vectis extension and support for smart contract key ([89462d2](https://github.com/cosmology-tech/cosmos-kit/commit/89462d2f876a9dd955fb1dcba82d747463d63737)) + +## [0.34.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.34.0...@cosmos-kit/keplr-extension@0.34.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +# [0.34.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.21...@cosmos-kit/keplr-extension@0.34.0) (2023-04-28) + +### Features + +- :sparkles: implement keplr ext suggest token ([00d9ddf](https://github.com/cosmology-tech/cosmos-kit/commit/00d9ddfad8748734c6f04c2e38370000acaf243f)) +- :sparkles: improve keplr suggest token ([7e23de5](https://github.com/cosmology-tech/cosmos-kit/commit/7e23de519be2b032fa61539c84cdc4a2df5907f5)) +- :sparkles: improve suggest token types ([dc06b79](https://github.com/cosmology-tech/cosmos-kit/commit/dc06b79d56a5153b2d5f955d919fffc8232fdcd4)) + +## [0.33.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.20...@cosmos-kit/keplr-extension@0.33.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.19...@cosmos-kit/keplr-extension@0.33.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.18...@cosmos-kit/keplr-extension@0.33.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.17...@cosmos-kit/keplr-extension@0.33.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.16...@cosmos-kit/keplr-extension@0.33.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.15...@cosmos-kit/keplr-extension@0.33.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.14...@cosmos-kit/keplr-extension@0.33.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.13...@cosmos-kit/keplr-extension@0.33.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.12...@cosmos-kit/keplr-extension@0.33.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.11...@cosmos-kit/keplr-extension@0.33.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.10...@cosmos-kit/keplr-extension@0.33.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.9...@cosmos-kit/keplr-extension@0.33.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.8...@cosmos-kit/keplr-extension@0.33.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.7...@cosmos-kit/keplr-extension@0.33.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.6...@cosmos-kit/keplr-extension@0.33.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.5...@cosmos-kit/keplr-extension@0.33.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.4...@cosmos-kit/keplr-extension@0.33.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.3...@cosmos-kit/keplr-extension@0.33.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.2...@cosmos-kit/keplr-extension@0.33.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.1...@cosmos-kit/keplr-extension@0.33.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.33.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.33.0...@cosmos-kit/keplr-extension@0.33.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +# [0.33.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.33...@cosmos-kit/keplr-extension@0.33.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.32.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.32...@cosmos-kit/keplr-extension@0.32.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.31...@cosmos-kit/keplr-extension@0.32.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.30...@cosmos-kit/keplr-extension@0.32.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.29...@cosmos-kit/keplr-extension@0.32.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.28...@cosmos-kit/keplr-extension@0.32.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.27...@cosmos-kit/keplr-extension@0.32.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.26...@cosmos-kit/keplr-extension@0.32.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.25...@cosmos-kit/keplr-extension@0.32.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.24...@cosmos-kit/keplr-extension@0.32.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.23...@cosmos-kit/keplr-extension@0.32.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.21...@cosmos-kit/keplr-extension@0.32.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.20...@cosmos-kit/keplr-extension@0.32.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.19...@cosmos-kit/keplr-extension@0.32.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.18...@cosmos-kit/keplr-extension@0.32.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.17...@cosmos-kit/keplr-extension@0.32.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.16...@cosmos-kit/keplr-extension@0.32.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr-extension@0.32.15...@cosmos-kit/keplr-extension@0.32.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## 0.32.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/keplr-extension + +## [0.32.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.13...@cosmos-kit/keplr@0.32.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.12...@cosmos-kit/keplr@0.32.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.11...@cosmos-kit/keplr@0.32.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.10...@cosmos-kit/keplr@0.32.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.9...@cosmos-kit/keplr@0.32.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.8...@cosmos-kit/keplr@0.32.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.7...@cosmos-kit/keplr@0.32.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.6...@cosmos-kit/keplr@0.32.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.5...@cosmos-kit/keplr@0.32.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.4...@cosmos-kit/keplr@0.32.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.3...@cosmos-kit/keplr@0.32.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.2...@cosmos-kit/keplr@0.32.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.1...@cosmos-kit/keplr@0.32.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.0...@cosmos-kit/keplr@0.32.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.31.0...@cosmos-kit/keplr@0.32.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.2...@cosmos-kit/keplr@0.31.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.1...@cosmos-kit/keplr@0.30.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.0...@cosmos-kit/keplr@0.30.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.5...@cosmos-kit/keplr@0.30.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.4...@cosmos-kit/keplr@0.29.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.3...@cosmos-kit/keplr@0.29.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.2...@cosmos-kit/keplr@0.29.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.1...@cosmos-kit/keplr@0.29.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.0...@cosmos-kit/keplr@0.29.1) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.28.1...@cosmos-kit/keplr@0.29.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.28.0...@cosmos-kit/keplr@0.28.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.27.1...@cosmos-kit/keplr@0.28.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.27.0...@cosmos-kit/keplr@0.27.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.26.1...@cosmos-kit/keplr@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.26.0...@cosmos-kit/keplr@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.25.0...@cosmos-kit/keplr@0.26.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.24.0...@cosmos-kit/keplr@0.25.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.23.0...@cosmos-kit/keplr@0.24.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.2...@cosmos-kit/keplr@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.1...@cosmos-kit/keplr@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.0...@cosmos-kit/keplr@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.21.0...@cosmos-kit/keplr@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.2...@cosmos-kit/keplr@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.1...@cosmos-kit/keplr@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.0...@cosmos-kit/keplr@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.7...@cosmos-kit/keplr@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.6...@cosmos-kit/keplr@0.19.7) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.5...@cosmos-kit/keplr@0.19.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.4...@cosmos-kit/keplr@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.3...@cosmos-kit/keplr@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.2...@cosmos-kit/keplr@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.1...@cosmos-kit/keplr@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.0...@cosmos-kit/keplr@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.18.1...@cosmos-kit/keplr@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.18.0...@cosmos-kit/keplr@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.17.1...@cosmos-kit/keplr@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.17.0...@cosmos-kit/keplr@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.2...@cosmos-kit/keplr@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.1...@cosmos-kit/keplr@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.0...@cosmos-kit/keplr@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.15.0...@cosmos-kit/keplr@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.14.0...@cosmos-kit/keplr@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.13.2...@cosmos-kit/keplr@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.3...@cosmos-kit/keplr@0.13.2) (2022-09-22) + +## 0.12.7 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.2...@cosmos-kit/keplr@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.11.0...@cosmos-kit/keplr@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.0...@cosmos-kit/keplr@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# 0.12.0 (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/shell-extension/LICENSE b/wallets/shell-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/shell-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/shell-extension/README.md b/wallets/shell-extension/README.md new file mode 100644 index 000000000..f66b49194 --- /dev/null +++ b/wallets/shell-extension/README.md @@ -0,0 +1,38 @@ +# @cosmos-kit/shell-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/shell is the Shell integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Get everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface ⚛️ +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +* [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. \ No newline at end of file diff --git a/wallets/shell-extension/index.ts b/wallets/shell-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/shell-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/shell-extension/package.json b/wallets/shell-extension/package.json new file mode 100644 index 000000000..927589200 --- /dev/null +++ b/wallets/shell-extension/package.json @@ -0,0 +1,82 @@ +{ + "name": "@cosmos-kit/shell-extension", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "keplr", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/shell-extension/src/config.ts b/wallets/shell-extension/src/config.ts new file mode 100644 index 000000000..003d8444e --- /dev/null +++ b/wallets/shell-extension/src/config.ts @@ -0,0 +1,212 @@ +import { EndpointOptions } from '@cosmos-kit/core'; + +export const preferredEndpoints: EndpointOptions['endpoints'] = { + seitestnet: { + rpc: ['https://rpc.atlantic-2.seinetwork.io/'], + rest: ['https://rest.atlantic-2.seinetwork.io/'], + }, + osmosis: { + rpc: ['https://rpc-osmosis.keplr.app/'], + rest: ['https://lcd-osmosis.keplr.app/'], + }, + osmosistestnet: { + rpc: ['https://rpc-test.osmosis.zone/'], + rest: ['https://lcd-test.osmosis.zone/'], + }, + cosmoshub: { + rpc: ['https://rpc-cosmoshub.keplr.app'], + rest: ['https://lcd-cosmoshub.keplr.app'], + }, + terra: { + rpc: ['https://rpc-columbus.keplr.app'], + rest: ['https://lcd-columbus.keplr.app'], + }, + secretnetwork: { + rpc: ['https://rpc-secret.keplr.app'], + rest: ['https://lcd-secret.keplr.app'], + }, + akash: { + rpc: ['https://rpc-akash.keplr.app'], + rest: ['https://lcd-akash.keplr.app'], + }, + regen: { + rpc: ['https://rpc-regen.keplr.app'], + rest: ['https://lcd-regen.keplr.app'], + }, + sentinel: { + rpc: ['https://rpc-sentinel.keplr.app'], + rest: ['https://lcd-sentinel.keplr.app'], + }, + persistence: { + rpc: ['https://rpc-persistence.keplr.app'], + rest: ['https://lcd-persistence.keplr.app'], + }, + irisnet: { + rpc: ['https://rpc-iris.keplr.app'], + rest: ['https://lcd-iris.keplr.app'], + }, + cryptoorgchain: { + rpc: ['https://rpc-crypto-org.keplr.app/'], + rest: ['https://lcd-crypto-org.keplr.app/'], + }, + starname: { + rpc: ['https://rpc-iov.keplr.app'], + rest: ['https://lcd-iov.keplr.app'], + }, + emoney: { + rpc: ['https://rpc-emoney.keplr.app'], + rest: ['https://lcd-emoney.keplr.app'], + }, + juno: { + rpc: ['https://rpc-juno.itastakers.com'], + rest: ['https://lcd-juno.itastakers.com'], + }, + microtick: { + rpc: ['https://rpc-microtick.keplr.app'], + rest: ['https://lcd-microtick.keplr.app'], + }, + likecoin: { + rpc: ['https://mainnet-node.like.co/rpc'], + rest: ['https://mainnet-node.like.co'], + }, + impacthub: { + rpc: ['https://rpc-impacthub.keplr.app'], + rest: ['https://lcd-impacthub.keplr.app'], + }, + bitcanna: { + rpc: ['https://rpc.bitcanna.io'], + rest: ['https://lcd.bitcanna.io'], + }, + bitsong: { + rpc: ['https://rpc.explorebitsong.com'], + rest: ['https://lcd.explorebitsong.com'], + }, + kichain: { + rpc: ['https://rpc-mainnet.blockchain.ki'], + rest: ['https://api-mainnet.blockchain.ki'], + }, + panacea: { + rpc: ['https://rpc.gopanacea.org'], + rest: ['https://api.gopanacea.org'], + }, + bostrom: { + rpc: ['https://rpc.bostrom.cybernode.ai'], + rest: ['https://lcd.bostrom.cybernode.ai'], + }, + comdex: { + rpc: ['https://rpc.comdex.one'], + rest: ['https://rest.comdex.one'], + }, + cheqd: { + rpc: ['https://rpc.cheqd.net'], + rest: ['https://api.cheqd.net'], + }, + stargaze: { + rpc: ['https://rpc.stargaze-apis.com'], + rest: ['https://rest.stargaze-apis.com'], + }, + chihuahua: { + rpc: ['https://rpc.chihuahua.wtf'], + rest: ['https://api.chihuahua.wtf'], + }, + lumnetwork: { + rpc: ['https://node0.mainnet.lum.network/rpc'], + rest: ['https://node0.mainnet.lum.network/rest'], + }, + vidulum: { + rpc: ['https://mainnet-rpc.vidulum.app'], + rest: ['https://mainnet-lcd.vidulum.app'], + }, + desmos: { + rpc: ['https://rpc.mainnet.desmos.network'], + rest: ['https://api.mainnet.desmos.network'], + }, + dig: { + rpc: ['https://rpc-1-dig.notional.ventures'], + rest: ['https://api-1-dig.notional.ventures'], + }, + sommelier: { + rpc: ['https://rpc-sommelier.keplr.app'], + rest: ['https://lcd-sommelier.keplr.app'], + }, + sifchain: { + rpc: ['https://rpc.sifchain.finance'], + rest: ['https://api-int.sifchain.finance'], + }, + bandchain: { + rpc: ['https://rpc.laozi3.bandchain.org'], + rest: ['https://laozi1.bandchain.org/api'], + }, + konstellation: { + rpc: ['https://node1.konstellation.tech:26657'], + rest: ['https://node1.konstellation.tech:1318'], + }, + umee: { + rpc: ['https://rpc.aphrodite.main.network.umee.cc'], + rest: ['https://api.aphrodite.main.network.umee.cc'], + }, + gravitybridge: { + rpc: ['https://gravitychain.io:26657'], + rest: ['https://gravitychain.io:1317'], + }, + decentr: { + rpc: ['https://poseidon.mainnet.decentr.xyz'], + rest: ['https://rest.mainnet.decentr.xyz'], + }, + shentu: { + rpc: ['https://shenturpc.certikpowered.info'], + rest: ['https://azuredragon.noopsbycertik.com'], + }, + carbon: { + rpc: ['https://tm-api.carbon.network'], + rest: ['https://api.carbon.network'], + }, + injective: { + rpc: ['https://public.api.injective.network'], + rest: ['https://public.lcd.injective.network'], + }, + cerberus: { + rpc: ['https://rpc.cerberus.zone:26657'], + rest: ['https://api.cerberus.zone:1317'], + }, + fetchhub: { + rpc: ['https://rpc-fetchhub.fetch.ai:443'], + rest: ['https://rest-fetchhub.fetch.ai'], + }, + assetmantle: { + rpc: ['https://rpc.assetmantle.one/'], + rest: ['https://rest.assetmantle.one/'], + }, + provenance: { + rpc: ['https://rpc.provenance.io/'], + rest: ['https://api.provenance.io'], + }, + galaxy: { + rpc: ['https://rpc.galaxychain.zone'], + rest: ['https://rest.galaxychain.zone'], + }, + meme: { + rpc: ['https://rpc-meme-1.meme.sx:443'], + rest: ['https://api-meme-1.meme.sx:443'], + }, + evmos: { + rpc: ['https://rpc-evmos.keplr.app/'], + rest: ['https://lcd-evmos.keplr.app/'], + }, + terra2: { + rpc: ['https://rpc.terrav2.ccvalidators.com/'], + rest: ['https://phoenix-lcd.terra.dev/'], + }, + rizon: { + rpc: ['https://rpcapi.rizon.world/'], + rest: ['https://restapi.rizon.world/'], + }, + kava: { + rpc: ['https://rpc-kava.keplr.app'], + rest: ['https://lcd-kava.keplr.app'], + }, + genesisl1: { + rpc: ['https://26657.genesisl1.org'], + rest: ['https://api.genesisl1.org'], + }, +}; diff --git a/wallets/shell-extension/src/constant.ts b/wallets/shell-extension/src/constant.ts new file mode 100644 index 000000000..c6d1ad4c9 --- /dev/null +++ b/wallets/shell-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/shell-extension/src/extension/chain-wallet.ts b/wallets/shell-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..8430ef35c --- /dev/null +++ b/wallets/shell-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainShellExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/shell-extension/src/extension/client.ts b/wallets/shell-extension/src/extension/client.ts new file mode 100644 index 000000000..df9e080fe --- /dev/null +++ b/wallets/shell-extension/src/extension/client.ts @@ -0,0 +1,151 @@ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + SuggestToken, + WalletClient, +} from '@cosmos-kit/core'; +import { BroadcastMode } from '@keplr-wallet/types'; + +import { Shell } from './types'; +import Long from 'long'; + +export class ShellClient implements WalletClient { + readonly client: Shell; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: Shell) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async suggestToken({ chainId, tokens, type }: SuggestToken) { + if (type === 'cw20') { + for (const { contractAddress, viewingKey } of tokens) { + await this.client.suggestToken(chainId, contractAddress, viewingKey); + } + } + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async addChain(chainInfo: ChainRecord) { + const suggestChain = chainRegistryChainToKeplr( + chainInfo.chain, + chainInfo.assetList ? [chainInfo.assetList] : [] + ); + + if (chainInfo.preferredEndpoints?.rest?.[0]) { + (suggestChain.rest as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rest?.[0]; + } + + if (chainInfo.preferredEndpoints?.rpc?.[0]) { + (suggestChain.rpc as string | ExtendedHttpEndpoint) = + chainInfo.preferredEndpoints?.rpc?.[0]; + } + + await this.client.experimentalSuggestChain(suggestChain); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/shell-extension/src/extension/index.ts b/wallets/shell-extension/src/extension/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/shell-extension/src/extension/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/shell-extension/src/extension/main-wallet.ts b/wallets/shell-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..fe6c2efb9 --- /dev/null +++ b/wallets/shell-extension/src/extension/main-wallet.ts @@ -0,0 +1,26 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainShellExtension } from './chain-wallet'; +import { ShellClient } from './client'; +import { getShellFromExtension } from './utils'; + +export class ShellExtensionWallet extends MainWalletBase { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainShellExtension); + this.preferredEndpoints = preferredEndpoints; + } + + async initClient() { + this.initingClient(); + try { + const shell = await getShellFromExtension(); + this.initClientDone(shell ? new ShellClient(shell) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/shell-extension/src/extension/registry.ts b/wallets/shell-extension/src/extension/registry.ts new file mode 100644 index 000000000..dfc52ba78 --- /dev/null +++ b/wallets/shell-extension/src/extension/registry.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { ICON } from '../constant'; + +export const shellExtensionInfo: Wallet = { + name: 'shell-extension', + prettyName: 'Shell', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + connectEventNamesOnWindow: ['shell_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/shell-wallet/kbdcddcmgoplfockflacnnefaehaiocb', + }, + ], +}; diff --git a/wallets/shell-extension/src/extension/types.ts b/wallets/shell-extension/src/extension/types.ts new file mode 100644 index 000000000..7879cb721 --- /dev/null +++ b/wallets/shell-extension/src/extension/types.ts @@ -0,0 +1,152 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { BroadcastMode } from '@cosmos-kit/core'; +import type { ChainInfo, EthSignType } from '@keplr-wallet/types'; +import Long from 'long'; +// @ts-ignore +import { SecretUtils } from 'secretjs/types/enigmautils'; + +export interface Key { + readonly name: string; + readonly algo: string; + readonly pubKey: Uint8Array; + readonly address: Uint8Array; + readonly bech32Address: string; + readonly isNanoLedger: boolean; +} +export declare type ShellMode = + | 'core' + | 'extension' + | 'mobile-web' + | 'walletconnect'; +export interface ShellIntereactionOptions { + readonly sign?: ShellSignOptions; +} +export interface ShellSignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} +export interface Shell { + readonly version: string; + /** + * mode means that how Keplr is connected. + * If the connected Keplr is browser's extension, the mode should be "extension". + * If the connected Keplr is on the mobile app with the embeded web browser, the mode should be "mobile-web". + */ + readonly mode: ShellMode; + defaultOptions: ShellIntereactionOptions; + experimentalSuggestChain(chainInfo: ChainInfo): Promise; + enable(chainIds: string | string[]): Promise; + getKey(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: ShellSignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: ShellSignOptions + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + verifyArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array, + signature: StdSignature + ): Promise; + signEthereum( + chainId: string, + signer: string, + data: string | Uint8Array, + type: EthSignType + ): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto( + chainId: string + ): Promise; + suggestToken( + chainId: string, + contractAddress: string, + viewingKey?: string + ): Promise; + getSecret20ViewingKey( + chainId: string, + contractAddress: string + ): Promise; + getEnigmaUtils(chainId: string): SecretUtils; + getEnigmaPubKey(chainId: string): Promise; + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + /** + * Sign the sign doc with ethermint's EIP-712 format. + * The difference from signEthereum(..., EthSignType.EIP712) is that this api returns a new sign doc changed by the user's fee setting and the signature for that sign doc. + * Encoding tx to EIP-712 format should be done on the side using this api. + * Not compatible with cosmjs. + * The returned signature is (r | s | v) format which used in ethereum. + * v should be 27 or 28 which is used in the ethereum mainnet regardless of chain. + * @param chainId + * @param signer + * @param eip712 + * @param signDoc + * @param signOptions + */ + experimentalSignEIP712CosmosTx_v0( + chainId: string, + signer: string, + eip712: { + types: Record< + string, + | { + name: string; + type: string; + }[] + | undefined + >; + domain: Record; + primaryType: string; + }, + signDoc: StdSignDoc, + signOptions?: ShellSignOptions + ): Promise; +} diff --git a/wallets/shell-extension/src/extension/utils.ts b/wallets/shell-extension/src/extension/utils.ts new file mode 100644 index 000000000..13874b44b --- /dev/null +++ b/wallets/shell-extension/src/extension/utils.ts @@ -0,0 +1,60 @@ +import { OfflineAminoSigner } from '@cosmjs/amino'; +import { OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { ClientNotExistError } from '@cosmos-kit/core'; +// @ts-ignore +import { SecretUtils } from 'secretjs/types/enigmautils'; + +// import { Keplr, Window as KeplrWindow } from '@keplr-wallet/types'; +import { Shell } from './types'; + +export interface ShellWindow { + shellwallet?: Shell; + getOfflineSigner?: ( + chainId: string + ) => OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino?: (chainId: string) => OfflineAminoSigner; + getOfflineSignerAuto?: ( + chainId: string + ) => Promise; + getEnigmaUtils?: (chainId: string) => SecretUtils; +} + +export const getShellFromExtension: () => Promise< + Shell | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const shell = (window as ShellWindow).shellwallet; + + if (shell) { + return shell; + } + + if (document.readyState === 'complete') { + if (shell) { + return shell; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (shell) { + resolve(shell); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/shell-extension/src/index.ts b/wallets/shell-extension/src/index.ts new file mode 100644 index 000000000..e72e63a64 --- /dev/null +++ b/wallets/shell-extension/src/index.ts @@ -0,0 +1,3 @@ +export * from './extension'; +export * from './extension/client'; +export * from './shell'; diff --git a/wallets/shell-extension/src/shell.ts b/wallets/shell-extension/src/shell.ts new file mode 100644 index 000000000..8b226c9f5 --- /dev/null +++ b/wallets/shell-extension/src/shell.ts @@ -0,0 +1,9 @@ +import { preferredEndpoints } from './config'; +import { shellExtensionInfo, ShellExtensionWallet } from './extension'; + +const shellExtension = new ShellExtensionWallet( + shellExtensionInfo, + preferredEndpoints +); + +export const wallets = [shellExtension]; diff --git a/wallets/shell-extension/tsconfig.json b/wallets/shell-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/shell-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/shell/.editorconfig b/wallets/shell/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/shell/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/shell/.eslintignore b/wallets/shell/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/shell/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/shell/.eslintrc.json b/wallets/shell/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/shell/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/shell/.gitignore b/wallets/shell/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/shell/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/shell/.npmignore b/wallets/shell/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/shell/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/shell/.npmrc b/wallets/shell/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/shell/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/shell/.prettierrc.json b/wallets/shell/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/shell/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/shell/CHANGELOG.md b/wallets/shell/CHANGELOG.md new file mode 100644 index 000000000..a14eff1af --- /dev/null +++ b/wallets/shell/CHANGELOG.md @@ -0,0 +1,899 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.11.1...@cosmos-kit/shell@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/shell + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.11.0...@cosmos-kit/shell@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/shell + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.10.0...@cosmos-kit/shell@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/shell + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.9.0...@cosmos-kit/shell@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/shell + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.8.0...@cosmos-kit/shell@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/shell + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.7.3...@cosmos-kit/shell@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/shell + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.7.2...@cosmos-kit/shell@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.7.1...@cosmos-kit/shell@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.7.0...@cosmos-kit/shell@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.9...@cosmos-kit/shell@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.8...@cosmos-kit/shell@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.7...@cosmos-kit/shell@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.6...@cosmos-kit/shell@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.5...@cosmos-kit/shell@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.4...@cosmos-kit/shell@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.3...@cosmos-kit/shell@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.2...@cosmos-kit/shell@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.1...@cosmos-kit/shell@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.6.0...@cosmos-kit/shell@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.5.4...@cosmos-kit/shell@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.5.3...@cosmos-kit/shell@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.5.2...@cosmos-kit/shell@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.5.1...@cosmos-kit/shell@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.5.0...@cosmos-kit/shell@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.11...@cosmos-kit/shell@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.10...@cosmos-kit/shell@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.9...@cosmos-kit/shell@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.8...@cosmos-kit/shell@2.4.9) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.7...@cosmos-kit/shell@2.4.8) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.6...@cosmos-kit/shell@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.5...@cosmos-kit/shell@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.4...@cosmos-kit/shell@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.3...@cosmos-kit/shell@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.2...@cosmos-kit/shell@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.1...@cosmos-kit/shell@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.4.0...@cosmos-kit/shell@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.12...@cosmos-kit/shell@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.11...@cosmos-kit/shell@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.10...@cosmos-kit/shell@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.9...@cosmos-kit/shell@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.8...@cosmos-kit/shell@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.7...@cosmos-kit/shell@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.6...@cosmos-kit/shell@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.5...@cosmos-kit/shell@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.4...@cosmos-kit/shell@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.3...@cosmos-kit/shell@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.2...@cosmos-kit/shell@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.1...@cosmos-kit/shell@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.3.0...@cosmos-kit/shell@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.2.1...@cosmos-kit/shell@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.2.0...@cosmos-kit/shell@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.12...@cosmos-kit/shell@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.11...@cosmos-kit/shell@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.10...@cosmos-kit/shell@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.9...@cosmos-kit/shell@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.8...@cosmos-kit/shell@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.7...@cosmos-kit/shell@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.6...@cosmos-kit/shell@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.5...@cosmos-kit/shell@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.4...@cosmos-kit/shell@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.3...@cosmos-kit/shell@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.2...@cosmos-kit/shell@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.1...@cosmos-kit/shell@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.1.0...@cosmos-kit/shell@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.5...@cosmos-kit/shell@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.4...@cosmos-kit/shell@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.3...@cosmos-kit/shell@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.2...@cosmos-kit/shell@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1...@cosmos-kit/shell@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.6...@cosmos-kit/shell@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.5...@cosmos-kit/shell@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.4...@cosmos-kit/shell@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.3...@cosmos-kit/shell@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.2...@cosmos-kit/shell@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.1...@cosmos-kit/shell@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@2.0.1-beta.0...@cosmos-kit/shell@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@1.0.0...@cosmos-kit/shell@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/shell + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@0.2.5-beta.3...@cosmos-kit/shell@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [0.2.5-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@0.2.5-beta.2...@cosmos-kit/shell@0.2.5-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [0.2.5-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@0.2.5-beta.1...@cosmos-kit/shell@0.2.5-beta.2) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [0.2.5-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@0.2.5-beta.0...@cosmos-kit/shell@0.2.5-beta.1) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [0.2.5-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/shell@0.2.4...@cosmos-kit/shell@0.2.5-beta.0) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell + +## 0.2.4 (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/shell + +## [0.33.39](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.38...@cosmos-kit/keplr@0.33.39) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.37...@cosmos-kit/keplr@0.33.38) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.36...@cosmos-kit/keplr@0.33.37) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.35...@cosmos-kit/keplr@0.33.36) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.34...@cosmos-kit/keplr@0.33.35) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.33...@cosmos-kit/keplr@0.33.34) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.32...@cosmos-kit/keplr@0.33.33) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.31...@cosmos-kit/keplr@0.33.32) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.30...@cosmos-kit/keplr@0.33.31) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.29...@cosmos-kit/keplr@0.33.30) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.28...@cosmos-kit/keplr@0.33.29) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.27...@cosmos-kit/keplr@0.33.28) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.26...@cosmos-kit/keplr@0.33.27) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.25...@cosmos-kit/keplr@0.33.26) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.24...@cosmos-kit/keplr@0.33.25) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.23...@cosmos-kit/keplr@0.33.24) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.22...@cosmos-kit/keplr@0.33.23) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.21...@cosmos-kit/keplr@0.33.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.20...@cosmos-kit/keplr@0.33.21) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.19...@cosmos-kit/keplr@0.33.20) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.18...@cosmos-kit/keplr@0.33.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.17...@cosmos-kit/keplr@0.33.18) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.16...@cosmos-kit/keplr@0.33.17) (2023-04-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.15...@cosmos-kit/keplr@0.33.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.14...@cosmos-kit/keplr@0.33.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.13...@cosmos-kit/keplr@0.33.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.12...@cosmos-kit/keplr@0.33.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.11...@cosmos-kit/keplr@0.33.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.10...@cosmos-kit/keplr@0.33.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.9...@cosmos-kit/keplr@0.33.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.8...@cosmos-kit/keplr@0.33.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.7...@cosmos-kit/keplr@0.33.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.6...@cosmos-kit/keplr@0.33.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.5...@cosmos-kit/keplr@0.33.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.4...@cosmos-kit/keplr@0.33.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.3...@cosmos-kit/keplr@0.33.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.2...@cosmos-kit/keplr@0.33.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.1...@cosmos-kit/keplr@0.33.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.33.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.33.0...@cosmos-kit/keplr@0.33.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.33.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.33...@cosmos-kit/keplr@0.33.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.32.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.32...@cosmos-kit/keplr@0.32.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.31...@cosmos-kit/keplr@0.32.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.30...@cosmos-kit/keplr@0.32.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.29...@cosmos-kit/keplr@0.32.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.28...@cosmos-kit/keplr@0.32.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.27...@cosmos-kit/keplr@0.32.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.26...@cosmos-kit/keplr@0.32.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.25...@cosmos-kit/keplr@0.32.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.24...@cosmos-kit/keplr@0.32.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.23...@cosmos-kit/keplr@0.32.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.21...@cosmos-kit/keplr@0.32.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.20...@cosmos-kit/keplr@0.32.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.19...@cosmos-kit/keplr@0.32.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.18...@cosmos-kit/keplr@0.32.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.17...@cosmos-kit/keplr@0.32.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.16...@cosmos-kit/keplr@0.32.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.15...@cosmos-kit/keplr@0.32.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.14...@cosmos-kit/keplr@0.32.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.13...@cosmos-kit/keplr@0.32.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.12...@cosmos-kit/keplr@0.32.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.11...@cosmos-kit/keplr@0.32.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.10...@cosmos-kit/keplr@0.32.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.9...@cosmos-kit/keplr@0.32.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.8...@cosmos-kit/keplr@0.32.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.7...@cosmos-kit/keplr@0.32.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.6...@cosmos-kit/keplr@0.32.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.5...@cosmos-kit/keplr@0.32.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.4...@cosmos-kit/keplr@0.32.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.3...@cosmos-kit/keplr@0.32.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.2...@cosmos-kit/keplr@0.32.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.1...@cosmos-kit/keplr@0.32.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.32.0...@cosmos-kit/keplr@0.32.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.31.0...@cosmos-kit/keplr@0.32.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.2...@cosmos-kit/keplr@0.31.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.1...@cosmos-kit/keplr@0.30.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.30.0...@cosmos-kit/keplr@0.30.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.5...@cosmos-kit/keplr@0.30.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.4...@cosmos-kit/keplr@0.29.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.3...@cosmos-kit/keplr@0.29.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.2...@cosmos-kit/keplr@0.29.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.1...@cosmos-kit/keplr@0.29.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.29.0...@cosmos-kit/keplr@0.29.1) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.28.1...@cosmos-kit/keplr@0.29.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.28.0...@cosmos-kit/keplr@0.28.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.27.1...@cosmos-kit/keplr@0.28.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.27.0...@cosmos-kit/keplr@0.27.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.26.1...@cosmos-kit/keplr@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.26.0...@cosmos-kit/keplr@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.25.0...@cosmos-kit/keplr@0.26.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.24.0...@cosmos-kit/keplr@0.25.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.23.0...@cosmos-kit/keplr@0.24.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.2...@cosmos-kit/keplr@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.1...@cosmos-kit/keplr@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.22.0...@cosmos-kit/keplr@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.21.0...@cosmos-kit/keplr@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.2...@cosmos-kit/keplr@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.1...@cosmos-kit/keplr@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.20.0...@cosmos-kit/keplr@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.7...@cosmos-kit/keplr@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.6...@cosmos-kit/keplr@0.19.7) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.5...@cosmos-kit/keplr@0.19.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.4...@cosmos-kit/keplr@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.3...@cosmos-kit/keplr@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.2...@cosmos-kit/keplr@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.1...@cosmos-kit/keplr@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.19.0...@cosmos-kit/keplr@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.18.1...@cosmos-kit/keplr@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.18.0...@cosmos-kit/keplr@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.17.1...@cosmos-kit/keplr@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.17.0...@cosmos-kit/keplr@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.2...@cosmos-kit/keplr@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.1...@cosmos-kit/keplr@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.16.0...@cosmos-kit/keplr@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.15.0...@cosmos-kit/keplr@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.14.0...@cosmos-kit/keplr@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.13.2...@cosmos-kit/keplr@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.3...@cosmos-kit/keplr@0.13.2) (2022-09-22) + +## 0.12.7 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.2...@cosmos-kit/keplr@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.11.0...@cosmos-kit/keplr@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/keplr + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/keplr@0.12.0...@cosmos-kit/keplr@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# 0.12.0 (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/keplr + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/shell/LICENSE b/wallets/shell/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/shell/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/shell/README.md b/wallets/shell/README.md new file mode 100644 index 000000000..661584b8c --- /dev/null +++ b/wallets/shell/README.md @@ -0,0 +1,26 @@ +# @cosmos-kit/shell + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/shell is the Shell integration for CosmosKit. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +Code built with the help of these related projects: + +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command ⚛️ +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry diff --git a/wallets/shell/index.ts b/wallets/shell/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/shell/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/shell/package.json b/wallets/shell/package.json new file mode 100644 index 000000000..be99bff08 --- /dev/null +++ b/wallets/shell/package.json @@ -0,0 +1,71 @@ +{ + "name": "@cosmos-kit/shell", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "keplr", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/shell-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/shell/src/index.ts b/wallets/shell/src/index.ts new file mode 100644 index 000000000..958535e74 --- /dev/null +++ b/wallets/shell/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/shell-extension'; + +export const wallets = [...ext]; diff --git a/wallets/shell/tsconfig.json b/wallets/shell/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/shell/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/station-extension/.editorconfig b/wallets/station-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/station-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/station-extension/.eslintignore b/wallets/station-extension/.eslintignore new file mode 100644 index 000000000..14cc528b1 --- /dev/null +++ b/wallets/station-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts diff --git a/wallets/station-extension/.eslintrc.json b/wallets/station-extension/.eslintrc.json new file mode 100644 index 000000000..0ecaa20af --- /dev/null +++ b/wallets/station-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} diff --git a/wallets/station-extension/.gitignore b/wallets/station-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/station-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/station-extension/.npmignore b/wallets/station-extension/.npmignore new file mode 100644 index 000000000..19e526a9f --- /dev/null +++ b/wallets/station-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test diff --git a/wallets/station-extension/.npmrc b/wallets/station-extension/.npmrc new file mode 100644 index 000000000..5fca0d518 --- /dev/null +++ b/wallets/station-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/wallets/station-extension/.prettierrc.json b/wallets/station-extension/.prettierrc.json new file mode 100644 index 000000000..e49d6527b --- /dev/null +++ b/wallets/station-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} diff --git a/wallets/station-extension/CHANGELOG.md b/wallets/station-extension/CHANGELOG.md new file mode 100644 index 000000000..24e24aa2d --- /dev/null +++ b/wallets/station-extension/CHANGELOG.md @@ -0,0 +1,478 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.11.1...@cosmos-kit/station-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.11.0...@cosmos-kit/station-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/station-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.10.0...@cosmos-kit/station-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.9.0...@cosmos-kit/station-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.8.0...@cosmos-kit/station-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.7.3...@cosmos-kit/station-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.7.2...@cosmos-kit/station-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.7.1...@cosmos-kit/station-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.7.0...@cosmos-kit/station-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.10...@cosmos-kit/station-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.9...@cosmos-kit/station-extension@2.6.10) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.8...@cosmos-kit/station-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.7...@cosmos-kit/station-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.6...@cosmos-kit/station-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.5...@cosmos-kit/station-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.4...@cosmos-kit/station-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.3...@cosmos-kit/station-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.2...@cosmos-kit/station-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.1...@cosmos-kit/station-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.6.0...@cosmos-kit/station-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.14...@cosmos-kit/station-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.13...@cosmos-kit/station-extension@2.5.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.12...@cosmos-kit/station-extension@2.5.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.11...@cosmos-kit/station-extension@2.5.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.10...@cosmos-kit/station-extension@2.5.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.9...@cosmos-kit/station-extension@2.5.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.8...@cosmos-kit/station-extension@2.5.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.7...@cosmos-kit/station-extension@2.5.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.6...@cosmos-kit/station-extension@2.5.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.5...@cosmos-kit/station-extension@2.5.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.4...@cosmos-kit/station-extension@2.5.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.3...@cosmos-kit/station-extension@2.5.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.2...@cosmos-kit/station-extension@2.5.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.1...@cosmos-kit/station-extension@2.5.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.5.0...@cosmos-kit/station-extension@2.5.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.9...@cosmos-kit/station-extension@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.8...@cosmos-kit/station-extension@2.4.9) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.7...@cosmos-kit/station-extension@2.4.8) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.6...@cosmos-kit/station-extension@2.4.7) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.5...@cosmos-kit/station-extension@2.4.6) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.4...@cosmos-kit/station-extension@2.4.5) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.3...@cosmos-kit/station-extension@2.4.4) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.2...@cosmos-kit/station-extension@2.4.3) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.1...@cosmos-kit/station-extension@2.4.2) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.4.0...@cosmos-kit/station-extension@2.4.1) (2023-09-07) + +### Bug Fixes + +- terra initial connect ([ac29e95](https://github.com/cosmology-tech/cosmos-kit/commit/ac29e95d31764432c21c4ca3361ed28b3885a8e4)) + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.3...@cosmos-kit/station-extension@2.4.0) (2023-09-02) + +### Features + +- Add Missing Sign Methods to Wallet Clients ([#1](https://github.com/cosmology-tech/cosmos-kit/issues/1)) ([0657840](https://github.com/cosmology-tech/cosmos-kit/commit/06578403a64a210023943031c40a9caf70d49866)) + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.2...@cosmos-kit/station-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.1...@cosmos-kit/station-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.3.0...@cosmos-kit/station-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.2.1...@cosmos-kit/station-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.2.0...@cosmos-kit/station-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.12...@cosmos-kit/station-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.11...@cosmos-kit/station-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.10...@cosmos-kit/station-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.9...@cosmos-kit/station-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.8...@cosmos-kit/station-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.7...@cosmos-kit/station-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.6...@cosmos-kit/station-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.5...@cosmos-kit/station-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.4...@cosmos-kit/station-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.3...@cosmos-kit/station-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.2...@cosmos-kit/station-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.1...@cosmos-kit/station-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.1.0...@cosmos-kit/station-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.5...@cosmos-kit/station-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.4...@cosmos-kit/station-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.3...@cosmos-kit/station-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.2...@cosmos-kit/station-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1...@cosmos-kit/station-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.6...@cosmos-kit/station-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.5...@cosmos-kit/station-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.4...@cosmos-kit/station-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.3...@cosmos-kit/station-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.2...@cosmos-kit/station-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.1...@cosmos-kit/station-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@2.0.1-beta.0...@cosmos-kit/station-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@1.0.0...@cosmos-kit/station-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.6...@cosmos-kit/station-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.5...@cosmos-kit/station-extension@0.8.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.4...@cosmos-kit/station-extension@0.8.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.3...@cosmos-kit/station-extension@0.8.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2...@cosmos-kit/station-extension@0.8.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.1...@cosmos-kit/station-extension@0.8.2) (2023-06-30) + +## [0.8.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.1...@cosmos-kit/station-extension@0.8.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.2-beta.0...@cosmos-kit/station-extension@0.8.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.1...@cosmos-kit/station-extension@0.8.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.8.0...@cosmos-kit/station-extension@0.8.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.11...@cosmos-kit/station-extension@0.8.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.7.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.10...@cosmos-kit/station-extension@0.7.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.9...@cosmos-kit/station-extension@0.7.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.8...@cosmos-kit/station-extension@0.7.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.7...@cosmos-kit/station-extension@0.7.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.6...@cosmos-kit/station-extension@0.7.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.5...@cosmos-kit/station-extension@0.7.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.4...@cosmos-kit/station-extension@0.7.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.3...@cosmos-kit/station-extension@0.7.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.2...@cosmos-kit/station-extension@0.7.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.1...@cosmos-kit/station-extension@0.7.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.7.0...@cosmos-kit/station-extension@0.7.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.6.2...@cosmos-kit/station-extension@0.7.0) (2023-05-02) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.6.1...@cosmos-kit/station-extension@0.6.2) (2023-04-28) + +### Bug Fixes + +- get correct station address by chain id ([64ce69a](https://github.com/cosmology-tech/cosmos-kit/commit/64ce69ab79acd5aeb1c384fcb7a3722212194742)) + +## [0.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.6.0...@cosmos-kit/station-extension@0.6.1) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.5.1...@cosmos-kit/station-extension@0.6.0) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +## [0.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.5.0...@cosmos-kit/station-extension@0.5.1) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.4.0...@cosmos-kit/station-extension@0.5.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.3.0...@cosmos-kit/station-extension@0.4.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station-extension@0.2.0...@cosmos-kit/station-extension@0.3.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# 0.2.0 (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station-extension + +# 0.1.0 (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/terra-extension + +# 0.0.1 (2023-01-30) + +**Note:** First release! diff --git a/wallets/station-extension/LICENSE b/wallets/station-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/station-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/station-extension/README.md b/wallets/station-extension/README.md new file mode 100644 index 000000000..e4484a4be --- /dev/null +++ b/wallets/station-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/station-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/station-extension is the Station integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/station-extension/index.ts b/wallets/station-extension/index.ts new file mode 100644 index 000000000..f9f79b4a1 --- /dev/null +++ b/wallets/station-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; diff --git a/wallets/station-extension/package.json b/wallets/station-extension/package.json new file mode 100644 index 000000000..7d4cfc970 --- /dev/null +++ b/wallets/station-extension/package.json @@ -0,0 +1,77 @@ +{ + "name": "@cosmos-kit/station-extension", + "version": "2.11.2", + "description": "@cosmos-kit/station-extension is the Station integration for CosmosKit", + "author": "kanisorn@alleslab.com", + "contributors": [ + { + "name": "kanisorn" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "terra", + "terra-station", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "@terra-money/feather.js": "^1.0.8", + "@terra-money/station-connector": "^1.1.0", + "@terra-money/wallet-types": "^3.11.2" + }, + "devDependencies": { + "@chain-registry/types": "^0.45.1" + }, + "peerDependencies": { + "@chain-registry/types": ">= 0.17", + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/station-extension/src/constant.ts b/wallets/station-extension/src/constant.ts new file mode 100644 index 000000000..bab3be274 --- /dev/null +++ b/wallets/station-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDMyIDMyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MjsiPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMC4wMjE3NzI5LDAuMDc4NjA4NikiPgogICAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMzA5MjI4LDAsMCwwLjMwOTIyOCwwLjM0NzQzNCwxLjc0NTQ3KSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjQ5NCwyMS43NTRDMTEuODg0LDE1LjEwNCAxOC45OCwxMS44MTIgMjQuNDg0LDE0LjM1N0wyNC43NjcsMTQuNDk0TDM3LjI1NCwyMC44OTRDNDAuMDE2LDIwLjEwMyA0Mi45NjksMjAuMzA1IDQ1LjU5OCwyMS40NjRMNDUuOTg5LDIxLjY0NEw1NC41MDcsMjUuOTI4TDc5LjYyNSwzOC42NTZDODQuMTEzLDQwLjk0NyA4Ni41MDMsNDUuODU2IDg2LjQ2OCw1MS4zMzNMODYuNDYyLDUxLjY1NUw5MC45NSw1My44MTZMODMuMjA2LDY5LjA5N0w3OC42Nyw2Ni44Qzc0LjM5Nyw3MC4yMSA2OS4wMTgsNzEuMjg1IDY0LjQ5LDY5LjE1NUw2NC4xNTEsNjguOTg5TDMwLjY2LDUyLjA1QzMwLjYxNCw1Mi4wNyAzMC41Niw1Mi4wNyAzMC41MTQsNTIuMDVDMjcuOTU0LDUwLjc1MiAyNS45NDcsNDguNTc0IDI0Ljg2MSw0NS45MTdMMjQuNzE5LDQ1LjU1MkwxMi40MzksMzkuMjczQzEyLjM5OSwzOS4yMjUgMTIuMzQ1LDM5LjE4OSAxMi4yODUsMzkuMTcxTDEyLjI0NSwzOS4xNjRDNi43MDMsMzYuMzY5IDUuMDQ1LDI4LjUxNyA4LjQ5NSwyMS43NTRMOC40OTQsMjEuNzU0WiIgc3R5bGU9ImZpbGw6cmdiKDQwLDY5LDE3NCk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPC9nPgogICAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMzA5MjI4LDAsMCwwLjMwOTIyOCwwLjM0NzQzNCwxLjc0NTQ3KSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC41NDQsNjUuNDU2TDM1Ljk0Nyw3Ni44ODlMMjIuMzIzLDkwLjgxNUMyMi4xNDYsOTEuMDMzIDIxLjg0Myw5MS4xMDggMjEuNTg1LDkwLjk5N0wyMS41MjUsOTAuOTk3TDEuMDY1LDgwLjUzQzAuODM0LDgwLjQwNiAwLjY4OSw4MC4xNjQgMC42ODksNzkuOTAxQzAuNjg5LDc5Ljc0NSAwLjc0LDc5LjU5MiAwLjgzNSw3OS40NjhMMTQuNTQ0LDY1LjQ1NUwxNC41NDQsNjUuNDU2Wk0zMi40OTcsNDcuNTc2TDMyLjU5Niw0Ny42MDlMNTMuMDksNTguMDc1QzUzLjQwNiw1OC4yMjIgNTMuNTU2LDU4LjU5MyA1My40Myw1OC45MThMNTMuMzgsNTkuMDE4QzUzLjM2MSw1OS4wNjggNTMuMzMyLDU5LjExMyA1My4yOTYsNTkuMTUyTDUzLjI5Niw1OS4yMjVMMzcuNDQ2LDc1LjQzN0wxNS45ODIsNjMuOTkyTDMxLjg1Nyw0Ny43OUMzMi4wMSw0Ny42MDEgMzIuMjYsNDcuNTE3IDMyLjQ5Nyw0Ny41NzVMMzIuNDk3LDQ3LjU3NlpNOTEuMDQ3LDUzLjk4NkM5My43ODEsNTUuMzY1IDk0LjIwNCw1OS44OSA5Mi4wNjMsNjQuMTI1Qzg5LjkyMSw2OC4zNTkgODYuMDEzLDcwLjY3IDgzLjI3OSw2OS4yOTFDODAuNTQ0LDY3LjkxMSA4MC4xMjEsNjMuMzg3IDgyLjI2Miw1OS4xNTFDODQuNDA0LDU0LjkyOSA4OC4zMTIsNTIuNjA2IDkxLjA0Niw1My45ODZMOTEuMDQ3LDUzLjk4NlpNMzMuNTUsMjAuMDg0QzM0Ljc5NSwyMC4wNzEgMzYuMDMsMjAuMzA5IDM3LjE4LDIwLjc4NkMzNi4xOCwyMS4wNjYgMzUuMjEyLDIxLjQ0NyAzNC4yODgsMjEuOTIzTDMzLjk3NCwyMi4wOEwzMy41MjYsMjIuMDhDMjkuNTgyLDIyLjA4IDI1LjQ5MiwyNS4wMzIgMjMuMzAyLDI5LjI2N0MyMC45NTUsMzMuOTEzIDIxLjI0NiwzOS4wNTUgMjMuNzk4LDQyLjEwNEMyMy45ODIsNDMuMjYxIDI0LjI4Miw0NC4zOTYgMjQuNjk0LDQ1LjQ5MkMxOS42NzMsNDIuNDQzIDE4LjI4MSwzNC45NTQgMjEuNjMzLDI4LjM3MkMyNC4xNzMsMjMuMjMgMjguOTY1LDIwLjA4NCAzMy41NSwyMC4wODRaTTYzLjIwNSwxNi45ODZMODQuNjIyLDI4LjQyTDc2LjI4NSwzNi45NjJMNTQuNTA3LDI1LjkyOEw2My4yMDcsMTYuOTg2TDYzLjIwNSwxNi45ODZaTTc5LjU3NCwwLjY1Nkw3OS42NzQsMC42ODlMMTAwLjI3OCwxMS4xNTVDMTAwLjYyOCwxMS4zMjIgMTAwLjc4NCwxMS43NDMgMTAwLjYyOCwxMi4wOThDMTAwLjYxLDEyLjE0MSAxMDAuNTg1LDEyLjE4MSAxMDAuNTU2LDEyLjIxN0w4Ni4xMSwyNi45Mkw2NC42NTgsMTUuNDk4TDc4LjkzNSwwLjg3Qzc5LjA2NiwwLjcwOSA3OS4yNjgsMC42MjMgNzkuNDc0LDAuNjRMNzkuNTc0LDAuNjU2WiIgc3R5bGU9ImZpbGw6cmdiKDg0LDE0NywyNDcpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+Cg=='; diff --git a/wallets/station-extension/src/extension/chain-wallet.ts b/wallets/station-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..a20f7c3c3 --- /dev/null +++ b/wallets/station-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainStationExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/station-extension/src/extension/client.ts b/wallets/station-extension/src/extension/client.ts new file mode 100644 index 000000000..7308d788a --- /dev/null +++ b/wallets/station-extension/src/extension/client.ts @@ -0,0 +1,83 @@ +/* eslint-disable no-unsafe-optional-chaining */ +import { AminoSignResponse, StdSignDoc, StdSignature } from '@cosmjs/amino'; +import { SignOptions, WalletAccount, WalletClient } from '@cosmos-kit/core'; +import Station from '@terra-money/station-connector'; + +export class StationClient implements WalletClient { + readonly client: Station; + + constructor(client: Station) { + this.client = client; + } + + async disconnect() { + return; + } + + async getSimpleAccount(chainId: string) { + const { name, addresses } = await this.client.connect(); + + const address = addresses[chainId]; + + if (!address) + throw new Error( + `Requested chainId (${chainId}) is not available, try to switch network on the Station extension.` + ); + + return { + namespace: 'cosmos', + chainId, + address, + username: name, + }; + } + + async getAccount(chainId: string): Promise { + const info = (await this.client.info())[chainId]; + if (!info) + throw new Error( + `The requested chainID (${chainId}) is not available, try to switch network on the Station extension.` + ); + + let { name, addresses, pubkey: pubkeys } = await this.client.connect(); + if (!pubkeys) { + pubkeys = (await this.client.getPublicKey()).pubkey; + } + const pubkey = pubkeys?.[info.coinType]; + const address = addresses[chainId]; + + if (!address || !pubkey) + throw new Error( + 'The requested account is not available, try to use a different wallet on the Station extension or to import it again.' + ); + + return { + address, + pubkey: Buffer.from(pubkey, 'base64'), + username: name, + isNanoLedger: true, + algo: 'secp256k1', + }; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + _signOptions?: SignOptions + ): Promise { + return await this.client.keplr.signAmino(chainId, signer, signDoc); + } + + async getOfflineSigner(chainId: string) { + return await this.client.getOfflineSigner(chainId); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.keplr.signArbitrary(chainId, signer, data); + } +} diff --git a/wallets/station-extension/src/extension/index.ts b/wallets/station-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/station-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/station-extension/src/extension/main-wallet.ts b/wallets/station-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..e253bee8f --- /dev/null +++ b/wallets/station-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainStationExtension } from './chain-wallet'; +import { StationClient } from './client'; +import { getStationFromExtension } from './utils'; + +export class StationExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainStationExtension); + } + + async initClient() { + this.initingClient(); + try { + const terra = await getStationFromExtension(); + this.initClientDone(terra ? new StationClient(terra) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/station-extension/src/extension/registry.ts b/wallets/station-extension/src/extension/registry.ts new file mode 100644 index 000000000..dfccd3cb6 --- /dev/null +++ b/wallets/station-extension/src/extension/registry.ts @@ -0,0 +1,38 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const stationExtensionInfo: Wallet = { + name: 'station-extension', + prettyName: 'Station', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + connectEventNamesOnWindow: [ + 'station_wallet_change', + 'station_network_change', + ], + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/station-wallet/aiifbnbfobpmeekipheeijimdpnlpgpp', + }, + { + device: 'desktop', + browser: 'firefox', + link: + 'https://addons.mozilla.org/en-US/firefox/addon/terra-station-wallet/', + }, + { + device: 'desktop', + browser: 'edge', + link: + 'https://microsoftedge.microsoft.com/addons/detail/station-wallet/ajkhoeiiokighlmdnlakpjfoobnjinie', + }, + ], +}; diff --git a/wallets/station-extension/src/extension/types.ts b/wallets/station-extension/src/extension/types.ts new file mode 100644 index 000000000..c2d190420 --- /dev/null +++ b/wallets/station-extension/src/extension/types.ts @@ -0,0 +1,19 @@ +export type ChainId = string; + +export type Addresses = Record; + +export type CoinType = number; + +export type Pubkeys = Record; + +export interface NetworkInfo { + baseAsset: string; + chainID: string; + coinType: string; + gasAdjustment: number; + gasPrices: Record; + icon: string; + lcd: string; + name: string; + prefix: string; +} diff --git a/wallets/station-extension/src/extension/utils.ts b/wallets/station-extension/src/extension/utils.ts new file mode 100644 index 000000000..269673f69 --- /dev/null +++ b/wallets/station-extension/src/extension/utils.ts @@ -0,0 +1,47 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; +import Station from '@terra-money/station-connector'; + +interface StationWindow { + station?: Station; +} + +export const getStationFromExtension: () => Promise< + Station | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const station = (window as StationWindow).station; + + if (station) { + return station; + } + + if (document.readyState === 'complete') { + if (station) { + return station; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + const station = (window as StationWindow).station; + if (station) { + resolve(station); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/station-extension/src/index.ts b/wallets/station-extension/src/index.ts new file mode 100644 index 000000000..fa4472bb5 --- /dev/null +++ b/wallets/station-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './station'; diff --git a/wallets/station-extension/src/station.ts b/wallets/station-extension/src/station.ts new file mode 100644 index 000000000..2dc9040f6 --- /dev/null +++ b/wallets/station-extension/src/station.ts @@ -0,0 +1,5 @@ +import { stationExtensionInfo, StationExtensionWallet } from './extension'; + +const stationExtension = new StationExtensionWallet(stationExtensionInfo); + +export const wallets = [stationExtension]; diff --git a/wallets/station-extension/tsconfig.json b/wallets/station-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/station-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/station/.editorconfig b/wallets/station/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/station/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/station/.eslintignore b/wallets/station/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/station/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/station/.eslintrc.json b/wallets/station/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/station/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/station/.gitignore b/wallets/station/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/station/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/station/.prettierrc.json b/wallets/station/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/station/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/station/CHANGELOG.md b/wallets/station/CHANGELOG.md new file mode 100644 index 000000000..a6dfd1d41 --- /dev/null +++ b/wallets/station/CHANGELOG.md @@ -0,0 +1,690 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.10.1...@cosmos-kit/station@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.10.0...@cosmos-kit/station@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/station + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.9.0...@cosmos-kit/station@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/station + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.8.0...@cosmos-kit/station@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/station + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.7.0...@cosmos-kit/station@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/station + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.6.3...@cosmos-kit/station@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/station + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.6.2...@cosmos-kit/station@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.6.1...@cosmos-kit/station@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.6.0...@cosmos-kit/station@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.10...@cosmos-kit/station@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.9...@cosmos-kit/station@2.5.10) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.8...@cosmos-kit/station@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.7...@cosmos-kit/station@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.6...@cosmos-kit/station@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.5...@cosmos-kit/station@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.4...@cosmos-kit/station@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.3...@cosmos-kit/station@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.2...@cosmos-kit/station@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.1...@cosmos-kit/station@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.5.0...@cosmos-kit/station@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.14...@cosmos-kit/station@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.13...@cosmos-kit/station@2.4.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.12...@cosmos-kit/station@2.4.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.11...@cosmos-kit/station@2.4.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.10...@cosmos-kit/station@2.4.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.9...@cosmos-kit/station@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.8...@cosmos-kit/station@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.7...@cosmos-kit/station@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.6...@cosmos-kit/station@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.5...@cosmos-kit/station@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.4...@cosmos-kit/station@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.3...@cosmos-kit/station@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.2...@cosmos-kit/station@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.1...@cosmos-kit/station@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.4.0...@cosmos-kit/station@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.13...@cosmos-kit/station@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.12...@cosmos-kit/station@2.3.13) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.11...@cosmos-kit/station@2.3.12) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.10...@cosmos-kit/station@2.3.11) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.9...@cosmos-kit/station@2.3.10) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.8...@cosmos-kit/station@2.3.9) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.7...@cosmos-kit/station@2.3.8) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.6...@cosmos-kit/station@2.3.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.5...@cosmos-kit/station@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.4...@cosmos-kit/station@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.3...@cosmos-kit/station@2.3.4) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.2...@cosmos-kit/station@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.1...@cosmos-kit/station@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.3.0...@cosmos-kit/station@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.2.1...@cosmos-kit/station@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.2.0...@cosmos-kit/station@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.12...@cosmos-kit/station@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.11...@cosmos-kit/station@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.10...@cosmos-kit/station@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.9...@cosmos-kit/station@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.8...@cosmos-kit/station@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.7...@cosmos-kit/station@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.6...@cosmos-kit/station@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.5...@cosmos-kit/station@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.4...@cosmos-kit/station@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.3...@cosmos-kit/station@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.2...@cosmos-kit/station@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.1...@cosmos-kit/station@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.1.0...@cosmos-kit/station@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/station + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.5...@cosmos-kit/station@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.4...@cosmos-kit/station@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.3...@cosmos-kit/station@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.2...@cosmos-kit/station@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1...@cosmos-kit/station@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.6...@cosmos-kit/station@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.5...@cosmos-kit/station@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.4...@cosmos-kit/station@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.3...@cosmos-kit/station@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.2...@cosmos-kit/station@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.1...@cosmos-kit/station@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@2.0.1-beta.0...@cosmos-kit/station@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@1.0.0...@cosmos-kit/station@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/station + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.6...@cosmos-kit/station@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.5...@cosmos-kit/station@0.7.15-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.4...@cosmos-kit/station@0.7.15-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.3...@cosmos-kit/station@0.7.15-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15...@cosmos-kit/station@0.7.15-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.14...@cosmos-kit/station@0.7.15) (2023-06-30) + +## [0.7.15-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.1...@cosmos-kit/station@0.7.15-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.15-beta.0...@cosmos-kit/station@0.7.15-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.15-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.14...@cosmos-kit/station@0.7.15-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.13...@cosmos-kit/station@0.7.14) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.12...@cosmos-kit/station@0.7.13) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.11...@cosmos-kit/station@0.7.12) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.10...@cosmos-kit/station@0.7.11) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.9...@cosmos-kit/station@0.7.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.8...@cosmos-kit/station@0.7.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.7...@cosmos-kit/station@0.7.8) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.6...@cosmos-kit/station@0.7.7) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.5...@cosmos-kit/station@0.7.6) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.4...@cosmos-kit/station@0.7.5) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.3...@cosmos-kit/station@0.7.4) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.2...@cosmos-kit/station@0.7.3) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.1...@cosmos-kit/station@0.7.2) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.7.0...@cosmos-kit/station@0.7.1) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.6.2...@cosmos-kit/station@0.7.0) (2023-05-02) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.6.1...@cosmos-kit/station@0.6.2) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.6.0...@cosmos-kit/station@0.6.1) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.5.1...@cosmos-kit/station@0.6.0) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.5.0...@cosmos-kit/station@0.5.1) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.4.0...@cosmos-kit/station@0.5.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.3.0...@cosmos-kit/station@0.4.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.2.0...@cosmos-kit/station@0.3.0) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +# 0.2.0 (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.6...@cosmos-kit/terrastation@0.1.7) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.5...@cosmos-kit/terrastation@0.1.6) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.4...@cosmos-kit/terrastation@0.1.5) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.3...@cosmos-kit/terrastation@0.1.4) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.2...@cosmos-kit/terrastation@0.1.3) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/terrastation@0.1.1...@cosmos-kit/terrastation@0.1.2) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## 0.1.1 (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/terrastation + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.11...@cosmos-kit/station@0.15.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.10...@cosmos-kit/station@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.9...@cosmos-kit/station@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.8...@cosmos-kit/station@0.15.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.7...@cosmos-kit/station@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.6...@cosmos-kit/station@0.15.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.5...@cosmos-kit/station@0.15.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.4...@cosmos-kit/station@0.15.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.3...@cosmos-kit/station@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.2...@cosmos-kit/station@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.1...@cosmos-kit/station@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.15.0...@cosmos-kit/station@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.33...@cosmos-kit/station@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.32...@cosmos-kit/station@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.31...@cosmos-kit/station@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.30...@cosmos-kit/station@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.29...@cosmos-kit/station@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.28...@cosmos-kit/station@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.27...@cosmos-kit/station@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.26...@cosmos-kit/station@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.25...@cosmos-kit/station@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.24...@cosmos-kit/station@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.23...@cosmos-kit/station@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.21...@cosmos-kit/station@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.20...@cosmos-kit/station@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.19...@cosmos-kit/station@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.18...@cosmos-kit/station@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.17...@cosmos-kit/station@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.16...@cosmos-kit/station@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.15...@cosmos-kit/station@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.14...@cosmos-kit/station@0.14.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.13...@cosmos-kit/station@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.12...@cosmos-kit/station@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.11...@cosmos-kit/station@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.10...@cosmos-kit/station@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.9...@cosmos-kit/station@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.8...@cosmos-kit/station@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.7...@cosmos-kit/station@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.6...@cosmos-kit/station@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.5...@cosmos-kit/station@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.4...@cosmos-kit/station@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.3...@cosmos-kit/station@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.2...@cosmos-kit/station@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.1...@cosmos-kit/station@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.14.0...@cosmos-kit/station@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.13.0...@cosmos-kit/station@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/station + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.12.1...@cosmos-kit/station@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/station + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/station@0.12.0...@cosmos-kit/station@0.12.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/station + +# 0.12.0 (2022-11-30) + +### Features + +- station wallet integration ([471b656](https://github.com/cosmology-tech/cosmos-kit/commit/471b65678d2df1a074a6d91e9899df5e86454cb2)) diff --git a/wallets/station/README.md b/wallets/station/README.md new file mode 100644 index 000000000..960799133 --- /dev/null +++ b/wallets/station/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/station + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/station is the Station integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/station/index.ts b/wallets/station/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/station/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/station/package.json b/wallets/station/package.json new file mode 100644 index 000000000..a25e18895 --- /dev/null +++ b/wallets/station/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/station", + "version": "2.10.2", + "description": "@cosmos-kit/station is the Station integration for CosmosKit", + "author": "jonlitech@gmail.com", + "contributors": [ + { + "name": "Javier Aceña" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "station", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/station-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/station/src/index.ts b/wallets/station/src/index.ts new file mode 100644 index 000000000..4d7c76a66 --- /dev/null +++ b/wallets/station/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/station-extension'; + +export const wallets = [...ext]; diff --git a/wallets/station/tsconfig.json b/wallets/station/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/station/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/tailwind-extension/.editorconfig b/wallets/tailwind-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/tailwind-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/tailwind-extension/.eslintignore b/wallets/tailwind-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/tailwind-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/tailwind-extension/.eslintrc.json b/wallets/tailwind-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/tailwind-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/tailwind-extension/.gitignore b/wallets/tailwind-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/tailwind-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/tailwind-extension/.npmignore b/wallets/tailwind-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/tailwind-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/tailwind-extension/.npmrc b/wallets/tailwind-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/tailwind-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/tailwind-extension/.prettierrc.json b/wallets/tailwind-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/tailwind-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/tailwind-extension/CHANGELOG.md b/wallets/tailwind-extension/CHANGELOG.md new file mode 100644 index 000000000..1368c51c3 --- /dev/null +++ b/wallets/tailwind-extension/CHANGELOG.md @@ -0,0 +1,80 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.5.1...@cosmos-kit/tailwind-extension@1.5.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + + + + + +## [1.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.5.0...@cosmos-kit/tailwind-extension@1.5.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + + + + + +# [1.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.4.0...@cosmos-kit/tailwind-extension@1.5.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + + + + + +# [1.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.3.0...@cosmos-kit/tailwind-extension@1.4.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + + + + + +# [1.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.2.0...@cosmos-kit/tailwind-extension@1.3.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + + + + + +# [1.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.1.3...@cosmos-kit/tailwind-extension@1.2.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + + + + + +## [1.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.1.2...@cosmos-kit/tailwind-extension@1.1.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + +## [1.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.1.1...@cosmos-kit/tailwind-extension@1.1.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + +## [1.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.1.0...@cosmos-kit/tailwind-extension@1.1.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + +# [1.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.0.3...@cosmos-kit/tailwind-extension@1.1.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + +## [1.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind-extension@1.0.1...@cosmos-kit/tailwind-extension@1.0.3) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + +## 1.0.1 (2024-02-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind-extension + +## [1.0.0] (2024-02-19) + +Initialized diff --git a/wallets/tailwind-extension/LICENSE b/wallets/tailwind-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/tailwind-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/tailwind-extension/README.md b/wallets/tailwind-extension/README.md new file mode 100644 index 000000000..a14c7a9dc --- /dev/null +++ b/wallets/tailwind-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/tailwind-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/tailwind-extension is the Tailwind extension integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/tailwind-extension/index.ts b/wallets/tailwind-extension/index.ts new file mode 100644 index 000000000..8420b1093 --- /dev/null +++ b/wallets/tailwind-extension/index.ts @@ -0,0 +1 @@ +export * from './src'; diff --git a/wallets/tailwind-extension/package.json b/wallets/tailwind-extension/package.json new file mode 100644 index 000000000..957651192 --- /dev/null +++ b/wallets/tailwind-extension/package.json @@ -0,0 +1,63 @@ +{ + "name": "@cosmos-kit/tailwind-extension", + "version": "1.5.2", + "description": "Cosmos-kit adapter for Tailwind extension", + "author": "bao@tailwind.zone", + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "tailwind", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1" + }, + "devDependencies": { + "@cosmjs/proto-signing": "^0.32.3", + "@tailwindzone/connect": "^1.1.0" + } +} diff --git a/wallets/tailwind-extension/src/constants.ts b/wallets/tailwind-extension/src/constants.ts new file mode 100644 index 000000000..f85016673 --- /dev/null +++ b/wallets/tailwind-extension/src/constants.ts @@ -0,0 +1,23 @@ +import { Wallet } from '@cosmos-kit/core'; + +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiByeD0iMzYiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xMV8yNikiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xODguNzMzIDE0Mi43NEMyMTUuOTMzIDEyMS4xOTcgMjc5Ljk2NyAxMTkuNDk2IDI3Ni4zODUgMTYzLjU5MkgyNzYuMzk3QzI3My4xNjcgMjAzLjk2OSAyMzIuOTMzIDI0My42NTQgMTkxLjU2NyAyNzJINzJDMTUzLjYgMjQxLjM4NiAyMTQuMjc5IDE4MC40NjQgMTg4LjczMyAxNDIuNzRaTTI4My4zNjcgMjA3LjM3QzI3Mi42IDIzMC4wNDcgMjUxLjkxNyAyNTEuODE3IDIyNSAyNzJIMjg3LjlDMjk1LjgzMyAyNjUuMTk3IDMxMCAyNDguNzU2IDMxMCAyMzMuNDQ5QzMxMCAyMTguNzA5IDMwMC45MzMgMjEwLjIwNSAyODMuMzY3IDIwNy4zN1oiIGZpbGw9IndoaXRlIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTFfMjYiIHgxPSIyMDAiIHkxPSIwIiB4Mj0iMjAwIiB5Mj0iNDAwIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMzODAxQTUiLz4KPHN0b3Agb2Zmc2V0PSIxIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg=='; + +export const tailwind_extension_info: Wallet = { + name: 'tailwind-extension', + prettyName: 'TAILWIND', + mode: 'extension', + mobileDisabled: true, + logo: ICON, + connectEventNamesOnWindow: ['tailwind_wallet_keystorechange'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chromewebstore.google.com/detail/tailwind-wallet/dpnfollacokcbkeiidhplhjpafkbfacj', + }, + { + link: 'https://chromewebstore.google.com/detail/tailwind-wallet/dpnfollacokcbkeiidhplhjpafkbfacj', + }, + ], +}; diff --git a/wallets/tailwind-extension/src/extension/index.ts b/wallets/tailwind-extension/src/extension/index.ts new file mode 100644 index 000000000..7f27470a8 --- /dev/null +++ b/wallets/tailwind-extension/src/extension/index.ts @@ -0,0 +1,2 @@ +export * from './utils'; +export * from './wallet'; diff --git a/wallets/tailwind-extension/src/extension/utils.ts b/wallets/tailwind-extension/src/extension/utils.ts new file mode 100644 index 000000000..6c7330231 --- /dev/null +++ b/wallets/tailwind-extension/src/extension/utils.ts @@ -0,0 +1,43 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; +import { TailwindWallet } from '@tailwindzone/connect'; + +export const getWalletFromWindow: () => Promise< + TailwindWallet | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + const tailwind = window.tailwind; + + if (tailwind) { + return tailwind; + } + + if (document.readyState === 'complete') { + if (tailwind) { + return tailwind; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + // re-declare variable inside the event listener + const tailwind = window.tailwind; + if (tailwind) { + resolve(tailwind); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/tailwind-extension/src/extension/wallet.ts b/wallets/tailwind-extension/src/extension/wallet.ts new file mode 100644 index 000000000..5fc11418c --- /dev/null +++ b/wallets/tailwind-extension/src/extension/wallet.ts @@ -0,0 +1,69 @@ +import { OfflineSigner } from '@cosmjs/proto-signing'; +import { + ChainRecord, + ChainWalletBase, + MainWalletBase, + SimpleAccount, + Wallet, + WalletAccount, + WalletClient, +} from '@cosmos-kit/core'; +import { TailwindWallet } from '@tailwindzone/connect'; + +import { getWalletFromWindow } from '..'; + +/** + * Keplr and leap both leave this interface empty. + * Used in TailwindExtensionWallet's instantiation. + */ +export class ChainTailwindExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} + +export class TailwindClient implements WalletClient { + constructor(private tailwind: TailwindWallet) { + this.tailwind = tailwind; + } + + async getAccount(chainId: string): Promise { + const signer = await this.tailwind.getOfflineSigner(chainId); + const [acc] = await signer.getAccounts(); + return { + algo: acc.algo, + address: acc.address, + pubkey: acc.pubkey, + }; + } + + async getSimpleAccount(chainId: string): Promise { + const signer = await this.tailwind.getOfflineSigner(chainId); + const [acc] = await signer.getAccounts(); + return { + chainId, + namespace: 'tailwind-wallet', + address: acc.address, + }; + } + + async getOfflineSigner(chainId: string): Promise { + return this.tailwind.getOfflineSigner(chainId); + } +} + +export class TailwindExtensionWallet extends MainWalletBase { + constructor(wallet_info: Wallet) { + super(wallet_info, ChainTailwindExtension); + } + + async initClient(): Promise { + this.initingClient(); + try { + const tailwind = await getWalletFromWindow(); + this.initClientDone(tailwind ? new TailwindClient(tailwind) : undefined); + } catch (err) { + this.initClientError(err as Error); + } + } +} diff --git a/wallets/tailwind-extension/src/index.ts b/wallets/tailwind-extension/src/index.ts new file mode 100644 index 000000000..81fc25a81 --- /dev/null +++ b/wallets/tailwind-extension/src/index.ts @@ -0,0 +1,3 @@ +export * from './constants'; +export * from './extension'; +export * from './tailwind'; diff --git a/wallets/tailwind-extension/src/tailwind.ts b/wallets/tailwind-extension/src/tailwind.ts new file mode 100644 index 000000000..23eda5e27 --- /dev/null +++ b/wallets/tailwind-extension/src/tailwind.ts @@ -0,0 +1,8 @@ +import { MainWalletBase } from '@cosmos-kit/core'; + +import { TailwindExtensionWallet } from '.'; +import { tailwind_extension_info } from './constants'; + +export const wallets: MainWalletBase[] = [ + new TailwindExtensionWallet(tailwind_extension_info), +]; diff --git a/wallets/tailwind-extension/tsconfig.json b/wallets/tailwind-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/tailwind-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/tailwind/.editorconfig b/wallets/tailwind/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/tailwind/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/tailwind/.eslintignore b/wallets/tailwind/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/tailwind/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/tailwind/.eslintrc.json b/wallets/tailwind/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/tailwind/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/tailwind/.gitignore b/wallets/tailwind/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/tailwind/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/tailwind/.npmignore b/wallets/tailwind/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/tailwind/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/tailwind/.npmrc b/wallets/tailwind/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/tailwind/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/tailwind/.prettierrc.json b/wallets/tailwind/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/tailwind/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/tailwind/CHANGELOG.md b/wallets/tailwind/CHANGELOG.md new file mode 100644 index 000000000..af29121ad --- /dev/null +++ b/wallets/tailwind/CHANGELOG.md @@ -0,0 +1,84 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [1.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.5.1...@cosmos-kit/tailwind@1.5.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind + + + + + +## [1.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.5.0...@cosmos-kit/tailwind@1.5.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/tailwind + + + + + +# [1.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.4.0...@cosmos-kit/tailwind@1.5.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/tailwind + + + + + +# [1.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.3.0...@cosmos-kit/tailwind@1.4.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind + + + + + +# [1.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.2.0...@cosmos-kit/tailwind@1.3.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/tailwind + + + + + +# [1.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.1.3...@cosmos-kit/tailwind@1.2.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/tailwind + + + + + +## [1.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.1.2...@cosmos-kit/tailwind@1.1.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +## [1.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.1.1...@cosmos-kit/tailwind@1.1.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +## [1.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.1.0...@cosmos-kit/tailwind@1.1.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +# [1.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.0.4...@cosmos-kit/tailwind@1.1.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +## [1.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/tailwind@1.0.2...@cosmos-kit/tailwind@1.0.4) (2024-04-02) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +## 1.0.2 (2024-03-07) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +## 1.0.1 (2024-03-05) + +**Note:** Version bump only for package @cosmos-kit/tailwind + +## [1.0.0] (2024-02-19) + +Initialized diff --git a/wallets/tailwind/LICENSE b/wallets/tailwind/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/tailwind/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/tailwind/README.md b/wallets/tailwind/README.md new file mode 100644 index 000000000..d509ef67c --- /dev/null +++ b/wallets/tailwind/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/tailwind + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/tailwind is the Tailwind integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/tailwind/index.ts b/wallets/tailwind/index.ts new file mode 100644 index 000000000..8420b1093 --- /dev/null +++ b/wallets/tailwind/index.ts @@ -0,0 +1 @@ +export * from './src'; diff --git a/wallets/tailwind/package.json b/wallets/tailwind/package.json new file mode 100644 index 000000000..f0f2747f7 --- /dev/null +++ b/wallets/tailwind/package.json @@ -0,0 +1,64 @@ +{ + "name": "@cosmos-kit/tailwind", + "version": "1.5.2", + "description": "Cosmos-kit wallet connector for TAILWIND wallet", + "author": "bao@tailwind.zone", + "contributors": [ + { + "name": "@thisispalash" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "tailwind", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/tailwind-extension": "^1.5.2" + } +} diff --git a/wallets/tailwind/src/index.ts b/wallets/tailwind/src/index.ts new file mode 100644 index 000000000..d75605c9a --- /dev/null +++ b/wallets/tailwind/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/tailwind-extension'; + +export const wallets = [...ext]; diff --git a/wallets/tailwind/tsconfig.json b/wallets/tailwind/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/tailwind/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/trust-extension/.editorconfig b/wallets/trust-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/trust-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/trust-extension/.eslintignore b/wallets/trust-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/trust-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/trust-extension/.eslintrc.json b/wallets/trust-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/trust-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/trust-extension/.gitignore b/wallets/trust-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/trust-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/trust-extension/.prettierrc.json b/wallets/trust-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/trust-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/trust-extension/CHANGELOG.md b/wallets/trust-extension/CHANGELOG.md new file mode 100644 index 000000000..8a11c3c35 --- /dev/null +++ b/wallets/trust-extension/CHANGELOG.md @@ -0,0 +1,662 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.10.1...@cosmos-kit/trust-extension@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.10.0...@cosmos-kit/trust-extension@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.9.0...@cosmos-kit/trust-extension@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.8.0...@cosmos-kit/trust-extension@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.7.0...@cosmos-kit/trust-extension@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.6.3...@cosmos-kit/trust-extension@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.6.2...@cosmos-kit/trust-extension@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.6.1...@cosmos-kit/trust-extension@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.6.0...@cosmos-kit/trust-extension@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.9...@cosmos-kit/trust-extension@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.8...@cosmos-kit/trust-extension@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.7...@cosmos-kit/trust-extension@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.6...@cosmos-kit/trust-extension@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.5...@cosmos-kit/trust-extension@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.4...@cosmos-kit/trust-extension@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.3...@cosmos-kit/trust-extension@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.2...@cosmos-kit/trust-extension@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.1...@cosmos-kit/trust-extension@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.5.0...@cosmos-kit/trust-extension@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.14...@cosmos-kit/trust-extension@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.13...@cosmos-kit/trust-extension@2.4.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.12...@cosmos-kit/trust-extension@2.4.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.11...@cosmos-kit/trust-extension@2.4.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.10...@cosmos-kit/trust-extension@2.4.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.9...@cosmos-kit/trust-extension@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.8...@cosmos-kit/trust-extension@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.7...@cosmos-kit/trust-extension@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.6...@cosmos-kit/trust-extension@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.5...@cosmos-kit/trust-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.4...@cosmos-kit/trust-extension@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.3...@cosmos-kit/trust-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.2...@cosmos-kit/trust-extension@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.1...@cosmos-kit/trust-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.4.0...@cosmos-kit/trust-extension@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.13...@cosmos-kit/trust-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.12...@cosmos-kit/trust-extension@2.3.13) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.11...@cosmos-kit/trust-extension@2.3.12) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.10...@cosmos-kit/trust-extension@2.3.11) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.9...@cosmos-kit/trust-extension@2.3.10) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.8...@cosmos-kit/trust-extension@2.3.9) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.7...@cosmos-kit/trust-extension@2.3.8) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.6...@cosmos-kit/trust-extension@2.3.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.5...@cosmos-kit/trust-extension@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.4...@cosmos-kit/trust-extension@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.3...@cosmos-kit/trust-extension@2.3.4) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.2...@cosmos-kit/trust-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.1...@cosmos-kit/trust-extension@2.3.2) (2023-08-23) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.3.0...@cosmos-kit/trust-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.2.1...@cosmos-kit/trust-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.2.0...@cosmos-kit/trust-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.12...@cosmos-kit/trust-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.11...@cosmos-kit/trust-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.10...@cosmos-kit/trust-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.9...@cosmos-kit/trust-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.8...@cosmos-kit/trust-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.7...@cosmos-kit/trust-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.6...@cosmos-kit/trust-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.5...@cosmos-kit/trust-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.4...@cosmos-kit/trust-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.3...@cosmos-kit/trust-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.2...@cosmos-kit/trust-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.1...@cosmos-kit/trust-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.1.0...@cosmos-kit/trust-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.5...@cosmos-kit/trust-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.4...@cosmos-kit/trust-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.3...@cosmos-kit/trust-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.2...@cosmos-kit/trust-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1...@cosmos-kit/trust-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.6...@cosmos-kit/trust-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.5...@cosmos-kit/trust-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.4...@cosmos-kit/trust-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.3...@cosmos-kit/trust-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.2...@cosmos-kit/trust-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.1...@cosmos-kit/trust-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@2.0.1-beta.0...@cosmos-kit/trust-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@1.0.0...@cosmos-kit/trust-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2-beta.6...@cosmos-kit/trust-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2-beta.5...@cosmos-kit/trust-extension@0.15.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2-beta.4...@cosmos-kit/trust-extension@0.15.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2-beta.3...@cosmos-kit/trust-extension@0.15.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2...@cosmos-kit/trust-extension@0.15.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.1...@cosmos-kit/trust-extension@0.15.2) (2023-06-30) + +## [0.15.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2-beta.1...@cosmos-kit/trust-extension@0.15.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.2-beta.0...@cosmos-kit/trust-extension@0.15.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.1...@cosmos-kit/trust-extension@0.15.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.15.0...@cosmos-kit/trust-extension@0.15.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.34...@cosmos-kit/trust-extension@0.15.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.14.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.33...@cosmos-kit/trust-extension@0.14.34) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.32...@cosmos-kit/trust-extension@0.14.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.31...@cosmos-kit/trust-extension@0.14.32) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.30...@cosmos-kit/trust-extension@0.14.31) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.29...@cosmos-kit/trust-extension@0.14.30) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.28...@cosmos-kit/trust-extension@0.14.29) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.27...@cosmos-kit/trust-extension@0.14.28) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.26...@cosmos-kit/trust-extension@0.14.27) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.25...@cosmos-kit/trust-extension@0.14.26) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.24...@cosmos-kit/trust-extension@0.14.25) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.23...@cosmos-kit/trust-extension@0.14.24) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.22...@cosmos-kit/trust-extension@0.14.23) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.21...@cosmos-kit/trust-extension@0.14.22) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.20...@cosmos-kit/trust-extension@0.14.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.19...@cosmos-kit/trust-extension@0.14.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.18...@cosmos-kit/trust-extension@0.14.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.17...@cosmos-kit/trust-extension@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.16...@cosmos-kit/trust-extension@0.14.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.15...@cosmos-kit/trust-extension@0.14.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.14...@cosmos-kit/trust-extension@0.14.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.13...@cosmos-kit/trust-extension@0.14.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.12...@cosmos-kit/trust-extension@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.11...@cosmos-kit/trust-extension@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.10...@cosmos-kit/trust-extension@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.9...@cosmos-kit/trust-extension@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.8...@cosmos-kit/trust-extension@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.7...@cosmos-kit/trust-extension@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.6...@cosmos-kit/trust-extension@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.5...@cosmos-kit/trust-extension@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.4...@cosmos-kit/trust-extension@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.3...@cosmos-kit/trust-extension@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.2...@cosmos-kit/trust-extension@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.1...@cosmos-kit/trust-extension@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.14.0...@cosmos-kit/trust-extension@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.33...@cosmos-kit/trust-extension@0.14.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.32...@cosmos-kit/trust-extension@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.31...@cosmos-kit/trust-extension@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.30...@cosmos-kit/trust-extension@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.29...@cosmos-kit/trust-extension@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.28...@cosmos-kit/trust-extension@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.27...@cosmos-kit/trust-extension@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.26...@cosmos-kit/trust-extension@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.25...@cosmos-kit/trust-extension@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.24...@cosmos-kit/trust-extension@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.23...@cosmos-kit/trust-extension@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.21...@cosmos-kit/trust-extension@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.20...@cosmos-kit/trust-extension@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.19...@cosmos-kit/trust-extension@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.18...@cosmos-kit/trust-extension@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.17...@cosmos-kit/trust-extension@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.16...@cosmos-kit/trust-extension@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-extension@0.13.15...@cosmos-kit/trust-extension@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## 0.13.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/trust-extension + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.13...@cosmos-kit/trust@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.12...@cosmos-kit/trust@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.11...@cosmos-kit/trust@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.10...@cosmos-kit/trust@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.9...@cosmos-kit/trust@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.8...@cosmos-kit/trust@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.7...@cosmos-kit/trust@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.6...@cosmos-kit/trust@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.5...@cosmos-kit/trust@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.4...@cosmos-kit/trust@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.3...@cosmos-kit/trust@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.2...@cosmos-kit/trust@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.1...@cosmos-kit/trust@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.0...@cosmos-kit/trust@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.1...@cosmos-kit/trust@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.0...@cosmos-kit/trust@0.12.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +# 0.12.0 (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/trust diff --git a/wallets/trust-extension/LICENSE b/wallets/trust-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/trust-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/trust-extension/README.md b/wallets/trust-extension/README.md new file mode 100644 index 000000000..5ff75b689 --- /dev/null +++ b/wallets/trust-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/trust-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/trust-extension is the Trust Wallet integration for Cosmos Kit. + +> 💡 According to [Trust Doc](https://developer.trustwallet.com/developer/develop-for-trust/browser-extension), Trust Wallet Browser Extension currently supports only Ethereum & EVM chains, and support for Cosmos is still in progress. Because of the block from wallet side, `@cosmoskit/trust-extension` is not fully implemented yet and we don't recommend to use it for now. + +## Related + +Checkout these related projects: + +- [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) for generated CosmWasm contract Typescript classes +- [@cosmology/telescope](https://github.com/cosmology-tech/telescope) a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs. +- [chain-registry](https://github.com/cosmology-tech/chain-registry) an npm module for the official Cosmos chain-registry. +- [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) A wallet connector for the Cosmos ⚛️ +- [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) set up a modern Cosmos app by running one command. +- [starship](https://github.com/cosmology-tech/starship) a k8s-based unified development environment for Cosmos Ecosystem + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code or CLI, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/trust-extension/index.ts b/wallets/trust-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/trust-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/trust-extension/package.json b/wallets/trust-extension/package.json new file mode 100644 index 000000000..b7ae07529 --- /dev/null +++ b/wallets/trust-extension/package.json @@ -0,0 +1,67 @@ +{ + "name": "@cosmos-kit/trust-extension", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "contributors": [ + { + "name": "Ruslan Serebriakov" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "trust", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/trust-extension/src/constant.ts b/wallets/trust-extension/src/constant.ts new file mode 100644 index 000000000..0f57889dd --- /dev/null +++ b/wallets/trust-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NSA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGQ9Ik0zMi4zOTk5IDY0QzUwLjA3MyA2NCA2NC4zOTk5IDQ5LjY3MzEgNjQuMzk5OSAzMkM2NC4zOTk5IDE0LjMyNjkgNTAuMDczIDAgMzIuMzk5OSAwQzE0LjcyNjggMCAwLjM5OTkwMiAxNC4zMjY5IDAuMzk5OTAyIDMyQzAuMzk5OTAyIDQ5LjY3MzEgMTQuNzI2OCA2NCAzMi4zOTk5IDY0WiIgZmlsbD0iIzMzNzVCQiIvPgo8cGF0aCBkPSJNMzIuNjI2NyAxNEMzOC45NTA4IDE5LjI4MTYgNDYuMjAyOSAxOC45NTU5IDQ4LjI3NSAxOC45NTU5QzQ3LjgyMTcgNDguOTkzNyA0NC4zNjgzIDQzLjAzNzMgMzIuNjI2NyA1MS40NkMyMC44ODUxIDQzLjAzNzMgMTcuNDUzMyA0OC45OTM3IDE3IDE4Ljk1NTlDMTkuMDUwNSAxOC45NTU5IDI2LjMwMjYgMTkuMjgxNiAzMi42MjY3IDE0WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4zOTk5MDIpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=='; diff --git a/wallets/trust-extension/src/extension/chain-wallet.ts b/wallets/trust-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..0c5ddf17f --- /dev/null +++ b/wallets/trust-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainTrustExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/trust-extension/src/extension/client.ts b/wallets/trust-extension/src/extension/client.ts new file mode 100644 index 000000000..4f3ddc634 --- /dev/null +++ b/wallets/trust-extension/src/extension/client.ts @@ -0,0 +1,48 @@ +import { Algo } from '@cosmjs/proto-signing'; +import { SignType, WalletClient } from '@cosmos-kit/core'; + +import { Trust } from './types'; + +export class TrustClient implements WalletClient { + readonly client: Trust; + + constructor(client: Trust) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + // switch (preferredSignType) { + // case 'amino': + // return this.getOfflineSignerAmino(chainId); + // case 'direct': + // return this.getOfflineSignerDirect(chainId); + // default: + // return this.getOfflineSignerAmino(chainId); + // } + return this.client.getOfflineSigner(chainId); + } +} diff --git a/wallets/trust-extension/src/extension/index.ts b/wallets/trust-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/trust-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/trust-extension/src/extension/main-wallet.ts b/wallets/trust-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..297884184 --- /dev/null +++ b/wallets/trust-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainTrustExtension } from './chain-wallet'; +import { TrustClient } from './client'; +import { getTrustFromExtension } from './utils'; + +export class TrustExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainTrustExtension); + } + + async initClient() { + this.initingClient(); + try { + const trust = await getTrustFromExtension(); + this.initClientDone(trust ? new TrustClient(trust) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/trust-extension/src/extension/registry.ts b/wallets/trust-extension/src/extension/registry.ts new file mode 100644 index 000000000..525040027 --- /dev/null +++ b/wallets/trust-extension/src/extension/registry.ts @@ -0,0 +1,27 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const trustExtensionInfo: Wallet = { + name: 'trust-extension', + prettyName: 'Trust', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'mobile', + os: 'android', + link: + 'https://play.google.com/store/apps/details?id=com.wallet.crypto.trustapp&referrer=utm_source%3Dwebsite', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://apps.apple.com/app/apple-store/id1288339409?mt=8', + }, + ], +}; diff --git a/wallets/trust-extension/src/extension/types.ts b/wallets/trust-extension/src/extension/types.ts new file mode 100644 index 000000000..37a7e50f1 --- /dev/null +++ b/wallets/trust-extension/src/extension/types.ts @@ -0,0 +1,39 @@ +import { AminoSignResponse, StdSignDoc } from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode, Key, StdTx } from '@keplr-wallet/types'; + +export interface Trust { + enable(chainIds: string | string[]): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineSigner; + getOfflineSignerAuto( + chainId: string + ): Promise; + signAmino( + chainId: string, + signerAddress: string, + signDoc: StdSignDoc + ): Promise; + signDirect( + chainId: string, + signerAddress: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + } + ): Promise; + sendTx( + chainId: string, + tx: StdTx | Uint8Array, + mode: BroadcastMode + ): Promise; +} diff --git a/wallets/trust-extension/src/extension/utils.ts b/wallets/trust-extension/src/extension/utils.ts new file mode 100644 index 000000000..675c85ca8 --- /dev/null +++ b/wallets/trust-extension/src/extension/utils.ts @@ -0,0 +1,51 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { Trust } from './types'; + +interface TrustWindow { + trustwallet?: TrustExtension; +} + +interface TrustExtension { + cosmos?: Trust; +} + +export const getTrustFromExtension: () => Promise< + Trust | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const trust = (window as TrustWindow).trustwallet?.cosmos; + + if (trust) { + return trust; + } + + if (document.readyState === 'complete') { + if (trust) { + return trust; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (trust) { + resolve(trust); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/trust-extension/src/index.ts b/wallets/trust-extension/src/index.ts new file mode 100644 index 000000000..949385d32 --- /dev/null +++ b/wallets/trust-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './trust'; diff --git a/wallets/trust-extension/src/trust.ts b/wallets/trust-extension/src/trust.ts new file mode 100644 index 000000000..4b5300195 --- /dev/null +++ b/wallets/trust-extension/src/trust.ts @@ -0,0 +1,5 @@ +import { trustExtensionInfo, TrustExtensionWallet } from './extension'; + +const trustExtension = new TrustExtensionWallet(trustExtensionInfo); + +export const wallets = [trustExtension]; diff --git a/wallets/trust-extension/tsconfig.json b/wallets/trust-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/trust-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/trust-mobile/.editorconfig b/wallets/trust-mobile/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/trust-mobile/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/trust-mobile/.eslintignore b/wallets/trust-mobile/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/trust-mobile/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/trust-mobile/.eslintrc.json b/wallets/trust-mobile/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/trust-mobile/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/trust-mobile/.gitignore b/wallets/trust-mobile/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/trust-mobile/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/trust-mobile/.npmignore b/wallets/trust-mobile/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/trust-mobile/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/trust-mobile/.npmrc b/wallets/trust-mobile/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/trust-mobile/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/trust-mobile/.prettierrc.json b/wallets/trust-mobile/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/trust-mobile/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/trust-mobile/CHANGELOG.md b/wallets/trust-mobile/CHANGELOG.md new file mode 100644 index 000000000..358caeb4d --- /dev/null +++ b/wallets/trust-mobile/CHANGELOG.md @@ -0,0 +1,919 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.10.1...@cosmos-kit/trust-mobile@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.10.0...@cosmos-kit/trust-mobile@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.9.0...@cosmos-kit/trust-mobile@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.8.0...@cosmos-kit/trust-mobile@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.7.0...@cosmos-kit/trust-mobile@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.6.3...@cosmos-kit/trust-mobile@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.6.2...@cosmos-kit/trust-mobile@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.6.1...@cosmos-kit/trust-mobile@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.6.0...@cosmos-kit/trust-mobile@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.9...@cosmos-kit/trust-mobile@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.8...@cosmos-kit/trust-mobile@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.7...@cosmos-kit/trust-mobile@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.6...@cosmos-kit/trust-mobile@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.5...@cosmos-kit/trust-mobile@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.4...@cosmos-kit/trust-mobile@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.3...@cosmos-kit/trust-mobile@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.2...@cosmos-kit/trust-mobile@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.1...@cosmos-kit/trust-mobile@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.5.0...@cosmos-kit/trust-mobile@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.17...@cosmos-kit/trust-mobile@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.16...@cosmos-kit/trust-mobile@2.4.17) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.15...@cosmos-kit/trust-mobile@2.4.16) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.14...@cosmos-kit/trust-mobile@2.4.15) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.13...@cosmos-kit/trust-mobile@2.4.14) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.12...@cosmos-kit/trust-mobile@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.11...@cosmos-kit/trust-mobile@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.10...@cosmos-kit/trust-mobile@2.4.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.9...@cosmos-kit/trust-mobile@2.4.10) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.8...@cosmos-kit/trust-mobile@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.7...@cosmos-kit/trust-mobile@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.6...@cosmos-kit/trust-mobile@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.5...@cosmos-kit/trust-mobile@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.4...@cosmos-kit/trust-mobile@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.3...@cosmos-kit/trust-mobile@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.2...@cosmos-kit/trust-mobile@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.1...@cosmos-kit/trust-mobile@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.4.0...@cosmos-kit/trust-mobile@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.12...@cosmos-kit/trust-mobile@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.11...@cosmos-kit/trust-mobile@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.10...@cosmos-kit/trust-mobile@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.9...@cosmos-kit/trust-mobile@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.8...@cosmos-kit/trust-mobile@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.7...@cosmos-kit/trust-mobile@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.6...@cosmos-kit/trust-mobile@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.5...@cosmos-kit/trust-mobile@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.4...@cosmos-kit/trust-mobile@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.3...@cosmos-kit/trust-mobile@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.2...@cosmos-kit/trust-mobile@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.1...@cosmos-kit/trust-mobile@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.3.0...@cosmos-kit/trust-mobile@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.2.1...@cosmos-kit/trust-mobile@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.2.0...@cosmos-kit/trust-mobile@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.12...@cosmos-kit/trust-mobile@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.11...@cosmos-kit/trust-mobile@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.10...@cosmos-kit/trust-mobile@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.9...@cosmos-kit/trust-mobile@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.8...@cosmos-kit/trust-mobile@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.7...@cosmos-kit/trust-mobile@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.6...@cosmos-kit/trust-mobile@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.5...@cosmos-kit/trust-mobile@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.4...@cosmos-kit/trust-mobile@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.3...@cosmos-kit/trust-mobile@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.2...@cosmos-kit/trust-mobile@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.1...@cosmos-kit/trust-mobile@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.1.0...@cosmos-kit/trust-mobile@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.5...@cosmos-kit/trust-mobile@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.4...@cosmos-kit/trust-mobile@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.3...@cosmos-kit/trust-mobile@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.2...@cosmos-kit/trust-mobile@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1...@cosmos-kit/trust-mobile@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.7...@cosmos-kit/trust-mobile@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.6...@cosmos-kit/trust-mobile@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.5...@cosmos-kit/trust-mobile@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.4...@cosmos-kit/trust-mobile@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.3...@cosmos-kit/trust-mobile@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.2...@cosmos-kit/trust-mobile@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.1...@cosmos-kit/trust-mobile@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@2.0.1-beta.0...@cosmos-kit/trust-mobile@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@1.0.0...@cosmos-kit/trust-mobile@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2-beta.6...@cosmos-kit/trust-mobile@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2-beta.5...@cosmos-kit/trust-mobile@0.3.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2-beta.4...@cosmos-kit/trust-mobile@0.3.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2-beta.3...@cosmos-kit/trust-mobile@0.3.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2...@cosmos-kit/trust-mobile@0.3.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.1...@cosmos-kit/trust-mobile@0.3.2) (2023-06-30) + +## [0.3.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2-beta.1...@cosmos-kit/trust-mobile@0.3.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.2-beta.0...@cosmos-kit/trust-mobile@0.3.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.1...@cosmos-kit/trust-mobile@0.3.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.3.0...@cosmos-kit/trust-mobile@0.3.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.36...@cosmos-kit/trust-mobile@0.3.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.2.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.35...@cosmos-kit/trust-mobile@0.2.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.34...@cosmos-kit/trust-mobile@0.2.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.33...@cosmos-kit/trust-mobile@0.2.34) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.32...@cosmos-kit/trust-mobile@0.2.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.31...@cosmos-kit/trust-mobile@0.2.32) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.30...@cosmos-kit/trust-mobile@0.2.31) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.29...@cosmos-kit/trust-mobile@0.2.30) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.28...@cosmos-kit/trust-mobile@0.2.29) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.27...@cosmos-kit/trust-mobile@0.2.28) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.26...@cosmos-kit/trust-mobile@0.2.27) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.25...@cosmos-kit/trust-mobile@0.2.26) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.24...@cosmos-kit/trust-mobile@0.2.25) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.23...@cosmos-kit/trust-mobile@0.2.24) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.22...@cosmos-kit/trust-mobile@0.2.23) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.21...@cosmos-kit/trust-mobile@0.2.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.20...@cosmos-kit/trust-mobile@0.2.21) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.19...@cosmos-kit/trust-mobile@0.2.20) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.18...@cosmos-kit/trust-mobile@0.2.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.17...@cosmos-kit/trust-mobile@0.2.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.16...@cosmos-kit/trust-mobile@0.2.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.15...@cosmos-kit/trust-mobile@0.2.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.14...@cosmos-kit/trust-mobile@0.2.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.13...@cosmos-kit/trust-mobile@0.2.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.12...@cosmos-kit/trust-mobile@0.2.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.11...@cosmos-kit/trust-mobile@0.2.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.10...@cosmos-kit/trust-mobile@0.2.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.9...@cosmos-kit/trust-mobile@0.2.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.8...@cosmos-kit/trust-mobile@0.2.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.7...@cosmos-kit/trust-mobile@0.2.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.6...@cosmos-kit/trust-mobile@0.2.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.5...@cosmos-kit/trust-mobile@0.2.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.4...@cosmos-kit/trust-mobile@0.2.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.3...@cosmos-kit/trust-mobile@0.2.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.2...@cosmos-kit/trust-mobile@0.2.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.1...@cosmos-kit/trust-mobile@0.2.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.2.0...@cosmos-kit/trust-mobile@0.2.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.20...@cosmos-kit/trust-mobile@0.2.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.1.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.19...@cosmos-kit/trust-mobile@0.1.20) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.18...@cosmos-kit/trust-mobile@0.1.19) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.17...@cosmos-kit/trust-mobile@0.1.18) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.16...@cosmos-kit/trust-mobile@0.1.17) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.15...@cosmos-kit/trust-mobile@0.1.16) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.14...@cosmos-kit/trust-mobile@0.1.15) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.13...@cosmos-kit/trust-mobile@0.1.14) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.12...@cosmos-kit/trust-mobile@0.1.13) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.11...@cosmos-kit/trust-mobile@0.1.12) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.10...@cosmos-kit/trust-mobile@0.1.11) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.8...@cosmos-kit/trust-mobile@0.1.10) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.7...@cosmos-kit/trust-mobile@0.1.8) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.6...@cosmos-kit/trust-mobile@0.1.7) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.5...@cosmos-kit/trust-mobile@0.1.6) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.4...@cosmos-kit/trust-mobile@0.1.5) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.3...@cosmos-kit/trust-mobile@0.1.4) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust-mobile@0.1.2...@cosmos-kit/trust-mobile@0.1.3) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## 0.1.2 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/trust-mobile + +## [0.32.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.13...@cosmos-kit/trust@0.32.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.12...@cosmos-kit/trust@0.32.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.11...@cosmos-kit/trust@0.32.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## 0.32.11 (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.9...@cosmos-kit/trust@0.32.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.8...@cosmos-kit/trust@0.32.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.7...@cosmos-kit/trust@0.32.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.6...@cosmos-kit/trust@0.32.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.5...@cosmos-kit/trust@0.32.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.4...@cosmos-kit/trust@0.32.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.3...@cosmos-kit/trust@0.32.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.2...@cosmos-kit/trust@0.32.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.1...@cosmos-kit/trust@0.32.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.32.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.32.0...@cosmos-kit/trust@0.32.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.32.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.31.0...@cosmos-kit/trust@0.32.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.31.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.30.2...@cosmos-kit/trust@0.31.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.30.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.30.1...@cosmos-kit/trust@0.30.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.30.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.30.0...@cosmos-kit/trust@0.30.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.30.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.29.5...@cosmos-kit/trust@0.30.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.29.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.29.4...@cosmos-kit/trust@0.29.5) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.29.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.29.3...@cosmos-kit/trust@0.29.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.29.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.29.2...@cosmos-kit/trust@0.29.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.29.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.29.1...@cosmos-kit/trust@0.29.2) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.29.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.29.0...@cosmos-kit/trust@0.29.1) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.29.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.28.1...@cosmos-kit/trust@0.29.0) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.28.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.28.0...@cosmos-kit/trust@0.28.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.28.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.27.1...@cosmos-kit/trust@0.28.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.27.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.27.0...@cosmos-kit/trust@0.27.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.27.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.26.1...@cosmos-kit/trust@0.27.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.26.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.26.0...@cosmos-kit/trust@0.26.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.26.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.25.0...@cosmos-kit/trust@0.26.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.25.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.24.0...@cosmos-kit/trust@0.25.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.24.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.23.0...@cosmos-kit/trust@0.24.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.23.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.22.2...@cosmos-kit/trust@0.23.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.22.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.22.1...@cosmos-kit/trust@0.22.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.22.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.22.0...@cosmos-kit/trust@0.22.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.22.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.21.0...@cosmos-kit/trust@0.22.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.21.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.20.2...@cosmos-kit/trust@0.21.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.20.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.20.1...@cosmos-kit/trust@0.20.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.20.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.20.0...@cosmos-kit/trust@0.20.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.20.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.7...@cosmos-kit/trust@0.20.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.6...@cosmos-kit/trust@0.19.7) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.5...@cosmos-kit/trust@0.19.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.4...@cosmos-kit/trust@0.19.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.3...@cosmos-kit/trust@0.19.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.2...@cosmos-kit/trust@0.19.3) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.1...@cosmos-kit/trust@0.19.2) (2022-10-12) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.19.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.19.0...@cosmos-kit/trust@0.19.1) (2022-10-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.19.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.18.1...@cosmos-kit/trust@0.19.0) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.18.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.18.0...@cosmos-kit/trust@0.18.1) (2022-10-01) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.18.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.17.1...@cosmos-kit/trust@0.18.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.17.0...@cosmos-kit/trust@0.17.1) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.16.2...@cosmos-kit/trust@0.17.0) (2022-09-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.16.1...@cosmos-kit/trust@0.16.2) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.16.0...@cosmos-kit/trust@0.16.1) (2022-09-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.15.0...@cosmos-kit/trust@0.16.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.0...@cosmos-kit/trust@0.15.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.2...@cosmos-kit/trust@0.14.0) (2022-09-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.3...@cosmos-kit/trust@0.13.2) (2022-09-22) + +## 0.12.7 (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.12.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.2...@cosmos-kit/trust@0.12.3) (2022-09-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.12.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.11.0...@cosmos-kit/trust@0.12.2) (2022-09-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.0...@cosmos-kit/trust@0.12.1) (2022-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +# 0.12.0 (2022-09-06) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.2...@cosmos-kit/core@0.11.0) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.10.1...@cosmos-kit/core@0.10.2) (2022-08-16) + +**Note:** Version bump only for package @cosmos-kit/core + +## 0.10.1 (2022-08-16) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.4...@cosmos-kit/core@0.10.0) (2022-08-15) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.3...@cosmos-kit/core@0.9.4) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.2...@cosmos-kit/core@0.9.3) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.9.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.1...@cosmos-kit/core@0.9.2) (2022-08-12) + +### Reverts + +- Revert "Changed peer deps more." ([aa351ba](https://github.com/cosmology-tech/cosmos-kit/commit/aa351baf8eb5b8e5deb871ab2ee91667bae2a0d0)) + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.9.0...@cosmos-kit/core@0.9.1) (2022-08-12) + +### Reverts + +- Revert "No more peer deps." ([5b6738c](https://github.com/cosmology-tech/cosmos-kit/commit/5b6738c3c41a774a84c52b7ed2605a162a2e0601)) + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.1...@cosmos-kit/core@0.9.0) (2022-08-12) + +**Note:** Version bump only for package @cosmos-kit/core + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/core@0.8.0...@cosmos-kit/core@0.8.1) (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core + +# 0.8.0 (2022-08-11) + +**Note:** Version bump only for package @cosmos-kit/core diff --git a/wallets/trust-mobile/LICENSE b/wallets/trust-mobile/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/trust-mobile/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/trust-mobile/README.md b/wallets/trust-mobile/README.md new file mode 100644 index 000000000..f71e2f8ac --- /dev/null +++ b/wallets/trust-mobile/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/trust-mobile + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/trust-mobile is the Trust integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/trust-mobile/index.ts b/wallets/trust-mobile/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/trust-mobile/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/trust-mobile/package.json b/wallets/trust-mobile/package.json new file mode 100644 index 000000000..adbdf8700 --- /dev/null +++ b/wallets/trust-mobile/package.json @@ -0,0 +1,82 @@ +{ + "name": "@cosmos-kit/trust-mobile", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "developers@cosmology.zone", + "contributors": [ + { + "name": "Jun Liu" + }, + { + "name": "Dan Lynch" + }, + { + "name": "Noah Saso" + }, + { + "name": "Eliot Baker" + }, + { + "name": "Delivan Jeonghyeok Yoo" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "cosmos-kit", + "trust", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "@cosmos-kit/walletconnect": "^2.10.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/trust-mobile/src/constant.ts b/wallets/trust-mobile/src/constant.ts new file mode 100644 index 000000000..0f57889dd --- /dev/null +++ b/wallets/trust-mobile/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjUiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NSA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGQ9Ik0zMi4zOTk5IDY0QzUwLjA3MyA2NCA2NC4zOTk5IDQ5LjY3MzEgNjQuMzk5OSAzMkM2NC4zOTk5IDE0LjMyNjkgNTAuMDczIDAgMzIuMzk5OSAwQzE0LjcyNjggMCAwLjM5OTkwMiAxNC4zMjY5IDAuMzk5OTAyIDMyQzAuMzk5OTAyIDQ5LjY3MzEgMTQuNzI2OCA2NCAzMi4zOTk5IDY0WiIgZmlsbD0iIzMzNzVCQiIvPgo8cGF0aCBkPSJNMzIuNjI2NyAxNEMzOC45NTA4IDE5LjI4MTYgNDYuMjAyOSAxOC45NTU5IDQ4LjI3NSAxOC45NTU5QzQ3LjgyMTcgNDguOTkzNyA0NC4zNjgzIDQzLjAzNzMgMzIuNjI2NyA1MS40NkMyMC44ODUxIDQzLjAzNzMgMTcuNDUzMyA0OC45OTM3IDE3IDE4Ljk1NTlDMTkuMDUwNSAxOC45NTU5IDI2LjMwMjYgMTkuMjgxNiAzMi42MjY3IDE0WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwIj4KPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4zOTk5MDIpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=='; diff --git a/wallets/trust-mobile/src/index.ts b/wallets/trust-mobile/src/index.ts new file mode 100644 index 000000000..cb97624e1 --- /dev/null +++ b/wallets/trust-mobile/src/index.ts @@ -0,0 +1,2 @@ +export * from './trust'; +export * from './wallet-connect'; diff --git a/wallets/trust-mobile/src/trust.ts b/wallets/trust-mobile/src/trust.ts new file mode 100644 index 000000000..eef39978a --- /dev/null +++ b/wallets/trust-mobile/src/trust.ts @@ -0,0 +1,5 @@ +import { trustMobileInfo, TrustMobileWallet } from './wallet-connect'; + +const trustMobile = new TrustMobileWallet(trustMobileInfo); + +export const wallets = [trustMobile]; diff --git a/wallets/trust-mobile/src/wallet-connect/chain-wallet.ts b/wallets/trust-mobile/src/wallet-connect/chain-wallet.ts new file mode 100644 index 000000000..9358f672d --- /dev/null +++ b/wallets/trust-mobile/src/wallet-connect/chain-wallet.ts @@ -0,0 +1,9 @@ +import { ChainRecord, Wallet } from '@cosmos-kit/core'; +import { ChainWC } from '@cosmos-kit/walletconnect'; +import { TrustClient } from './client'; + +export class ChainTrustMobile extends ChainWC { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo, TrustClient); + } +} diff --git a/wallets/trust-mobile/src/wallet-connect/client.ts b/wallets/trust-mobile/src/wallet-connect/client.ts new file mode 100644 index 000000000..677cbecbb --- /dev/null +++ b/wallets/trust-mobile/src/wallet-connect/client.ts @@ -0,0 +1,40 @@ +import { DirectSignDoc, SignOptions, Wallet } from '@cosmos-kit/core'; +import { WCClient } from '@cosmos-kit/walletconnect'; +import { AminoSignResponse, StdSignDoc } from '@cosmjs/amino'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; + +export class TrustClient extends WCClient { + constructor(walletInfo: Wallet) { + super(walletInfo); + } + + getOfflineSignerAmino = void 0; + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ): Promise { + throw new Error("Trust doesn't support `signAmino` method."); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ): Promise { + // Trust doesn't return signed, using signDoc instead + const result = (await this._signDirect( + chainId, + signer, + signDoc, + signOptions + )) as any; + return { + signed: signDoc as DirectSignResponse['signed'], + signature: result, + }; + } +} diff --git a/wallets/trust-mobile/src/wallet-connect/index.ts b/wallets/trust-mobile/src/wallet-connect/index.ts new file mode 100644 index 000000000..04e870197 --- /dev/null +++ b/wallets/trust-mobile/src/wallet-connect/index.ts @@ -0,0 +1,3 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; diff --git a/wallets/trust-mobile/src/wallet-connect/main-wallet.ts b/wallets/trust-mobile/src/wallet-connect/main-wallet.ts new file mode 100644 index 000000000..c766ef6ce --- /dev/null +++ b/wallets/trust-mobile/src/wallet-connect/main-wallet.ts @@ -0,0 +1,15 @@ +import { EndpointOptions, Wallet } from '@cosmos-kit/core'; +import { WCWallet } from '@cosmos-kit/walletconnect'; + +import { ChainTrustMobile } from './chain-wallet'; +import { TrustClient } from './client'; + +export class TrustMobileWallet extends WCWallet { + constructor( + walletInfo: Wallet, + preferredEndpoints?: EndpointOptions['endpoints'] + ) { + super(walletInfo, ChainTrustMobile, TrustClient); + this.preferredEndpoints = preferredEndpoints; + } +} diff --git a/wallets/trust-mobile/src/wallet-connect/registry.ts b/wallets/trust-mobile/src/wallet-connect/registry.ts new file mode 100644 index 000000000..570f19e32 --- /dev/null +++ b/wallets/trust-mobile/src/wallet-connect/registry.ts @@ -0,0 +1,36 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const trustMobileInfo: Wallet = { + name: 'trust-mobile', + prettyName: 'Trust Mobile', + logo: ICON, + mode: 'wallet-connect', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'mobile', + os: 'android', + link: + 'https://play.google.com/store/apps/details?id=com.chainapsis.trust&hl=en&gl=US&pli=1', + }, + { + device: 'mobile', + os: 'ios', + link: 'https://apps.apple.com/us/app/trust-wallet/id1567851089', + }, + { + link: 'https://www.trust.app/download', + }, + ], + connectEventNamesOnWindow: ['trust_keystorechange'], + walletconnect: { + name: 'Trust Wallet', + projectId: + '4622a2b2d6af1c9844944291e5e7351a6aa24cd7b23099efac1b2fd875da31a0', + }, +}; diff --git a/wallets/trust-mobile/tsconfig.json b/wallets/trust-mobile/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/trust-mobile/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/trust/.editorconfig b/wallets/trust/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/trust/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/trust/.eslintignore b/wallets/trust/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/trust/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/trust/.eslintrc.json b/wallets/trust/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/trust/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/trust/.gitignore b/wallets/trust/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/trust/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/trust/.prettierrc.json b/wallets/trust/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/trust/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/trust/CHANGELOG.md b/wallets/trust/CHANGELOG.md new file mode 100644 index 000000000..90b4963ef --- /dev/null +++ b/wallets/trust/CHANGELOG.md @@ -0,0 +1,682 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.11.1...@cosmos-kit/trust@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.11.0...@cosmos-kit/trust@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/trust + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.10.0...@cosmos-kit/trust@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/trust + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.9.0...@cosmos-kit/trust@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/trust + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.8.0...@cosmos-kit/trust@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/trust + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.7.3...@cosmos-kit/trust@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/trust + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.7.2...@cosmos-kit/trust@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.7.1...@cosmos-kit/trust@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.7.0...@cosmos-kit/trust@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.6.0...@cosmos-kit/trust@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.9...@cosmos-kit/trust@2.6.0) (2024-02-02) + +### Features + +- Add support for Trust Extension ([38b3653](https://github.com/cosmology-tech/cosmos-kit/commit/38b365326457e592f739dd5bb94dbbed5405f21d)) + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.8...@cosmos-kit/trust@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.7...@cosmos-kit/trust@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.6...@cosmos-kit/trust@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.5...@cosmos-kit/trust@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.4...@cosmos-kit/trust@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.3...@cosmos-kit/trust@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.2...@cosmos-kit/trust@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.1...@cosmos-kit/trust@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.5.0...@cosmos-kit/trust@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.17...@cosmos-kit/trust@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.16...@cosmos-kit/trust@2.4.17) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.15...@cosmos-kit/trust@2.4.16) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.14...@cosmos-kit/trust@2.4.15) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.13...@cosmos-kit/trust@2.4.14) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.12...@cosmos-kit/trust@2.4.13) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.11...@cosmos-kit/trust@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.10...@cosmos-kit/trust@2.4.11) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.9...@cosmos-kit/trust@2.4.10) (2023-11-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.8...@cosmos-kit/trust@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.7...@cosmos-kit/trust@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.6...@cosmos-kit/trust@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.5...@cosmos-kit/trust@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.4...@cosmos-kit/trust@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.3...@cosmos-kit/trust@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.2...@cosmos-kit/trust@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.1...@cosmos-kit/trust@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.4.0...@cosmos-kit/trust@2.4.1) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.12...@cosmos-kit/trust@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.11...@cosmos-kit/trust@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.10...@cosmos-kit/trust@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.9...@cosmos-kit/trust@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.8...@cosmos-kit/trust@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.7...@cosmos-kit/trust@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.6...@cosmos-kit/trust@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.5...@cosmos-kit/trust@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.4...@cosmos-kit/trust@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.3...@cosmos-kit/trust@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.2...@cosmos-kit/trust@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.1...@cosmos-kit/trust@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.3.0...@cosmos-kit/trust@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.2.1...@cosmos-kit/trust@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.2.0...@cosmos-kit/trust@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.12...@cosmos-kit/trust@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.11...@cosmos-kit/trust@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.10...@cosmos-kit/trust@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.9...@cosmos-kit/trust@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.8...@cosmos-kit/trust@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.7...@cosmos-kit/trust@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.6...@cosmos-kit/trust@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.5...@cosmos-kit/trust@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.4...@cosmos-kit/trust@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.3...@cosmos-kit/trust@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.2...@cosmos-kit/trust@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.1...@cosmos-kit/trust@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.1.0...@cosmos-kit/trust@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.5...@cosmos-kit/trust@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.4...@cosmos-kit/trust@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.3...@cosmos-kit/trust@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.2...@cosmos-kit/trust@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1...@cosmos-kit/trust@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.7...@cosmos-kit/trust@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.6...@cosmos-kit/trust@2.0.1-beta.7) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.5...@cosmos-kit/trust@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.4...@cosmos-kit/trust@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.3...@cosmos-kit/trust@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.2...@cosmos-kit/trust@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.1...@cosmos-kit/trust@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@2.0.1-beta.0...@cosmos-kit/trust@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@1.0.0...@cosmos-kit/trust@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39-beta.6...@cosmos-kit/trust@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39-beta.5...@cosmos-kit/trust@0.14.39-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39-beta.4...@cosmos-kit/trust@0.14.39-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39-beta.3...@cosmos-kit/trust@0.14.39-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39...@cosmos-kit/trust@0.14.39-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.38...@cosmos-kit/trust@0.14.39) (2023-06-30) + +## [0.14.39-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39-beta.1...@cosmos-kit/trust@0.14.39-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.39-beta.0...@cosmos-kit/trust@0.14.39-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.39-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.38...@cosmos-kit/trust@0.14.39-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.37...@cosmos-kit/trust@0.14.38) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.36...@cosmos-kit/trust@0.14.37) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.35...@cosmos-kit/trust@0.14.36) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.34...@cosmos-kit/trust@0.14.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.33...@cosmos-kit/trust@0.14.34) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.32...@cosmos-kit/trust@0.14.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.31...@cosmos-kit/trust@0.14.32) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.30...@cosmos-kit/trust@0.14.31) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.29...@cosmos-kit/trust@0.14.30) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.28...@cosmos-kit/trust@0.14.29) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.27...@cosmos-kit/trust@0.14.28) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.26...@cosmos-kit/trust@0.14.27) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.25...@cosmos-kit/trust@0.14.26) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.24...@cosmos-kit/trust@0.14.25) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.23...@cosmos-kit/trust@0.14.24) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.22...@cosmos-kit/trust@0.14.23) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.21...@cosmos-kit/trust@0.14.22) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.20...@cosmos-kit/trust@0.14.21) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.19...@cosmos-kit/trust@0.14.20) (2023-04-23) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.18...@cosmos-kit/trust@0.14.19) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.17...@cosmos-kit/trust@0.14.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.16...@cosmos-kit/trust@0.14.17) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.15...@cosmos-kit/trust@0.14.16) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.14...@cosmos-kit/trust@0.14.15) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.13...@cosmos-kit/trust@0.14.14) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.12...@cosmos-kit/trust@0.14.13) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.11...@cosmos-kit/trust@0.14.12) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.10...@cosmos-kit/trust@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.9...@cosmos-kit/trust@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.8...@cosmos-kit/trust@0.14.9) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.7...@cosmos-kit/trust@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.6...@cosmos-kit/trust@0.14.7) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.5...@cosmos-kit/trust@0.14.6) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.4...@cosmos-kit/trust@0.14.5) (2023-03-07) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.3...@cosmos-kit/trust@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.2...@cosmos-kit/trust@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.1...@cosmos-kit/trust@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.14.0...@cosmos-kit/trust@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.33...@cosmos-kit/trust@0.14.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.32...@cosmos-kit/trust@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.31...@cosmos-kit/trust@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.30...@cosmos-kit/trust@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.29...@cosmos-kit/trust@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.28...@cosmos-kit/trust@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.27...@cosmos-kit/trust@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.26...@cosmos-kit/trust@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.25...@cosmos-kit/trust@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.24...@cosmos-kit/trust@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.23...@cosmos-kit/trust@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.21...@cosmos-kit/trust@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.20...@cosmos-kit/trust@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.19...@cosmos-kit/trust@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.18...@cosmos-kit/trust@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.17...@cosmos-kit/trust@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.16...@cosmos-kit/trust@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.15...@cosmos-kit/trust@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.14...@cosmos-kit/trust@0.13.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.13...@cosmos-kit/trust@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.12...@cosmos-kit/trust@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.11...@cosmos-kit/trust@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.10...@cosmos-kit/trust@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.9...@cosmos-kit/trust@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.8...@cosmos-kit/trust@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.7...@cosmos-kit/trust@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.6...@cosmos-kit/trust@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.5...@cosmos-kit/trust@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.4...@cosmos-kit/trust@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.3...@cosmos-kit/trust@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.2...@cosmos-kit/trust@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.1...@cosmos-kit/trust@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.13.0...@cosmos-kit/trust@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.1...@cosmos-kit/trust@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/trust + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/trust@0.12.0...@cosmos-kit/trust@0.12.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/trust + +# 0.12.0 (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/trust diff --git a/wallets/trust/LICENSE b/wallets/trust/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/trust/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/trust/README.md b/wallets/trust/README.md new file mode 100644 index 000000000..91a9faa1f --- /dev/null +++ b/wallets/trust/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/trust + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/trust is the Trust Wallet integration for Cosmos Kit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/trust/index.ts b/wallets/trust/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/trust/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/trust/package.json b/wallets/trust/package.json new file mode 100644 index 000000000..dab00a3a6 --- /dev/null +++ b/wallets/trust/package.json @@ -0,0 +1,58 @@ +{ + "name": "@cosmos-kit/trust", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "contributors": [ + { + "name": "Ruslan Serebriakov" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos", + "trust", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/trust-extension": "^2.10.2", + "@cosmos-kit/trust-mobile": "^2.10.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/trust/src/index.ts b/wallets/trust/src/index.ts new file mode 100644 index 000000000..66bb4ee2a --- /dev/null +++ b/wallets/trust/src/index.ts @@ -0,0 +1,4 @@ +import { wallets as ext } from '@cosmos-kit/trust-extension'; +import { wallets as mobile } from '@cosmos-kit/trust-mobile'; + +export const wallets = [...ext, ...mobile]; diff --git a/wallets/trust/tsconfig.json b/wallets/trust/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/trust/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/vectis-extension/.editorconfig b/wallets/vectis-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/vectis-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/vectis-extension/.eslintignore b/wallets/vectis-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/vectis-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/vectis-extension/.eslintrc.json b/wallets/vectis-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/vectis-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/vectis-extension/.gitignore b/wallets/vectis-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/vectis-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/vectis-extension/.prettierrc.json b/wallets/vectis-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/vectis-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/vectis-extension/CHANGELOG.md b/wallets/vectis-extension/CHANGELOG.md new file mode 100644 index 000000000..e0a18a3ab --- /dev/null +++ b/wallets/vectis-extension/CHANGELOG.md @@ -0,0 +1,670 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.11.1...@cosmos-kit/vectis-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.11.0...@cosmos-kit/vectis-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.10.0...@cosmos-kit/vectis-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.9.0...@cosmos-kit/vectis-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.8.0...@cosmos-kit/vectis-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.7.3...@cosmos-kit/vectis-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.7.2...@cosmos-kit/vectis-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.7.1...@cosmos-kit/vectis-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.7.0...@cosmos-kit/vectis-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.9...@cosmos-kit/vectis-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.8...@cosmos-kit/vectis-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.7...@cosmos-kit/vectis-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.6...@cosmos-kit/vectis-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.5...@cosmos-kit/vectis-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.4...@cosmos-kit/vectis-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.3...@cosmos-kit/vectis-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.2...@cosmos-kit/vectis-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.1...@cosmos-kit/vectis-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.6.0...@cosmos-kit/vectis-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.5.4...@cosmos-kit/vectis-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.5.3...@cosmos-kit/vectis-extension@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.5.2...@cosmos-kit/vectis-extension@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.5.1...@cosmos-kit/vectis-extension@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.5.0...@cosmos-kit/vectis-extension@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.10...@cosmos-kit/vectis-extension@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.9...@cosmos-kit/vectis-extension@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.8...@cosmos-kit/vectis-extension@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.7...@cosmos-kit/vectis-extension@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.6...@cosmos-kit/vectis-extension@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.5...@cosmos-kit/vectis-extension@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.4...@cosmos-kit/vectis-extension@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.3...@cosmos-kit/vectis-extension@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.2...@cosmos-kit/vectis-extension@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.1...@cosmos-kit/vectis-extension@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.4.0...@cosmos-kit/vectis-extension@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.12...@cosmos-kit/vectis-extension@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.11...@cosmos-kit/vectis-extension@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.10...@cosmos-kit/vectis-extension@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.9...@cosmos-kit/vectis-extension@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.8...@cosmos-kit/vectis-extension@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.7...@cosmos-kit/vectis-extension@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.6...@cosmos-kit/vectis-extension@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.5...@cosmos-kit/vectis-extension@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.4...@cosmos-kit/vectis-extension@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.3...@cosmos-kit/vectis-extension@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.2...@cosmos-kit/vectis-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.1...@cosmos-kit/vectis-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.3.0...@cosmos-kit/vectis-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.2.1...@cosmos-kit/vectis-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.2.0...@cosmos-kit/vectis-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.12...@cosmos-kit/vectis-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.11...@cosmos-kit/vectis-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.10...@cosmos-kit/vectis-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.9...@cosmos-kit/vectis-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.8...@cosmos-kit/vectis-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.7...@cosmos-kit/vectis-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.6...@cosmos-kit/vectis-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.5...@cosmos-kit/vectis-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.4...@cosmos-kit/vectis-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.3...@cosmos-kit/vectis-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.2...@cosmos-kit/vectis-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.1...@cosmos-kit/vectis-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.1.0...@cosmos-kit/vectis-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.5...@cosmos-kit/vectis-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.4...@cosmos-kit/vectis-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.3...@cosmos-kit/vectis-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.2...@cosmos-kit/vectis-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1...@cosmos-kit/vectis-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.6...@cosmos-kit/vectis-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.5...@cosmos-kit/vectis-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.4...@cosmos-kit/vectis-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.3...@cosmos-kit/vectis-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.2...@cosmos-kit/vectis-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.1...@cosmos-kit/vectis-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@2.0.1-beta.0...@cosmos-kit/vectis-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@1.0.0...@cosmos-kit/vectis-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2-beta.6...@cosmos-kit/vectis-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2-beta.5...@cosmos-kit/vectis-extension@0.17.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2-beta.4...@cosmos-kit/vectis-extension@0.17.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2-beta.3...@cosmos-kit/vectis-extension@0.17.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2...@cosmos-kit/vectis-extension@0.17.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.1...@cosmos-kit/vectis-extension@0.17.2) (2023-06-30) + +## [0.17.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2-beta.1...@cosmos-kit/vectis-extension@0.17.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.2-beta.0...@cosmos-kit/vectis-extension@0.17.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.1...@cosmos-kit/vectis-extension@0.17.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.17.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.17.0...@cosmos-kit/vectis-extension@0.17.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [0.17.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.10...@cosmos-kit/vectis-extension@0.17.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.16.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.9...@cosmos-kit/vectis-extension@0.16.10) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.8...@cosmos-kit/vectis-extension@0.16.9) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.7...@cosmos-kit/vectis-extension@0.16.8) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.6...@cosmos-kit/vectis-extension@0.16.7) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.5...@cosmos-kit/vectis-extension@0.16.6) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.4...@cosmos-kit/vectis-extension@0.16.5) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.3...@cosmos-kit/vectis-extension@0.16.4) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.2...@cosmos-kit/vectis-extension@0.16.3) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.1...@cosmos-kit/vectis-extension@0.16.2) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.16.0...@cosmos-kit/vectis-extension@0.16.1) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.23...@cosmos-kit/vectis-extension@0.16.0) (2023-05-15) + +### Features + +- update vectis extension and support for smart contract key ([89462d2](https://github.com/cosmology-tech/cosmos-kit/commit/89462d2f876a9dd955fb1dcba82d747463d63737)) + +## [0.15.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.22...@cosmos-kit/vectis-extension@0.15.23) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.21...@cosmos-kit/vectis-extension@0.15.22) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.20...@cosmos-kit/vectis-extension@0.15.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.19...@cosmos-kit/vectis-extension@0.15.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.18...@cosmos-kit/vectis-extension@0.15.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.17...@cosmos-kit/vectis-extension@0.15.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.16...@cosmos-kit/vectis-extension@0.15.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.15...@cosmos-kit/vectis-extension@0.15.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.14...@cosmos-kit/vectis-extension@0.15.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.13...@cosmos-kit/vectis-extension@0.15.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.12...@cosmos-kit/vectis-extension@0.15.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.11...@cosmos-kit/vectis-extension@0.15.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.10...@cosmos-kit/vectis-extension@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.9...@cosmos-kit/vectis-extension@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.8...@cosmos-kit/vectis-extension@0.15.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.7...@cosmos-kit/vectis-extension@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.6...@cosmos-kit/vectis-extension@0.15.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.5...@cosmos-kit/vectis-extension@0.15.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.4...@cosmos-kit/vectis-extension@0.15.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.3...@cosmos-kit/vectis-extension@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.2...@cosmos-kit/vectis-extension@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.1...@cosmos-kit/vectis-extension@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.15.0...@cosmos-kit/vectis-extension@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.33...@cosmos-kit/vectis-extension@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.32...@cosmos-kit/vectis-extension@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.31...@cosmos-kit/vectis-extension@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.30...@cosmos-kit/vectis-extension@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.29...@cosmos-kit/vectis-extension@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.28...@cosmos-kit/vectis-extension@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.27...@cosmos-kit/vectis-extension@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.26...@cosmos-kit/vectis-extension@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.25...@cosmos-kit/vectis-extension@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.24...@cosmos-kit/vectis-extension@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.23...@cosmos-kit/vectis-extension@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.21...@cosmos-kit/vectis-extension@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.20...@cosmos-kit/vectis-extension@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.19...@cosmos-kit/vectis-extension@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.18...@cosmos-kit/vectis-extension@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.17...@cosmos-kit/vectis-extension@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.16...@cosmos-kit/vectis-extension@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis-extension@0.14.15...@cosmos-kit/vectis-extension@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## 0.14.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/vectis-extension + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.13...@cosmos-kit/vectis@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.12...@cosmos-kit/vectis@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.11...@cosmos-kit/vectis@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.10...@cosmos-kit/vectis@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.9...@cosmos-kit/vectis@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.8...@cosmos-kit/vectis@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.7...@cosmos-kit/vectis@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.6...@cosmos-kit/vectis@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.5...@cosmos-kit/vectis@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.4...@cosmos-kit/vectis@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.3...@cosmos-kit/vectis@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.2...@cosmos-kit/vectis@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.1...@cosmos-kit/vectis@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.0...@cosmos-kit/vectis@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.13.0...@cosmos-kit/vectis@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.12.1...@cosmos-kit/vectis@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.12.0...@cosmos-kit/vectis@0.12.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# 0.12.0 (2022-11-30) + +### Features + +- vectis wallet integration ([471b656](https://github.com/cosmology-tech/cosmos-kit/commit/471b65678d2df1a074a6d91e9899df5e86454cb2)) diff --git a/wallets/vectis-extension/README.md b/wallets/vectis-extension/README.md new file mode 100644 index 000000000..108ea7bbc --- /dev/null +++ b/wallets/vectis-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/vectis-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/vectis-extension is the vectis integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/vectis-extension/index.ts b/wallets/vectis-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/vectis-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/vectis-extension/package.json b/wallets/vectis-extension/package.json new file mode 100644 index 000000000..1ee0374af --- /dev/null +++ b/wallets/vectis-extension/package.json @@ -0,0 +1,70 @@ +{ + "name": "@cosmos-kit/vectis-extension", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "jonlitech@gmail.com", + "contributors": [ + { + "name": "Javier Aceña" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "vectis", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@chain-registry/keplr": "1.68.2", + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/vectis-extension/src/constant.ts b/wallets/vectis-extension/src/constant.ts new file mode 100644 index 000000000..b54c1278a --- /dev/null +++ b/wallets/vectis-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/png;base64,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'; diff --git a/wallets/vectis-extension/src/extension/chain-wallet.ts b/wallets/vectis-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..349c5098d --- /dev/null +++ b/wallets/vectis-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainVectisExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/vectis-extension/src/extension/client.ts b/wallets/vectis-extension/src/extension/client.ts new file mode 100644 index 000000000..82cbfc950 --- /dev/null +++ b/wallets/vectis-extension/src/extension/client.ts @@ -0,0 +1,117 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { chainRegistryChainToKeplr } from '@chain-registry/keplr'; +import { Algo, StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { + BroadcastMode, + ChainRecord, + DirectSignDoc, + ExtendedHttpEndpoint, + SignOptions, + SignType, + WalletClient, +} from '@cosmos-kit/core'; + +import type { Vectis } from './types'; + +export class VectisClient implements WalletClient { + readonly client: Vectis; + + constructor(client: Vectis) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async getSimpleAccount(chainId: string) { + const { address, name } = await this.client.getKey(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username: name, + }; + } + + async getAccount(chainId: string) { + const { address, algo, pubkey, name, isNanoLedger, isVectisAccount } = + await this.client.getKey(chainId); + return { + username: name, + address, + algo: algo as Algo, + pubkey, + isNanoLedger, + isSmartContract: isVectisAccount, + }; + } + + async getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSignerDirect(chainId); + } + + async addChain({ chain, name, assetList, preferredEndpoints }: ChainRecord) { + const chainInfo = chainRegistryChainToKeplr( + chain, + assetList ? [assetList] : [] + ); + + if (preferredEndpoints?.rest?.[0]) { + (chainInfo.rest as string | ExtendedHttpEndpoint) = + preferredEndpoints?.rest?.[0]; + } + + if (preferredEndpoints?.rpc?.[0]) { + (chainInfo.rpc as string | ExtendedHttpEndpoint) = + preferredEndpoints?.rpc?.[0]; + } + + await this.client.suggestChains([chainInfo]); + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino(signer, signDoc); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect(signer, signDoc); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/vectis-extension/src/extension/index.ts b/wallets/vectis-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/vectis-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/vectis-extension/src/extension/main-wallet.ts b/wallets/vectis-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..11c718343 --- /dev/null +++ b/wallets/vectis-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainVectisExtension } from './chain-wallet'; +import { VectisClient } from './client'; +import { getVectisFromExtension } from './utils'; + +export class VectisExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainVectisExtension); + } + + async initClient() { + this.initingClient(); + try { + const vectis = await getVectisFromExtension(); + this.initClientDone(vectis ? new VectisClient(vectis) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/vectis-extension/src/extension/registry.ts b/wallets/vectis-extension/src/extension/registry.ts new file mode 100644 index 000000000..d710b2bcc --- /dev/null +++ b/wallets/vectis-extension/src/extension/registry.ts @@ -0,0 +1,24 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const vectisExtensionInfo: Wallet = { + name: 'vectis-extension', + prettyName: 'Vectis', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: + "The requested action couldn't be completed, it was rejected by the user.", + }, + connectEventNamesOnWindow: ['vectis_accountChanged'], + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: + 'https://chrome.google.com/webstore/detail/vectis-wallet/cgkaddoglojnmfiblgmlinfaijcdpfjm', + }, + ], +}; diff --git a/wallets/vectis-extension/src/extension/types.ts b/wallets/vectis-extension/src/extension/types.ts new file mode 100644 index 000000000..f2bf12bfa --- /dev/null +++ b/wallets/vectis-extension/src/extension/types.ts @@ -0,0 +1,58 @@ +import { + AccountData, + Algo, + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { + DirectSignResponse, + OfflineDirectSigner, + OfflineSigner, +} from '@cosmjs/proto-signing'; +import { BroadcastMode, DirectSignDoc } from '@cosmos-kit/core'; +import type { ChainInfo } from '@keplr-wallet/types'; + +export type { ChainInfo }; +export interface VectisWindow extends Window { + readonly vectis: { + readonly version: string; + readonly cosmos: Vectis; + }; +} + +export interface Vectis { + suggestChains(chainsInfo: ChainInfo[]): Promise; + enable(chainIds: string | string[]): Promise; + getSupportedChains(): Promise; + getKey(chainId: string): Promise; + getAccounts(chainId: string): Promise; + signAmino(signerAddress: string, doc: StdSignDoc): Promise; + signDirect( + signerAddress: string, + doc: DirectSignDoc + ): Promise; + signArbitrary( + chainId: string, + signerAddress: string, + data: string | Uint8Array + ): Promise; + getOfflineSignerAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerDirect(chainId: string): OfflineDirectSigner; + getOfflineSigner(chainId: string): OfflineSigner; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; +} + +type KeyInfo = { + readonly name: string; + readonly algo: Algo; + readonly address: string; + readonly isNanoLedger: boolean; + readonly isVectisAccount: boolean; + readonly pubkey: Uint8Array; +}; diff --git a/wallets/vectis-extension/src/extension/utils.ts b/wallets/vectis-extension/src/extension/utils.ts new file mode 100644 index 000000000..f87f4a11a --- /dev/null +++ b/wallets/vectis-extension/src/extension/utils.ts @@ -0,0 +1,43 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import type { Vectis, VectisWindow } from './types'; + +export const getVectisFromExtension: () => Promise< + Vectis | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const vectis = ((window as unknown) as VectisWindow).vectis?.cosmos; + + if (vectis) { + return vectis; + } + + if (document.readyState === 'complete') { + if (vectis) { + return vectis; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + if (vectis) { + resolve(vectis); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/vectis-extension/src/index.ts b/wallets/vectis-extension/src/index.ts new file mode 100644 index 000000000..03c1506db --- /dev/null +++ b/wallets/vectis-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './vectis'; diff --git a/wallets/vectis-extension/src/vectis.ts b/wallets/vectis-extension/src/vectis.ts new file mode 100644 index 000000000..78eb6d0f0 --- /dev/null +++ b/wallets/vectis-extension/src/vectis.ts @@ -0,0 +1,5 @@ +import { vectisExtensionInfo, VectisExtensionWallet } from './extension'; + +const vectisExtension = new VectisExtensionWallet(vectisExtensionInfo); + +export const wallets = [vectisExtension]; diff --git a/wallets/vectis-extension/tsconfig.json b/wallets/vectis-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/vectis-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/vectis/.editorconfig b/wallets/vectis/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/vectis/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/vectis/.eslintignore b/wallets/vectis/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/vectis/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/vectis/.eslintrc.json b/wallets/vectis/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/vectis/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/vectis/.gitignore b/wallets/vectis/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/vectis/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/vectis/.prettierrc.json b/wallets/vectis/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/vectis/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/vectis/CHANGELOG.md b/wallets/vectis/CHANGELOG.md new file mode 100644 index 000000000..28e4b370e --- /dev/null +++ b/wallets/vectis/CHANGELOG.md @@ -0,0 +1,668 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.11.1...@cosmos-kit/vectis@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.11.0...@cosmos-kit/vectis@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/vectis + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.10.0...@cosmos-kit/vectis@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/vectis + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.9.0...@cosmos-kit/vectis@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.8.0...@cosmos-kit/vectis@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/vectis + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.7.3...@cosmos-kit/vectis@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.7.2...@cosmos-kit/vectis@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.7.1...@cosmos-kit/vectis@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.7.0...@cosmos-kit/vectis@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.9...@cosmos-kit/vectis@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.8...@cosmos-kit/vectis@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.7...@cosmos-kit/vectis@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.6...@cosmos-kit/vectis@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.5...@cosmos-kit/vectis@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.4...@cosmos-kit/vectis@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.3...@cosmos-kit/vectis@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.2...@cosmos-kit/vectis@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.1...@cosmos-kit/vectis@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.6.0...@cosmos-kit/vectis@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.5.4...@cosmos-kit/vectis@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.5.3...@cosmos-kit/vectis@2.5.4) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.5.2...@cosmos-kit/vectis@2.5.3) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.5.1...@cosmos-kit/vectis@2.5.2) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.5.0...@cosmos-kit/vectis@2.5.1) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.10...@cosmos-kit/vectis@2.5.0) (2023-12-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.9...@cosmos-kit/vectis@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.8...@cosmos-kit/vectis@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.7...@cosmos-kit/vectis@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.6...@cosmos-kit/vectis@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.5...@cosmos-kit/vectis@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.4...@cosmos-kit/vectis@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.3...@cosmos-kit/vectis@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.2...@cosmos-kit/vectis@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.1...@cosmos-kit/vectis@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.4.0...@cosmos-kit/vectis@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.12...@cosmos-kit/vectis@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.11...@cosmos-kit/vectis@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.10...@cosmos-kit/vectis@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.9...@cosmos-kit/vectis@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.8...@cosmos-kit/vectis@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.7...@cosmos-kit/vectis@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.6...@cosmos-kit/vectis@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.5...@cosmos-kit/vectis@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.4...@cosmos-kit/vectis@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.3...@cosmos-kit/vectis@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.2...@cosmos-kit/vectis@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.1...@cosmos-kit/vectis@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.3.0...@cosmos-kit/vectis@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.2.1...@cosmos-kit/vectis@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.2.0...@cosmos-kit/vectis@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.12...@cosmos-kit/vectis@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.11...@cosmos-kit/vectis@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.10...@cosmos-kit/vectis@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.9...@cosmos-kit/vectis@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.8...@cosmos-kit/vectis@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.7...@cosmos-kit/vectis@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.6...@cosmos-kit/vectis@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.5...@cosmos-kit/vectis@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.4...@cosmos-kit/vectis@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.3...@cosmos-kit/vectis@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.2...@cosmos-kit/vectis@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.1...@cosmos-kit/vectis@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.1.0...@cosmos-kit/vectis@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.5...@cosmos-kit/vectis@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.4...@cosmos-kit/vectis@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.3...@cosmos-kit/vectis@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.2...@cosmos-kit/vectis@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1...@cosmos-kit/vectis@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.6...@cosmos-kit/vectis@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.5...@cosmos-kit/vectis@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.4...@cosmos-kit/vectis@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.3...@cosmos-kit/vectis@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.2...@cosmos-kit/vectis@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.1...@cosmos-kit/vectis@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@2.0.1-beta.0...@cosmos-kit/vectis@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@1.0.0...@cosmos-kit/vectis@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38-beta.6...@cosmos-kit/vectis@1.0.0) (2023-07-05) + +### Bug Fixes + +- use tsup and prettify the index example ([cb4196a](https://github.com/cosmology-tech/cosmos-kit/commit/cb4196a1e34f708c355897274afbb80c1f46d1de)) + +## [0.15.38-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38-beta.5...@cosmos-kit/vectis@0.15.38-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.38-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38-beta.4...@cosmos-kit/vectis@0.15.38-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.38-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38-beta.3...@cosmos-kit/vectis@0.15.38-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.38-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38...@cosmos-kit/vectis@0.15.38-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.38](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.37...@cosmos-kit/vectis@0.15.38) (2023-06-30) + +## [0.15.38-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38-beta.1...@cosmos-kit/vectis@0.15.38-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.38-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.38-beta.0...@cosmos-kit/vectis@0.15.38-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.38-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.37...@cosmos-kit/vectis@0.15.38-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.37](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.36...@cosmos-kit/vectis@0.15.37) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.36](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.35...@cosmos-kit/vectis@0.15.36) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.35](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.34...@cosmos-kit/vectis@0.15.35) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.33...@cosmos-kit/vectis@0.15.34) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.32...@cosmos-kit/vectis@0.15.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.31...@cosmos-kit/vectis@0.15.32) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.30...@cosmos-kit/vectis@0.15.31) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.29...@cosmos-kit/vectis@0.15.30) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.28...@cosmos-kit/vectis@0.15.29) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.27...@cosmos-kit/vectis@0.15.28) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.26...@cosmos-kit/vectis@0.15.27) (2023-05-23) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.25...@cosmos-kit/vectis@0.15.26) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.24...@cosmos-kit/vectis@0.15.25) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.23...@cosmos-kit/vectis@0.15.24) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.22...@cosmos-kit/vectis@0.15.23) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.21...@cosmos-kit/vectis@0.15.22) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.20...@cosmos-kit/vectis@0.15.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.19...@cosmos-kit/vectis@0.15.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.18...@cosmos-kit/vectis@0.15.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.17...@cosmos-kit/vectis@0.15.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.16...@cosmos-kit/vectis@0.15.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.15...@cosmos-kit/vectis@0.15.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.14...@cosmos-kit/vectis@0.15.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.13...@cosmos-kit/vectis@0.15.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.12...@cosmos-kit/vectis@0.15.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.11...@cosmos-kit/vectis@0.15.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.10...@cosmos-kit/vectis@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.9...@cosmos-kit/vectis@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.8...@cosmos-kit/vectis@0.15.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.7...@cosmos-kit/vectis@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.6...@cosmos-kit/vectis@0.15.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.5...@cosmos-kit/vectis@0.15.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.4...@cosmos-kit/vectis@0.15.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.3...@cosmos-kit/vectis@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.2...@cosmos-kit/vectis@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.1...@cosmos-kit/vectis@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.15.0...@cosmos-kit/vectis@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.33...@cosmos-kit/vectis@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.32...@cosmos-kit/vectis@0.14.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.31...@cosmos-kit/vectis@0.14.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.30...@cosmos-kit/vectis@0.14.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.29...@cosmos-kit/vectis@0.14.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.28...@cosmos-kit/vectis@0.14.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.27...@cosmos-kit/vectis@0.14.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.26...@cosmos-kit/vectis@0.14.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.25...@cosmos-kit/vectis@0.14.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.24...@cosmos-kit/vectis@0.14.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.23...@cosmos-kit/vectis@0.14.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.21...@cosmos-kit/vectis@0.14.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.20...@cosmos-kit/vectis@0.14.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.19...@cosmos-kit/vectis@0.14.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.18...@cosmos-kit/vectis@0.14.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.17...@cosmos-kit/vectis@0.14.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.16...@cosmos-kit/vectis@0.14.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.15...@cosmos-kit/vectis@0.14.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.14...@cosmos-kit/vectis@0.14.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.13...@cosmos-kit/vectis@0.14.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.12...@cosmos-kit/vectis@0.14.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.11...@cosmos-kit/vectis@0.14.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.10...@cosmos-kit/vectis@0.14.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.9...@cosmos-kit/vectis@0.14.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.8...@cosmos-kit/vectis@0.14.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.7...@cosmos-kit/vectis@0.14.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.6...@cosmos-kit/vectis@0.14.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.5...@cosmos-kit/vectis@0.14.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.4...@cosmos-kit/vectis@0.14.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.3...@cosmos-kit/vectis@0.14.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.2...@cosmos-kit/vectis@0.14.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.1...@cosmos-kit/vectis@0.14.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.14.0...@cosmos-kit/vectis@0.14.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.13.0...@cosmos-kit/vectis@0.14.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.12.1...@cosmos-kit/vectis@0.13.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/vectis + +## [0.12.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/vectis@0.12.0...@cosmos-kit/vectis@0.12.1) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/vectis + +# 0.12.0 (2022-11-30) + +### Features + +- vectis wallet integration ([471b656](https://github.com/cosmology-tech/cosmos-kit/commit/471b65678d2df1a074a6d91e9899df5e86454cb2)) diff --git a/wallets/vectis/README.md b/wallets/vectis/README.md new file mode 100644 index 000000000..448a52be8 --- /dev/null +++ b/wallets/vectis/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/vectis + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/vectis is the vectis integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/vectis/index.ts b/wallets/vectis/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/vectis/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/vectis/package.json b/wallets/vectis/package.json new file mode 100644 index 000000000..29bbcf03b --- /dev/null +++ b/wallets/vectis/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/vectis", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "jonlitech@gmail.com", + "contributors": [ + { + "name": "Javier Aceña" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "vectis", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/vectis-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/vectis/src/index.ts b/wallets/vectis/src/index.ts new file mode 100644 index 000000000..f3d0f10a4 --- /dev/null +++ b/wallets/vectis/src/index.ts @@ -0,0 +1,5 @@ +import { + wallets as ext +} from '@cosmos-kit/vectis-extension'; + +export const wallets = [...ext]; diff --git a/wallets/vectis/tsconfig.json b/wallets/vectis/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/vectis/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/web3auth/.editorconfig b/wallets/web3auth/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/web3auth/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/web3auth/.eslintignore b/wallets/web3auth/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/web3auth/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/web3auth/.eslintrc.json b/wallets/web3auth/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/web3auth/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/web3auth/.gitignore b/wallets/web3auth/.gitignore new file mode 100644 index 000000000..670dfcb20 --- /dev/null +++ b/wallets/web3auth/.gitignore @@ -0,0 +1,49 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module +types + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/web3auth/.npmignore b/wallets/web3auth/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/web3auth/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/web3auth/.npmrc b/wallets/web3auth/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/web3auth/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/web3auth/.prettierrc.json b/wallets/web3auth/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/web3auth/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/web3auth/CHANGELOG.md b/wallets/web3auth/CHANGELOG.md new file mode 100644 index 000000000..b854fa8fc --- /dev/null +++ b/wallets/web3auth/CHANGELOG.md @@ -0,0 +1,464 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.10.2...@cosmos-kit/web3auth@2.11.0) (2024-07-11) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.10.1...@cosmos-kit/web3auth@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.10.0...@cosmos-kit/web3auth@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.9.0...@cosmos-kit/web3auth@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.8.0...@cosmos-kit/web3auth@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.7.0...@cosmos-kit/web3auth@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.6.3...@cosmos-kit/web3auth@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/web3auth + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.6.2...@cosmos-kit/web3auth@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.6.1...@cosmos-kit/web3auth@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.6.0...@cosmos-kit/web3auth@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.9...@cosmos-kit/web3auth@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.8...@cosmos-kit/web3auth@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.7...@cosmos-kit/web3auth@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.6...@cosmos-kit/web3auth@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.5...@cosmos-kit/web3auth@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.4...@cosmos-kit/web3auth@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.3...@cosmos-kit/web3auth@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.2...@cosmos-kit/web3auth@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.1...@cosmos-kit/web3auth@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.5.0...@cosmos-kit/web3auth@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.14...@cosmos-kit/web3auth@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.13...@cosmos-kit/web3auth@2.4.14) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.12...@cosmos-kit/web3auth@2.4.13) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.11...@cosmos-kit/web3auth@2.4.12) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.10...@cosmos-kit/web3auth@2.4.11) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.9...@cosmos-kit/web3auth@2.4.10) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.8...@cosmos-kit/web3auth@2.4.9) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.7...@cosmos-kit/web3auth@2.4.8) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.6...@cosmos-kit/web3auth@2.4.7) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.5...@cosmos-kit/web3auth@2.4.6) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.4...@cosmos-kit/web3auth@2.4.5) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.3...@cosmos-kit/web3auth@2.4.4) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.2...@cosmos-kit/web3auth@2.4.3) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.1...@cosmos-kit/web3auth@2.4.2) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.4.0...@cosmos-kit/web3auth@2.4.1) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.12...@cosmos-kit/web3auth@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.11...@cosmos-kit/web3auth@2.3.12) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.10...@cosmos-kit/web3auth@2.3.11) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.9...@cosmos-kit/web3auth@2.3.10) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.8...@cosmos-kit/web3auth@2.3.9) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.7...@cosmos-kit/web3auth@2.3.8) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.6...@cosmos-kit/web3auth@2.3.7) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.5...@cosmos-kit/web3auth@2.3.6) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.4...@cosmos-kit/web3auth@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.3...@cosmos-kit/web3auth@2.3.4) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.2...@cosmos-kit/web3auth@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.1...@cosmos-kit/web3auth@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.3.0...@cosmos-kit/web3auth@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.2.1...@cosmos-kit/web3auth@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.2.0...@cosmos-kit/web3auth@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.13...@cosmos-kit/web3auth@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.12...@cosmos-kit/web3auth@2.1.13) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.11...@cosmos-kit/web3auth@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.10...@cosmos-kit/web3auth@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.9...@cosmos-kit/web3auth@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.8...@cosmos-kit/web3auth@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.7...@cosmos-kit/web3auth@2.1.8) (2023-08-16) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.6...@cosmos-kit/web3auth@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.5...@cosmos-kit/web3auth@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.4...@cosmos-kit/web3auth@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.3...@cosmos-kit/web3auth@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.2...@cosmos-kit/web3auth@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.1...@cosmos-kit/web3auth@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.1.0...@cosmos-kit/web3auth@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.5...@cosmos-kit/web3auth@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.4...@cosmos-kit/web3auth@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.3...@cosmos-kit/web3auth@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.2...@cosmos-kit/web3auth@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1...@cosmos-kit/web3auth@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.8...@cosmos-kit/web3auth@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.7...@cosmos-kit/web3auth@2.0.1-beta.8) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.6...@cosmos-kit/web3auth@2.0.1-beta.7) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.5...@cosmos-kit/web3auth@2.0.1-beta.6) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.4...@cosmos-kit/web3auth@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.3...@cosmos-kit/web3auth@2.0.1-beta.4) (2023-07-13) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.2...@cosmos-kit/web3auth@2.0.1-beta.3) (2023-07-13) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.1...@cosmos-kit/web3auth@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@2.0.1-beta.0...@cosmos-kit/web3auth@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@1.0.0...@cosmos-kit/web3auth@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2-beta.6...@cosmos-kit/web3auth@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2-beta.5...@cosmos-kit/web3auth@0.1.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2-beta.4...@cosmos-kit/web3auth@0.1.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2-beta.3...@cosmos-kit/web3auth@0.1.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2...@cosmos-kit/web3auth@0.1.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.1...@cosmos-kit/web3auth@0.1.2) (2023-06-30) + +## [0.1.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2-beta.1...@cosmos-kit/web3auth@0.1.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.2-beta.0...@cosmos-kit/web3auth@0.1.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.1...@cosmos-kit/web3auth@0.1.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.1.0...@cosmos-kit/web3auth@0.1.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# [0.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.17...@cosmos-kit/web3auth@0.1.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.0.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.16...@cosmos-kit/web3auth@0.0.17) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.15...@cosmos-kit/web3auth@0.0.16) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.14...@cosmos-kit/web3auth@0.0.15) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.13...@cosmos-kit/web3auth@0.0.14) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.12...@cosmos-kit/web3auth@0.0.13) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.11...@cosmos-kit/web3auth@0.0.12) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.10...@cosmos-kit/web3auth@0.0.11) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.9...@cosmos-kit/web3auth@0.0.10) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.8...@cosmos-kit/web3auth@0.0.9) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.7...@cosmos-kit/web3auth@0.0.8) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.6...@cosmos-kit/web3auth@0.0.7) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.5...@cosmos-kit/web3auth@0.0.6) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.4...@cosmos-kit/web3auth@0.0.5) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.3...@cosmos-kit/web3auth@0.0.4) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## [0.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/web3auth@0.0.2...@cosmos-kit/web3auth@0.0.3) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +## 0.0.2 (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/web3auth + +# 0.0.1 (2023-04-13) + +**Note:** First release! diff --git a/wallets/web3auth/LICENSE b/wallets/web3auth/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/web3auth/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/web3auth/README.md b/wallets/web3auth/README.md new file mode 100644 index 000000000..46a01d91b --- /dev/null +++ b/wallets/web3auth/README.md @@ -0,0 +1,28 @@ +# @cosmos-kit/web3auth + +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/web3auth is the [https://web3auth.io][web3auth.io] integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/web3auth/index.ts b/wallets/web3auth/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/web3auth/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/web3auth/package.json b/wallets/web3auth/package.json new file mode 100644 index 000000000..1dff11f10 --- /dev/null +++ b/wallets/web3auth/package.json @@ -0,0 +1,82 @@ +{ + "name": "@cosmos-kit/web3auth", + "version": "2.11.0", + "description": "cosmos-kit wallet connector for Web3Auth", + "author": "noah@noah.zone", + "contributors": [ + { + "name": "Noah Saso" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "type": "module", + "main": "esm/index.js", + "module": "esm/index.js", + "typings": "esm/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:esm": "rimraf esm", + "clean": "npm run clean:esm", + "build": "npm run clean && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "leap", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1", + "@solana/web3.js": "^1.77.3", + "@toruslabs/eccrypto": "^2.1.1", + "@web3auth/base": "^7.2.1", + "@web3auth/base-provider": "^7.2.1", + "@web3auth/ethereum-provider": "^7.2.1", + "@web3auth/no-modal": "^7.2.1", + "@web3auth/openlogin-adapter": "^7.2.1", + "@web3auth/solana-provider": "^7.2.1", + "ethereum-cryptography": "^2.1.2", + "url": "^0.11.1" + }, + "devDependencies": { + "@chain-registry/types": "^0.45.1" + }, + "peerDependencies": { + "@chain-registry/types": ">= 0.17", + "@cosmjs/amino": "^0.32.3", + "@cosmjs/proto-signing": "^0.32.3", + "@keplr-wallet/cosmos": ">= 0.10", + "cosmjs-types": "^0.9.0" + } +} diff --git a/wallets/web3auth/src/constant.ts b/wallets/web3auth/src/constant.ts new file mode 100644 index 000000000..137e2e829 --- /dev/null +++ b/wallets/web3auth/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjY0LjY4ODciIGN5PSI2NC42ODgyIiByPSI1OS4xODI4IiBmaWxsPSIjMDM2NEZGIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNODguODc0NiA4NS41NjEyQzg4LjQ3NCA4Ny4wNTYgODYuMzUzIDg3LjA1NiA4NS45NTI0IDg1LjU2MTJMODEuMjg3MyA2OC4xNTA2QzgxLjE5NzEgNjcuODEzOSA4MS4xOTcxIDY3LjQ1OTUgODEuMjg3MyA2Ny4xMjI5TDg1LjQyMTQgNTEuNjk0Qzg1Ljc4NjkgNTAuMzMwMSA4Ny4wMjI5IDQ5LjM4MTcgODguNDM0OSA0OS4zODE3SDk0LjUwMzFDOTYuNTU0NCA0OS4zODE3IDk4LjA0NzUgNTEuMzI3NSA5Ny41MTY1IDUzLjMwOUw4OC44NzQ2IDg1LjU2MTJaTTQ4Ljg0ODEgNjguMTIxNUM0OC45MzgzIDY3Ljc4NDkgNDguOTM4MyA2Ny40MzA1IDQ4Ljg0ODEgNjcuMDkzOEw0NC43MjE3IDUxLjY5NEM0NC4zNTYyIDUwLjMzMDEgNDMuMTIwMyA0OS4zODE3IDQxLjcwODIgNDkuMzgxN0gzNS42NDAxQzMzLjU4ODcgNDkuMzgxNyAzMi4wOTU2IDUxLjMyNzUgMzIuNjI2NiA1My4zMDlMNDEuMjYwNyA4NS41MzIxQzQxLjY2MTMgODcuMDI2OSA0My43ODI0IDg3LjAyNjkgNDQuMTgyOSA4NS41MzIxTDQ4Ljg0ODEgNjguMTIxNVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNjEuOTkwNyA4OS4wNjlDNjEuODU0IDg5LjU3OTMgNjIuMjM4NSA5MC4wODA1IDYyLjc2NjkgOTAuMDgwNUg2Ny4zOTQ3QzY3LjkyMzEgOTAuMDgwNSA2OC4zMDc3IDg5LjU3OTMgNjguMTcwOSA4OS4wNjlMNjUuODU3IDgwLjQzMzRDNjUuNjQ0MiA3OS42MzkyIDY0LjUxNzQgNzkuNjM5MiA2NC4zMDQ2IDgwLjQzMzRMNjEuOTkwNyA4OS4wNjlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTU3LjM4MjkgOTQuNTk3OUM1Ny4wMjg1IDk1LjkyMDUgNTUuODMgOTYuODQwMiA1NC40NjA3IDk2Ljg0MDJINDguMTk2OEM0Ni4yMDc2IDk2Ljg0MDIgNDQuNzU5OCA5NC45NTMzIDQ1LjI3NDcgOTMuMDMxOUw1OC4xMjQ4IDQ1LjA3NDdDNTguNTEyNCA0My42MjgxIDU5LjgyMzMgNDIuNjIyMiA2MS4zMjA5IDQyLjYyMjJINjguNzc1N0M3MC4yNzMzIDQyLjYyMjIgNzEuNTg0MiA0My42MjgxIDcxLjk3MTggNDUuMDc0N0w4NC44MjIgOTMuMDMxOUM4NS4zMzY4IDk0Ljk1MzMgODMuODg5IDk2Ljg0MDIgODEuODk5OCA5Ni44NDAySDc1LjYzNTlDNzQuMjY2NiA5Ni44NDAyIDczLjA2ODEgOTUuOTIwNSA3Mi43MTM3IDk0LjU5NzlMNjYuNDYzNyA3MS4yNzI2QzY2LjA3NTcgNjkuODI0NSA2NC4wMjA5IDY5LjgyNDUgNjMuNjMyOSA3MS4yNzI2TDU3LjM4MjkgOTQuNTk3OVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNODguODkwOSA4NS41NjEyQzg4LjQ5MDMgODcuMDU2IDg2LjM2OTIgODcuMDU2IDg1Ljk2ODcgODUuNTYxMkw4MS4zMDM1IDY4LjE1MDZDODEuMjEzMyA2Ny44MTM5IDgxLjIxMzMgNjcuNDU5NSA4MS4zMDM1IDY3LjEyMjlMODcuMjQ4OSA0NC45MzQ1Qzg3LjYxNDQgNDMuNTcwNiA4OC44NTAzIDQyLjYyMjIgOTAuMjYyNCA0Mi42MjIySDk2LjMzMDVDOTguMzgxOSA0Mi42MjIyIDk5Ljg3NDkgNDQuNTY4IDk5LjM0NCA0Ni41NDk0TDg4Ljg5MDkgODUuNTYxMlpNNDguODY0MyA2OC4xMjE1QzQ4Ljk1NDUgNjcuNzg0OSA0OC45NTQ1IDY3LjQzMDUgNDguODY0MyA2Ny4wOTM4TDQyLjkyNjggNDQuOTM0NUM0Mi41NjEzIDQzLjU3MDYgNDEuMzI1MyA0Mi42MjIyIDM5LjkxMzMgNDIuNjIyMkgzMy44NDUxQzMxLjc5MzggNDIuNjIyMiAzMC4zMDA3IDQ0LjU2OCAzMC44MzE3IDQ2LjU0OTRMNDEuMjc3IDg1LjUzMjFDNDEuNjc3NiA4Ny4wMjY5IDQzLjc5ODYgODcuMDI2OSA0NC4xOTkyIDg1LjUzMjFMNDguODY0MyA2OC4xMjE1WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=='; diff --git a/wallets/web3auth/src/extension/chain-wallet.ts b/wallets/web3auth/src/extension/chain-wallet.ts new file mode 100644 index 000000000..0c1ff33e6 --- /dev/null +++ b/wallets/web3auth/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class Web3AuthChainWallet extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/web3auth/src/extension/client.ts b/wallets/web3auth/src/extension/client.ts new file mode 100644 index 000000000..ac9727460 --- /dev/null +++ b/wallets/web3auth/src/extension/client.ts @@ -0,0 +1,280 @@ +import { Chain } from '@chain-registry/types'; +import { OfflineAminoSigner, StdSignature } from '@cosmjs/amino'; +import { OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { DappEnv, WalletClient } from '@cosmos-kit/core'; +import { makeADR36AminoSignDoc } from '@keplr-wallet/cosmos'; +import eccrypto from '@toruslabs/eccrypto'; +import { UserInfo } from '@web3auth/base'; + +import { Web3AuthSigner } from './signer'; +import { Web3AuthClientOptions } from './types'; +import { + connectClientAndProvider, + decrypt, + sendAndListenOnce, + WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY, +} from './utils'; + +// In case these get overwritten by an attacker. +const terminate = + typeof Worker !== 'undefined' ? Worker.prototype.terminate : undefined; + +export class Web3AuthClient implements WalletClient { + env: DappEnv; + getChain: (chainId: string) => Chain | undefined; + + #worker?: Worker; + #clientPrivateKey?: Buffer; + #workerPublicKey?: Buffer; + #userInfo?: Partial; + #options?: Web3AuthClientOptions; + + // Map chain ID to signer. + #signers: Record = {}; + + ready = false; + + constructor( + env: DappEnv, + options: Web3AuthClientOptions, + getChain: (chainId: string) => Chain | undefined + ) { + this.env = env; + this.#options = Object.freeze(options); + this.getChain = getChain; + } + + async ensureSetup(): Promise { + if (this.ready) { + return; + } + + if (!this.#options) { + throw new Error('Web3Auth client not initialized'); + } + + // Don't keep any reference to these around after this function since they + // internally store a reference to the private key. Once we have the private + // key, send it to the worker and forget about it. After this function, the + // only reference to the private key is in the worker, and this client and + // provider will be destroyed by the garbage collector, hopefully ASAP. + const { client, provider } = await connectClientAndProvider( + this.env.device === 'mobile', + this.#options + ); + + // Get connected user info. + const userInfo = await client.getUserInfo(); + + // Get the private key. + const privateKeyHex = await provider?.request({ + method: 'private_key', + }); + if (typeof privateKeyHex !== 'string') { + throw new Error(`Failed to connect to ${this.#options.loginProvider}`); + } + + // Generate a private key for this client to interact with the worker. + const clientPrivateKey = eccrypto.generatePrivate(); + const clientPublicKey = eccrypto + .getPublic(clientPrivateKey) + .toString('hex'); + + // Spawn a new worker that will handle the private key and signing. + const worker = new Worker(new URL('./web3auth.worker.js', import.meta.url)); + + // Begin two-step handshake to authenticate with the worker and exchange + // communication public keys as well as the wallet private key. + + // 1. Send client public key so the worker can verify our signatures, and + // get the worker public key for encrypting the wallet private key in the + // next init step. + let workerPublicKey: Buffer | undefined; + await sendAndListenOnce( + worker, + { + type: 'init_1', + payload: { + publicKey: clientPublicKey, + }, + }, + async (data) => { + if (data.type === 'ready_1') { + workerPublicKey = await decrypt( + clientPrivateKey, + data.payload.encryptedPublicKey + ); + return true; + } else if (data.type === 'init_error') { + throw new Error(data.payload.error); + } + + return false; + } + ); + if (!workerPublicKey) { + throw new Error('Failed to authenticate with worker'); + } + + // 2. Encrypt and send the wallet private key to the worker. This is the + // last usage of `workerPublicKey`, so it should get garbage collected + // ASAP once this function ends. + const encryptedPrivateKey = await eccrypto.encrypt( + workerPublicKey, + Buffer.from(privateKeyHex, 'hex') + ); + await sendAndListenOnce( + worker, + { + type: 'init_2', + payload: { + encryptedPrivateKey, + }, + }, + (data) => { + if (data.type === 'ready_2') { + return true; + } else if (data.type === 'init_error') { + throw new Error(data.payload.error); + } + + return false; + } + ); + + // Store the setup instances. + this.#worker = worker; + this.#clientPrivateKey = clientPrivateKey; + this.#workerPublicKey = workerPublicKey; + this.#userInfo = userInfo; + this.ready = true; + } + + async connect(_chainIds: string | string[]) { + await this.ensureSetup(); + + const _chains = [_chainIds].flat().map((chainId) => { + const chain = this.getChain(chainId); + if (!chain) { + throw new Error(`Chain ID ${chainId} not found`); + } + + return chain; + }); + + // Create signers. + _chains.forEach((chain) => { + if ( + !this.#worker || + !this.#clientPrivateKey || + !this.#workerPublicKey || + !this.#options + ) { + throw new Error('Web3Auth client not initialized'); + } + + this.#signers[chain.chain_id] = new Web3AuthSigner( + chain, + this.#worker, + this.#clientPrivateKey, + this.#workerPublicKey, + this.#options.promptSign + ); + }); + } + + async disconnect() { + if (!this.#options) { + throw new Error('Web3Auth client not initialized'); + } + + // In case this web3auth client uses the redirect auto connect method, clear + // it so that it does not automatically connect on the next page load. + localStorage.removeItem(WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY); + + // Attempt to logout by first connecting a new client and then logging out + // if connected. It does not attempt to log in if it cannot automatically + // login from the cached session. This removes the need to keep the client + // around, which internally keeps a reference to the private key. + try { + const { client } = await connectClientAndProvider( + this.env.device === 'mobile', + this.#options, + { dontAttemptLogin: true } + ); + + if (client.connected) { + await client.logout({ + cleanup: true, + }); + } + } catch (err) { + console.warn('Web3Auth failed to logout:', err); + } + this.#signers = {}; + this.#userInfo = {}; + if (this.#worker) { + terminate?.call(this.#worker); + this.#worker = undefined; + } + this.ready = false; + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + if (!this.#userInfo) { + throw new Error('Web3Auth client not initialized'); + } + + const { address, algo, pubkey } = ( + await this.getOfflineSigner(chainId).getAccounts() + )[0]; + + return { + username: this.#userInfo.name || this.#userInfo.email || address, + algo, + pubkey, + address, + }; + } + + getOfflineSigner(chainId: string) { + const signer = this.#signers[chainId]; + if (!signer) { + throw new Error('Signer not enabled'); + } + return signer; + } + + getOfflineSignerAmino(chainId: string): OfflineAminoSigner { + return this.getOfflineSigner(chainId); + } + + getOfflineSignerDirect(chainId: string): OfflineDirectSigner { + return this.getOfflineSigner(chainId); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + // ADR 036 + // https://docs.cosmos.network/v0.47/architecture/adr-036-arbitrary-signature + const signDoc = makeADR36AminoSignDoc(signer, data); + + const offlineSigner = await this.getOfflineSignerAmino(chainId); + const { signature } = await offlineSigner.signAmino(signer, signDoc); + + return signature; + } +} diff --git a/wallets/web3auth/src/extension/index.ts b/wallets/web3auth/src/extension/index.ts new file mode 100644 index 000000000..c897a5059 --- /dev/null +++ b/wallets/web3auth/src/extension/index.ts @@ -0,0 +1,7 @@ +export * from './chain-wallet'; +export * from './client'; +export * from './main-wallet'; +export * from './registry'; +export * from './signer'; +export * from './types'; +export * from './utils'; diff --git a/wallets/web3auth/src/extension/main-wallet.ts b/wallets/web3auth/src/extension/main-wallet.ts new file mode 100644 index 000000000..dfbd2cbba --- /dev/null +++ b/wallets/web3auth/src/extension/main-wallet.ts @@ -0,0 +1,96 @@ +import { MainWalletBase } from '@cosmos-kit/core'; +import { getHashQueryParams } from '@toruslabs/openlogin'; +import { OPENLOGIN_NETWORK } from '@web3auth/openlogin-adapter'; + +import { Web3AuthChainWallet } from './chain-wallet'; +import { Web3AuthClient } from './client'; +import { Web3AuthWalletInfo } from './types'; +import { WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY } from './utils'; + +export class Web3AuthWallet extends MainWalletBase { + constructor(walletInfo: Web3AuthWalletInfo) { + super(walletInfo, Web3AuthChainWallet); + } + + get walletInfo(): Web3AuthWalletInfo { + return this._walletInfo as Web3AuthWalletInfo; + } + + async initClient() { + const { options } = this.walletInfo; + try { + if (!options) { + throw new Error('Web3auth options unset'); + } + + if (typeof options.client?.clientId !== 'string') { + throw new Error('Invalid web3auth client ID'); + } + + if ( + typeof options.client?.web3AuthNetwork !== 'string' || + !Object.values(OPENLOGIN_NETWORK).includes( + options.client.web3AuthNetwork + ) + ) { + throw new Error('Invalid web3auth network'); + } + + if (typeof options.promptSign !== 'function') { + throw new Error('Invalid promptSign function'); + } + } catch (err) { + this.initClientError(err); + return; + } + + this.initingClient(); + try { + if (typeof this.env === 'undefined') { + throw new Error('Undefined env.'); + } + this.initClientDone( + new Web3AuthClient( + this.env, + options, + (chainId) => + this.getChainWalletList().find( + (chainWallet) => chainWallet.chainId === chainId + )?.chain + ) + ); + + // Force connect to this wallet if the redirect auto connect key is set + // and there is a wallet in the hash. + const redirectAutoConnect = localStorage.getItem( + WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY + ); + if (redirectAutoConnect !== options.loginProvider) { + return; + } + + // Same logic used in `@web3auth/openlogin-adapter` > + // `@toruslabs/openlogin` init function to determine if the adapter should + // attempt to connect from the redirect. + const redirectResult = getHashQueryParams(); + const shouldAutoConnect = + Object.keys(redirectResult).length > 0 && + !!redirectResult.sessionId && + !redirectResult.error; + + if (shouldAutoConnect) { + try { + await this.connect(true); + } catch (error) { + this.logger?.error(error); + } + } else { + // Don't try to connect again if no hash query params ready. This + // prevents auto-connect loops. + localStorage.removeItem(WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY); + } + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/web3auth/src/extension/registry.ts b/wallets/web3auth/src/extension/registry.ts new file mode 100644 index 000000000..4fc298341 --- /dev/null +++ b/wallets/web3auth/src/extension/registry.ts @@ -0,0 +1,14 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const web3AuthWalletInfo: Wallet = { + name: 'web3auth', + prettyName: 'Web3Auth', + logo: ICON, + mode: 'extension', + mobileDisabled: false, + rejectMessage: { + source: 'Request rejected', + }, +}; diff --git a/wallets/web3auth/src/extension/signer.ts b/wallets/web3auth/src/extension/signer.ts new file mode 100644 index 000000000..8e27d6a78 --- /dev/null +++ b/wallets/web3auth/src/extension/signer.ts @@ -0,0 +1,211 @@ +import { Chain } from '@chain-registry/types'; +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignDoc, +} from '@cosmjs/amino'; +import { + AccountData, + DirectSignResponse, + OfflineDirectSigner, +} from '@cosmjs/proto-signing'; +import eccrypto from '@toruslabs/eccrypto'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +import { PromptSign, SignData, ToWorkerMessage } from './types'; +import { hashObject, sendAndListenOnce } from './utils'; + +export class Web3AuthSigner implements OfflineDirectSigner, OfflineAminoSigner { + chain: Chain; + #worker: Worker; + #clientPrivateKey: Buffer; + #workerPublicKey: Buffer; + #promptSign: PromptSign; + + constructor( + chain: Chain, + worker: Worker, + clientPrivateKey: Buffer, + workerPublicKey: Buffer, + promptSign: PromptSign + ) { + this.chain = chain; + this.#worker = worker; + this.#clientPrivateKey = clientPrivateKey; + this.#workerPublicKey = workerPublicKey; + this.#promptSign = promptSign; + } + + async getAccounts(): Promise { + let accounts: AccountData[] | undefined; + const id = Date.now(); + // Should not resolve until accounts are received. + await sendAndListenOnce( + this.#worker, + { + type: 'request_accounts', + payload: { + id, + chainBech32Prefix: this.chain.bech32_prefix, + }, + }, + async (data) => { + if (data.type === 'accounts' && data.payload.id === id) { + // Verify signature. + await eccrypto.verify( + this.#workerPublicKey, + hashObject(data.payload), + Buffer.from(data.signature) + ); + + if (data.payload.response.type === 'success') { + accounts = data.payload.response.accounts; + return true; + } else { + throw new Error(data.payload.response.error); + } + } + + return false; + } + ); + + if (!accounts) { + throw new Error('Failed to get accounts'); + } + + return accounts; + } + + async signDirect( + signerAddress: string, + signDoc: SignDoc + ): Promise { + if (signDoc.chainId !== this.chain.chain_id) { + throw new Error('Chain ID mismatch'); + } + + const signData: SignData = { + type: 'direct', + value: signDoc, + }; + if (!(await this.#promptSign(signerAddress, signData))) { + throw new Error('Request rejected'); + } + + // Create and sign signature request. + const id = Date.now(); + const message: ToWorkerMessage = { + type: 'request_sign', + payload: { + id, + signerAddress, + chainBech32Prefix: this.chain.bech32_prefix, + data: signData, + }, + signature: new Uint8Array(), + }; + message.signature = await eccrypto.sign( + this.#clientPrivateKey, + hashObject(message.payload) + ); + + let response: DirectSignResponse | undefined; + // Should not resolve until response is received. + await sendAndListenOnce(this.#worker, message, async (data) => { + if (data.type === 'sign' && data.payload.id === id) { + // Verify signature. + await eccrypto.verify( + this.#workerPublicKey, + hashObject(data.payload), + Buffer.from(data.signature) + ); + + if (data.payload.response.type === 'error') { + throw new Error(data.payload.response.value); + } + + // Type-check, should always be true. + if (data.payload.response.type === 'direct') { + response = data.payload.response.value; + } + + return true; + } + + return false; + }); + + if (!response) { + throw new Error('Failed to get response'); + } + + return response; + } + + async signAmino( + signerAddress: string, + signDoc: StdSignDoc + ): Promise { + if (signDoc.chain_id !== this.chain.chain_id) { + throw new Error('Chain ID mismatch'); + } + + const signData: SignData = { + type: 'amino', + value: signDoc, + }; + if (!(await this.#promptSign(signerAddress, signData))) { + throw new Error('Request rejected'); + } + + // Create and sign signature request. + const id = Date.now(); + const message: ToWorkerMessage = { + type: 'request_sign', + payload: { + id, + signerAddress, + chainBech32Prefix: this.chain.bech32_prefix, + data: signData, + }, + signature: new Uint8Array(), + }; + message.signature = await eccrypto.sign( + this.#clientPrivateKey, + hashObject(message.payload) + ); + + let response: AminoSignResponse | undefined; + // Should not resolve until response is received. + await sendAndListenOnce(this.#worker, message, async (data) => { + if (data.type === 'sign' && data.payload.id === id) { + // Verify signature. + await eccrypto.verify( + this.#workerPublicKey, + hashObject(data.payload), + Buffer.from(data.signature) + ); + + if (data.payload.response.type === 'error') { + throw new Error(data.payload.response.value); + } + + // Type-check, should always be true. + if (data.payload.response.type === 'amino') { + response = data.payload.response.value; + } + + return true; + } + + return false; + }); + + if (!response) { + throw new Error('Failed to get response'); + } + + return response; + } +} diff --git a/wallets/web3auth/src/extension/types.ts b/wallets/web3auth/src/extension/types.ts new file mode 100644 index 000000000..22b53faec --- /dev/null +++ b/wallets/web3auth/src/extension/types.ts @@ -0,0 +1,144 @@ +import { AminoSignResponse, StdSignDoc } from '@cosmjs/amino'; +import { AccountData, DirectSignResponse } from '@cosmjs/proto-signing'; +import { Wallet } from '@cosmos-kit/core'; +import { Ecies } from '@toruslabs/eccrypto'; +import { Web3AuthNoModalOptions } from '@web3auth/no-modal'; +import { + LOGIN_PROVIDER_TYPE, + OPENLOGIN_NETWORK_TYPE, +} from '@web3auth/openlogin-adapter'; +import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; + +export type Web3AuthWalletInfo = Wallet & { options: Web3AuthClientOptions }; + +export type Web3AuthLoginMethod = { + provider: LOGIN_PROVIDER_TYPE; + name: string; + logo: string; +}; + +export type Web3AuthClientOptions = { + loginProvider: LOGIN_PROVIDER_TYPE; + + // Web3Auth client options. + client: { + clientId: string; + web3AuthNetwork: OPENLOGIN_NETWORK_TYPE; + } & Omit & { + chainConfig?: Omit< + Web3AuthNoModalOptions['chainConfig'], + 'chainNamespace' + >; + }; + + // Mobile devices block popups by default, so the default behavior is to use + // the redirect method to sign-in on mobile, and the popup method on desktop. + // The popup is safer, but mobile browsers tend to have less extensions (and + // browser extensions are the main security concern for the redirect method). + // Forcing popup means that the popup method will be used on mobile as well. + forceType?: 'popup' | 'redirect'; + + // Function to prompt the user to sign a transaction. + promptSign: PromptSign; +}; + +export type PromptSign = ( + signerAddress: string, + data: SignData +) => Promise; + +export type SignData = + | { + type: 'direct'; + value: SignDoc; + } + | { + type: 'amino'; + value: StdSignDoc; + }; + +// Message the worker expects to receive. +export type ToWorkerMessage = + | { + type: 'init_1'; + payload: { + publicKey: string; + }; + } + | { + type: 'init_2'; + payload: { + encryptedPrivateKey: Ecies; + }; + } + | { + type: 'request_accounts'; + payload: { + id: number; + chainBech32Prefix: string; + }; + } + | { + type: 'request_sign'; + payload: { + id: number; + signerAddress: string; + chainBech32Prefix: string; + data: SignData; + }; + signature: Uint8Array; + }; + +// Message the worker sends to the main thread. +export type FromWorkerMessage = + | { + type: 'ready_1'; + payload: { + encryptedPublicKey: Ecies; + }; + } + | { + type: 'ready_2'; + } + | { + type: 'init_error'; + payload: { + error: string; + }; + } + | { + type: 'accounts'; + payload: { + id: number; + response: + | { + type: 'success'; + accounts: AccountData[]; + } + | { + type: 'error'; + error: string; + }; + }; + signature: Uint8Array; + } + | { + type: 'sign'; + payload: { + id: number; + response: + | { + type: 'error'; + value: string; + } + | { + type: 'direct'; + value: DirectSignResponse; + } + | { + type: 'amino'; + value: AminoSignResponse; + }; + }; + signature: Uint8Array; + }; diff --git a/wallets/web3auth/src/extension/utils.ts b/wallets/web3auth/src/extension/utils.ts new file mode 100644 index 000000000..fddd1d8c0 --- /dev/null +++ b/wallets/web3auth/src/extension/utils.ts @@ -0,0 +1,218 @@ +import { sha256 } from '@cosmjs/crypto'; +import { toUtf8 } from '@cosmjs/encoding'; +import eccrypto, { Ecies } from '@toruslabs/eccrypto'; +import { + ADAPTER_STATUS, + CHAIN_NAMESPACES, + CustomChainConfig, + SafeEventEmitterProvider, + WALLET_ADAPTERS, +} from '@web3auth/base'; +import { CommonPrivateKeyProvider } from '@web3auth/base-provider'; +import { Web3AuthNoModal } from '@web3auth/no-modal'; +import { + OpenloginAdapter, + OpenloginLoginParams, + UX_MODE, +} from '@web3auth/openlogin-adapter'; + +import { + FromWorkerMessage, + ToWorkerMessage, + Web3AuthClientOptions, +} from './types'; + +// If we connect to the Web3Auth client via redirect, set this key in +// localStorage to indicate that we should try to reconnect to this wallet +// after the redirect. This should be implemented by the WalletManagerProvider. +export const WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY = + '__cosmos-kit_web3auth_redirect_auto_connect'; + +// In case these get overwritten by an attacker. +const postMessage = + typeof Worker !== 'undefined' ? Worker.prototype.postMessage : undefined; +const addEventListener = + typeof Worker !== 'undefined' ? Worker.prototype.addEventListener : undefined; +const removeEventListener = + typeof Worker !== 'undefined' + ? Worker.prototype.removeEventListener + : undefined; + +// Listen for a message and remove the listener if the callback returns true or +// if it throws an error. +export const listenOnce = ( + worker: Worker, + callback: (message: FromWorkerMessage) => boolean | Promise +) => { + const listener = async ({ data }: MessageEvent) => { + let remove; + try { + remove = await callback(data); + } catch (error) { + console.error(error); + remove = true; + } + + if (remove) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + removeEventListener?.call(worker, 'message', listener as any); + } + }; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + addEventListener?.call(worker, 'message', listener as any); +}; + +// Send message to worker and listen for a response. Returns a promise that +// resolves when the callback returns true and rejects if it throws an error. +export const sendAndListenOnce = ( + worker: Worker, + message: ToWorkerMessage, + callback: (message: FromWorkerMessage) => boolean | Promise +): Promise => + new Promise((resolve, reject) => { + listenOnce(worker, async (data) => { + try { + if (await callback(data)) { + resolve(); + return true; + } else { + return false; + } + } catch (err) { + reject(err); + return true; + } + }); + + postMessage?.call(worker, message); + }); + +export const decrypt = async ( + privateKey: Uint8Array | Buffer, + { iv, ephemPublicKey, ciphertext, mac }: Ecies +): Promise => + await eccrypto.decrypt( + Buffer.from(privateKey), + // Convert Uint8Array to Buffer. + { + iv: Buffer.from(iv), + ephemPublicKey: Buffer.from(ephemPublicKey), + ciphertext: Buffer.from(ciphertext), + mac: Buffer.from(mac), + } + ); + +// Used for signing and verifying objects. +export const hashObject = (object: any) => { + const replacer = (_: string, value: any) => { + if (typeof value === 'bigint') { + return value.toString(); + } + return value; + }; + + return Buffer.from(sha256(toUtf8(JSON.stringify(object, replacer)))); +}; + +export const connectClientAndProvider = async ( + isMobile: boolean, + options: Web3AuthClientOptions, + { + // If no login provider already connected (cached), don't attempt to login + // by showing the popup auth flow. This is useful for connecting just to + // logout of the session, not prompting to login if already logged out. + dontAttemptLogin = false, + } = {} +): Promise<{ + client: Web3AuthNoModal; + provider: SafeEventEmitterProvider | null; +}> => { + const chainConfig: CustomChainConfig = { + chainId: 'other', + rpcTarget: 'other', + displayName: 'other', + blockExplorer: 'other', + ticker: 'other', + tickerName: 'other', + ...options.client.chainConfig, + chainNamespace: CHAIN_NAMESPACES.OTHER, + }; + const client = new Web3AuthNoModal({ + ...options.client, + chainConfig, + }); + + // Popups are blocked by default on mobile browsers, so use redirect. Popup is + // safer for desktop browsers, so use that if not mobile. + const uxMode = + options.forceType === 'redirect' || (isMobile && !options.forceType) + ? UX_MODE.REDIRECT + : UX_MODE.POPUP; + // If using redirect method while trying to login, set localStorage key + // indicating that we should try to reconnect to this wallet after the + // redirect on library init. + const usingRedirect = uxMode === UX_MODE.REDIRECT && !dontAttemptLogin; + if (usingRedirect) { + localStorage.setItem( + WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY, + options.loginProvider + ); + } + + const privateKeyProvider = new CommonPrivateKeyProvider({ + config: { + chainConfig, + }, + }); + const openloginAdapter = new OpenloginAdapter({ + privateKeyProvider, + adapterSettings: { + uxMode, + }, + }); + client.configureAdapter(openloginAdapter); + + await client.init(); + + let provider = client.connected ? client.provider : null; + if (!client.connected && !dontAttemptLogin) { + try { + provider = await client.connectTo(WALLET_ADAPTERS.OPENLOGIN, { + loginProvider: options.loginProvider, + } as OpenloginLoginParams); + } catch (err) { + // Unnecessary error thrown during redirect, so log and ignore it. + if ( + usingRedirect && + err instanceof Error && + err.message.includes('null') + ) { + console.error(err); + } else { + // Rethrow all other relevant errors. + throw err; + } + } + } + + if (usingRedirect) { + if (client.status === ADAPTER_STATUS.CONNECTED) { + // On successful connection from a redirect, remove the localStorage key + // so we do not attempt to auto connect on the next page load. + localStorage.removeItem(WEB3AUTH_REDIRECT_AUTO_CONNECT_KEY); + } else { + // If not yet connected but redirecting, hang to give the page time to + // redirect without throwing any errors. After 30 seconds, throw a + // timeout error because it should definitely have redirected by then. + await new Promise((_, reject) => + setTimeout(() => reject(new Error('Redirect timed out.')), 30000) + ); + } + } + + return { + client, + provider, + }; +}; diff --git a/wallets/web3auth/src/extension/web3auth.worker.ts b/wallets/web3auth/src/extension/web3auth.worker.ts new file mode 100644 index 000000000..1340ed03d --- /dev/null +++ b/wallets/web3auth/src/extension/web3auth.worker.ts @@ -0,0 +1,180 @@ +import { Secp256k1Wallet } from '@cosmjs/amino'; +import { DirectSecp256k1Wallet } from '@cosmjs/proto-signing'; +import eccrypto from '@toruslabs/eccrypto'; + +import { ToWorkerMessage } from './types'; +import { decrypt, hashObject } from './utils'; + +let clientPublicKey: Buffer | undefined; +let workerPrivateKey: Buffer | undefined; +let walletPrivateKey: Uint8Array | undefined; + +self.onmessage = async ({ data }: MessageEvent) => { + if (data.type === 'init_1') { + try { + // Store the client's public key. + clientPublicKey = Buffer.from(data.payload.publicKey, 'hex'); + + // Generate a private key for this worker. + workerPrivateKey = eccrypto.generatePrivate(); + + // Encrypt the worker's public key for the client. + const encryptedPublicKey = await eccrypto.encrypt( + clientPublicKey, + eccrypto.getPublic(workerPrivateKey) + ); + + return self.postMessage({ + type: 'ready_1', + payload: { + encryptedPublicKey, + }, + }); + } catch (err) { + console.error('Web3Auth worker init_1 error', err); + return self.postMessage({ + type: 'init_error', + payload: { + error: err instanceof Error ? err.message : `${err}`, + }, + }); + } + } + + if (!clientPublicKey || !workerPrivateKey) { + throw new Error('Web3Auth worker not initialized'); + } + + if (data.type === 'init_2') { + try { + // Decrypt the private key encrypted by the client. + walletPrivateKey = await decrypt( + workerPrivateKey, + data.payload.encryptedPrivateKey + ); + + return self.postMessage({ + type: 'ready_2', + }); + } catch (err) { + console.error('Web3Auth worker init_2 error', err); + return self.postMessage({ + type: 'init_error', + payload: { + error: err instanceof Error ? err.message : `${err}`, + }, + }); + } + } + + if (!walletPrivateKey) { + throw new Error('Web3Auth client not initialized'); + } + + if (data.type === 'request_accounts') { + let payload; + try { + const accounts = await ( + await DirectSecp256k1Wallet.fromKey( + walletPrivateKey, + data.payload.chainBech32Prefix + ) + ).getAccounts(); + + payload = { + id: data.payload.id, + response: { + type: 'success', + accounts, + }, + }; + } catch (err) { + console.error('Web3Auth worker accounts error', err); + payload = { + id: data.payload.id, + response: { + type: 'error', + error: err instanceof Error ? err.message : `${err}`, + }, + }; + } + + const signature = await eccrypto.sign( + workerPrivateKey, + hashObject(payload) + ); + return self.postMessage({ + type: 'accounts', + payload, + signature, + }); + } + + if (data.type === 'request_sign') { + let payload; + try { + // Verify signature. + await eccrypto.verify( + clientPublicKey, + hashObject(data.payload), + Buffer.from(data.signature) + ); + + if (data.payload.data.type === 'direct') { + const response = await ( + await DirectSecp256k1Wallet.fromKey( + walletPrivateKey, + data.payload.chainBech32Prefix + ) + ) + // @ts-ignore + .signDirect(data.payload.signerAddress, data.payload.data.value); + + payload = { + id: data.payload.id, + response: { + type: 'direct', + value: response, + }, + }; + } else if (data.payload.data.type === 'amino') { + const response = await ( + await Secp256k1Wallet.fromKey( + walletPrivateKey, + data.payload.chainBech32Prefix + ) + ).signAmino(data.payload.signerAddress, data.payload.data.value); + + payload = { + id: data.payload.id, + response: { + type: 'amino', + value: response, + }, + }; + } else { + throw new Error('Invalid sign data type'); + } + } catch (err) { + console.error('Web3Auth worker sign error', err); + + payload = { + id: data.payload.id, + response: { + type: 'error', + value: err instanceof Error ? err.message : `${err}`, + }, + }; + } + + const signature = await eccrypto.sign( + workerPrivateKey, + hashObject(payload) + ); + return self.postMessage({ + type: 'sign', + payload, + signature, + }); + } +}; diff --git a/wallets/web3auth/src/index.ts b/wallets/web3auth/src/index.ts new file mode 100644 index 000000000..df029f4f8 --- /dev/null +++ b/wallets/web3auth/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './web3auth'; diff --git a/wallets/web3auth/src/web3auth.ts b/wallets/web3auth/src/web3auth.ts new file mode 100644 index 000000000..e42f79bea --- /dev/null +++ b/wallets/web3auth/src/web3auth.ts @@ -0,0 +1,21 @@ +import { Web3AuthWallet, web3AuthWalletInfo } from './extension'; +import { Web3AuthClientOptions, Web3AuthLoginMethod } from './extension/types'; + +export const makeWeb3AuthWallets = ( + options: Omit & { + loginMethods: Web3AuthLoginMethod[]; + } +) => + options.loginMethods.map( + ({ provider, name, logo }) => + new Web3AuthWallet({ + ...web3AuthWalletInfo, + name: web3AuthWalletInfo.name + '_' + provider, + prettyName: name, + logo, + options: { + ...options, + loginProvider: provider, + }, + }) + ); diff --git a/wallets/web3auth/tsconfig.json b/wallets/web3auth/tsconfig.json new file mode 100644 index 000000000..93145a76d --- /dev/null +++ b/wallets/web3auth/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src", + "strictNullChecks": true, + "module": "es2022" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/xdefi-extension/.editorconfig b/wallets/xdefi-extension/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/xdefi-extension/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/xdefi-extension/.eslintignore b/wallets/xdefi-extension/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/xdefi-extension/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/xdefi-extension/.eslintrc.json b/wallets/xdefi-extension/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/xdefi-extension/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/xdefi-extension/.gitignore b/wallets/xdefi-extension/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/xdefi-extension/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/xdefi-extension/.npmignore b/wallets/xdefi-extension/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/xdefi-extension/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/xdefi-extension/.npmrc b/wallets/xdefi-extension/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/xdefi-extension/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/xdefi-extension/.prettierrc.json b/wallets/xdefi-extension/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/xdefi-extension/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/xdefi-extension/CHANGELOG.md b/wallets/xdefi-extension/CHANGELOG.md new file mode 100644 index 000000000..7716b1e64 --- /dev/null +++ b/wallets/xdefi-extension/CHANGELOG.md @@ -0,0 +1,793 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.11.1...@cosmos-kit/xdefi-extension@2.11.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + + + + + +## [2.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.11.0...@cosmos-kit/xdefi-extension@2.11.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + + + + + +# [2.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.10.0...@cosmos-kit/xdefi-extension@2.11.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.9.0...@cosmos-kit/xdefi-extension@2.10.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.8.0...@cosmos-kit/xdefi-extension@2.9.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.7.3...@cosmos-kit/xdefi-extension@2.8.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + + + + + +## [2.7.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.7.2...@cosmos-kit/xdefi-extension@2.7.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.7.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.7.1...@cosmos-kit/xdefi-extension@2.7.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.7.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.7.0...@cosmos-kit/xdefi-extension@2.7.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.9...@cosmos-kit/xdefi-extension@2.7.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.8...@cosmos-kit/xdefi-extension@2.6.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.7...@cosmos-kit/xdefi-extension@2.6.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.6...@cosmos-kit/xdefi-extension@2.6.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.5...@cosmos-kit/xdefi-extension@2.6.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.4...@cosmos-kit/xdefi-extension@2.6.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.3...@cosmos-kit/xdefi-extension@2.6.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.2...@cosmos-kit/xdefi-extension@2.6.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.1...@cosmos-kit/xdefi-extension@2.6.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.6.0...@cosmos-kit/xdefi-extension@2.6.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.16...@cosmos-kit/xdefi-extension@2.6.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.15...@cosmos-kit/xdefi-extension@2.5.16) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.14...@cosmos-kit/xdefi-extension@2.5.15) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.13...@cosmos-kit/xdefi-extension@2.5.14) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.12...@cosmos-kit/xdefi-extension@2.5.13) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.11...@cosmos-kit/xdefi-extension@2.5.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.10...@cosmos-kit/xdefi-extension@2.5.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.9...@cosmos-kit/xdefi-extension@2.5.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.8...@cosmos-kit/xdefi-extension@2.5.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.7...@cosmos-kit/xdefi-extension@2.5.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.6...@cosmos-kit/xdefi-extension@2.5.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.5...@cosmos-kit/xdefi-extension@2.5.6) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.4...@cosmos-kit/xdefi-extension@2.5.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.3...@cosmos-kit/xdefi-extension@2.5.4) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.2...@cosmos-kit/xdefi-extension@2.5.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.1...@cosmos-kit/xdefi-extension@2.5.2) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.5.0...@cosmos-kit/xdefi-extension@2.5.1) (2023-10-17) + +### Bug Fixes + +- race condition when getting wallet when document state changes ([2aa252a](https://github.com/cosmology-tech/cosmos-kit/commit/2aa252a6735e3a1a5f3bdaa3eea9925dea7138c3)) + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.9...@cosmos-kit/xdefi-extension@2.5.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.8...@cosmos-kit/xdefi-extension@2.4.9) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.7...@cosmos-kit/xdefi-extension@2.4.8) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.6...@cosmos-kit/xdefi-extension@2.4.7) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.5...@cosmos-kit/xdefi-extension@2.4.6) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.4...@cosmos-kit/xdefi-extension@2.4.5) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.3...@cosmos-kit/xdefi-extension@2.4.4) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.2...@cosmos-kit/xdefi-extension@2.4.3) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.1...@cosmos-kit/xdefi-extension@2.4.2) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.4.0...@cosmos-kit/xdefi-extension@2.4.1) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.3.3...@cosmos-kit/xdefi-extension@2.4.0) (2023-09-02) + +### Features + +- Add Missing Sign Methods to Wallet Clients ([#1](https://github.com/cosmology-tech/cosmos-kit/issues/1)) ([0657840](https://github.com/cosmology-tech/cosmos-kit/commit/06578403a64a210023943031c40a9caf70d49866)) + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.3.2...@cosmos-kit/xdefi-extension@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.3.1...@cosmos-kit/xdefi-extension@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.3.0...@cosmos-kit/xdefi-extension@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.2.1...@cosmos-kit/xdefi-extension@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.2.0...@cosmos-kit/xdefi-extension@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.12...@cosmos-kit/xdefi-extension@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.11...@cosmos-kit/xdefi-extension@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.10...@cosmos-kit/xdefi-extension@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.9...@cosmos-kit/xdefi-extension@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.8...@cosmos-kit/xdefi-extension@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.7...@cosmos-kit/xdefi-extension@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.6...@cosmos-kit/xdefi-extension@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.5...@cosmos-kit/xdefi-extension@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.4...@cosmos-kit/xdefi-extension@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.3...@cosmos-kit/xdefi-extension@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.2...@cosmos-kit/xdefi-extension@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.1...@cosmos-kit/xdefi-extension@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.1.0...@cosmos-kit/xdefi-extension@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.5...@cosmos-kit/xdefi-extension@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.4...@cosmos-kit/xdefi-extension@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.3...@cosmos-kit/xdefi-extension@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.2...@cosmos-kit/xdefi-extension@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1...@cosmos-kit/xdefi-extension@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.6...@cosmos-kit/xdefi-extension@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.5...@cosmos-kit/xdefi-extension@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.4...@cosmos-kit/xdefi-extension@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.3...@cosmos-kit/xdefi-extension@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.2...@cosmos-kit/xdefi-extension@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.1...@cosmos-kit/xdefi-extension@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@2.0.1-beta.0...@cosmos-kit/xdefi-extension@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@1.0.0...@cosmos-kit/xdefi-extension@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2-beta.6...@cosmos-kit/xdefi-extension@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2-beta.5...@cosmos-kit/xdefi-extension@0.16.2-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2-beta.4...@cosmos-kit/xdefi-extension@0.16.2-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2-beta.3...@cosmos-kit/xdefi-extension@0.16.2-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2...@cosmos-kit/xdefi-extension@0.16.2-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.1...@cosmos-kit/xdefi-extension@0.16.2) (2023-06-30) + +## [0.16.2-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2-beta.1...@cosmos-kit/xdefi-extension@0.16.2-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.2-beta.0...@cosmos-kit/xdefi-extension@0.16.2-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.2-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.1...@cosmos-kit/xdefi-extension@0.16.2-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.16.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.16.0...@cosmos-kit/xdefi-extension@0.16.1) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [0.16.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.34...@cosmos-kit/xdefi-extension@0.16.0) (2023-06-13) + +### Bug Fixes + +- Fix build:ts errors after import logos as datauri ([e76db45](https://github.com/cosmology-tech/cosmos-kit/commit/e76db45bf9165982f1697f253565063b52b83afc)) + +### Features + +- Add signArbitrary to XDEFI extension ([c516087](https://github.com/cosmology-tech/cosmos-kit/commit/c5160873d3b1c73b279992e058be8db8c7ed2847)) +- embed logos in html ([8483c0b](https://github.com/cosmology-tech/cosmos-kit/commit/8483c0bb3f3b3a5dfb22e5644a3e695deadc92dd)) + +## [0.15.34](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.33...@cosmos-kit/xdefi-extension@0.15.34) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.32...@cosmos-kit/xdefi-extension@0.15.33) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.31...@cosmos-kit/xdefi-extension@0.15.32) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.30...@cosmos-kit/xdefi-extension@0.15.31) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.29...@cosmos-kit/xdefi-extension@0.15.30) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.28...@cosmos-kit/xdefi-extension@0.15.29) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.27...@cosmos-kit/xdefi-extension@0.15.28) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.26...@cosmos-kit/xdefi-extension@0.15.27) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.25...@cosmos-kit/xdefi-extension@0.15.26) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.24...@cosmos-kit/xdefi-extension@0.15.25) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.23...@cosmos-kit/xdefi-extension@0.15.24) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.22...@cosmos-kit/xdefi-extension@0.15.23) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.22](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.21...@cosmos-kit/xdefi-extension@0.15.22) (2023-04-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.20...@cosmos-kit/xdefi-extension@0.15.21) (2023-04-25) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.19...@cosmos-kit/xdefi-extension@0.15.20) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.18...@cosmos-kit/xdefi-extension@0.15.19) (2023-04-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.17...@cosmos-kit/xdefi-extension@0.15.18) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.16...@cosmos-kit/xdefi-extension@0.15.17) (2023-04-20) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.15...@cosmos-kit/xdefi-extension@0.15.16) (2023-04-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.14...@cosmos-kit/xdefi-extension@0.15.15) (2023-04-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.13...@cosmos-kit/xdefi-extension@0.15.14) (2023-03-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.12...@cosmos-kit/xdefi-extension@0.15.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.11...@cosmos-kit/xdefi-extension@0.15.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.10...@cosmos-kit/xdefi-extension@0.15.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.9...@cosmos-kit/xdefi-extension@0.15.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.8...@cosmos-kit/xdefi-extension@0.15.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.7...@cosmos-kit/xdefi-extension@0.15.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.6...@cosmos-kit/xdefi-extension@0.15.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.5...@cosmos-kit/xdefi-extension@0.15.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.4...@cosmos-kit/xdefi-extension@0.15.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.3...@cosmos-kit/xdefi-extension@0.15.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.2...@cosmos-kit/xdefi-extension@0.15.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.1...@cosmos-kit/xdefi-extension@0.15.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.15.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.15.0...@cosmos-kit/xdefi-extension@0.15.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# [0.15.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.10...@cosmos-kit/xdefi-extension@0.15.0) (2023-02-27) + +### Features + +- leap account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.9...@cosmos-kit/xdefi-extension@0.14.10) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.8...@cosmos-kit/xdefi-extension@0.14.9) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.7...@cosmos-kit/xdefi-extension@0.14.8) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.6...@cosmos-kit/xdefi-extension@0.14.7) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.5...@cosmos-kit/xdefi-extension@0.14.6) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.4...@cosmos-kit/xdefi-extension@0.14.5) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.3...@cosmos-kit/xdefi-extension@0.14.4) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.2...@cosmos-kit/xdefi-extension@0.14.3) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.1...@cosmos-kit/xdefi-extension@0.14.2) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.14.0...@cosmos-kit/xdefi-extension@0.14.1) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +# 0.14.0 (2023-02-16) + +### Features + +- add xdefi-extension ([15ed8c2](https://github.com/cosmology-tech/cosmos-kit/commit/15ed8c22e8daa0b90dead1a64d9c8c12165765d7)) + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.13.19...@cosmos-kit/xdefi-extension@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.13.18...@cosmos-kit/xdefi-extension@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.13.17...@cosmos-kit/xdefi-extension@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.13.16...@cosmos-kit/xdefi-extension@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi-extension@0.13.15...@cosmos-kit/xdefi-extension@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## 0.13.15 (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/xdefi-extension + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.13...@cosmos-kit/xdefi@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.12...@cosmos-kit/xdefi@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.11...@cosmos-kit/xdefi@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.10...@cosmos-kit/xdefi@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.9...@cosmos-kit/xdefi@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.8...@cosmos-kit/xdefi@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.7...@cosmos-kit/xdefi@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.6...@cosmos-kit/xdefi@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.5...@cosmos-kit/xdefi@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.4...@cosmos-kit/xdefi@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.3...@cosmos-kit/xdefi@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.2...@cosmos-kit/xdefi@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.1...@cosmos-kit/xdefi@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.0...@cosmos-kit/xdefi@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.12.0...@cosmos-kit/xdefi@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.11.2...@cosmos-kit/xdefi@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.11.1...@cosmos-kit/xdefi@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.11.0...@cosmos-kit/xdefi@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.6...@cosmos-kit/xdefi@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.5...@cosmos-kit/xdefi@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.4...@cosmos-kit/xdefi@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.3...@cosmos-kit/xdefi@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.2...@cosmos-kit/xdefi@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.1...@cosmos-kit/xdefi@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.0...@cosmos-kit/xdefi@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.9.1...@cosmos-kit/xdefi@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.9.0...@cosmos-kit/xdefi@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.8.1...@cosmos-kit/xdefi@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.8.0...@cosmos-kit/xdefi@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.7.0...@cosmos-kit/xdefi@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.6.0...@cosmos-kit/xdefi@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.5.0...@cosmos-kit/xdefi@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.4.2...@cosmos-kit/xdefi@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.4.1...@cosmos-kit/xdefi@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.4.0...@cosmos-kit/xdefi@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.3.0...@cosmos-kit/xdefi@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.2.2...@cosmos-kit/xdefi@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.2.1...@cosmos-kit/xdefi@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.2.0...@cosmos-kit/xdefi@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.6...@cosmos-kit/xdefi@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.5...@cosmos-kit/xdefi@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.4...@cosmos-kit/xdefi@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.3...@cosmos-kit/xdefi@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.1...@cosmos-kit/xdefi@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.0...@cosmos-kit/xdefi@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/xdefi-extension/LICENSE b/wallets/xdefi-extension/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/xdefi-extension/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/xdefi-extension/README.md b/wallets/xdefi-extension/README.md new file mode 100644 index 000000000..673a13964 --- /dev/null +++ b/wallets/xdefi-extension/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/xdefi-extension + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/xdefi-extension is the xdefi integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/xdefi-extension/index.ts b/wallets/xdefi-extension/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/xdefi-extension/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/xdefi-extension/package.json b/wallets/xdefi-extension/package.json new file mode 100644 index 000000000..b5438ae8f --- /dev/null +++ b/wallets/xdefi-extension/package.json @@ -0,0 +1,69 @@ +{ + "name": "@cosmos-kit/xdefi-extension", + "version": "2.11.2", + "description": "cosmos-kit wallet connector", + "author": "dp@xdefi.io", + "contributors": [ + { + "name": "David Phan" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "xdefi", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "jest": { + "testPathIgnorePatterns": [ + "dist/" + ] + }, + "dependencies": { + "@cosmos-kit/core": "^2.13.1" + }, + "peerDependencies": { + "@cosmjs/amino": ">=0.32.3", + "@cosmjs/proto-signing": ">=0.32.3" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/xdefi-extension/src/constant.ts b/wallets/xdefi-extension/src/constant.ts new file mode 100644 index 000000000..5cb8444da --- /dev/null +++ b/wallets/xdefi-extension/src/constant.ts @@ -0,0 +1,2 @@ +export const ICON = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzFfOSkiPgo8bWFzayBpZD0ibWFzazBfMV85IiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij4KPHBhdGggZD0iTTQ4IDBIMFY0OEg0OFYwWiIgZmlsbD0id2hpdGUiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzFfOSkiPgo8cGF0aCBkPSJNMzguMjUgMEg5Ljc1QzQuMzY1MjIgMCAwIDQuMzY1MjIgMCA5Ljc1VjM4LjI1QzAgNDMuNjM0OCA0LjM2NTIyIDQ4IDkuNzUgNDhIMzguMjVDNDMuNjM0OCA0OCA0OCA0My42MzQ4IDQ4IDM4LjI1VjkuNzVDNDggNC4zNjUyMiA0My42MzQ4IDAgMzguMjUgMFoiIGZpbGw9IiMzMzVERTUiLz4KPHBhdGggZD0iTTQzLjQ0NzMgMjIuNjE2OUM0My4xOTY3IDE5LjIzMTQgNDIuMDU0NCAxNS45NjkyIDQwLjEzMzIgMTMuMTUwNEMzOC4yMTI0IDEwLjMzMjEgMzUuNTc5IDguMDU0ODMgMzIuNDkxOCA2LjU0MzM3QzI5LjQwNSA1LjAzMjMxIDI1Ljk3MTcgNC4zMzg3OSAyMi41MyA0LjUzMTUzQzE5LjA4OCA0LjcyNDI2IDE1Ljc1NjUgNS43OTYxNCAxMi44NjM2IDcuNjQyNTFDOS45NzA2OSA5LjQ4ODQ0IDcuNjE2MTkgMTIuMDQ1IDYuMDMxNzQgMTUuMDU5Nkw1Ljk1NjUgMTUuMjExNkM1LjQ1NTk4IDE2LjIzMDYgNS4xMTc2MSAxNy4zMTk4IDQuOTUzODUgMTguNDQwM0M0LjQ4NTUyIDIxLjc1MiA1LjIxMTc1IDI0LjY5OTQgNy4xMDg4MyAyNi45Njg4QzkuMTgzNzQgMjkuNDUwMiAxMi41NjE4IDMwLjkyNjIgMTYuNjEzOSAzMS4xMkMyMS41NDY3IDMxLjM2NDUgMjYuNDUxNCAzMC4wNDA3IDI5LjkzMiAyNy42MDU0TDMxLjk5NTcgMjguODE0M0MzMC4wMjQyIDMwLjQ5NiAyNS40NjYgMzMuNTI0NCAxNy45MTY3IDMzLjkzODNDOS40NDI0MSAzNC4zOTk3IDUuOTEwMjMgMzEuNjg3NiA1Ljg3NzIzIDMxLjY1OTlMNS4yODI5NyAzMi4zODE1TDQuNSAzMy4zMDY4QzQuNjUwMDcgMzMuNDMxMiA4LjAzNzA1IDM2LjEyNTIgMTUuOTkxNSAzNi4xMjUyQzE2LjY0MjUgMzYuMTI1MiAxNy4zMjY1IDM2LjEyNTIgMTguMDM4NiAzNi4wNjk5QzI3LjE3NTYgMzUuNTY3OSAzMi4yMDA5IDMxLjY0NzcgMzMuOTU5MiAyOS45NjUyTDM1LjY4NTIgMzAuOTk3MkMzNC41MjQ1IDMyLjQ5OTIgMzMuMDk2MSAzMy43ODEyIDMxLjQ2OTEgMzQuNzc5NkMyNS43MzQ3IDM4LjQyMzMgMTguNDQxNCAzOC44OTM4IDEzLjMzNTIgMzguNjQwMkwxMy4yMjc3IDQwLjc2NTRDMTQuMDg1MiA0MC44MDY4IDE0LjkwOTUgNDAuODI1NCAxNS43MTA2IDQwLjgyNTRDMzAuMDk4MiA0MC44MjU0IDM1LjkxODYgMzQuMzc5OSAzNy41NTA1IDMyLjA2ODNMMzguODk5MiAzMi44NTgyQzM3LjYwNjQgMzUuMDI1MyAzNS44NDkzIDM2Ljg5NjkgMzMuNzQzNSAzOC4zMzhDMzEuMjIxOSA0MC4wNjM2IDI4LjI4NzcgNDEuMTEyOSAyNS4yMjk0IDQxLjM4MjdMMjUuNDE2OSA0My41QzI4Ljg1MDUgNDMuMTk4NyAzMi4xNDU3IDQyLjAyMjEgMzQuOTc3MSA0MC4wODU3QzM3LjgwODQgMzguMTQ5MyA0MC4wNzg5IDM1LjUyMDEgNDEuNTY0IDMyLjQ1NjlDNDMuMDQ4NiAyOS4zOTMzIDQzLjY5ODQgMjYuMDAyMyA0My40NDczIDIyLjYxNjlaTTM1LjEzODQgMjIuOTQ0M0MzNC4xODM3IDIyLjk0NDMgMzMuNDA5NSAyMi4xODI1IDMzLjQwOTUgMjEuMjQyNEMzMy40MDk1IDIwLjMwMjUgMzQuMTgzMiAxOS41NDA2IDM1LjEzODQgMTkuNTQwNkMzNi4wOTI4IDE5LjU0MDYgMzYuODY2OSAyMC4zMDI1IDM2Ljg2NjkgMjEuMjQyNEMzNi44NjY5IDIyLjE4MjUgMzYuMDkzMiAyMi45NDQzIDM1LjEzODQgMjIuOTQ0M1oiIGZpbGw9IiNFQ0VDRUMiLz4KPC9nPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfOSI+CjxyZWN0IHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'; \ No newline at end of file diff --git a/wallets/xdefi-extension/src/extension/chain-wallet.ts b/wallets/xdefi-extension/src/extension/chain-wallet.ts new file mode 100644 index 000000000..d7d637f15 --- /dev/null +++ b/wallets/xdefi-extension/src/extension/chain-wallet.ts @@ -0,0 +1,7 @@ +import { ChainRecord, ChainWalletBase, Wallet } from '@cosmos-kit/core'; + +export class ChainXDEFIExtension extends ChainWalletBase { + constructor(walletInfo: Wallet, chainInfo: ChainRecord) { + super(walletInfo, chainInfo); + } +} diff --git a/wallets/xdefi-extension/src/extension/client.ts b/wallets/xdefi-extension/src/extension/client.ts new file mode 100644 index 000000000..859588287 --- /dev/null +++ b/wallets/xdefi-extension/src/extension/client.ts @@ -0,0 +1,119 @@ +import { StdSignature, StdSignDoc } from '@cosmjs/amino'; +import { Algo, OfflineDirectSigner } from '@cosmjs/proto-signing'; +import { BroadcastMode, SignType } from '@cosmos-kit/core'; +import { DirectSignDoc, SignOptions, WalletClient } from '@cosmos-kit/core'; + +import { XDEFI } from './types'; +import Long from 'long'; + +export class XDEFIClient implements WalletClient { + readonly client: XDEFI; + private _defaultSignOptions: SignOptions = { + preferNoSetFee: false, + preferNoSetMemo: true, + disableBalanceCheck: true, + }; + + get defaultSignOptions() { + return this._defaultSignOptions; + } + + setDefaultSignOptions(options: SignOptions) { + this._defaultSignOptions = options; + } + + constructor(client: XDEFI) { + this.client = client; + } + + async enable(chainIds: string | string[]) { + await this.client.enable(chainIds); + } + + async disconnect() { + await this.client?.disconnect?.(); + } + + async getSimpleAccount(chainId: string) { + const { address, username } = await this.getAccount(chainId); + return { + namespace: 'cosmos', + chainId, + address, + username, + }; + } + + async getAccount(chainId: string) { + const key = await this.client.getKey(chainId); + return { + username: key.name, + address: key.bech32Address, + algo: key.algo as Algo, + pubkey: key.pubKey, + }; + } + + getOfflineSigner(chainId: string, preferredSignType?: SignType) { + switch (preferredSignType) { + case 'amino': + return this.getOfflineSignerAmino(chainId); + case 'direct': + return this.getOfflineSignerDirect(chainId); + default: + return this.getOfflineSignerAmino(chainId); + } + // return this.client.getOfflineSignerAuto(chainId); + } + + getOfflineSignerAmino(chainId: string) { + return this.client.getOfflineSignerOnlyAmino(chainId); + } + + getOfflineSignerDirect(chainId: string) { + return this.client.getOfflineSigner(chainId) as OfflineDirectSigner; + } + + async signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signAmino( + chainId, + signer, + signDoc, + signOptions || this.defaultSignOptions + ); + } + + async signDirect( + chainId: string, + signer: string, + signDoc: DirectSignDoc, + signOptions?: SignOptions + ) { + return await this.client.signDirect( + chainId, + signer, + { + ...signDoc, + accountNumber: Long.fromString(signDoc.accountNumber.toString()), + }, + signOptions || this.defaultSignOptions + ); + } + + async signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise { + return await this.client.signArbitrary(chainId, signer, data); + } + + async sendTx(chainId: string, tx: Uint8Array, mode: BroadcastMode) { + return await this.client.sendTx(chainId, tx, mode); + } +} diff --git a/wallets/xdefi-extension/src/extension/index.ts b/wallets/xdefi-extension/src/extension/index.ts new file mode 100644 index 000000000..f488a5ae7 --- /dev/null +++ b/wallets/xdefi-extension/src/extension/index.ts @@ -0,0 +1,4 @@ +export * from './chain-wallet'; +export * from './main-wallet'; +export * from './registry'; +export * from './types'; diff --git a/wallets/xdefi-extension/src/extension/main-wallet.ts b/wallets/xdefi-extension/src/extension/main-wallet.ts new file mode 100644 index 000000000..8f9c9fe7d --- /dev/null +++ b/wallets/xdefi-extension/src/extension/main-wallet.ts @@ -0,0 +1,22 @@ +import { State, Wallet } from '@cosmos-kit/core'; +import { MainWalletBase } from '@cosmos-kit/core'; + +import { ChainXDEFIExtension } from './chain-wallet'; +import { XDEFIClient } from './client'; +import { getXDEFIFromExtension } from './utils'; + +export class XDEFIExtensionWallet extends MainWalletBase { + constructor(walletInfo: Wallet) { + super(walletInfo, ChainXDEFIExtension); + } + + async initClient() { + this.initingClient(); + try { + const xdefi = await getXDEFIFromExtension(); + this.initClientDone(xdefi ? new XDEFIClient(xdefi) : undefined); + } catch (error) { + this.initClientError(error); + } + } +} diff --git a/wallets/xdefi-extension/src/extension/registry.ts b/wallets/xdefi-extension/src/extension/registry.ts new file mode 100644 index 000000000..8f0e46e30 --- /dev/null +++ b/wallets/xdefi-extension/src/extension/registry.ts @@ -0,0 +1,24 @@ +import { Wallet } from '@cosmos-kit/core'; + +import { ICON } from '../constant'; + +export const xdefiExtensionInfo: Wallet = { + name: 'xdefi-extension', + prettyName: 'XDEFI', + logo: ICON, + mode: 'extension', + mobileDisabled: true, + rejectMessage: { + source: 'Request rejected', + }, + downloads: [ + { + device: 'desktop', + browser: 'chrome', + link: 'https://chrome.google.com/webstore/detail/xdefi-wallet/hmeobnfnfcmdkdcmlblgagmfpfboieaf', + }, + { + link: 'https://chrome.google.com/webstore/detail/xdefi-wallet/hmeobnfnfcmdkdcmlblgagmfpfboieaf', + }, + ], +}; diff --git a/wallets/xdefi-extension/src/extension/types.ts b/wallets/xdefi-extension/src/extension/types.ts new file mode 100644 index 000000000..23554eee6 --- /dev/null +++ b/wallets/xdefi-extension/src/extension/types.ts @@ -0,0 +1,72 @@ +import { + AminoSignResponse, + OfflineAminoSigner, + StdSignature, + StdSignDoc, +} from '@cosmjs/amino'; +import { OfflineDirectSigner, OfflineSigner } from '@cosmjs/proto-signing'; +import { DirectSignResponse } from '@cosmjs/proto-signing'; +import { BroadcastMode, Key } from '@cosmos-kit/core'; + +export interface XDEFISignOptions { + readonly preferNoSetFee?: boolean; + readonly preferNoSetMemo?: boolean; + readonly disableBalanceCheck?: boolean; +} + +export interface XDEFI { + isXDEFI: boolean; + disconnect(): Promise; + enable(chainIds: string | string[]): Promise; + mode: 'extension'; + getKey(chainId: string): Promise; + getOfflineSigner(chainId: string): OfflineAminoSigner & OfflineDirectSigner; + getOfflineSignerOnlyAmino(chainId: string): OfflineAminoSigner; + getOfflineSignerAuto(chainId: string): Promise; + signAmino( + chainId: string, + signer: string, + signDoc: StdSignDoc, + signOptions?: XDEFISignOptions + ): Promise; + signDirect( + chainId: string, + signer: string, + signDoc: { + /** SignDoc bodyBytes */ + bodyBytes?: Uint8Array | null; + /** SignDoc authInfoBytes */ + authInfoBytes?: Uint8Array | null; + /** SignDoc chainId */ + chainId?: string | null; + /** SignDoc accountNumber */ + accountNumber?: Long | null; + }, + signOptions?: XDEFISignOptions + ): Promise; + signArbitrary( + chainId: string, + signer: string, + data: string | Uint8Array + ): Promise; + getEnigmaPubKey(chainId: string): Promise; + getEnigmaTxEncryptionKey( + chainId: string, + nonce: Uint8Array + ): Promise; + enigmaEncrypt( + chainId: string, + contractCodeHash: string, + msg: object + ): Promise; + enigmaDecrypt( + chainId: string, + ciphertext: Uint8Array, + nonce: Uint8Array + ): Promise; + sendTx( + chainId: string, + tx: Uint8Array, + mode: BroadcastMode + ): Promise; +} diff --git a/wallets/xdefi-extension/src/extension/utils.ts b/wallets/xdefi-extension/src/extension/utils.ts new file mode 100644 index 000000000..02c0e6788 --- /dev/null +++ b/wallets/xdefi-extension/src/extension/utils.ts @@ -0,0 +1,54 @@ +import { ClientNotExistError } from '@cosmos-kit/core'; + +import { XDEFI } from './types'; + +interface XDEFIWindow { + xfi?: { + keplr?: XDEFI; + }; +} + +export const getXDEFIFromExtension: () => Promise< + XDEFI | undefined +> = async () => { + if (typeof window === 'undefined') { + return void 0; + } + + const xdefi = (window as XDEFIWindow)?.xfi?.keplr; + + if (xdefi && !xdefi.isXDEFI) { + throw ClientNotExistError; + } + + if (xdefi) { + return xdefi; + } + + if (document.readyState === 'complete') { + if (xdefi) { + return xdefi; + } else { + throw ClientNotExistError; + } + } + + return new Promise((resolve, reject) => { + const documentStateChange = (event: Event) => { + if ( + event.target && + (event.target as Document).readyState === 'complete' + ) { + const xdefi = (window as XDEFIWindow)?.xfi?.keplr; + if (xdefi) { + resolve(xdefi); + } else { + reject(ClientNotExistError.message); + } + document.removeEventListener('readystatechange', documentStateChange); + } + }; + + document.addEventListener('readystatechange', documentStateChange); + }); +}; diff --git a/wallets/xdefi-extension/src/index.ts b/wallets/xdefi-extension/src/index.ts new file mode 100644 index 000000000..873c95395 --- /dev/null +++ b/wallets/xdefi-extension/src/index.ts @@ -0,0 +1,2 @@ +export * from './extension'; +export * from './xdefi'; diff --git a/wallets/xdefi-extension/src/xdefi.ts b/wallets/xdefi-extension/src/xdefi.ts new file mode 100644 index 000000000..6e30ab077 --- /dev/null +++ b/wallets/xdefi-extension/src/xdefi.ts @@ -0,0 +1,5 @@ +import { xdefiExtensionInfo, XDEFIExtensionWallet } from './extension'; + +const xdefiExtension = new XDEFIExtensionWallet(xdefiExtensionInfo); + +export const wallets = [xdefiExtension]; diff --git a/wallets/xdefi-extension/tsconfig.json b/wallets/xdefi-extension/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/xdefi-extension/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/wallets/xdefi/.editorconfig b/wallets/xdefi/.editorconfig new file mode 100644 index 000000000..4a7ea3036 --- /dev/null +++ b/wallets/xdefi/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/wallets/xdefi/.eslintignore b/wallets/xdefi/.eslintignore new file mode 100644 index 000000000..91689c308 --- /dev/null +++ b/wallets/xdefi/.eslintignore @@ -0,0 +1,7 @@ +node_modules/ +dist/ +main/ +module/ +types/ +coverage/ +/index.ts \ No newline at end of file diff --git a/wallets/xdefi/.eslintrc.json b/wallets/xdefi/.eslintrc.json new file mode 100644 index 000000000..d95fc326b --- /dev/null +++ b/wallets/xdefi/.eslintrc.json @@ -0,0 +1,82 @@ +{ + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "unused-imports" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + // configures both eslint-plugin-prettier and eslint-config-prettier + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "es6": true, + "browser": true, + "node": true, + "jest": true + }, + "rules": { + "simple-import-sort/imports": 2, + "simple-import-sort/exports": 2, + "prettier/prettier": 2, + "unused-imports/no-unused-imports": 2, + "no-console": 1, + "no-debugger": 2, + "no-alert": 2, + "no-await-in-loop": 0, + "no-prototype-builtins": 0, + "no-return-assign": [ + "error", + "except-parens" + ], + "no-restricted-syntax": [ + 2, + "ForInStatement", + "LabeledStatement", + "WithStatement" + ], + "no-unused-vars": 0, + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "React|res|next|^_" + } + ], + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "no-unused-expressions": [ + 2, + { + "allowTaggedTemplates": true + } + ], + "comma-dangle": 0, + "jsx-quotes": [ + 2, + "prefer-double" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + 2, + "single", + { + "avoidEscape": true, + "allowTemplateLiterals": true + } + ] + } +} \ No newline at end of file diff --git a/wallets/xdefi/.gitignore b/wallets/xdefi/.gitignore new file mode 100644 index 000000000..a91a2f788 --- /dev/null +++ b/wallets/xdefi/.gitignore @@ -0,0 +1,48 @@ +# Logs +logs +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# dist +main +module + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional REPL history +.node_repl_history + +# Editors +.idea + +# Lib +lib + +# npm package lock +package-lock.json +yarn.lock + +# others +.DS_Store diff --git a/wallets/xdefi/.npmignore b/wallets/xdefi/.npmignore new file mode 100644 index 000000000..cc2605fa8 --- /dev/null +++ b/wallets/xdefi/.npmignore @@ -0,0 +1,32 @@ +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +.nyc_output + +# Dependency directories +node_modules + +# npm package lock +package-lock.json +yarn.lock + +# project files +__fixtures__ +__tests__ +.babelrc +.babelrc.js +.editorconfig +.eslintignore +.eslintrc +.eslintrc.js +.gitignore +.travis.yml +.vscode +CHANGELOG.md +examples +jest.config.js +package.json +src +test \ No newline at end of file diff --git a/wallets/xdefi/.npmrc b/wallets/xdefi/.npmrc new file mode 100644 index 000000000..a21347f1b --- /dev/null +++ b/wallets/xdefi/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true \ No newline at end of file diff --git a/wallets/xdefi/.prettierrc.json b/wallets/xdefi/.prettierrc.json new file mode 100644 index 000000000..4aa2a0dc9 --- /dev/null +++ b/wallets/xdefi/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "useTabs": false +} \ No newline at end of file diff --git a/wallets/xdefi/CHANGELOG.md b/wallets/xdefi/CHANGELOG.md new file mode 100644 index 000000000..73a55849e --- /dev/null +++ b/wallets/xdefi/CHANGELOG.md @@ -0,0 +1,752 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.10.1...@cosmos-kit/xdefi@2.10.2) (2024-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + + + + + +## [2.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.10.0...@cosmos-kit/xdefi@2.10.1) (2024-06-26) + +**Note:** Version bump only for package @cosmos-kit/xdefi + + + + + +# [2.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.9.0...@cosmos-kit/xdefi@2.10.0) (2024-06-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + + + + + +# [2.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.8.0...@cosmos-kit/xdefi@2.9.0) (2024-05-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + + + + + +# [2.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.7.0...@cosmos-kit/xdefi@2.8.0) (2024-05-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi + + + + + +# [2.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.6.3...@cosmos-kit/xdefi@2.7.0) (2024-05-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + + + + + +## [2.6.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.6.2...@cosmos-kit/xdefi@2.6.3) (2024-05-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.6.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.6.1...@cosmos-kit/xdefi@2.6.2) (2024-04-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.6.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.6.0...@cosmos-kit/xdefi@2.6.1) (2024-04-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [2.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.9...@cosmos-kit/xdefi@2.6.0) (2024-04-20) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.8...@cosmos-kit/xdefi@2.5.9) (2024-01-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.7...@cosmos-kit/xdefi@2.5.8) (2024-01-25) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.6...@cosmos-kit/xdefi@2.5.7) (2024-01-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.5...@cosmos-kit/xdefi@2.5.6) (2024-01-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.4...@cosmos-kit/xdefi@2.5.5) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.3...@cosmos-kit/xdefi@2.5.4) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.2...@cosmos-kit/xdefi@2.5.3) (2024-01-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.1...@cosmos-kit/xdefi@2.5.2) (2024-01-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.5.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.5.0...@cosmos-kit/xdefi@2.5.1) (2024-01-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [2.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.16...@cosmos-kit/xdefi@2.5.0) (2024-01-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.15...@cosmos-kit/xdefi@2.4.16) (2023-12-26) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.14...@cosmos-kit/xdefi@2.4.15) (2023-12-25) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.13...@cosmos-kit/xdefi@2.4.14) (2023-12-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.12...@cosmos-kit/xdefi@2.4.13) (2023-12-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.11...@cosmos-kit/xdefi@2.4.12) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.10...@cosmos-kit/xdefi@2.4.11) (2023-12-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.9...@cosmos-kit/xdefi@2.4.10) (2023-12-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.8...@cosmos-kit/xdefi@2.4.9) (2023-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.7...@cosmos-kit/xdefi@2.4.8) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.6...@cosmos-kit/xdefi@2.4.7) (2023-11-06) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.5...@cosmos-kit/xdefi@2.4.6) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.4...@cosmos-kit/xdefi@2.4.5) (2023-10-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.3...@cosmos-kit/xdefi@2.4.4) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.2...@cosmos-kit/xdefi@2.4.3) (2023-10-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.1...@cosmos-kit/xdefi@2.4.2) (2023-10-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.4.0...@cosmos-kit/xdefi@2.4.1) (2023-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [2.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.13...@cosmos-kit/xdefi@2.4.0) (2023-10-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.12...@cosmos-kit/xdefi@2.3.13) (2023-10-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.11...@cosmos-kit/xdefi@2.3.12) (2023-10-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.10...@cosmos-kit/xdefi@2.3.11) (2023-09-26) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.9...@cosmos-kit/xdefi@2.3.10) (2023-09-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.8...@cosmos-kit/xdefi@2.3.9) (2023-09-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.7...@cosmos-kit/xdefi@2.3.8) (2023-09-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.6...@cosmos-kit/xdefi@2.3.7) (2023-09-12) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.5...@cosmos-kit/xdefi@2.3.6) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.4...@cosmos-kit/xdefi@2.3.5) (2023-09-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.3...@cosmos-kit/xdefi@2.3.4) (2023-09-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.2...@cosmos-kit/xdefi@2.3.3) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.1...@cosmos-kit/xdefi@2.3.2) (2023-08-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.3.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.3.0...@cosmos-kit/xdefi@2.3.1) (2023-08-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [2.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.2.1...@cosmos-kit/xdefi@2.3.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.2.0...@cosmos-kit/xdefi@2.2.1) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [2.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.12...@cosmos-kit/xdefi@2.2.0) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.11...@cosmos-kit/xdefi@2.1.12) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.10...@cosmos-kit/xdefi@2.1.11) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.9...@cosmos-kit/xdefi@2.1.10) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.8...@cosmos-kit/xdefi@2.1.9) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.7...@cosmos-kit/xdefi@2.1.8) (2023-08-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.6...@cosmos-kit/xdefi@2.1.7) (2023-08-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.5...@cosmos-kit/xdefi@2.1.6) (2023-08-07) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.4...@cosmos-kit/xdefi@2.1.5) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.3...@cosmos-kit/xdefi@2.1.4) (2023-08-03) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.2...@cosmos-kit/xdefi@2.1.3) (2023-08-01) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.1...@cosmos-kit/xdefi@2.1.2) (2023-07-31) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.1.0...@cosmos-kit/xdefi@2.1.1) (2023-07-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [2.1.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.5...@cosmos-kit/xdefi@2.1.0) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.4...@cosmos-kit/xdefi@2.0.5) (2023-07-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.3...@cosmos-kit/xdefi@2.0.4) (2023-07-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.2...@cosmos-kit/xdefi@2.0.3) (2023-07-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1...@cosmos-kit/xdefi@2.0.2) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.6...@cosmos-kit/xdefi@2.0.1) (2023-07-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.5...@cosmos-kit/xdefi@2.0.1-beta.6) (2023-07-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.4...@cosmos-kit/xdefi@2.0.1-beta.5) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.3...@cosmos-kit/xdefi@2.0.1-beta.4) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.2...@cosmos-kit/xdefi@2.0.1-beta.3) (2023-07-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.1...@cosmos-kit/xdefi@2.0.1-beta.2) (2023-07-12) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@2.0.1-beta.0...@cosmos-kit/xdefi@2.0.1-beta.1) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [2.0.1-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@1.0.0...@cosmos-kit/xdefi@2.0.1-beta.0) (2023-07-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [1.0.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16-beta.6...@cosmos-kit/xdefi@1.0.0) (2023-07-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16-beta.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16-beta.5...@cosmos-kit/xdefi@0.1.16-beta.6) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16-beta.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16-beta.4...@cosmos-kit/xdefi@0.1.16-beta.5) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16-beta.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16-beta.3...@cosmos-kit/xdefi@0.1.16-beta.4) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16-beta.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16...@cosmos-kit/xdefi@0.1.16-beta.3) (2023-06-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.15...@cosmos-kit/xdefi@0.1.16) (2023-06-30) + +## [0.1.16-beta.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16-beta.1...@cosmos-kit/xdefi@0.1.16-beta.2) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16-beta.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.16-beta.0...@cosmos-kit/xdefi@0.1.16-beta.1) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.16-beta.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.15...@cosmos-kit/xdefi@0.1.16-beta.0) (2023-06-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.14...@cosmos-kit/xdefi@0.1.15) (2023-06-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.13...@cosmos-kit/xdefi@0.1.14) (2023-06-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.12...@cosmos-kit/xdefi@0.1.13) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.11...@cosmos-kit/xdefi@0.1.12) (2023-06-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.10...@cosmos-kit/xdefi@0.1.11) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.9...@cosmos-kit/xdefi@0.1.10) (2023-06-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.8...@cosmos-kit/xdefi@0.1.9) (2023-06-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.7...@cosmos-kit/xdefi@0.1.8) (2023-06-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.6...@cosmos-kit/xdefi@0.1.7) (2023-06-01) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.5...@cosmos-kit/xdefi@0.1.6) (2023-05-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.4...@cosmos-kit/xdefi@0.1.5) (2023-05-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.3...@cosmos-kit/xdefi@0.1.4) (2023-05-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.2...@cosmos-kit/xdefi@0.1.3) (2023-05-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.1...@cosmos-kit/xdefi@0.1.2) (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## 0.1.1 (2023-05-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.12...@cosmos-kit/xdefi@0.14.13) (2023-03-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.11...@cosmos-kit/xdefi@0.14.12) (2023-03-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.10...@cosmos-kit/xdefi@0.14.11) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.9...@cosmos-kit/xdefi@0.14.10) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.8...@cosmos-kit/xdefi@0.14.9) (2023-03-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.7...@cosmos-kit/xdefi@0.14.8) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.6...@cosmos-kit/xdefi@0.14.7) (2023-03-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.5...@cosmos-kit/xdefi@0.14.6) (2023-03-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.4...@cosmos-kit/xdefi@0.14.5) (2023-03-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.3...@cosmos-kit/xdefi@0.14.4) (2023-03-03) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.2...@cosmos-kit/xdefi@0.14.3) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.1...@cosmos-kit/xdefi@0.14.2) (2023-02-28) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.14.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.14.0...@cosmos-kit/xdefi@0.14.1) (2023-02-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.14.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.33...@cosmos-kit/xdefi@0.14.0) (2023-02-27) + +### Features + +- xdefi account change and debug ([9006aac](https://github.com/cosmology-tech/cosmos-kit/commit/9006aac6c453262e9ac890c34616622b50dc5766)) + +## [0.13.33](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.32...@cosmos-kit/xdefi@0.13.33) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.32](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.31...@cosmos-kit/xdefi@0.13.32) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.31](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.30...@cosmos-kit/xdefi@0.13.31) (2023-02-24) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.30](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.29...@cosmos-kit/xdefi@0.13.30) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.29](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.28...@cosmos-kit/xdefi@0.13.29) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.28](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.27...@cosmos-kit/xdefi@0.13.28) (2023-02-23) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.27](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.26...@cosmos-kit/xdefi@0.13.27) (2023-02-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.26](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.25...@cosmos-kit/xdefi@0.13.26) (2023-02-20) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.25](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.24...@cosmos-kit/xdefi@0.13.25) (2023-02-19) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.24](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.23...@cosmos-kit/xdefi@0.13.24) (2023-02-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.23](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.21...@cosmos-kit/xdefi@0.13.23) (2023-02-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.21](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.20...@cosmos-kit/xdefi@0.13.21) (2023-01-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.20](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.19...@cosmos-kit/xdefi@0.13.20) (2023-01-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.19](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.18...@cosmos-kit/xdefi@0.13.19) (2023-01-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.18](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.17...@cosmos-kit/xdefi@0.13.18) (2023-01-12) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.17](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.16...@cosmos-kit/xdefi@0.13.17) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.16](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.15...@cosmos-kit/xdefi@0.13.16) (2023-01-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.15](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.14...@cosmos-kit/xdefi@0.13.15) (2023-01-06) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.14](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.13...@cosmos-kit/xdefi@0.13.14) (2022-12-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.13](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.12...@cosmos-kit/xdefi@0.13.13) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.12](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.11...@cosmos-kit/xdefi@0.13.12) (2022-12-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.11](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.10...@cosmos-kit/xdefi@0.13.11) (2022-12-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.10](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.9...@cosmos-kit/xdefi@0.13.10) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.9](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.8...@cosmos-kit/xdefi@0.13.9) (2022-12-11) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.8](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.7...@cosmos-kit/xdefi@0.13.8) (2022-12-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.7](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.6...@cosmos-kit/xdefi@0.13.7) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.5...@cosmos-kit/xdefi@0.13.6) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.4...@cosmos-kit/xdefi@0.13.5) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.3...@cosmos-kit/xdefi@0.13.4) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.2...@cosmos-kit/xdefi@0.13.3) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.1...@cosmos-kit/xdefi@0.13.2) (2022-12-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.13.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.13.0...@cosmos-kit/xdefi@0.13.1) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.13.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.12.0...@cosmos-kit/xdefi@0.13.0) (2022-12-02) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.12.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.11.2...@cosmos-kit/xdefi@0.12.0) (2022-12-01) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.11.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.11.1...@cosmos-kit/xdefi@0.11.2) (2022-11-30) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.11.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.11.0...@cosmos-kit/xdefi@0.11.1) (2022-11-22) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.11.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.6...@cosmos-kit/xdefi@0.11.0) (2022-11-21) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.5...@cosmos-kit/xdefi@0.10.6) (2022-11-18) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.4...@cosmos-kit/xdefi@0.10.5) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.3...@cosmos-kit/xdefi@0.10.4) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.2...@cosmos-kit/xdefi@0.10.3) (2022-11-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.1...@cosmos-kit/xdefi@0.10.2) (2022-11-16) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.10.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.10.0...@cosmos-kit/xdefi@0.10.1) (2022-11-15) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.10.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.9.1...@cosmos-kit/xdefi@0.10.0) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.9.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.9.0...@cosmos-kit/xdefi@0.9.1) (2022-11-14) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.9.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.8.1...@cosmos-kit/xdefi@0.9.0) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.8.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.8.0...@cosmos-kit/xdefi@0.8.1) (2022-11-10) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.8.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.7.0...@cosmos-kit/xdefi@0.8.0) (2022-11-09) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.7.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.6.0...@cosmos-kit/xdefi@0.7.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.6.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.5.0...@cosmos-kit/xdefi@0.6.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.5.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.4.2...@cosmos-kit/xdefi@0.5.0) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.4.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.4.1...@cosmos-kit/xdefi@0.4.2) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.4.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.4.0...@cosmos-kit/xdefi@0.4.1) (2022-11-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.4.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.3.0...@cosmos-kit/xdefi@0.4.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.3.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.2.2...@cosmos-kit/xdefi@0.3.0) (2022-11-05) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.2.2](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.2.1...@cosmos-kit/xdefi@0.2.2) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.2.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.2.0...@cosmos-kit/xdefi@0.2.1) (2022-11-04) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# [0.2.0](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.6...@cosmos-kit/xdefi@0.2.0) (2022-10-27) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.6](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.5...@cosmos-kit/xdefi@0.1.6) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.5](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.4...@cosmos-kit/xdefi@0.1.5) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.4](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.3...@cosmos-kit/xdefi@0.1.4) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.3](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.1...@cosmos-kit/xdefi@0.1.3) (2022-10-17) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +## [0.1.1](https://github.com/cosmology-tech/cosmos-kit/compare/@cosmos-kit/xdefi@0.1.0...@cosmos-kit/xdefi@0.1.1) (2022-10-13) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# 0.1.0 (2022-10-08) + +**Note:** Version bump only for package @cosmos-kit/xdefi + +# 0.0.1 (2022-10-08) + +**Note:** First release! diff --git a/wallets/xdefi/LICENSE b/wallets/xdefi/LICENSE new file mode 100644 index 000000000..b3ac161b5 --- /dev/null +++ b/wallets/xdefi/LICENSE @@ -0,0 +1,33 @@ +The Clear BSD License + +Copyright (c) 2024 Cosmos Kit Contributors +Copyright (c) 2024 Interweb, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted (subject to the limitations in the disclaimer +below) provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY +THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/wallets/xdefi/README.md b/wallets/xdefi/README.md new file mode 100644 index 000000000..a497ae860 --- /dev/null +++ b/wallets/xdefi/README.md @@ -0,0 +1,40 @@ +# @cosmos-kit/xdefi + +

+ +

+ +

+ + + + + +

+ +Cosmos Kit is a univeral wallet adapter for developers to build apps that quickly and easily interact with Cosmos blockchains and wallets. + +@cosmos-kit/xdefi is the xdefi integration for CosmosKit. + +## Related + +Checkout these related projects: + +* [@cosmology/telescope](https://github.com/cosmology-tech/telescope) Your Frontend Companion for Building with TypeScript with Cosmos SDK Modules. +* [@cosmwasm/ts-codegen](https://github.com/CosmWasm/ts-codegen) Convert your CosmWasm smart contracts into dev-friendly TypeScript classes. +* [chain-registry](https://github.com/cosmology-tech/chain-registry) Everything from token symbols, logos, and IBC denominations for all assets you want to support in your application. +* [cosmos-kit](https://github.com/cosmology-tech/cosmos-kit) Experience the convenience of connecting with a variety of web3 wallets through a single, streamlined interface. +* [create-cosmos-app](https://github.com/cosmology-tech/create-cosmos-app) Set up a modern Cosmos app by running one command. +* [interchain-ui](https://github.com/cosmology-tech/interchain-ui) The Interchain Design System, empowering developers with a flexible, easy-to-use UI kit. +* [starship](https://github.com/cosmology-tech/starship) Unified Testing and Development for the Interchain. + +## Credits + +🛠 Built by Cosmology — if you like our tools, please consider delegating to [our validator ⚛️](https://cosmology.zone/validator) + + +## Disclaimer + +AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. + +No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. diff --git a/wallets/xdefi/index.ts b/wallets/xdefi/index.ts new file mode 100644 index 000000000..deae8cf81 --- /dev/null +++ b/wallets/xdefi/index.ts @@ -0,0 +1,2 @@ +// not for module, but for local development.. +export * from './src'; \ No newline at end of file diff --git a/wallets/xdefi/package.json b/wallets/xdefi/package.json new file mode 100644 index 000000000..2f8771075 --- /dev/null +++ b/wallets/xdefi/package.json @@ -0,0 +1,59 @@ +{ + "name": "@cosmos-kit/xdefi", + "version": "2.10.2", + "description": "cosmos-kit wallet connector", + "author": "mayank.yadav@xdefiwallet.io", + "contributors": [ + { + "name": "Mayank Yadav" + } + ], + "homepage": "https://github.com/cosmology-tech/cosmos-kit#readme", + "license": "SEE LICENSE IN LICENSE", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "cjs/index.d.ts", + "directories": { + "lib": "src" + }, + "files": [ + "cjs", + "esm", + "!CHANGELOG.md", + "!LICENSE" + ], + "scripts": { + "build:cjs": "yarn tsc -p tsconfig.json --outDir cjs --module commonjs || true", + "build:esm": "yarn tsc -p tsconfig.json --outDir esm --module es2022 || true", + "clean:cjs": "rimraf cjs", + "clean:esm": "rimraf esm", + "clean": "npm run clean:cjs && npm run clean:esm", + "build": "npm run clean && npm run build:cjs && npm run build:esm", + "prepare": "npm run build", + "lint": "eslint --ext .tsx,.ts .", + "format": "eslint --ext .tsx,.ts --fix .", + "test": "jest", + "test:watch": "jest --watch", + "test:debug": "node --inspect node_modules/.bin/jest --runInBand" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/cosmology-tech/cosmos-kit" + }, + "keywords": [ + "cosmos-kit", + "cosmos", + "xdefi", + "wallet" + ], + "bugs": { + "url": "https://github.com/cosmology-tech/cosmos-kit/issues" + }, + "dependencies": { + "@cosmos-kit/xdefi-extension": "^2.11.2" + }, + "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" +} diff --git a/wallets/xdefi/src/index.ts b/wallets/xdefi/src/index.ts new file mode 100644 index 000000000..ca7dab1e4 --- /dev/null +++ b/wallets/xdefi/src/index.ts @@ -0,0 +1,3 @@ +import { wallets as ext } from '@cosmos-kit/xdefi-extension'; + +export const wallets = [...ext]; diff --git a/wallets/xdefi/tsconfig.json b/wallets/xdefi/tsconfig.json new file mode 100644 index 000000000..cddc39bc4 --- /dev/null +++ b/wallets/xdefi/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +}