@lydianpay/lydianconnect 0.0.0-managed

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/manager.ts","../src/core/connector.ts","../src/connectors/walletconnect/wallet-links.generated.ts","../src/connectors/walletconnect/registry.ts","../src/connectors/walletconnect/deeplink.ts","../src/connectors/walletconnect/connector.ts","../src/connectors/metamask/connector.ts","../src/connectors/coinbase/connector.ts"],"names":["SignClient","getSdkError","WALLET_ID","toCaip"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { Connector } from './connector';\nimport type {\n CaipNamespace,\n Connection,\n LydianConnectEvent,\n LydianConnectEventHandler,\n} from './types';\n\nexport interface LydianConnectConfig {\n /** SDK/injected connectors, each serving specific walletIds (MetaMask, Coinbase…). */\n connectors?: Connector[];\n /** Fallback for any wallet not served above — the WalletConnect connector. */\n fallback: Connector;\n}\n\nexport interface ConnectInput {\n walletId: string;\n namespace: CaipNamespace;\n signal?: AbortSignal;\n}\n\n/**\n * The single surface the host app touches. Routes each wallet to its native\n * SDK connector when one is registered, otherwise to the WalletConnect\n * fallback — and hands back a uniform {@link Connection} either way.\n */\nexport class LydianConnect {\n private byWallet = new Map<string, Connector>();\n private fallback: Connector;\n private all: Connector[];\n private connections = new Map<string, Connection>();\n private handlers = new Set<LydianConnectEventHandler>();\n private unsubs: Array<() => void> = [];\n private started = false;\n\n constructor(config: LydianConnectConfig) {\n this.fallback = config.fallback;\n this.all = [...(config.connectors ?? []), config.fallback];\n for (const connector of config.connectors ?? []) {\n for (const id of connector.walletIds) this.byWallet.set(id, connector);\n }\n }\n\n /** Wire connector event forwarding, once. Safe to call repeatedly. */\n async init(): Promise<void> {\n if (this.started) return;\n this.started = true;\n for (const connector of this.all) {\n this.unsubs.push(connector.on((event) => this.handle(event)));\n }\n }\n\n /** SDK connector if one claims this walletId, else the WC fallback. The host app is oblivious. */\n private resolve(walletId: string): Connector {\n return this.byWallet.get(walletId) ?? this.fallback;\n }\n\n async connect(input: ConnectInput): Promise<Connection> {\n if (!this.started) await this.init();\n const connection = await this.resolve(input.walletId).connect(input);\n this.connections.set(input.walletId, connection);\n this.emit({ type: 'connect', walletId: input.walletId, connection });\n return connection;\n }\n\n /** Resume any live sessions across all connectors (e.g. after a page reload). */\n async restore(): Promise<Connection[]> {\n if (!this.started) await this.init();\n const restored: Connection[] = [];\n for (const connector of this.all) {\n const conns = await connector.restore().catch(() => [] as Connection[]);\n for (const conn of conns) {\n this.connections.set(conn.walletId, conn);\n restored.push(conn);\n }\n }\n return restored;\n }\n\n get(walletId: string): Connection | undefined {\n return this.connections.get(walletId);\n }\n\n async disconnect(walletId?: string): Promise<void> {\n if (walletId) {\n await this.connections.get(walletId)?.disconnect().catch(() => {});\n this.connections.delete(walletId);\n return;\n }\n await Promise.allSettled([...this.connections.values()].map((c) => c.disconnect()));\n this.connections.clear();\n }\n\n /** Disconnect everything and clear all connector-held state. */\n async reset(): Promise<void> {\n await this.disconnect();\n await Promise.allSettled(this.all.map((c) => c.reset()));\n }\n\n on(handler: LydianConnectEventHandler): () => void {\n this.handlers.add(handler);\n return () => this.handlers.delete(handler);\n }\n\n private handle(event: LydianConnectEvent): void {\n if (event.type === 'disconnect') this.connections.delete(event.walletId);\n this.emit(event);\n }\n\n private emit(event: LydianConnectEvent): void {\n for (const handler of this.handlers) handler(event);\n }\n}\n","import type {\n CaipNamespace,\n Connection,\n ConnectorType,\n LydianConnectEvent,\n LydianConnectEventHandler,\n} from './types';\n\nexport interface ConnectRequest {\n walletId: string;\n namespace: CaipNamespace;\n /** Cancel a pending connection (replaces the host app's manual cancel plumbing). */\n signal?: AbortSignal;\n}\n\n/**\n * Internal contract every connector implements. The host app never sees this —\n * it only ever touches {@link LydianConnect} and the {@link Connection} handle.\n */\nexport interface Connector {\n readonly type: ConnectorType;\n /**\n * Wallet ids this connector natively serves. The WalletConnect fallback\n * returns an empty list and claims any wallet not served by another connector.\n */\n readonly walletIds: readonly string[];\n isAvailable(walletId: string): boolean | Promise<boolean>;\n connect(req: ConnectRequest): Promise<Connection>;\n /** Rebuild Connections for still-live sessions — the reconnect-on-reload case. */\n restore(): Promise<Connection[]>;\n /** Tear down everything this connector owns. */\n reset(): Promise<void>;\n on(handler: LydianConnectEventHandler): () => void;\n}\n\nexport abstract class BaseConnector implements Connector {\n abstract readonly type: ConnectorType;\n readonly walletIds: readonly string[] = [];\n\n private handlers = new Set<LydianConnectEventHandler>();\n\n abstract isAvailable(walletId: string): boolean | Promise<boolean>;\n abstract connect(req: ConnectRequest): Promise<Connection>;\n\n async restore(): Promise<Connection[]> {\n return [];\n }\n\n async reset(): Promise<void> {\n /* no-op by default */\n }\n\n on(handler: LydianConnectEventHandler): () => void {\n this.handlers.add(handler);\n return () => this.handlers.delete(handler);\n }\n\n protected emit(event: LydianConnectEvent): void {\n for (const handler of this.handlers) handler(event);\n }\n}\n","// AUTO-GENERATED by scripts/build-wallet-links.mjs — do not edit by hand.\n// Refresh: WC_PROJECT_ID=<projectId> node scripts/build-wallet-links.mjs\n// Source: WalletConnect explorer API (explorer-api.walletconnect.com/v3/wallets)\nimport type { WalletLink } from './registry';\n\nexport const GENERATED_WALLET_LINKS: Record<string, WalletLink> = {\n metamask: {\"scheme\":\"metamask://wc\",\"universal\":\"https://metamask.app.link/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/metamask/id1438144202\",\"android\":\"https://play.google.com/store/apps/details?id=io.metamask\"}},\n trust: {\"scheme\":\"trust://wc\",\"universal\":\"https://link.trustwallet.com/wc\",\"store\":{\"ios\":\"https://apps.apple.com/app/apple-store/id1288339409\",\"android\":\"https://play.google.com/store/apps/details?id=com.wallet.crypto.trustapp\"}},\n rainbow: {\"scheme\":\"rainbow://wc\",\"universal\":\"https://rnbwapp.com/wc\",\"store\":{\"ios\":\"https://apps.apple.com/app/apple-store/id1457119021?pt=119997837&ct=wc&mt=8\",\"android\":\"https://play.google.com/store/apps/details?id=me.rainbow&referrer=utm_source%3Dwc%26utm_medium%3Dconnector%26utm_campaign%3Dwc\"}},\n coinbase: {\"store\":{\"ios\":\"https://apps.apple.com/us/app/base-formerly-coinbase-wallet/id1278383455\"}},\n zerion: {\"scheme\":\"zerion://wc\",\"universal\":\"https://wallet.zerion.io/wc/wc\",\"store\":{\"ios\":\"https://apps.apple.com/app/id1456732565\",\"android\":\"https://play.google.com/store/apps/details?id=io.zerion.android&hl=en&gl=US\"}},\n tokenpocket: {\"scheme\":\"tpoutside://wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/tp-wallet/id6444625622?l=en\",\"android\":\"https://play.google.com/store/apps/details?id=vip.mytokenpocket\"}},\n blockchaincom: {\"scheme\":\"blockchain-wallet://wc\",\"universal\":\"https://login.blockchain.com/app/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/blockchain-bitcoin-wallet/id493253309\",\"android\":\"https://play.google.com/store/apps/details?id=piuk.blockchain.android\"}},\n exodus: {\"scheme\":\"exodus://wc\",\"universal\":\"https://exodus.com/m/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/exodus-crypto-bitcoin-wallet/id1414384820\",\"android\":\"https://play.google.com/store/apps/details?id=exodusmovement.exodus&hl=en&gl=US\"}},\n phantom: {\"store\":{\"ios\":\"https://apps.apple.com/us/app/phantom-crypto-wallet/id1598432977\",\"android\":\"https://play.google.com/store/apps/details?id=app.phantom&hl=en\"}},\n okx: {\"scheme\":\"okex://main/wc\",\"universal\":\"https://www.okx.com/download?appendQuery=true&deeplink=okx://web3/wallet/walletConnect/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/okx-buy-bitcoin-eth-crypto/id1327268470\",\"android\":\"https://play.google.com/store/apps/details?id=com.okinc.okex.gp\"}},\n cryptocom: {\"scheme\":\"dfw://wc\",\"universal\":\"https://wallet.crypto.com/deeplink/wc\",\"store\":{\"ios\":\"https://apps.apple.com/US/app/id1512048310?mt=8\",\"android\":\"https://play.google.com/store/apps/details?id=com.defi.wallet\"}},\n argent: {\"scheme\":\"argent://app/wc\",\"universal\":\"https://www.argent.xyz/app/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/argent-defi-in-a-tap/id1358741926\",\"android\":\"https://play.google.com/store/apps/details?id=im.argent.contractwalletclient&hl=en&gl=US&pli=1\"}},\n safepal: {\"scheme\":\"safepalwallet://wc\",\"universal\":\"https://link.safepal.io/wc\",\"store\":{\"ios\":\"https://apps.apple.com/app/safepal-wallet/id1548297139\",\"android\":\"https://play.google.com/store/apps/details?id=io.safepal.wallet\"}},\n imtoken: {\"scheme\":\"imtokenv2://wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/imtoken2/id1384798940\",\"android\":\"https://play.google.com/store/apps/details?id=im.token.app\"}},\n ronin: {\"scheme\":\"roninwallet://wc\",\"universal\":\"https://wallet.roninchain.com/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/ronin-wallet/id1592675001\",\"android\":\"https://play.google.com/store/apps/details?id=com.skymavis.genesis\"}},\n coin98: {\"scheme\":\"coin98://wc\",\"universal\":\"https://coin98.com/wc\",\"store\":{\"ios\":\"https://apps.apple.com/vn/app/coin98-wallet/id1561969966\",\"android\":\"https://play.google.com/store/apps/details?id=coin98.crypto.finance.media&hl=vi&gl=US\"}},\n bitkeep: {\"scheme\":\"bitkeep://wc\",\"universal\":\"https://bkapp.vip/wc\",\"store\":{\"ios\":\"https://web3.bitget.com/en/wallet-download?type=0\",\"android\":\"https://web3.bitget.com/en/wallet-download?type=0\"}},\n \"1inch\": {\"scheme\":\"oneinch://open/nobodywilleveruseit/wc\",\"universal\":\"https://wallet.1inch.io/app/nobodywilleveruseit/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/1inch-defi-wallet/id1546049391\",\"android\":\"https://play.google.com/store/apps/details?id=io.oneinch.android\"}},\n ledgerlive: {\"scheme\":\"ledgerlive://wc\",\"store\":{\"ios\":\"https://itunes.apple.com/app/id1361671700\",\"android\":\"https://play.google.com/store/apps/details?id=com.ledger.live\"}},\n atomic: {\"scheme\":\"atomicwallet://wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/atomic-wallet/id1478257827\",\"android\":\"https://play.google.com/store/apps/details?id=io.atomicwallet\"}},\n alpha: {\"scheme\":\"awallet://wc\",\"universal\":\"https://aw.app/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/alphawallet-eth-wallet/id1358230430\",\"android\":\"https://play.google.com/store/apps/details?id=io.stormbird.wallet\"}},\n math: {\"scheme\":\"mathwallet://wc\",\"universal\":\"https://www.mathwallet.org/wc\",\"store\":{\"ios\":\"https://apps.apple.com/us/app/mathwallet5/id1582612388\",\"android\":\"https://play.google.com/store/apps/details?id=com.mathwallet.android\"}},\n bitpay: {\"scheme\":\"bitpay://wc\",\"universal\":\"https://link.bitpay.com/wc\",\"store\":{\"ios\":\"https://bitpay.onelink.me/Cenw/ejjaw7bs\",\"android\":\"https://bitpay.onelink.me/Cenw/ejjaw7bs\"}},\n};\n","import { GENERATED_WALLET_LINKS } from './wallet-links.generated';\n\nexport interface WalletLink {\n /** Custom scheme deep link incl. the `wc` path; we append `?uri=`. e.g. \"metamask://wc\". */\n scheme?: string;\n /** Universal/applink incl. the `wc` path, preferred on mobile (OS falls back to the store). */\n universal?: string;\n /** App store links — used for the \"wallet not installed\" fallback. */\n store?: { ios?: string; android?: string };\n}\n\n/**\n * Wallets absent from the WalletConnect explorer registry, maintained by hand.\n * Generated entries (below) take precedence if a wallet later appears upstream.\n */\nconst MANUAL_WALLET_LINKS: Record<string, WalletLink> = {\n infinity: { scheme: 'infinity://wc' },\n};\n\nexport const DEFAULT_WALLET_LINKS: Record<string, WalletLink> = {\n ...MANUAL_WALLET_LINKS,\n ...GENERATED_WALLET_LINKS,\n};\n","import type { WalletLink } from './registry';\n\nexport function isMobile(): boolean {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent || '';\n const uaDataMobile =\n (navigator as { userAgentData?: { mobile?: boolean } }).userAgentData?.mobile ?? false;\n return /iPhone|iPad|iPod|Android/i.test(ua) || uaDataMobile;\n}\n\nfunction buildLink(base: string, uri: string): string {\n const sep = base.includes('?') ? '&' : '?';\n return `${base}${sep}uri=${encodeURIComponent(uri)}`;\n}\n\n/**\n * Fire from WITHIN a user gesture. Universal link first (OS shows the App Store\n * if the wallet isn't installed) opened in a throwaway context so the checkout\n * page is never replaced in history; custom scheme as the fallback.\n */\nexport function openWallet(link: WalletLink, uri: string): void {\n if (typeof document === 'undefined') return;\n if (link.universal) {\n openHref(buildLink(link.universal, uri), true);\n } else if (link.scheme) {\n openHref(buildLink(link.scheme, uri), false);\n }\n}\n\nfunction openHref(href: string, newContext: boolean): void {\n const a = document.createElement('a');\n a.href = href;\n if (newContext) {\n a.target = '_blank';\n a.rel = 'noopener noreferrer';\n }\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n}\n\n/** Resolves true if the page was backgrounded (wallet likely opened) within the window. */\nexport function detectAppOpen(timeoutMs: number): Promise<boolean> {\n if (typeof document === 'undefined') return Promise.resolve(false);\n return new Promise((resolve) => {\n let done = false;\n const finish = (opened: boolean) => {\n if (done) return;\n done = true;\n document.removeEventListener('visibilitychange', onVisibility);\n window.removeEventListener('pagehide', onPageHide);\n clearTimeout(timer);\n resolve(opened);\n };\n const onVisibility = () => {\n if (document.hidden) finish(true);\n };\n const onPageHide = () => finish(true);\n document.addEventListener('visibilitychange', onVisibility);\n window.addEventListener('pagehide', onPageHide);\n const timer = setTimeout(() => finish(false), timeoutMs);\n });\n}\n","import SignClient from '@walletconnect/sign-client';\nimport { getSdkError } from '@walletconnect/utils';\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types';\nimport { BaseConnector, type ConnectRequest } from '../../core/connector';\nimport type { CaipNamespace, Connection } from '../../core/types';\nimport { DEFAULT_WALLET_LINKS, type WalletLink } from './registry';\nimport { detectAppOpen, isMobile, openWallet } from './deeplink';\n\nconst STORAGE_KEY = 'lydianconnect.wc.topics'; // walletId -> session topic\n\nexport interface WalletConnectConfig {\n projectId: string;\n metadata: SignClientTypes.Metadata;\n relayUrl?: string;\n walletLinks?: Record<string, WalletLink>;\n openTimeoutMs?: number;\n}\n\nexport class WalletConnectConnector extends BaseConnector {\n readonly type = 'walletconnect' as const;\n readonly walletIds: readonly string[] = []; // claims any wallet not served by an SDK connector\n\n private client: SignClient | null = null;\n private links: Record<string, WalletLink>;\n private topics = new Map<string, string>();\n private warm: { topic: string; uri: string } | null = null;\n private warming: Promise<void> | null = null;\n\n constructor(private config: WalletConnectConfig) {\n super();\n this.links = { ...DEFAULT_WALLET_LINKS, ...(config.walletLinks ?? {}) };\n }\n\n isAvailable(): boolean {\n return true;\n }\n\n private async getClient(): Promise<SignClient> {\n if (this.client) return this.client;\n const client = await SignClient.init({\n projectId: this.config.projectId,\n metadata: this.config.metadata,\n relayUrl: this.config.relayUrl,\n });\n\n client.on('session_delete', ({ topic }) => {\n const walletId = this.walletForTopic(topic);\n if (!walletId) return;\n this.topics.delete(walletId);\n this.persist();\n this.emit({ type: 'disconnect', walletId });\n });\n\n client.on('session_event', ({ topic, params }) => {\n const walletId = this.walletForTopic(topic);\n if (!walletId) return;\n const { name, data } = params.event;\n if (name === 'chainChanged') {\n const chainId =\n typeof data === 'string' && data.includes(':') ? data : `eip155:${String(data)}`;\n this.emit({ type: 'chainChanged', walletId, chainId });\n } else if (name === 'accountsChanged' && Array.isArray(data) && data[0]) {\n const account = String(data[0]).split(':').pop() ?? '';\n if (account) this.emit({ type: 'accountsChanged', walletId, account });\n }\n });\n\n this.client = client;\n this.load();\n return client;\n }\n\n /** Pre-create a pairing so connect() can deep-link synchronously within the gesture. */\n private async warmup(): Promise<void> {\n if (this.warm) return;\n if (this.warming) return this.warming;\n this.warming = (async () => {\n const client = await this.getClient();\n const { topic, uri } = await client.core.pairing.create();\n this.warm = { topic, uri };\n this.warming = null;\n })();\n return this.warming;\n }\n\n async connect(req: ConnectRequest): Promise<Connection> {\n const client = await this.getClient();\n\n const reused = this.tryReuse(client, req);\n if (reused) return reused;\n\n if (!this.warm) await this.warmup(); // cold path loses the gesture, but the QR/URI is still emitted\n const warm = this.warm;\n this.warm = null;\n if (!warm) throw new Error('Failed to create WalletConnect pairing');\n\n this.emit({ type: 'display_uri', walletId: req.walletId, uri: warm.uri });\n\n if (isMobile()) {\n const link = this.links[req.walletId];\n if (link) {\n openWallet(link, warm.uri); // synchronous — preserves connect()'s click gesture\n void detectAppOpen(this.config.openTimeoutMs ?? 2000).then((opened) => {\n if (!opened) this.emit({ type: 'wallet_open_failed', walletId: req.walletId, uri: warm.uri });\n });\n }\n }\n\n const { approval } = await client.connect({\n pairingTopic: warm.topic,\n optionalNamespaces: { [req.namespace.name]: req.namespace.value },\n });\n\n const session = await withSignal(approval(), req.signal, () => {\n void client.core.pairing.disconnect({ topic: warm.topic }).catch(() => {});\n });\n\n void this.warmup(); // re-arm for the next connection\n\n const connection = this.toConnection(client, req.walletId, session, req.namespace);\n this.topics.set(req.walletId, session.topic);\n this.persist();\n return connection;\n }\n\n async restore(): Promise<Connection[]> {\n const client = await this.getClient();\n const out: Connection[] = [];\n for (const [walletId, topic] of [...this.topics]) {\n const session = this.liveSession(client, topic);\n if (!session) {\n this.topics.delete(walletId);\n continue;\n }\n const ns = firstNamespace(session);\n if (ns) out.push(this.toConnection(client, walletId, session, ns));\n }\n this.persist();\n return out;\n }\n\n async reset(): Promise<void> {\n const client = this.client;\n if (client) {\n await Promise.allSettled(\n client.session\n .getAll()\n .map((s) => client.disconnect({ topic: s.topic, reason: getSdkError('USER_DISCONNECTED') })),\n );\n }\n this.topics.clear();\n this.persist();\n this.warm = null;\n }\n\n // --- helpers ---\n\n private tryReuse(client: SignClient, req: ConnectRequest): Connection | null {\n const topic = this.topics.get(req.walletId);\n if (!topic) return null;\n const session = this.liveSession(client, topic);\n if (!session) {\n this.topics.delete(req.walletId);\n return null;\n }\n const ns = session.namespaces[req.namespace.name];\n const wanted = req.namespace.value.chains?.[0];\n if (!ns || (wanted && !ns.chains?.includes(wanted))) return null;\n return this.toConnection(client, req.walletId, session, req.namespace);\n }\n\n private toConnection(\n client: SignClient,\n walletId: string,\n session: SessionTypes.Struct,\n namespace: CaipNamespace,\n ): Connection {\n const ns = session.namespaces[namespace.name];\n const account =\n (ns?.accounts ?? []).map((a) => a.split(':')[2]).find((a): a is string => !!a) ?? '';\n const chainId =\n ns?.chains?.[0] ??\n (ns?.accounts?.[0] ? ns.accounts[0].split(':').slice(0, 2).join(':') : `${namespace.name}:1`);\n const topic = session.topic;\n return {\n walletId,\n account,\n chainId,\n request: <T>(args: { method: string; params?: unknown }) =>\n client.request<T>({\n topic,\n chainId,\n request: { method: args.method, params: args.params as never },\n }),\n disconnect: async () => {\n await client.disconnect({ topic, reason: getSdkError('USER_DISCONNECTED') }).catch(() => {});\n this.topics.delete(walletId);\n this.persist();\n this.emit({ type: 'disconnect', walletId });\n },\n };\n }\n\n private liveSession(client: SignClient, topic: string): SessionTypes.Struct | undefined {\n try {\n return client.session.get(topic);\n } catch {\n return undefined;\n }\n }\n\n private walletForTopic(topic: string): string | null {\n for (const [walletId, t] of this.topics) if (t === topic) return walletId;\n return null;\n }\n\n private persist(): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify([...this.topics]));\n } catch {\n /* SSR / no storage */\n }\n }\n\n private load(): void {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw) this.topics = new Map(JSON.parse(raw) as Array<[string, string]>);\n } catch {\n /* SSR / no storage */\n }\n }\n}\n\nfunction firstNamespace(session: SessionTypes.Struct): CaipNamespace | null {\n const name = Object.keys(session.namespaces)[0];\n if (!name) return null;\n const v = session.namespaces[name];\n if (!v) return null;\n return { name, value: { chains: v.chains, methods: v.methods, events: v.events } };\n}\n\nfunction withSignal<T>(\n promise: Promise<T>,\n signal: AbortSignal | undefined,\n onAbort: () => void,\n): Promise<T> {\n if (!signal) return promise;\n if (signal.aborted) {\n onAbort();\n return Promise.reject(new DOMException('Aborted', 'AbortError'));\n }\n return new Promise<T>((resolve, reject) => {\n const abortHandler = () => {\n onAbort();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n signal.addEventListener('abort', abortHandler, { once: true });\n promise.then(\n (v) => {\n signal.removeEventListener('abort', abortHandler);\n resolve(v);\n },\n (e) => {\n signal.removeEventListener('abort', abortHandler);\n reject(e);\n },\n );\n });\n}\n","import type { MetaMaskSDK as MetaMaskSDKType, MetaMaskSDKOptions } from '@metamask/sdk';\nimport { BaseConnector, type ConnectRequest } from '../../core/connector';\nimport type { Connection } from '../../core/types';\n\n/** The provider type MetaMaskSDK.getProvider() returns, without depending on a named export. */\ntype MetaMaskProvider = NonNullable<ReturnType<MetaMaskSDKType['getProvider']>>;\n\nexport interface MetaMaskConfig {\n dappMetadata: MetaMaskSDKOptions['dappMetadata'];\n /** Extra options forwarded to MetaMaskSDK (infuraAPIKey, logging, …). */\n sdkOptions?: Omit<MetaMaskSDKOptions, 'dappMetadata'>;\n}\n\nconst WALLET_ID = 'metamask';\n\nexport class MetaMaskConnector extends BaseConnector {\n readonly type = 'sdk' as const;\n readonly walletIds = [WALLET_ID] as const;\n\n private sdk: MetaMaskSDKType | null = null;\n private provider: MetaMaskProvider | null = null;\n private listenersBound = false;\n\n constructor(private config: MetaMaskConfig) {\n super();\n }\n\n isAvailable(): boolean {\n return true; // SDK covers desktop (extension) and mobile (deep-link) itself\n }\n\n private async getProvider(): Promise<MetaMaskProvider> {\n if (this.provider) return this.provider;\n const { MetaMaskSDK } = await import('@metamask/sdk'); // value import — code-split, loaded on demand\n const sdk = new MetaMaskSDK({\n dappMetadata: this.config.dappMetadata,\n ...this.config.sdkOptions,\n });\n await sdk.init();\n const provider = sdk.getProvider();\n if (!provider) throw new Error('MetaMask provider unavailable');\n this.sdk = sdk;\n this.provider = provider;\n this.bindEvents(provider);\n return provider;\n }\n\n private bindEvents(provider: MetaMaskProvider): void {\n if (this.listenersBound) return;\n this.listenersBound = true;\n provider.on('chainChanged', (hex) => {\n this.emit({ type: 'chainChanged', walletId: WALLET_ID, chainId: toCaip(String(hex)) });\n });\n provider.on('accountsChanged', (accounts) => {\n const account = Array.isArray(accounts) ? (accounts[0] as string | undefined) : undefined;\n if (account) this.emit({ type: 'accountsChanged', walletId: WALLET_ID, account });\n else this.emit({ type: 'disconnect', walletId: WALLET_ID });\n });\n provider.on('disconnect', () => this.emit({ type: 'disconnect', walletId: WALLET_ID }));\n }\n\n async connect(req: ConnectRequest): Promise<Connection> {\n const provider = await this.getProvider();\n const accounts = await provider.request<string[]>({ method: 'eth_requestAccounts' });\n const account = accounts?.[0];\n if (!account) throw new Error('MetaMask returned no account');\n await this.ensureChain(provider, req);\n const chainId = toCaip(await provider.request<string>({ method: 'eth_chainId' }));\n return this.toConnection(provider, account, chainId);\n }\n\n async restore(): Promise<Connection[]> {\n const provider = await this.getProvider().catch(() => null);\n if (!provider) return [];\n const accounts = await provider.request<string[]>({ method: 'eth_accounts' }).catch(() => []);\n const account = accounts?.[0];\n if (!account) return [];\n const chainId = toCaip(\n await provider.request<string>({ method: 'eth_chainId' }).catch(() => '0x1'),\n );\n return [this.toConnection(provider, account, chainId)];\n }\n\n async reset(): Promise<void> {\n await this.sdk?.terminate();\n this.provider = null;\n this.listenersBound = false;\n }\n\n /** Best-effort switch to the requested chain; leaves the wallet as-is if it's unknown to it. */\n private async ensureChain(provider: MetaMaskProvider, req: ConnectRequest): Promise<void> {\n const wanted = req.namespace.value.chains?.[0]; // \"eip155:137\"\n const wantedNum = wanted ? Number(wanted.split(':')[1]) : NaN;\n if (!Number.isFinite(wantedNum) || wantedNum <= 0) return;\n const current = parseInt(\n (await provider.request<string>({ method: 'eth_chainId' }).catch(() => '0x0')) ?? '0x0',\n 16,\n );\n if (current === wantedNum) return;\n await provider\n .request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${wantedNum.toString(16)}` }],\n })\n .catch(() => {\n /* chain not added to the wallet — the caller's chainChanged will reflect reality */\n });\n }\n\n private toConnection(provider: MetaMaskProvider, account: string, chainId: string): Connection {\n return {\n walletId: WALLET_ID,\n account,\n chainId,\n request: async <T>(args: { method: string; params?: unknown }) =>\n (await provider.request<T>({ method: args.method, params: args.params as never })) as T,\n disconnect: async () => {\n await this.sdk?.terminate();\n this.provider = null;\n this.listenersBound = false;\n this.emit({ type: 'disconnect', walletId: WALLET_ID });\n },\n };\n }\n}\n\nfunction toCaip(hexChainId: string | null | undefined): string {\n if (!hexChainId) return 'eip155:1';\n const num = hexChainId.startsWith('0x') ? parseInt(hexChainId, 16) : Number(hexChainId);\n return `eip155:${Number.isFinite(num) ? num : 1}`;\n}\n","import type { CoinbaseWalletSDK as CoinbaseWalletSDKType } from '@coinbase/wallet-sdk';\nimport { BaseConnector, type ConnectRequest } from '../../core/connector';\nimport type { Connection } from '../../core/types';\n\ntype CoinbaseProvider = NonNullable<ReturnType<CoinbaseWalletSDKType['makeWeb3Provider']>>;\ntype RequestArgs = Parameters<CoinbaseProvider['request']>[0];\n\n/** Coinbase v4's provider.request is non-generic and returns unknown; wrap + cast. */\nfunction rpc<T>(provider: CoinbaseProvider, method: string, params?: unknown): Promise<T> {\n return provider.request({ method, params } as unknown as RequestArgs) as Promise<T>;\n}\n\nexport interface CoinbaseConfig {\n appName: string;\n appLogoUrl?: string;\n /** EVM chain ids the dapp supports, passed to the SDK. */\n appChainIds?: number[];\n}\n\nconst WALLET_ID = 'coinbase';\n\nexport class CoinbaseConnector extends BaseConnector {\n readonly type = 'sdk' as const;\n readonly walletIds = [WALLET_ID] as const;\n\n private provider: CoinbaseProvider | null = null;\n private listenersBound = false;\n\n constructor(private config: CoinbaseConfig) {\n super();\n }\n\n isAvailable(): boolean {\n return true; // SDK covers extension + mobile deep-link itself\n }\n\n private async getProvider(): Promise<CoinbaseProvider> {\n if (this.provider) return this.provider;\n const { CoinbaseWalletSDK } = await import('@coinbase/wallet-sdk'); // lazy — code-split\n const sdk = new CoinbaseWalletSDK({\n appName: this.config.appName,\n appLogoUrl: this.config.appLogoUrl,\n appChainIds: this.config.appChainIds,\n });\n const provider = sdk.makeWeb3Provider();\n this.provider = provider;\n this.bindEvents(provider);\n return provider;\n }\n\n private bindEvents(provider: CoinbaseProvider): void {\n if (this.listenersBound) return;\n this.listenersBound = true;\n provider.on('chainChanged', (hex) => {\n this.emit({ type: 'chainChanged', walletId: WALLET_ID, chainId: toCaip(String(hex)) });\n });\n provider.on('accountsChanged', (accounts) => {\n const account = Array.isArray(accounts) ? (accounts[0] as string | undefined) : undefined;\n if (account) this.emit({ type: 'accountsChanged', walletId: WALLET_ID, account });\n else this.emit({ type: 'disconnect', walletId: WALLET_ID });\n });\n provider.on('disconnect', () => this.emit({ type: 'disconnect', walletId: WALLET_ID }));\n }\n\n async connect(req: ConnectRequest): Promise<Connection> {\n const provider = await this.getProvider();\n const accounts = await rpc<string[]>(provider, 'eth_requestAccounts');\n const account = accounts?.[0];\n if (!account) throw new Error('Coinbase Wallet returned no account');\n await this.ensureChain(provider, req);\n const chainId = toCaip(await rpc<string>(provider, 'eth_chainId'));\n return this.toConnection(provider, account, chainId);\n }\n\n async restore(): Promise<Connection[]> {\n const provider = await this.getProvider().catch(() => null);\n if (!provider) return [];\n const accounts = await rpc<string[]>(provider, 'eth_accounts').catch(() => [] as string[]);\n const account = accounts?.[0];\n if (!account) return [];\n const chainId = toCaip(await rpc<string>(provider, 'eth_chainId').catch(() => '0x1'));\n return [this.toConnection(provider, account, chainId)];\n }\n\n async reset(): Promise<void> {\n await this.provider?.disconnect().catch(() => {});\n this.provider = null;\n this.listenersBound = false;\n }\n\n private async ensureChain(provider: CoinbaseProvider, req: ConnectRequest): Promise<void> {\n const wanted = req.namespace.value.chains?.[0];\n const wantedNum = wanted ? Number(wanted.split(':')[1]) : NaN;\n if (!Number.isFinite(wantedNum) || wantedNum <= 0) return;\n const current = parseInt(await rpc<string>(provider, 'eth_chainId').catch(() => '0x0'), 16);\n if (current === wantedNum) return;\n await rpc(provider, 'wallet_switchEthereumChain', [{ chainId: `0x${wantedNum.toString(16)}` }]).catch(\n () => {},\n );\n }\n\n private toConnection(provider: CoinbaseProvider, account: string, chainId: string): Connection {\n return {\n walletId: WALLET_ID,\n account,\n chainId,\n request: <T>(args: { method: string; params?: unknown }) =>\n rpc<T>(provider, args.method, args.params),\n disconnect: async () => {\n await provider.disconnect().catch(() => {});\n this.provider = null;\n this.listenersBound = false;\n this.emit({ type: 'disconnect', walletId: WALLET_ID });\n },\n };\n }\n}\n\nfunction toCaip(hexChainId: string | null | undefined): string {\n if (!hexChainId) return 'eip155:1';\n const num = hexChainId.startsWith('0x') ? parseInt(hexChainId, 16) : Number(hexChainId);\n return `eip155:${Number.isFinite(num) ? num : 1}`;\n}\n"]}
@@ -0,0 +1,233 @@
1
+ import { SignClientTypes } from '@walletconnect/types';
2
+ import { MetaMaskSDKOptions } from '@metamask/sdk';
3
+
4
+ type ConnectorType = 'walletconnect' | 'sdk' | 'injected';
5
+ /** A CAIP namespace request — pay already models this per-network today. */
6
+ interface CaipNamespace {
7
+ /** Namespace identifier, e.g. "eip155", "solana". */
8
+ name: string;
9
+ value: {
10
+ /** CAIP-2 chain ids, e.g. ["eip155:1"]. */
11
+ chains?: string[];
12
+ methods: string[];
13
+ events: string[];
14
+ };
15
+ }
16
+ /**
17
+ * The uniform handle the host app holds after connecting.
18
+ *
19
+ * IDENTICAL whether the wallet connected via its native SDK or via
20
+ * WalletConnect — the host app never branches on the source.
21
+ */
22
+ interface Connection {
23
+ readonly walletId: string;
24
+ readonly account: string;
25
+ /** CAIP-2 chain id, e.g. "eip155:1". */
26
+ readonly chainId: string;
27
+ request<T = unknown>(args: {
28
+ method: string;
29
+ params?: unknown;
30
+ }): Promise<T>;
31
+ disconnect(): Promise<void>;
32
+ }
33
+ type LydianConnectEvent =
34
+ /** WalletConnect only — the wc: URI. Deep-linking is fired internally; emitted for QR display. */
35
+ {
36
+ type: 'display_uri';
37
+ walletId: string;
38
+ uri: string;
39
+ } | {
40
+ type: 'connect';
41
+ walletId: string;
42
+ connection: Connection;
43
+ } | {
44
+ type: 'disconnect';
45
+ walletId: string;
46
+ } | {
47
+ type: 'chainChanged';
48
+ walletId: string;
49
+ chainId: string;
50
+ } | {
51
+ type: 'accountsChanged';
52
+ walletId: string;
53
+ account: string;
54
+ }
55
+ /** Deep-link was fired but the page stayed visible — wallet likely not installed. */
56
+ | {
57
+ type: 'wallet_open_failed';
58
+ walletId: string;
59
+ uri: string;
60
+ };
61
+ type LydianConnectEventHandler = (event: LydianConnectEvent) => void;
62
+
63
+ interface ConnectRequest {
64
+ walletId: string;
65
+ namespace: CaipNamespace;
66
+ /** Cancel a pending connection (replaces the host app's manual cancel plumbing). */
67
+ signal?: AbortSignal;
68
+ }
69
+ /**
70
+ * Internal contract every connector implements. The host app never sees this —
71
+ * it only ever touches {@link LydianConnect} and the {@link Connection} handle.
72
+ */
73
+ interface Connector {
74
+ readonly type: ConnectorType;
75
+ /**
76
+ * Wallet ids this connector natively serves. The WalletConnect fallback
77
+ * returns an empty list and claims any wallet not served by another connector.
78
+ */
79
+ readonly walletIds: readonly string[];
80
+ isAvailable(walletId: string): boolean | Promise<boolean>;
81
+ connect(req: ConnectRequest): Promise<Connection>;
82
+ /** Rebuild Connections for still-live sessions — the reconnect-on-reload case. */
83
+ restore(): Promise<Connection[]>;
84
+ /** Tear down everything this connector owns. */
85
+ reset(): Promise<void>;
86
+ on(handler: LydianConnectEventHandler): () => void;
87
+ }
88
+ declare abstract class BaseConnector implements Connector {
89
+ abstract readonly type: ConnectorType;
90
+ readonly walletIds: readonly string[];
91
+ private handlers;
92
+ abstract isAvailable(walletId: string): boolean | Promise<boolean>;
93
+ abstract connect(req: ConnectRequest): Promise<Connection>;
94
+ restore(): Promise<Connection[]>;
95
+ reset(): Promise<void>;
96
+ on(handler: LydianConnectEventHandler): () => void;
97
+ protected emit(event: LydianConnectEvent): void;
98
+ }
99
+
100
+ interface LydianConnectConfig {
101
+ /** SDK/injected connectors, each serving specific walletIds (MetaMask, Coinbase…). */
102
+ connectors?: Connector[];
103
+ /** Fallback for any wallet not served above — the WalletConnect connector. */
104
+ fallback: Connector;
105
+ }
106
+ interface ConnectInput {
107
+ walletId: string;
108
+ namespace: CaipNamespace;
109
+ signal?: AbortSignal;
110
+ }
111
+ /**
112
+ * The single surface the host app touches. Routes each wallet to its native
113
+ * SDK connector when one is registered, otherwise to the WalletConnect
114
+ * fallback — and hands back a uniform {@link Connection} either way.
115
+ */
116
+ declare class LydianConnect {
117
+ private byWallet;
118
+ private fallback;
119
+ private all;
120
+ private connections;
121
+ private handlers;
122
+ private unsubs;
123
+ private started;
124
+ constructor(config: LydianConnectConfig);
125
+ /** Wire connector event forwarding, once. Safe to call repeatedly. */
126
+ init(): Promise<void>;
127
+ /** SDK connector if one claims this walletId, else the WC fallback. The host app is oblivious. */
128
+ private resolve;
129
+ connect(input: ConnectInput): Promise<Connection>;
130
+ /** Resume any live sessions across all connectors (e.g. after a page reload). */
131
+ restore(): Promise<Connection[]>;
132
+ get(walletId: string): Connection | undefined;
133
+ disconnect(walletId?: string): Promise<void>;
134
+ /** Disconnect everything and clear all connector-held state. */
135
+ reset(): Promise<void>;
136
+ on(handler: LydianConnectEventHandler): () => void;
137
+ private handle;
138
+ private emit;
139
+ }
140
+
141
+ interface WalletLink {
142
+ /** Custom scheme deep link incl. the `wc` path; we append `?uri=`. e.g. "metamask://wc". */
143
+ scheme?: string;
144
+ /** Universal/applink incl. the `wc` path, preferred on mobile (OS falls back to the store). */
145
+ universal?: string;
146
+ /** App store links — used for the "wallet not installed" fallback. */
147
+ store?: {
148
+ ios?: string;
149
+ android?: string;
150
+ };
151
+ }
152
+ declare const DEFAULT_WALLET_LINKS: Record<string, WalletLink>;
153
+
154
+ interface WalletConnectConfig {
155
+ projectId: string;
156
+ metadata: SignClientTypes.Metadata;
157
+ relayUrl?: string;
158
+ walletLinks?: Record<string, WalletLink>;
159
+ openTimeoutMs?: number;
160
+ }
161
+ declare class WalletConnectConnector extends BaseConnector {
162
+ private config;
163
+ readonly type: "walletconnect";
164
+ readonly walletIds: readonly string[];
165
+ private client;
166
+ private links;
167
+ private topics;
168
+ private warm;
169
+ private warming;
170
+ constructor(config: WalletConnectConfig);
171
+ isAvailable(): boolean;
172
+ private getClient;
173
+ /** Pre-create a pairing so connect() can deep-link synchronously within the gesture. */
174
+ private warmup;
175
+ connect(req: ConnectRequest): Promise<Connection>;
176
+ restore(): Promise<Connection[]>;
177
+ reset(): Promise<void>;
178
+ private tryReuse;
179
+ private toConnection;
180
+ private liveSession;
181
+ private walletForTopic;
182
+ private persist;
183
+ private load;
184
+ }
185
+
186
+ interface MetaMaskConfig {
187
+ dappMetadata: MetaMaskSDKOptions['dappMetadata'];
188
+ /** Extra options forwarded to MetaMaskSDK (infuraAPIKey, logging, …). */
189
+ sdkOptions?: Omit<MetaMaskSDKOptions, 'dappMetadata'>;
190
+ }
191
+ declare class MetaMaskConnector extends BaseConnector {
192
+ private config;
193
+ readonly type: "sdk";
194
+ readonly walletIds: readonly ["metamask"];
195
+ private sdk;
196
+ private provider;
197
+ private listenersBound;
198
+ constructor(config: MetaMaskConfig);
199
+ isAvailable(): boolean;
200
+ private getProvider;
201
+ private bindEvents;
202
+ connect(req: ConnectRequest): Promise<Connection>;
203
+ restore(): Promise<Connection[]>;
204
+ reset(): Promise<void>;
205
+ /** Best-effort switch to the requested chain; leaves the wallet as-is if it's unknown to it. */
206
+ private ensureChain;
207
+ private toConnection;
208
+ }
209
+
210
+ interface CoinbaseConfig {
211
+ appName: string;
212
+ appLogoUrl?: string;
213
+ /** EVM chain ids the dapp supports, passed to the SDK. */
214
+ appChainIds?: number[];
215
+ }
216
+ declare class CoinbaseConnector extends BaseConnector {
217
+ private config;
218
+ readonly type: "sdk";
219
+ readonly walletIds: readonly ["coinbase"];
220
+ private provider;
221
+ private listenersBound;
222
+ constructor(config: CoinbaseConfig);
223
+ isAvailable(): boolean;
224
+ private getProvider;
225
+ private bindEvents;
226
+ connect(req: ConnectRequest): Promise<Connection>;
227
+ restore(): Promise<Connection[]>;
228
+ reset(): Promise<void>;
229
+ private ensureChain;
230
+ private toConnection;
231
+ }
232
+
233
+ export { BaseConnector, type CaipNamespace, type CoinbaseConfig, CoinbaseConnector, type ConnectInput, type ConnectRequest, type Connection, type Connector, type ConnectorType, DEFAULT_WALLET_LINKS, LydianConnect, type LydianConnectConfig, type LydianConnectEvent, type LydianConnectEventHandler, type MetaMaskConfig, MetaMaskConnector, type WalletConnectConfig, WalletConnectConnector, type WalletLink };
@@ -0,0 +1,233 @@
1
+ import { SignClientTypes } from '@walletconnect/types';
2
+ import { MetaMaskSDKOptions } from '@metamask/sdk';
3
+
4
+ type ConnectorType = 'walletconnect' | 'sdk' | 'injected';
5
+ /** A CAIP namespace request — pay already models this per-network today. */
6
+ interface CaipNamespace {
7
+ /** Namespace identifier, e.g. "eip155", "solana". */
8
+ name: string;
9
+ value: {
10
+ /** CAIP-2 chain ids, e.g. ["eip155:1"]. */
11
+ chains?: string[];
12
+ methods: string[];
13
+ events: string[];
14
+ };
15
+ }
16
+ /**
17
+ * The uniform handle the host app holds after connecting.
18
+ *
19
+ * IDENTICAL whether the wallet connected via its native SDK or via
20
+ * WalletConnect — the host app never branches on the source.
21
+ */
22
+ interface Connection {
23
+ readonly walletId: string;
24
+ readonly account: string;
25
+ /** CAIP-2 chain id, e.g. "eip155:1". */
26
+ readonly chainId: string;
27
+ request<T = unknown>(args: {
28
+ method: string;
29
+ params?: unknown;
30
+ }): Promise<T>;
31
+ disconnect(): Promise<void>;
32
+ }
33
+ type LydianConnectEvent =
34
+ /** WalletConnect only — the wc: URI. Deep-linking is fired internally; emitted for QR display. */
35
+ {
36
+ type: 'display_uri';
37
+ walletId: string;
38
+ uri: string;
39
+ } | {
40
+ type: 'connect';
41
+ walletId: string;
42
+ connection: Connection;
43
+ } | {
44
+ type: 'disconnect';
45
+ walletId: string;
46
+ } | {
47
+ type: 'chainChanged';
48
+ walletId: string;
49
+ chainId: string;
50
+ } | {
51
+ type: 'accountsChanged';
52
+ walletId: string;
53
+ account: string;
54
+ }
55
+ /** Deep-link was fired but the page stayed visible — wallet likely not installed. */
56
+ | {
57
+ type: 'wallet_open_failed';
58
+ walletId: string;
59
+ uri: string;
60
+ };
61
+ type LydianConnectEventHandler = (event: LydianConnectEvent) => void;
62
+
63
+ interface ConnectRequest {
64
+ walletId: string;
65
+ namespace: CaipNamespace;
66
+ /** Cancel a pending connection (replaces the host app's manual cancel plumbing). */
67
+ signal?: AbortSignal;
68
+ }
69
+ /**
70
+ * Internal contract every connector implements. The host app never sees this —
71
+ * it only ever touches {@link LydianConnect} and the {@link Connection} handle.
72
+ */
73
+ interface Connector {
74
+ readonly type: ConnectorType;
75
+ /**
76
+ * Wallet ids this connector natively serves. The WalletConnect fallback
77
+ * returns an empty list and claims any wallet not served by another connector.
78
+ */
79
+ readonly walletIds: readonly string[];
80
+ isAvailable(walletId: string): boolean | Promise<boolean>;
81
+ connect(req: ConnectRequest): Promise<Connection>;
82
+ /** Rebuild Connections for still-live sessions — the reconnect-on-reload case. */
83
+ restore(): Promise<Connection[]>;
84
+ /** Tear down everything this connector owns. */
85
+ reset(): Promise<void>;
86
+ on(handler: LydianConnectEventHandler): () => void;
87
+ }
88
+ declare abstract class BaseConnector implements Connector {
89
+ abstract readonly type: ConnectorType;
90
+ readonly walletIds: readonly string[];
91
+ private handlers;
92
+ abstract isAvailable(walletId: string): boolean | Promise<boolean>;
93
+ abstract connect(req: ConnectRequest): Promise<Connection>;
94
+ restore(): Promise<Connection[]>;
95
+ reset(): Promise<void>;
96
+ on(handler: LydianConnectEventHandler): () => void;
97
+ protected emit(event: LydianConnectEvent): void;
98
+ }
99
+
100
+ interface LydianConnectConfig {
101
+ /** SDK/injected connectors, each serving specific walletIds (MetaMask, Coinbase…). */
102
+ connectors?: Connector[];
103
+ /** Fallback for any wallet not served above — the WalletConnect connector. */
104
+ fallback: Connector;
105
+ }
106
+ interface ConnectInput {
107
+ walletId: string;
108
+ namespace: CaipNamespace;
109
+ signal?: AbortSignal;
110
+ }
111
+ /**
112
+ * The single surface the host app touches. Routes each wallet to its native
113
+ * SDK connector when one is registered, otherwise to the WalletConnect
114
+ * fallback — and hands back a uniform {@link Connection} either way.
115
+ */
116
+ declare class LydianConnect {
117
+ private byWallet;
118
+ private fallback;
119
+ private all;
120
+ private connections;
121
+ private handlers;
122
+ private unsubs;
123
+ private started;
124
+ constructor(config: LydianConnectConfig);
125
+ /** Wire connector event forwarding, once. Safe to call repeatedly. */
126
+ init(): Promise<void>;
127
+ /** SDK connector if one claims this walletId, else the WC fallback. The host app is oblivious. */
128
+ private resolve;
129
+ connect(input: ConnectInput): Promise<Connection>;
130
+ /** Resume any live sessions across all connectors (e.g. after a page reload). */
131
+ restore(): Promise<Connection[]>;
132
+ get(walletId: string): Connection | undefined;
133
+ disconnect(walletId?: string): Promise<void>;
134
+ /** Disconnect everything and clear all connector-held state. */
135
+ reset(): Promise<void>;
136
+ on(handler: LydianConnectEventHandler): () => void;
137
+ private handle;
138
+ private emit;
139
+ }
140
+
141
+ interface WalletLink {
142
+ /** Custom scheme deep link incl. the `wc` path; we append `?uri=`. e.g. "metamask://wc". */
143
+ scheme?: string;
144
+ /** Universal/applink incl. the `wc` path, preferred on mobile (OS falls back to the store). */
145
+ universal?: string;
146
+ /** App store links — used for the "wallet not installed" fallback. */
147
+ store?: {
148
+ ios?: string;
149
+ android?: string;
150
+ };
151
+ }
152
+ declare const DEFAULT_WALLET_LINKS: Record<string, WalletLink>;
153
+
154
+ interface WalletConnectConfig {
155
+ projectId: string;
156
+ metadata: SignClientTypes.Metadata;
157
+ relayUrl?: string;
158
+ walletLinks?: Record<string, WalletLink>;
159
+ openTimeoutMs?: number;
160
+ }
161
+ declare class WalletConnectConnector extends BaseConnector {
162
+ private config;
163
+ readonly type: "walletconnect";
164
+ readonly walletIds: readonly string[];
165
+ private client;
166
+ private links;
167
+ private topics;
168
+ private warm;
169
+ private warming;
170
+ constructor(config: WalletConnectConfig);
171
+ isAvailable(): boolean;
172
+ private getClient;
173
+ /** Pre-create a pairing so connect() can deep-link synchronously within the gesture. */
174
+ private warmup;
175
+ connect(req: ConnectRequest): Promise<Connection>;
176
+ restore(): Promise<Connection[]>;
177
+ reset(): Promise<void>;
178
+ private tryReuse;
179
+ private toConnection;
180
+ private liveSession;
181
+ private walletForTopic;
182
+ private persist;
183
+ private load;
184
+ }
185
+
186
+ interface MetaMaskConfig {
187
+ dappMetadata: MetaMaskSDKOptions['dappMetadata'];
188
+ /** Extra options forwarded to MetaMaskSDK (infuraAPIKey, logging, …). */
189
+ sdkOptions?: Omit<MetaMaskSDKOptions, 'dappMetadata'>;
190
+ }
191
+ declare class MetaMaskConnector extends BaseConnector {
192
+ private config;
193
+ readonly type: "sdk";
194
+ readonly walletIds: readonly ["metamask"];
195
+ private sdk;
196
+ private provider;
197
+ private listenersBound;
198
+ constructor(config: MetaMaskConfig);
199
+ isAvailable(): boolean;
200
+ private getProvider;
201
+ private bindEvents;
202
+ connect(req: ConnectRequest): Promise<Connection>;
203
+ restore(): Promise<Connection[]>;
204
+ reset(): Promise<void>;
205
+ /** Best-effort switch to the requested chain; leaves the wallet as-is if it's unknown to it. */
206
+ private ensureChain;
207
+ private toConnection;
208
+ }
209
+
210
+ interface CoinbaseConfig {
211
+ appName: string;
212
+ appLogoUrl?: string;
213
+ /** EVM chain ids the dapp supports, passed to the SDK. */
214
+ appChainIds?: number[];
215
+ }
216
+ declare class CoinbaseConnector extends BaseConnector {
217
+ private config;
218
+ readonly type: "sdk";
219
+ readonly walletIds: readonly ["coinbase"];
220
+ private provider;
221
+ private listenersBound;
222
+ constructor(config: CoinbaseConfig);
223
+ isAvailable(): boolean;
224
+ private getProvider;
225
+ private bindEvents;
226
+ connect(req: ConnectRequest): Promise<Connection>;
227
+ restore(): Promise<Connection[]>;
228
+ reset(): Promise<void>;
229
+ private ensureChain;
230
+ private toConnection;
231
+ }
232
+
233
+ export { BaseConnector, type CaipNamespace, type CoinbaseConfig, CoinbaseConnector, type ConnectInput, type ConnectRequest, type Connection, type Connector, type ConnectorType, DEFAULT_WALLET_LINKS, LydianConnect, type LydianConnectConfig, type LydianConnectEvent, type LydianConnectEventHandler, type MetaMaskConfig, MetaMaskConnector, type WalletConnectConfig, WalletConnectConnector, type WalletLink };