From 58bcf109c4c010e97cee4a662e0f63c5c90f6d8e Mon Sep 17 00:00:00 2001 From: Davide Segullo Date: Mon, 18 Dec 2023 09:07:02 +0100 Subject: [PATCH 1/4] feat(wallet-registry): :sparkles: add wallet registry setup --- .vscode/settings.json | 3 +- packages/wallet-registry/.eslintrc.json | 33 ++++++++++ packages/wallet-registry/README.md | 11 ++++ packages/wallet-registry/package.json | 21 ++++++ packages/wallet-registry/project.json | 65 +++++++++++++++++++ packages/wallet-registry/src/index.ts | 1 + .../src/lib/wallet-registry.spec.ts | 7 ++ .../src/lib/wallet-registry.ts | 3 + packages/wallet-registry/tsconfig.json | 34 ++++++++++ packages/wallet-registry/tsconfig.lib.json | 10 +++ packages/wallet-registry/tsconfig.spec.json | 25 +++++++ packages/wallet-registry/vite.config.ts | 52 +++++++++++++++ tsconfig.base.json | 3 + 13 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 packages/wallet-registry/.eslintrc.json create mode 100644 packages/wallet-registry/README.md create mode 100644 packages/wallet-registry/package.json create mode 100644 packages/wallet-registry/project.json create mode 100644 packages/wallet-registry/src/index.ts create mode 100644 packages/wallet-registry/src/lib/wallet-registry.spec.ts create mode 100644 packages/wallet-registry/src/lib/wallet-registry.ts create mode 100644 packages/wallet-registry/tsconfig.json create mode 100644 packages/wallet-registry/tsconfig.lib.json create mode 100644 packages/wallet-registry/tsconfig.spec.json create mode 100644 packages/wallet-registry/vite.config.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 7abdc094..237b6d5a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,6 +16,7 @@ "store", "vue", "examples-vue3", - "nuxt" + "nuxt", + "wallet-registry" ] } diff --git a/packages/wallet-registry/.eslintrc.json b/packages/wallet-registry/.eslintrc.json new file mode 100644 index 00000000..6a6e690b --- /dev/null +++ b/packages/wallet-registry/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.json"], + "parser": "jsonc-eslint-parser", + "rules": { + "@nx/dependency-checks": [ + "error", + { + "ignoredFiles": [ + "{projectRoot}/vite.config.{js,ts,mjs,mts}", + "{projectRoot}/scripts/*.{js,ts,mjs,mts}" + ] + } + ] + } + } + ] +} diff --git a/packages/wallet-registry/README.md b/packages/wallet-registry/README.md new file mode 100644 index 00000000..4c2fc5f0 --- /dev/null +++ b/packages/wallet-registry/README.md @@ -0,0 +1,11 @@ +# wallet-registry + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build wallet-registry` to build the library. + +## Running unit tests + +Run `nx test wallet-registry` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/packages/wallet-registry/package.json b/packages/wallet-registry/package.json new file mode 100644 index 00000000..a1b163f0 --- /dev/null +++ b/packages/wallet-registry/package.json @@ -0,0 +1,21 @@ +{ + "name": "@nabla-studio/wallet-registry", + "repository": "nabla-studio/quirks", + "keywords": [ + "blockchain", + "cosmos", + "cosmos-sdk", + "registry", + "osmosis", + "juno", + "desmos", + "evmos" + ], + "version": "0.0.1", + "sideEffects": false, + "type": "module", + "dependencies": {}, + "main": "./index.js", + "module": "./index.js", + "typings": "./index.d.ts" +} diff --git a/packages/wallet-registry/project.json b/packages/wallet-registry/project.json new file mode 100644 index 00000000..6d46570c --- /dev/null +++ b/packages/wallet-registry/project.json @@ -0,0 +1,65 @@ +{ + "name": "wallet-registry", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/wallet-registry/src", + "projectType": "library", + "targets": { + "ts-gen": { + "command": "node tools/scripts/schema-wallet.mjs" + }, + "data-gen": { + "command": "ts-node packages/wallet-registry/scripts/generate.mts -b packages/wallet-registry/tsconfig.scripts.json && eslint --fix packages/wallet-registry/src && prettier packages/wallet-registry/src --write" + }, + "build": { + "executor": "@nx/vite:build", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/wallet-registry" + } + }, + "test": { + "executor": "@nx/vite:test", + "outputs": ["{options.reportsDirectory}"], + "options": { + "passWithNoTests": true, + "reportsDirectory": "../../coverage/packages/wallet-registry" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "packages/wallet-registry/**/*.ts", + "packages/wallet-registry/package.json" + ] + } + }, + "version": { + "executor": "@jscutlery/semver:version", + "options": { + "preset": "conventional", + "tagPrefix": "{projectName}@", + "trackDeps": true, + "push": true, + "noVerify": true, + "postTargets": ["wallet-registry:github", "wallet-registry:npm"] + }, + "dependsOn": ["^build"] + }, + "github": { + "executor": "@jscutlery/semver:github", + "options": { + "tag": "{tag}", + "notes": "{notes}" + } + }, + "npm": { + "executor": "ngx-deploy-npm:deploy", + "options": { + "access": "public" + } + } + }, + "tags": [] +} diff --git a/packages/wallet-registry/src/index.ts b/packages/wallet-registry/src/index.ts new file mode 100644 index 00000000..6f212019 --- /dev/null +++ b/packages/wallet-registry/src/index.ts @@ -0,0 +1 @@ +export * from './lib/wallet-registry'; diff --git a/packages/wallet-registry/src/lib/wallet-registry.spec.ts b/packages/wallet-registry/src/lib/wallet-registry.spec.ts new file mode 100644 index 00000000..1a6c8213 --- /dev/null +++ b/packages/wallet-registry/src/lib/wallet-registry.spec.ts @@ -0,0 +1,7 @@ +import { walletRegistry } from './wallet-registry'; + +describe('walletRegistry', () => { + it('should work', () => { + expect(walletRegistry()).toEqual('wallet-registry'); + }); +}); diff --git a/packages/wallet-registry/src/lib/wallet-registry.ts b/packages/wallet-registry/src/lib/wallet-registry.ts new file mode 100644 index 00000000..c1edaf1e --- /dev/null +++ b/packages/wallet-registry/src/lib/wallet-registry.ts @@ -0,0 +1,3 @@ +export function walletRegistry(): string { + return 'wallet-registry'; +} diff --git a/packages/wallet-registry/tsconfig.json b/packages/wallet-registry/tsconfig.json new file mode 100644 index 00000000..80a82b5a --- /dev/null +++ b/packages/wallet-registry/tsconfig.json @@ -0,0 +1,34 @@ +{ + "extends": "../../tsconfig.base.json", + "ts-node": { + // It is faster to skip typechecking. + // Remove if you want ts-node to do typechecking. + "transpileOnly": true, + "files": true, + "esm": true, + "compilerOptions": { + "types": ["node"], + "module": "ESNext", + "target": "ESNext" + } + }, + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/wallet-registry/tsconfig.lib.json b/packages/wallet-registry/tsconfig.lib.json new file mode 100644 index 00000000..b0bc10ec --- /dev/null +++ b/packages/wallet-registry/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node", "vite/client"] + }, + "include": ["src/**/*.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/packages/wallet-registry/tsconfig.spec.json b/packages/wallet-registry/tsconfig.spec.json new file mode 100644 index 00000000..d2313835 --- /dev/null +++ b/packages/wallet-registry/tsconfig.spec.json @@ -0,0 +1,25 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "types": [ + "vitest/globals", + "vitest/importMeta", + "vite/client", + "node", + "vitest" + ] + }, + "include": [ + "vite.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] +} diff --git a/packages/wallet-registry/vite.config.ts b/packages/wallet-registry/vite.config.ts new file mode 100644 index 00000000..d442b8f3 --- /dev/null +++ b/packages/wallet-registry/vite.config.ts @@ -0,0 +1,52 @@ +/// +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts'; +import * as path from 'path'; +import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; + +export default defineConfig({ + cacheDir: '../../node_modules/.vite/wallet-registry', + + plugins: [ + nxViteTsPaths(), + dts({ + entryRoot: 'src', + tsConfigFilePath: path.join(__dirname, 'tsconfig.lib.json'), + skipDiagnostics: true, + }), + ], + + // Uncomment this if you are using workers. + // worker: { + // plugins: [ nxViteTsPaths() ], + // }, + + // Configuration for building your library. + // See: https://vitejs.dev/guide/build.html#library-mode + build: { + lib: { + // Could also be a dictionary or array of multiple entry points. + entry: 'src/index.ts', + name: 'wallet-registry', + fileName: 'index', + // Change this to the formats you want to support. + // Don't forget to update your package.json as well. + formats: ['es', 'cjs'], + }, + rollupOptions: { + output: { + preserveModules: true, + }, + // External packages that should not be bundled into your library. + external: [], + }, + }, + + test: { + globals: true, + cache: { + dir: '../../node_modules/.vitest', + }, + include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + }, +}); diff --git a/tsconfig.base.json b/tsconfig.base.json index 4dd0128d..04947034 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -16,6 +16,9 @@ "baseUrl": ".", "paths": { "@nabla-studio/chain-registry": ["packages/chain-registry/src/index.ts"], + "@nabla-studio/wallet-registry": [ + "packages/wallet-registry/src/index.ts" + ], "@quirks/core": ["packages/core/src/index.ts"], "@quirks/nuxt": ["packages/nuxt/src/index.ts"], "@quirks/react": ["packages/react/src/index.ts"], From c4dd8e0dc11ea53b3f5585e6acbbfdef963f9063 Mon Sep 17 00:00:00 2001 From: Davide Segullo Date: Mon, 18 Dec 2023 09:09:31 +0100 Subject: [PATCH 2/4] feat(wallet-registry): :sparkles: add git submodule --- .gitmodules | 3 +++ packages/wallet-registry/wallet-registry | 1 + 2 files changed, 4 insertions(+) create mode 160000 packages/wallet-registry/wallet-registry diff --git a/.gitmodules b/.gitmodules index 239c26ee..a0ef8b1b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "packages/chain-registry/chain-registry"] path = packages/chain-registry/chain-registry url = git@github.com:cosmos/chain-registry.git +[submodule "packages/wallet-registry/wallet-registry"] + path = packages/wallet-registry/wallet-registry + url = git@github.com:cosmos/wallet-registry.git diff --git a/packages/wallet-registry/wallet-registry b/packages/wallet-registry/wallet-registry new file mode 160000 index 00000000..766c37f6 --- /dev/null +++ b/packages/wallet-registry/wallet-registry @@ -0,0 +1 @@ +Subproject commit 766c37f6feb486af24ad4975e0798c8c4df5eef5 From 3fe6468cb9a6098211f34898ddcecd60653a5ef4 Mon Sep 17 00:00:00 2001 From: Davide Segullo Date: Mon, 18 Dec 2023 09:25:05 +0100 Subject: [PATCH 3/4] feat(wallet-registry): :sparkles: add wallet interface --- packages/wallet-registry/src/index.ts | 2 +- .../src/lib/wallet-registry.spec.ts | 7 -- .../src/lib/wallet-registry.ts | 3 - packages/wallet-registry/src/types/index.ts | 1 + packages/wallet-registry/src/types/wallet.ts | 87 +++++++++++++++++++ tools/scripts/schema-wallet.mjs | 10 +++ 6 files changed, 99 insertions(+), 11 deletions(-) delete mode 100644 packages/wallet-registry/src/lib/wallet-registry.spec.ts delete mode 100644 packages/wallet-registry/src/lib/wallet-registry.ts create mode 100644 packages/wallet-registry/src/types/index.ts create mode 100644 packages/wallet-registry/src/types/wallet.ts create mode 100644 tools/scripts/schema-wallet.mjs diff --git a/packages/wallet-registry/src/index.ts b/packages/wallet-registry/src/index.ts index 6f212019..fcb073fe 100644 --- a/packages/wallet-registry/src/index.ts +++ b/packages/wallet-registry/src/index.ts @@ -1 +1 @@ -export * from './lib/wallet-registry'; +export * from './types'; diff --git a/packages/wallet-registry/src/lib/wallet-registry.spec.ts b/packages/wallet-registry/src/lib/wallet-registry.spec.ts deleted file mode 100644 index 1a6c8213..00000000 --- a/packages/wallet-registry/src/lib/wallet-registry.spec.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { walletRegistry } from './wallet-registry'; - -describe('walletRegistry', () => { - it('should work', () => { - expect(walletRegistry()).toEqual('wallet-registry'); - }); -}); diff --git a/packages/wallet-registry/src/lib/wallet-registry.ts b/packages/wallet-registry/src/lib/wallet-registry.ts deleted file mode 100644 index c1edaf1e..00000000 --- a/packages/wallet-registry/src/lib/wallet-registry.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function walletRegistry(): string { - return 'wallet-registry'; -} diff --git a/packages/wallet-registry/src/types/index.ts b/packages/wallet-registry/src/types/index.ts new file mode 100644 index 00000000..3c5958cf --- /dev/null +++ b/packages/wallet-registry/src/types/index.ts @@ -0,0 +1 @@ +export * from './wallet'; diff --git a/packages/wallet-registry/src/types/wallet.ts b/packages/wallet-registry/src/types/wallet.ts new file mode 100644 index 00000000..810cdefb --- /dev/null +++ b/packages/wallet-registry/src/types/wallet.ts @@ -0,0 +1,87 @@ +/* eslint-disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run json-schema-to-typescript to regenerate this file. + */ + +/** + * Cosmos Wallet.json is a metadata file that contains information about a wallet of a specific platform and which chains it supports, either natively or via custom client-side addition. + */ +export interface CosmosWallet { + $schema: string; + wallet_name: string; + pretty_name: string; + website?: string; + git_repo?: string; + supported_chains: string[]; + features?: ("suggest_chain" | "get_supported_chains" | "icns")[]; + platforms: { + device: "mobile" | "tablet" | "desktop" | "other"; + type: "application" | "extension"; + platform: "chrome" | "firefox" | "ios" | "android" | "otherOS" | "otherBrowser"; + install_link?: string; + }[]; + images: { + png?: string; + svg?: string; + theme?: { + primary_color_hex?: string; + circle?: boolean; + dark_mode?: boolean; + }; + /** + * logomark == icon only; logotype == text only; logo == icon + text. + */ + layout: "logo" | "logomark" | "logotype"; + /** + * Indicates in which position the text is placed, in case the layout is 'icon' type, it's required only in this case. + */ + text_position?: "top" | "bottom" | "left" | "right" | "integrated"; + }[]; + wallet_connect?: { + /** + * define all the properties related to deeplink functionality. + */ + deeplink?: { + /** + * it is the path of the deelink URL that will trigger wallet connect actions within a mobile wallet. + */ + path?: { + ios?: string; + android?: string; + universal?: string; + }; + }; + }; + mobile?: { + android?: { + /** + * The package name for your Android standalone app. You make it up, but it needs to be unique on the Play Store. See this [StackOverflow question](https://stackoverflow.com/questions/6273892/android-package-name-convention). + */ + package_name?: string; + /** + * Custom schema that provide a way to reference resources inside an app, documented [here](https://developer.android.com/training/app-links/deep-linking). + */ + schema?: string; + /** + * Universal schema for universal deeplink that provide a way to reference resources inside an app, documented [here](https://developer.android.com/training/app-links). + */ + universal_schema?: string; + }; + ios?: { + /** + * The bundle identifier for your iOS standalone app. You make it up, but it needs to be unique on the App Store. See this [StackOverflow question](https://stackoverflow.com/questions/11347470/what-does-bundle-identifier-mean-in-an-ios-project). + */ + bundle_identifier?: string; + /** + * Custom URL schemes provide a way to reference resources inside an app, documented [here](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app). + */ + schema?: string; + /** + * Universal schema for universal deeplink that provide a way to reference resources inside an app, documented [here](https://developer.apple.com/ios/universal-links/). + */ + universal_schema?: string; + }; + }; +} diff --git a/tools/scripts/schema-wallet.mjs b/tools/scripts/schema-wallet.mjs new file mode 100644 index 00000000..6579aae7 --- /dev/null +++ b/tools/scripts/schema-wallet.mjs @@ -0,0 +1,10 @@ +import { compileFromFile } from 'json-schema-to-typescript'; +import { writeFileSync } from 'fs'; + +compileFromFile('packages/wallet-registry/wallet-registry/wallet.schema.json', { + additionalProperties: false, + enableConstEnums: true, + maxItems: 40, +}).then((ts) => + writeFileSync('packages/wallet-registry/src/types/wallet.ts', ts), +); From d39121e288b8ecea031732b9f5f6fb1d48d3a03d Mon Sep 17 00:00:00 2001 From: Davide Segullo Date: Mon, 18 Dec 2023 09:53:23 +0100 Subject: [PATCH 4/4] feat(wallet-registry): :sparkles: generate wallets --- packages/wallet-registry/scripts/generate.mts | 32 +++++ packages/wallet-registry/scripts/utils.mts | 43 +++++++ packages/wallet-registry/src/index.ts | 1 + packages/wallet-registry/src/types/wallet.ts | 18 ++- .../src/wallets/cosmostationextension.ts | 89 ++++++++++++++ .../src/wallets/cosmostationmobile.ts | 100 +++++++++++++++ packages/wallet-registry/src/wallets/index.ts | 7 ++ .../src/wallets/keplrextension.ts | 86 +++++++++++++ .../src/wallets/keplrmobile.ts | 116 ++++++++++++++++++ .../src/wallets/leapextension.ts | 64 ++++++++++ .../wallet-registry/src/wallets/leapmobile.ts | 82 +++++++++++++ .../src/wallets/trustwalletmobile.ts | 65 ++++++++++ 12 files changed, 697 insertions(+), 6 deletions(-) create mode 100644 packages/wallet-registry/scripts/generate.mts create mode 100644 packages/wallet-registry/scripts/utils.mts create mode 100644 packages/wallet-registry/src/wallets/cosmostationextension.ts create mode 100644 packages/wallet-registry/src/wallets/cosmostationmobile.ts create mode 100644 packages/wallet-registry/src/wallets/index.ts create mode 100644 packages/wallet-registry/src/wallets/keplrextension.ts create mode 100644 packages/wallet-registry/src/wallets/keplrmobile.ts create mode 100644 packages/wallet-registry/src/wallets/leapextension.ts create mode 100644 packages/wallet-registry/src/wallets/leapmobile.ts create mode 100644 packages/wallet-registry/src/wallets/trustwalletmobile.ts diff --git a/packages/wallet-registry/scripts/generate.mts b/packages/wallet-registry/scripts/generate.mts new file mode 100644 index 00000000..30edea0e --- /dev/null +++ b/packages/wallet-registry/scripts/generate.mts @@ -0,0 +1,32 @@ +import { mkdir, readFile, writeFile, rm } from 'fs/promises'; +import { glob } from 'glob'; +import { URL } from 'url'; +import { processWallets } from './utils.mts'; + +const __dirname = new URL('../', import.meta.url).pathname; +const walletRegistryPath = `${__dirname}wallet-registry/`; +const walletsPath = `${__dirname}src/wallets`; + +async function getFiles(path: string, ignore: string[] = []) { + const files = await glob(path, { + ignore: ignore.map((ignoredPath) => walletRegistryPath + ignoredPath), + withFileTypes: true, + }); + return files; +} + +const [wallets] = await Promise.all([ + getFiles(`${walletRegistryPath}wallets/**/*.json`), +]); + +await rm(walletsPath, { recursive: true, force: true }); +await mkdir(walletsPath); + +const walletsFiles = await processWallets(wallets, walletsPath); + +await writeFile( + `${walletsPath}/index.ts`, + Array.from(walletsFiles.keys()) + .map((chain) => `export * from './${chain}'`) + .join('\n'), +); diff --git a/packages/wallet-registry/scripts/utils.mts b/packages/wallet-registry/scripts/utils.mts new file mode 100644 index 00000000..4c18ee85 --- /dev/null +++ b/packages/wallet-registry/scripts/utils.mts @@ -0,0 +1,43 @@ +import { appendFile, readFile, writeFile } from 'fs/promises'; +import { Path } from 'glob'; +import camelCase from 'camelcase'; + +export function buildWalletName(originalChainName: string): string { + const startNumberRegex = /^\d+/; + const matches = startNumberRegex.exec(originalChainName); + const chainNameSuffix = matches != null ? matches[0] : ''; + return originalChainName.replace(startNumberRegex, '') + chainNameSuffix; +} + +export async function processWallets(wallets: Path[], outputPath: string) { + const walletDataMap = new Set(); + + for (const wallet of wallets) { + if (!wallet.parent) { + continue; + } + + const chainName = buildWalletName(wallet.parent.name); + + const data = await readFile(`${wallet.path}/${wallet.name}`, 'utf-8'); + const filename = `${outputPath}/${chainName}.ts`; + + if (!walletDataMap.has(chainName)) { + await writeFile( + filename, + `import type { CosmosWallet } from '../types'\n\n`, + ); + } + + let suffix = ': CosmosWallet'; + + await appendFile( + filename, + `export const ${camelCase(chainName)}${suffix} = ${data}\n\n`, + ); + + walletDataMap.add(chainName); + } + + return walletDataMap; +} diff --git a/packages/wallet-registry/src/index.ts b/packages/wallet-registry/src/index.ts index fcb073fe..f303ec24 100644 --- a/packages/wallet-registry/src/index.ts +++ b/packages/wallet-registry/src/index.ts @@ -1 +1,2 @@ export * from './types'; +export * from './wallets'; diff --git a/packages/wallet-registry/src/types/wallet.ts b/packages/wallet-registry/src/types/wallet.ts index 810cdefb..032928eb 100644 --- a/packages/wallet-registry/src/types/wallet.ts +++ b/packages/wallet-registry/src/types/wallet.ts @@ -15,11 +15,17 @@ export interface CosmosWallet { website?: string; git_repo?: string; supported_chains: string[]; - features?: ("suggest_chain" | "get_supported_chains" | "icns")[]; + features?: ('suggest_chain' | 'get_supported_chains' | 'icns')[]; platforms: { - device: "mobile" | "tablet" | "desktop" | "other"; - type: "application" | "extension"; - platform: "chrome" | "firefox" | "ios" | "android" | "otherOS" | "otherBrowser"; + device: 'mobile' | 'tablet' | 'desktop' | 'other'; + type: 'application' | 'extension'; + platform: + | 'chrome' + | 'firefox' + | 'ios' + | 'android' + | 'otherOS' + | 'otherBrowser'; install_link?: string; }[]; images: { @@ -33,11 +39,11 @@ export interface CosmosWallet { /** * logomark == icon only; logotype == text only; logo == icon + text. */ - layout: "logo" | "logomark" | "logotype"; + layout: 'logo' | 'logomark' | 'logotype'; /** * Indicates in which position the text is placed, in case the layout is 'icon' type, it's required only in this case. */ - text_position?: "top" | "bottom" | "left" | "right" | "integrated"; + text_position?: 'top' | 'bottom' | 'left' | 'right' | 'integrated'; }[]; wallet_connect?: { /** diff --git a/packages/wallet-registry/src/wallets/cosmostationextension.ts b/packages/wallet-registry/src/wallets/cosmostationextension.ts new file mode 100644 index 00000000..c41e6939 --- /dev/null +++ b/packages/wallet-registry/src/wallets/cosmostationextension.ts @@ -0,0 +1,89 @@ +import type { CosmosWallet } from '../types'; + +export const cosmostationextension: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'cosmostationextention', + pretty_name: 'Cosmostation', + website: 'https://www.cosmostation.io/', + git_repo: 'https://github.com/cosmostation/cosmostation-chrome-extension', + supported_chains: [ + 'cosmoshub', + 'akash', + 'assetmantle', + 'axelar', + 'bandchain', + 'bitcanna', + 'bitsong', + 'canto', + 'cerberus', + 'chihuahua', + 'comdex', + 'coreum', + 'crescent', + 'cryptoorgchain', + 'cudos', + 'desmos', + 'emoney', + 'evmos', + 'fetchhub', + 'gravitybridge', + 'injective', + 'irisnet', + 'impacthub', + 'juno', + 'kava', + 'kichain', + 'konstellation', + 'kujira', + 'kyve', + 'likecoin', + 'lumnetwork', + 'neutron', + 'noble', + 'nyx', + 'omniflixhub', + 'onomy', + 'osmosis', + 'panacea', + 'passage', + 'persistence', + 'provenance', + 'quasar', + 'regen', + 'rizon', + 'secretnetwork', + 'sentinel', + 'shentu', + 'sifchain', + 'sommelier', + 'stafihub', + 'stargaze', + 'starname', + 'stride', + 'teritori', + 'tgrade', + 'umee', + ], + features: ['suggest_chain', 'icns'], + platforms: [ + { + device: 'desktop', + type: 'extension', + platform: 'chrome', + install_link: + 'https://chrome.google.com/webstore/detail/cosmostation/fpkhgmpbidmiogeglndfbkegfdlnajnf?utm_source=chrome-ntp-icon', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/cosmostationextension/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/cosmostationextension/images/logo.svg', + theme: { + primary_color_hex: '#9C6CFF', + circle: false, + dark_mode: false, + }, + layout: 'logomark', + }, + ], +}; diff --git a/packages/wallet-registry/src/wallets/cosmostationmobile.ts b/packages/wallet-registry/src/wallets/cosmostationmobile.ts new file mode 100644 index 00000000..48bff3de --- /dev/null +++ b/packages/wallet-registry/src/wallets/cosmostationmobile.ts @@ -0,0 +1,100 @@ +import type { CosmosWallet } from '../types'; + +export const cosmostationmobile: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'cosmostation', + pretty_name: 'Cosmostation', + website: 'https://www.cosmostation.io/', + git_repo: 'https://github.com/cosmostation/cosmostation-android', + supported_chains: [ + 'cosmoshub', + 'akash', + 'assetmantle', + 'axelar', + 'bandchain', + 'bitcanna', + 'bitsong', + 'cerberus', + 'chihuahua', + 'canto', + 'comdex', + 'coreum', + 'crescent', + 'cryptoorgchain', + 'cudos', + 'desmos', + 'emoney', + 'evmos', + 'fetchhub', + 'gravitybridge', + 'injective', + 'irisnet', + 'impacthub', + 'juno', + 'kava', + 'kichain', + 'konstellation', + 'kujira', + 'kyve', + 'likecoin', + 'lumnetwork', + 'neutron', + 'noble', + 'nyx', + 'omniflixhub', + 'onomy', + 'osmosis', + 'panacea', + 'passage', + 'persistence', + 'provenance', + 'quasar', + 'regen', + 'rizon', + 'secretnetwork', + 'sentinel', + 'shentu', + 'sifchain', + 'sommelier', + 'stargaze', + 'starname', + 'stride', + 'teritori', + 'umee', + ], + platforms: [ + { + device: 'mobile', + type: 'application', + platform: 'ios', + install_link: 'https://apps.apple.com/kr/app/cosmostation/id1459830339', + }, + { + device: 'mobile', + type: 'application', + platform: 'android', + install_link: + 'https://play.google.com/store/apps/details?id=wannabit.io.cosmostaion', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/cosmostationmobile/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/cosmostationmobile/images/logo.svg', + theme: { + primary_color_hex: '#9C6CFF', + circle: false, + dark_mode: false, + }, + layout: 'logomark', + }, + ], + mobile: { + ios: { + bundle_identifier: 'io.wannabit.cosmostation', + }, + android: { + package_name: 'wannabit.io.cosmostaion', + }, + }, +}; diff --git a/packages/wallet-registry/src/wallets/index.ts b/packages/wallet-registry/src/wallets/index.ts new file mode 100644 index 00000000..1e49a19a --- /dev/null +++ b/packages/wallet-registry/src/wallets/index.ts @@ -0,0 +1,7 @@ +export * from './trustwalletmobile'; +export * from './leapmobile'; +export * from './leapextension'; +export * from './keplrmobile'; +export * from './keplrextension'; +export * from './cosmostationmobile'; +export * from './cosmostationextension'; diff --git a/packages/wallet-registry/src/wallets/keplrextension.ts b/packages/wallet-registry/src/wallets/keplrextension.ts new file mode 100644 index 00000000..b00cded0 --- /dev/null +++ b/packages/wallet-registry/src/wallets/keplrextension.ts @@ -0,0 +1,86 @@ +import type { CosmosWallet } from '../types'; + +export const keplrextension: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'keplrextension', + pretty_name: 'Keplr', + website: 'https://www.keplr.app/', + git_repo: 'https://github.com/chainapsis/keplr-wallet', + supported_chains: [ + 'cosmoshub', + 'osmosis', + 'secretnetwork', + 'regen', + 'akash', + 'sifchain', + 'stargaze', + 'sentinel', + 'persistence', + 'kava', + 'cryptoorgchain', + 'irisnet', + 'agoric', + 'axelar', + 'certik', + 'ixo', + 'emoney', + 'juno', + 'sommelier', + 'umee', + 'evmos', + 'bostrom', + 'starname', + 'gravitybridge', + 'stride', + 'tgrade', + ], + features: ['suggest_chain', 'icns'], + platforms: [ + { + device: 'desktop', + type: 'extension', + platform: 'chrome', + install_link: + 'https://chrome.google.com/webstore/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap', + }, + { + device: 'desktop', + type: 'extension', + platform: 'firefox', + install_link: 'https://addons.mozilla.org/firefox/addon/keplr/', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo.svg', + theme: { + primary_color_hex: '#1BB8FF', + circle: false, + dark_mode: false, + }, + layout: 'logomark', + }, + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text.svg', + theme: { + primary_color_hex: '#EBF7FD', + circle: false, + dark_mode: false, + }, + layout: 'logo', + text_position: 'right', + }, + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text-dark.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text-dark.svg', + theme: { + primary_color_hex: '#0A0718', + circle: false, + dark_mode: true, + }, + layout: 'logomark', + }, + ], +}; diff --git a/packages/wallet-registry/src/wallets/keplrmobile.ts b/packages/wallet-registry/src/wallets/keplrmobile.ts new file mode 100644 index 00000000..f67816f1 --- /dev/null +++ b/packages/wallet-registry/src/wallets/keplrmobile.ts @@ -0,0 +1,116 @@ +import type { CosmosWallet } from '../types'; + +export const keplrmobile: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'keplrmobile', + pretty_name: 'Keplr', + website: 'https://www.keplr.app/', + git_repo: 'https://github.com/chainapsis/keplr-wallet', + supported_chains: [ + 'cosmoshub', + 'osmosis', + 'secretnetwork', + 'regen', + 'akash', + 'sifchain', + 'stargaze', + 'sentinel', + 'persistence', + 'cryptoorgchain', + 'irisnet', + 'agoric', + 'axelar', + 'certik', + 'ixo', + 'emoney', + 'tick', + 'terra', + 'likecoin', + 'bitcanna', + 'bitsong', + 'ki', + 'panacea', + 'juno', + 'sommelier', + 'umee', + 'evmos', + 'injective', + 'bostrom', + 'comdex', + 'cheqd', + 'chihuahua', + 'lumnetwork', + 'vidulum', + 'desmos', + 'dig', + 'starname', + 'gravitybridge', + ], + features: ['icns'], + platforms: [ + { + device: 'mobile', + type: 'application', + platform: 'ios', + install_link: 'https://apps.apple.com/app/keplr-wallet/id1567851089', + }, + { + device: 'mobile', + type: 'application', + platform: 'android', + install_link: + 'https://play.google.com/store/apps/details?id=com.chainapsis.keplr', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo.svg', + theme: { + primary_color_hex: '#1BB8FF', + circle: false, + dark_mode: false, + }, + layout: 'logomark', + }, + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text.svg', + theme: { + primary_color_hex: '#EBF7FD', + circle: false, + dark_mode: false, + }, + layout: 'logo', + text_position: 'right', + }, + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text-dark.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/keplrextension/images/logo-text-dark.svg', + theme: { + primary_color_hex: '#0A0718', + circle: false, + dark_mode: true, + }, + layout: 'logomark', + }, + ], + wallet_connect: { + deeplink: { + path: { + android: 'wcV2', + ios: 'wcV2', + }, + }, + }, + mobile: { + ios: { + bundle_identifier: 'com.chainapsis.keplrwallet', + schema: 'keplrwallet', + }, + android: { + package_name: 'com.chainapsis.keplr', + schema: 'keplrwallet', + }, + }, +}; diff --git a/packages/wallet-registry/src/wallets/leapextension.ts b/packages/wallet-registry/src/wallets/leapextension.ts new file mode 100644 index 00000000..3a6af074 --- /dev/null +++ b/packages/wallet-registry/src/wallets/leapextension.ts @@ -0,0 +1,64 @@ +import type { CosmosWallet } from '../types'; + +export const leapextension: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'leapextension', + pretty_name: 'Leap Cosmos Wallet', + website: 'https://www.leapwallet.io/', + git_repo: '', + supported_chains: [ + 'cosmoshub', + 'juno', + 'osmosis', + 'secretnetwork', + 'agoric', + 'akash', + 'assetmantle', + 'axelar', + 'bitsong', + 'cheqd', + 'chihuahua', + 'comdex', + 'desmos', + 'emoney', + 'evmos', + 'fetchhub', + 'gravitybridge', + 'injective', + 'irisnet', + 'jackal', + 'kujira', + 'likecoin', + 'persistence', + 'atlantic', + 'sifchain', + 'sommelier', + 'stargaze', + 'starname', + 'stride', + 'teritori', + 'umee', + ], + features: ['suggest_chain'], + platforms: [ + { + device: 'desktop', + type: 'extension', + platform: 'chrome', + install_link: + 'https://chrome.google.com/webstore/detail/leap-cosmos-wallet/fcfcfllfndlomdhbehjjcoimbgofdncg', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/leapextension/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/leapextension/images/logo.svg', + theme: { + primary_color_hex: '#32DA6D', + circle: false, + dark_mode: false, + }, + layout: 'logomark', + }, + ], +}; diff --git a/packages/wallet-registry/src/wallets/leapmobile.ts b/packages/wallet-registry/src/wallets/leapmobile.ts new file mode 100644 index 00000000..c0277c97 --- /dev/null +++ b/packages/wallet-registry/src/wallets/leapmobile.ts @@ -0,0 +1,82 @@ +import type { CosmosWallet } from '../types'; + +export const leapmobile: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'leapmobile', + pretty_name: 'Leap cosmos', + website: 'https://leapwallet.io', + git_repo: '', + supported_chains: [ + 'cosmoshub', + 'juno', + 'osmosis', + 'akash', + 'assetmantle', + 'axelar', + 'cheqd', + 'chihuahua', + 'desmos', + 'emoney', + 'fetchhub', + 'gravitybridge', + 'injective', + 'irisnet', + 'jackal', + 'kujira', + 'likecoin', + 'persistence', + 'atlantic', + 'sifchain', + 'sommelier', + 'stargaze', + 'starname', + 'stride', + 'teritori', + 'umee', + ], + platforms: [ + { + device: 'mobile', + type: 'application', + platform: 'ios', + install_link: 'https://apps.apple.com/in/app/leap-cosmos/id1642465549', + }, + { + device: 'mobile', + type: 'application', + platform: 'android', + install_link: + 'https://play.google.com/store/apps/details?id=io.leapwallet.cosmos', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/leapmobile/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/leapmobile/images/logo.svg', + theme: { + primary_color_hex: '#32DA6D', + circle: false, + dark_mode: false, + }, + layout: 'logomark', + }, + ], + wallet_connect: { + deeplink: { + path: { + android: 'wcV2', + ios: 'wcV2', + }, + }, + }, + mobile: { + ios: { + bundle_identifier: 'com.LeapCosmosWallet', + schema: 'leapcosmos', + }, + android: { + package_name: 'io.leapwallet.cosmos', + schema: 'leapcosmos', + }, + }, +}; diff --git a/packages/wallet-registry/src/wallets/trustwalletmobile.ts b/packages/wallet-registry/src/wallets/trustwalletmobile.ts new file mode 100644 index 00000000..3380b485 --- /dev/null +++ b/packages/wallet-registry/src/wallets/trustwalletmobile.ts @@ -0,0 +1,65 @@ +import type { CosmosWallet } from '../types'; + +export const trustwalletmobile: CosmosWallet = { + $schema: '../../wallet.schema.json', + wallet_name: 'trustwalletmobile', + pretty_name: 'Trust Wallet', + website: 'https://www.trustwallet.com', + git_repo: 'https://github.com/trustwallet', + supported_chains: [ + 'cosmoshub', + 'osmosis', + 'cryptoorgchain', + 'terra', + 'evmos', + 'kava', + 'thorchain', + ], + platforms: [ + { + device: 'mobile', + type: 'application', + platform: 'ios', + install_link: 'https://apps.apple.com/app/apple-store/id1288339409', + }, + { + device: 'mobile', + type: 'application', + platform: 'android', + install_link: + 'https://play.google.com/store/apps/details?id=com.wallet.crypto.trustapp', + }, + ], + images: [ + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/trustwalletmobile/images/logo-text.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/trustwalletmobile/images/logo-text.svg', + theme: { + primary_color_hex: '#0500ff', + circle: false, + dark_mode: false, + }, + layout: 'logo', + text_position: 'right', + }, + { + png: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/trustwalletmobile/images/logo.png', + svg: 'https://raw.githubusercontent.com/cosmos/wallet-registry/main/trustwalletmobile/images/logo.svg', + theme: { + primary_color_hex: '#0500ff', + circle: false, + dark_mode: false, + }, + layout: 'logo', + text_position: 'top', + }, + ], + mobile: { + ios: { + bundle_identifier: 'com.sixdays.trust', + }, + android: { + package_name: 'com.wallet.crypto.trustapp', + }, + }, +};