From 310068de3c5a04e44b81623e39e342d0ad4eff7a Mon Sep 17 00:00:00 2001 From: safepalteam001 Date: Wed, 17 Jul 2024 11:37:22 +0800 Subject: [PATCH] Add SafePal Wallet --- .../shuttle-port-nextjs/src/app/layout.tsx | 4 +++ examples/shuttle-port-vue/src/main.ts | 4 +++ .../extensions/SafePalExtensionProvider.ts | 34 +++++++++++++++++++ .../core/src/providers/extensions/index.ts | 1 + 4 files changed, 43 insertions(+) create mode 100644 packages/core/src/providers/extensions/SafePalExtensionProvider.ts diff --git a/examples/shuttle-port-nextjs/src/app/layout.tsx b/examples/shuttle-port-nextjs/src/app/layout.tsx index 51dc94e..b4f8463 100644 --- a/examples/shuttle-port-nextjs/src/app/layout.tsx +++ b/examples/shuttle-port-nextjs/src/app/layout.tsx @@ -18,6 +18,7 @@ import { OWalletCosmosExtensionProvider, CosmiframeExtensionProvider, CitadelOneExtensionProvider, + SafePalExtensionProvider, } from "@delphi-labs/shuttle-react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; @@ -103,6 +104,9 @@ const extensionProviders = [ new CitadelOneExtensionProvider({ networks: [OSMOSIS_MAINNET], }), + new SafePalExtensionProvider({ + networks: [TERRA_MAINNET, INJECTIVE_MAINNET], + }), ]; const mobileProviders = [ diff --git a/examples/shuttle-port-vue/src/main.ts b/examples/shuttle-port-vue/src/main.ts index 49ae08d..abbcd6a 100644 --- a/examples/shuttle-port-vue/src/main.ts +++ b/examples/shuttle-port-vue/src/main.ts @@ -16,6 +16,7 @@ import { StationExtensionProvider, XDEFICosmosExtensionProvider, CitadelOneExtensionProvider, + SafePalExtensionProvider, createShuttle, } from "@delphi-labs/shuttle-vue"; @@ -59,6 +60,9 @@ const shuttle = createShuttle({ new CitadelOneExtensionProvider({ networks: [OSMOSIS_MAINNET], }), + new SafePalExtensionProvider({ + networks: [TERRA_MAINNET, INJECTIVE_MAINNET], + }), ], mobileProviders: [ new KeplrMobileProvider({ diff --git a/packages/core/src/providers/extensions/SafePalExtensionProvider.ts b/packages/core/src/providers/extensions/SafePalExtensionProvider.ts new file mode 100644 index 0000000..ae29e89 --- /dev/null +++ b/packages/core/src/providers/extensions/SafePalExtensionProvider.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 { + safepal?: { + keplr?: KeplrWindow; + }; + } +} + +export const SafePalExtensionProvider = class SafePalExtensionProvider extends WalletExtensionProvider { + constructor({ networks }: { networks: Network[] }) { + super({ + id: "safepal", + name: "SafePal", + networks, + extensionProviderAdapter: new Keplr({ + name: "SafePal", + extensionResolver() { + return window.safepal?.keplr; + }, + setupOnUpdateEventListener(callback) { + window.addEventListener("safepal_keystorechange", () => { + callback?.(); + }); + }, + }), + }); + } +}; + +export default SafePalExtensionProvider; diff --git a/packages/core/src/providers/extensions/index.ts b/packages/core/src/providers/extensions/index.ts index 15aec68..0b7c88b 100644 --- a/packages/core/src/providers/extensions/index.ts +++ b/packages/core/src/providers/extensions/index.ts @@ -15,3 +15,4 @@ export * from "./BitgetExtensionProvider"; export * from "./OWalletCosmosExtensionProvider"; export * from "./CosmiframeExtensionProvider"; export * from "./CitadelOneExtensionProvider"; +export * from "./SafePalExtensionProvider";