Skip to content

Commit

Permalink
fixes formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
Adebesin-Cell committed Mar 12, 2024
1 parent 0877581 commit 0646a6a
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 249 deletions.
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
"type": "module",
"repository": "https://github.com/magiclabs/wagmi-magic-connector",
"license": "MIT",
"keywords": ["wagmi", "extension", "magic"],
"keywords": [
"wagmi",
"extension",
"magic"
],
"scripts": {
"build": "tsc -p tsconfig.json && tsc-esm-fix --target='dist' --ext='.js'",
"format": "rome format . --write",
Expand Down
50 changes: 21 additions & 29 deletions src/lib/connectors/dedicatedWalletConnector.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { OAuthExtension, OAuthProvider } from '@magic-ext/oauth'
import type { OAuthExtension, OAuthProvider } from '@magic-ext/oauth'
import type {
InstanceWithExtensions,
MagicSDKAdditionalConfiguration,
SDKBase,
} from '@magic-sdk/provider'
import { createConnector, normalizeChainId } from '@wagmi/core'
import { Magic } from 'magic-sdk'
import {
MagicConnectorParams,
MagicOptions,
type MagicConnectorParams,
type MagicOptions,
magicConnector,
} from './magicConnector'
import { UserRejectedRequestError, getAddress } from 'viem'
Expand Down Expand Up @@ -60,37 +59,24 @@ export function dedicatedWalletConnector({
chains,
options,
}: DedicatedWalletConnectorParams) {
let magicSDK: InstanceWithExtensions<SDKBase, OAuthExtension[]> | null = null

const getDedicatedMagicSdk = () => {
if (!magicSDK) {
magicSDK = new Magic(options.apiKey, {
...options.magicSdkConfiguration,
extensions: [new OAuthExtension()],
}) as InstanceWithExtensions<SDKBase, OAuthExtension[]>
}
return magicSDK
}

let {
id,
name,
type,
isModalOpen,
getAccount,
// biome-ignore lint/correctness/noUnusedVariables: <explanation>
getMagicSDK,
getProvider,
// getWalletClient,
onAccountsChanged,
} = magicConnector({ chains, options })

getMagicSDK = getDedicatedMagicSdk
} = magicConnector({
chains,
options: { ...options, connectorType: 'dedicated' },
})

const oauthProviders = options.oauthOptions?.providers || []
const oauthProviders = options.oauthOptions?.providers ?? []
const oauthCallbackUrl = options.oauthOptions?.callbackUrl
const enableSMSLogin = options.enableSMSLogin || false
const enableEmailLogin = options.enableEmailLogin || true
const enableSMSLogin = options.enableSMSLogin ?? false
const enableEmailLogin = options.enableEmailLogin ?? true

/**
* This method is used to get user details from the modal UI
Expand Down Expand Up @@ -148,20 +134,23 @@ export function dedicatedWalletConnector({
}
}

if (isModalOpen) {
if (!isModalOpen) {
const modalOutput = await getUserDetailsByForm(
enableSMSLogin,
enableEmailLogin,
oauthProviders,
)

const magic = getDedicatedMagicSdk()
const magic = getMagicSDK() as InstanceWithExtensions<
SDKBase,
OAuthExtension[]
>

// LOGIN WITH MAGIC USING OAUTH PROVIDER
if (modalOutput.oauthProvider)
await magic.oauth.loginWithRedirect({
provider: modalOutput.oauthProvider,
redirectURI: oauthCallbackUrl || window.location.href,
redirectURI: oauthCallbackUrl ?? window.location.href,
})

// LOGIN WITH MAGIC USING EMAIL
Expand All @@ -187,7 +176,7 @@ export function dedicatedWalletConnector({

disconnect: async () => {
try {
const magic = getDedicatedMagicSdk()
const magic = getMagicSDK()
await magic?.wallet.disconnect()
config.emitter.emit('disconnect')
} catch (error) {
Expand Down Expand Up @@ -222,7 +211,10 @@ export function dedicatedWalletConnector({

isAuthorized: async () => {
try {
const magic = getDedicatedMagicSdk()
const magic = getMagicSDK() as InstanceWithExtensions<
SDKBase,
OAuthExtension[]
>

if (!magic) {
return false
Expand Down
111 changes: 20 additions & 91 deletions src/lib/connectors/magicConnector.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { OAuthExtension } from '@magic-ext/oauth'
import type {
InstanceWithExtensions,
MagicSDKAdditionalConfiguration,
MagicSDKExtensionsOption,
SDKBase,
} from '@magic-sdk/provider'
import { Chain, createWalletClient, custom, getAddress } from 'viem'
import { type EthNetworkConfiguration, Magic } from 'magic-sdk'
import { type Chain, createWalletClient, custom, getAddress } from 'viem'

const IS_SERVER = typeof window === 'undefined'

Expand All @@ -14,6 +16,9 @@ export interface MagicOptions {
isDarkMode?: boolean
customLogo?: string
customHeaderText?: string
connectorType?: 'dedicated' | 'universal'
magicSdkConfiguration?: MagicSDKAdditionalConfiguration
networks?: EthNetworkConfiguration[]
}

/**
Expand All @@ -24,95 +29,6 @@ export interface MagicOptions {
* And both of them extend this class.
*/

// export abstract class MagicConnector extends Connector {
// ready = !IS_SERVER
// readonly id = 'magic'
// readonly name = 'Magic'
// isModalOpen = false

// protected constructor(config: { chains?: Chain[]; options: MagicOptions }) {
// super(config)
// if (!config.options.apiKey) {
// throw new Error(
// 'Magic API Key is required. Get one at https://dashboard.magic.link/',
// )
// }
// }

// async getAccount() {
// const provider = await this.getProvider()
// const accounts = await provider?.request({
// method: 'eth_accounts',
// })
// const account = getAddress(accounts[0] as string)
// return account
// }

// async getWalletClient({ chainId }: { chainId?: number } = {}): Promise<any> {
// const provider = await this.getProvider()
// const account = await this.getAccount()
// const chain = this.chains.find((x) => x.id === chainId) || this.chains[0]
// if (!provider) throw new Error('provider is required.')
// return createWalletClient({
// account,
// chain,
// transport: custom(provider),
// })
// }

// async getProvider() {
// const magic = this.getMagicSDK()
// return magic?.rpcProvider
// }

// protected onAccountsChanged(accounts: string[]): void {
// if (accounts.length === 0 || !accounts[0]) this.emit('disconnect')
// else this.emit('change', { account: getAddress(accounts[0]) })
// }

// protected onChainChanged(chainId: string | number): void {
// const id = normalizeChainId(chainId)
// const unsupported = this.isChainUnsupported(id)
// this.emit('change', { chain: { id, unsupported } })
// }

// async getChainId(): Promise<number> {
// const provider = await this.getProvider()
// if (provider) {
// const chainId = await provider.request({
// method: 'eth_chainId',
// params: [],
// })
// return normalizeChainId(chainId)
// }
// const networkOptions = this.options.magicSdkConfiguration?.network
// if (typeof networkOptions === 'object') {
// const chainID = networkOptions.chainId
// if (chainID) return normalizeChainId(chainID)
// }
// throw new Error('Chain ID is not defined')
// }

// protected onDisconnect(): void {
// this.emit('disconnect')
// }

// async disconnect(): Promise<void> {
// try {
// const magic = this.getMagicSDK()
// await magic?.wallet.disconnect()
// this.emit('disconnect')
// } catch (error) {
// console.error('Error disconnecting from Magic SDK:', error)
// }
// }

// abstract getMagicSDK():
// | InstanceWithExtensions<SDKBase, OAuthExtension[]>
// | InstanceWithExtensions<SDKBase, MagicSDKExtensionsOption<string>>
// | null
// }

export interface MagicConnectorParams {
chains?: Chain[]
options: MagicOptions
Expand All @@ -129,6 +45,19 @@ export function magicConnector({ chains = [], options }: MagicConnectorParams) {
| InstanceWithExtensions<SDKBase, OAuthExtension[]>
| InstanceWithExtensions<SDKBase, MagicSDKExtensionsOption<string>>
| null => {
if (options.connectorType === 'dedicated') {
return new Magic(options.apiKey, {
...options.magicSdkConfiguration,
extensions: [new OAuthExtension()],
})
}
if (options.connectorType === 'universal') {
return new Magic(options.apiKey, {
...options.magicSdkConfiguration,
network:
options.magicSdkConfiguration?.network ?? options?.networks?.[0],
})
}
return null
}

Expand All @@ -150,7 +79,7 @@ export function magicConnector({ chains = [], options }: MagicConnectorParams) {
const getWalletClient = async ({ chainId }: { chainId?: number } = {}) => {
const provider = await getProvider()
const account = await getAccount()
const chain = chains.find((x) => x.id === chainId) || chains[0]
const chain = chains.find((x) => x.id === chainId) ?? chains[0]
if (!provider) throw new Error('provider is required.')
return createWalletClient({
account,
Expand Down
Loading

0 comments on commit 0646a6a

Please sign in to comment.