From b325ce8f08a39af44a74c93ade221c3600b2c770 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 20 Apr 2023 13:51:33 +0100 Subject: [PATCH] add Frame support --- packages/connectkit/src/assets/logos.tsx | 17 ++++++++++ packages/connectkit/src/utils/index.ts | 15 +++++++++ .../src/wallets/connectors/frame.tsx | 32 +++++++++++++++++++ packages/connectkit/src/wallets/index.ts | 2 ++ .../src/wallets/useDefaultWallets.tsx | 3 +- 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 packages/connectkit/src/wallets/connectors/frame.tsx diff --git a/packages/connectkit/src/assets/logos.tsx b/packages/connectkit/src/assets/logos.tsx index 586e452b..48022e47 100644 --- a/packages/connectkit/src/assets/logos.tsx +++ b/packages/connectkit/src/assets/logos.tsx @@ -411,6 +411,22 @@ export const ImToken = ({ ...props }) => ( ); +export const Frame = ({ ...props }) => ( + +); + export const Rainbow = ({ ...props }) => { // Here we're using a base64 of an svg because the gradients in this logo do not play nicely on mobile devices /* @@ -822,4 +838,5 @@ export default { Frontier, Zerion, PlaceHolder, + Frame, }; diff --git a/packages/connectkit/src/utils/index.ts b/packages/connectkit/src/utils/index.ts index f5523ef2..0faed777 100644 --- a/packages/connectkit/src/utils/index.ts +++ b/packages/connectkit/src/utils/index.ts @@ -110,6 +110,9 @@ const isMetaMask = () => { const isTokenary = Boolean(ethereum.isTokenary); if (isTokenary) return false; + const isFrame = Boolean(ethereum.isFrame); + if (isFrame) return false; + return true; }; @@ -124,6 +127,17 @@ const isCoinbaseWallet = () => { ); }; +const isFrame = () => { + if (typeof window === 'undefined') return false; + const { ethereum } = window; + + return !!( + ethereum?.isFrame || + (ethereum?.providers && + ethereum?.providers.find((provider) => provider.isFrame)) + ); +}; + type ReactChildArray = ReturnType; function flattenChildren(children: React.ReactNode): ReactChildArray { const childrenArray = React.Children.toArray(children); @@ -166,5 +180,6 @@ export { getWalletDownloadUri, isMetaMask, isCoinbaseWallet, + isFrame, flattenChildren, }; diff --git a/packages/connectkit/src/wallets/connectors/frame.tsx b/packages/connectkit/src/wallets/connectors/frame.tsx new file mode 100644 index 00000000..1f3822ca --- /dev/null +++ b/packages/connectkit/src/wallets/connectors/frame.tsx @@ -0,0 +1,32 @@ +import { WalletProps } from '../wallet'; + +import { isFrame } from '../../utils'; +import Logos from '../../assets/logos'; + +export const frame = (): WalletProps => { + const isInstalled = isFrame(); + + return { + id: 'frame', + name: 'Frame', + logos: { + default: , + transparent: , + appIcon: , + connectorButton: , + }, + logoBackground: '#fff', + scannable: false, + downloadUrls: { + download: 'https://connect.family.co/v0/download/frame', + website: 'https://frame.sh', + chrome: + 'https://chrome.google.com/webstore/detail/frame-companion/ldcoohedfbjoobcadoglnnmmfbdlmmhf', + firefox: 'https://addons.mozilla.org/en-US/firefox/addon/frame-extension', + brave: + 'https://chrome.google.com/webstore/detail/frame-companion/ldcoohedfbjoobcadoglnnmmfbdlmmhf', + }, + installed: isInstalled, + createUri: (uri: string) => uri, + }; +}; diff --git a/packages/connectkit/src/wallets/index.ts b/packages/connectkit/src/wallets/index.ts index 6a306831..3e7639f4 100644 --- a/packages/connectkit/src/wallets/index.ts +++ b/packages/connectkit/src/wallets/index.ts @@ -15,6 +15,7 @@ import { onto } from './connectors/onto'; import { gnosisSafe } from './connectors/gnosisSafe'; import { frontier } from './connectors/frontier'; import { zerion } from './connectors/zerion'; +import { frame } from './connectors/frame'; export const getWallets = () => { return [ @@ -35,5 +36,6 @@ export const getWallets = () => { onto(), frontier(), zerion(), + frame(), ]; }; diff --git a/packages/connectkit/src/wallets/useDefaultWallets.tsx b/packages/connectkit/src/wallets/useDefaultWallets.tsx index 25aba970..83de1dbf 100644 --- a/packages/connectkit/src/wallets/useDefaultWallets.tsx +++ b/packages/connectkit/src/wallets/useDefaultWallets.tsx @@ -28,7 +28,8 @@ function useDefaultWallets(): WalletProps[] | any { 'onto', 'gnosisSafe', 'frontier', - 'zerion' + 'zerion', + 'frame' ); const wallets = getWallets();