From 5eef565c23cd4f545f9b82c2abf416774e6c809a Mon Sep 17 00:00:00 2001 From: cypherwalletteam001 Date: Wed, 4 Sep 2024 10:55:17 +0800 Subject: [PATCH] Add CypherWallet (#190) Co-authored-by: cypherwalletteam001 --- .../shuttle-port-nextjs/src/app/layout.tsx | 4 +++ examples/shuttle-port-vue/src/main.ts | 4 +++ .../CypherWalletExtensionProvider.ts | 34 +++++++++++++++++++ .../core/src/providers/extensions/index.ts | 1 + 4 files changed, 43 insertions(+) create mode 100644 packages/core/src/providers/extensions/CypherWalletExtensionProvider.ts diff --git a/examples/shuttle-port-nextjs/src/app/layout.tsx b/examples/shuttle-port-nextjs/src/app/layout.tsx index 30e4ba5..3159fc5 100644 --- a/examples/shuttle-port-nextjs/src/app/layout.tsx +++ b/examples/shuttle-port-nextjs/src/app/layout.tsx @@ -22,6 +22,7 @@ import { SafePalExtensionProvider, imTokenExtensionProvider, MathExtensionProvider, + CypherWalletExtensionProvider } from "@delphi-labs/shuttle-react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; @@ -116,6 +117,9 @@ const extensionProviders = [ new MathExtensionProvider({ networks: [OSMOSIS_MAINNET, INJECTIVE_MAINNET], }), + new CypherWalletExtensionProvider({ + networks: [OSMOSIS_MAINNET, MARS_MAINNET, TERRA_MAINNET, INJECTIVE_MAINNET, NEUTRON_MAINNET, TERRA_TESTNET, INJECTIVE_TESTNET, NEUTRON_TESTNET], + }), ]; const mobileProviders = [ diff --git a/examples/shuttle-port-vue/src/main.ts b/examples/shuttle-port-vue/src/main.ts index 2364d97..49196a1 100644 --- a/examples/shuttle-port-vue/src/main.ts +++ b/examples/shuttle-port-vue/src/main.ts @@ -16,6 +16,7 @@ import { SafePalExtensionProvider, imTokenExtensionProvider, MathExtensionProvider, + CypherWalletExtensionProvider, createShuttle, } from "@delphi-labs/shuttle-vue"; import { VueQueryPlugin } from "@tanstack/vue-query"; @@ -72,6 +73,9 @@ const shuttle = createShuttle({ new MathExtensionProvider({ networks: [OSMOSIS_MAINNET, INJECTIVE_MAINNET], }), + new CypherWalletExtensionProvider({ + networks: [OSMOSIS_MAINNET, MARS_MAINNET, TERRA_MAINNET, INJECTIVE_MAINNET, TERRA_TESTNET, INJECTIVE_TESTNET], + }), ], mobileProviders: [ new KeplrMobileProvider({ diff --git a/packages/core/src/providers/extensions/CypherWalletExtensionProvider.ts b/packages/core/src/providers/extensions/CypherWalletExtensionProvider.ts new file mode 100644 index 0000000..27cd1c7 --- /dev/null +++ b/packages/core/src/providers/extensions/CypherWalletExtensionProvider.ts @@ -0,0 +1,34 @@ +import type { Network } from "../../internals/network"; +import Keplr, { type KeplrWindow } from "../../internals/adapters/extensions/Keplr"; +import WalletExtensionProvider from "./WalletExtensionProvider"; + +declare global { + interface Window { + cypherwallet?: { + keplr?: KeplrWindow; + }; + } +} + +export const CypherWalletExtensionProvider = class CypherWalletExtensionProvider extends WalletExtensionProvider { + constructor({ networks }: { networks: Network[] }) { + super({ + id: "cypherwallet", + name: "CypherWallet", + networks, + extensionProviderAdapter: new Keplr({ + name: "CypherWallet", + extensionResolver() { + return window.cypherwallet?.keplr; + }, + setupOnUpdateEventListener(callback) { + window.addEventListener("cypherwallet_keystorechange", () => { + callback?.(); + }); + }, + }), + }); + } +}; + +export default CypherWalletExtensionProvider; diff --git a/packages/core/src/providers/extensions/index.ts b/packages/core/src/providers/extensions/index.ts index 5239dd6..a4c991c 100644 --- a/packages/core/src/providers/extensions/index.ts +++ b/packages/core/src/providers/extensions/index.ts @@ -18,3 +18,4 @@ export * from "./CitadelOneExtensionProvider"; export * from "./SafePalExtensionProvider"; export * from "./imTokenExtensionProvider"; export * from "./MathExtensionProvider"; +export * from "./CypherWalletExtensionProvider"; \ No newline at end of file