@avalabs/svm-module 1.6.2 → 1.7.1
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.
- package/dist/index.cjs +7 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -14
- package/dist/index.d.ts +8 -14
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/provider/index.cjs +7 -7
- package/dist/provider/index.cjs.map +1 -1
- package/dist/provider/index.d.cts +3 -2
- package/dist/provider/index.d.ts +3 -2
- package/dist/provider/index.js +7 -7
- package/dist/provider/index.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/provider/provider.ts","../../src/provider/public-key.ts","../../src/provider/register.ts","../../src/provider/wallet.ts","../../src/provider/account.ts","../../src/provider/solana.ts","../../src/provider/util.ts","../../src/provider/initialize.ts"],"names":["EventEmitter","NetworkVMType","RpcMethod","base58","legacyPublicKey","address","byteArray","otherPubKey","_chainAgnosticProvider","_info","_accountsChanged","_getEventHandler","_handleBackgroundMessage","SolanaWalletProvider","chainAgnosticProvider","icon","version","name","__publicField","__privateAdd","accounts","vm","method","__privateGet","params","eventHandler","__privateSet","onlyIfTrusted","account","caipId","serializedTx","sendOptions","serializedTxs","results","tx","signedTx","registerWallet","wallet","callback","register","RegisterWalletEvent","error","api","_detail","SolanaSignAndSendTransaction","SolanaSignTransaction","StandardConnect","StandardDisconnect","StandardEvents","base64","SolanaCaip2ChainId","SOLANA_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","SOLANA_CHAINS","SOLANA_CHAIN_TO_CAIP2_ID","isSolanaChain","chain","getSolanaCaip2Id","chains","features","_address","_publicKey","_chains","_features","_label","_icon","_ConnectedWalletAccount","publicKey","label","ConnectedWalletAccount","bytesEqual","a","b","arraysEqual","length","i","ConnectionNamespace","_listeners","_version","_connection","_account","_on","_emit","emit_fn","_off","off_fn","_connected","_disconnected","_reconnected","_connect","_disconnect","_signAndSendTransaction","_signTransaction","_StandardWallet","connection","event","listener","__privateMethod","silent","inputs","outputs","transaction","options","minContextSlot","preflightCommitment","skipPreflight","maxRetries","signature","input","signedTransaction","transactions","signedTransactions","args","existingListener","StandardWallet","initialize"],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport { NetworkVMType, RpcMethod, type ChainAgnosticProvider } from '@avalabs/vm-module-types';\nimport type { PublicKey, SendOptions } from '@solana/web3.js';\nimport type { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\nimport type { Connection } from './window';\nimport { legacyPublicKey } from './public-key';\nimport type { WalletIcon } from '@wallet-standard/base';\n\nenum DAppProviderRequest {\n WALLET_CONNECT = 'wallet_requestAccountPermission',\n}\n\n/**\n * Represents a Solana Wallet Provider that interacts with a chain-agnostic provider\n * to manage wallet connections, transactions, and events.\n *\n * @extends EventEmitter\n * @implements Connection\n */\nexport class SolanaWalletProvider extends EventEmitter implements Connection {\n public publicKey: PublicKey | null = null;\n\n readonly #chainAgnosticProvider: ChainAgnosticProvider;\n readonly #info: { icon: WalletIcon; version: string; name: string };\n\n /**\n * Creates an instance of SolanaWalletProvider.\n *\n * @param chainAgnosticProvider - The chain-agnostic provider used for communication.\n * @param options - Wallet information including icon, version, and name.\n */\n constructor(\n chainAgnosticProvider: ChainAgnosticProvider,\n { icon, version, name }: { icon: WalletIcon; version: string; name: string },\n ) {\n super();\n this.#info = {\n icon,\n name,\n version,\n };\n this.#chainAgnosticProvider = chainAgnosticProvider;\n this.#chainAgnosticProvider.subscribeToMessage(this.#handleBackgroundMessage);\n }\n\n /**\n * Retrieves wallet metadata such as icon, version, and name.\n */\n get info() {\n return this.#info;\n }\n\n /**\n * Connects to the wallet. If already connected, returns the public key.\n *\n * @param options - Connection options.\n * @param options.onlyIfTrusted - If true, connects without approval if previously approved.\n * @returns An object containing the public key.\n */\n async connect({ onlyIfTrusted }: { onlyIfTrusted?: boolean } = {}) {\n if (this.publicKey) {\n return { publicKey: this.publicKey };\n }\n\n const [address] = await this.#chainAgnosticProvider.request<[string]>({\n data: {\n method: DAppProviderRequest.WALLET_CONNECT,\n params: { addressVM: NetworkVMType.SVM, onlyIfTrusted },\n },\n });\n\n this.publicKey = legacyPublicKey(address);\n return { publicKey: this.publicKey };\n }\n\n async disconnect() {\n this.publicKey = null;\n this.emit('disconnect');\n }\n\n /**\n * Signs and sends a transaction.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign and send.\n * @param sendOptions - Options for sending the transaction. See the docs here: https://solana.com/pl/docs/rpc/http/sendtransaction.\n * @returns The transaction signature.\n */\n async signAndSendTransaction(\n account: string,\n caipId: SolanaCaip2ChainId,\n serializedTx: string,\n sendOptions: SendOptions,\n ) {\n const signature = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n sendOptions,\n },\n ],\n },\n });\n\n return signature;\n }\n\n /**\n * Signs a transaction without sending it.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign.\n * @returns The signed transaction.\n */\n async signTransaction(account: string, caipId: SolanaCaip2ChainId, serializedTx: string) {\n const signedTx = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n },\n ],\n },\n });\n\n return signedTx;\n }\n\n /**\n * Handles account changes by updating the public key and emitting appropriate events.\n * The incoming {accounts} array may include non-Solana accounts, so we filter for the\n * address described with the Solana VM type.\n */\n #accountsChanged = (accounts: { address: string; vm: NetworkVMType }[]) => {\n const address = accounts.find(({ vm }) => vm === NetworkVMType.SVM)?.address;\n\n if (!address) {\n // Account switched to an unknown account\n this.disconnect();\n } else if (this.publicKey) {\n // Account switched to a known account while we're already connected to a different one\n this.publicKey = legacyPublicKey(address);\n this.emit('accountChanged');\n } else {\n // Account switched to a known account while we're not connected\n this.publicKey = legacyPublicKey(address);\n this.emit('connect');\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #getEventHandler = (method: string): ((...params: any[]) => void) => {\n const handlerMap = {\n connect: this.connect,\n disconnect: this.disconnect,\n accountsChangedCA: this.#accountsChanged,\n };\n\n return handlerMap[method as keyof typeof handlerMap] ?? (() => {});\n };\n\n #handleBackgroundMessage = ({ method, params }: { method: string; params: unknown }) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n /**\n * Signs multiple transactions without sending them.\n *\n * @param address - The address to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTxs - An array of serialized transactions to sign.\n * @returns An array of signed transactions.\n */\n async signAllTransactions(address: string, caipId: SolanaCaip2ChainId, serializedTxs: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const tx of serializedTxs) {\n const signedTx = await this.signTransaction(address, caipId, tx);\n results.push(signedTx);\n }\n\n return results;\n }\n\n signMessage() {\n throw new Error('signMessage() not implemented.');\n }\n\n signIn() {\n throw new Error('signIn() not implemented.');\n }\n}\n","import { base58 } from '@scure/base';\nimport type { PublicKey } from '@solana/web3.js';\n\n// The wallet adapters expect a PublicKey instance (from @solana/web3.js < 2.0.0),\n// but we're already on v2.1.0.\n// To just straight up satisfy this requirement, we'd have to either use the legacy\n// @solana/web3.js package, which is already deprecated and has its own issues.\n// So here, I'm importing only the PublicKey type from @solana/web3.js < 2.0.0\n// and satisfying its interface with a custom implementation (minus the static\n// methods, which we do not use anyway).\nexport const legacyPublicKey = (address: string): PublicKey => {\n const byteArray = Buffer.from(base58.decode(address));\n\n const publicKey = {\n get [Symbol.toStringTag]() {\n return `PublicKey(${this.toString()})`;\n },\n toBase58: () => address,\n toBuffer: () => byteArray,\n toBytes: () => byteArray,\n toJSON: () => address,\n toString: () => address,\n equals: (otherPubKey: PublicKey) => address === otherPubKey.toBase58(),\n encode: () => byteArray,\n } as const;\n\n return publicKey satisfies PublicKey;\n};\n","// This is based on @wallet-standard/wallet\n\nimport type {\n DEPRECATED_WalletsWindow,\n Wallet,\n WalletEventsWindow,\n WindowRegisterWalletEvent,\n WindowRegisterWalletEventCallback,\n} from '@wallet-standard/base';\n\nexport function registerWallet(wallet: Wallet): void {\n const callback: WindowRegisterWalletEventCallback = ({ register }) => register(wallet);\n try {\n (window as WalletEventsWindow).dispatchEvent(new RegisterWalletEvent(callback));\n } catch (error) {\n console.error('wallet-standard:register-wallet event could not be dispatched\\n', error);\n }\n try {\n (window as WalletEventsWindow).addEventListener('wallet-standard:app-ready', ({ detail: api }) => callback(api));\n } catch (error) {\n console.error('wallet-standard:app-ready event listener could not be added\\n', error);\n }\n}\n\nclass RegisterWalletEvent extends Event implements WindowRegisterWalletEvent {\n readonly #detail: WindowRegisterWalletEventCallback;\n\n get detail() {\n return this.#detail;\n }\n\n override get type() {\n return 'wallet-standard:register-wallet' as const;\n }\n\n constructor(callback: WindowRegisterWalletEventCallback) {\n super('wallet-standard:register-wallet', {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n this.#detail = callback;\n }\n\n /** @deprecated */\n override preventDefault(): never {\n throw new Error('preventDefault cannot be called');\n }\n\n /** @deprecated */\n override stopImmediatePropagation(): never {\n throw new Error('stopImmediatePropagation cannot be called');\n }\n\n /** @deprecated */\n override stopPropagation(): never {\n throw new Error('stopPropagation cannot be called');\n }\n}\n\n/** @deprecated */\nexport function DEPRECATED_registerWallet(wallet: Wallet): void {\n registerWallet(wallet);\n try {\n ((window as DEPRECATED_WalletsWindow).navigator.wallets ||= []).push(({ register }) => register(wallet));\n } catch (error) {\n console.error('window.navigator.wallets could not be pushed\\n', error);\n }\n}\n","import {\n SolanaSignAndSendTransaction,\n type SolanaSignAndSendTransactionFeature,\n type SolanaSignAndSendTransactionMethod,\n type SolanaSignAndSendTransactionOutput,\n // type SolanaSignInMethod,\n // type SolanaSignInOutput,\n // type SolanaSignMessageMethod,\n // type SolanaSignMessageOutput,\n SolanaSignTransaction,\n type SolanaSignTransactionFeature,\n type SolanaSignTransactionMethod,\n type SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport type { Wallet } from '@wallet-standard/base';\nimport {\n StandardConnect,\n type StandardConnectFeature,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectFeature,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsFeature,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from '@wallet-standard/features';\nimport { base58, base64 } from '@scure/base';\nimport { ConnectedWalletAccount } from './account';\nimport type { SolanaChain } from './solana';\nimport { getSolanaCaip2Id, isSolanaChain, SOLANA_CHAINS } from './solana';\nimport { bytesEqual } from './util';\nimport type { Connection } from './window';\n\nexport const ConnectionNamespace = 'connection:';\n\nexport type ConnectorFeature = {\n [ConnectionNamespace]: {\n connection: Connection;\n };\n};\n\nexport class StandardWallet implements Wallet {\n readonly #listeners: {\n [E in StandardEventsNames]?: StandardEventsListeners[E][];\n } = {};\n // Version of the Wallet Standard this wallet implements\n readonly #version = '1.0.0' as const;\n\n // Wallet connection\n readonly #connection: Connection;\n\n // Current account the wallet is connected with\n #account: ConnectedWalletAccount | null = null;\n\n /** Wallet Standard version this wallet implements */\n get version() {\n return this.#version;\n }\n\n /** Wallet version (i.e. Core Extension's version) */\n get walletVersion() {\n return this.#connection.info.version;\n }\n\n /** Name of the connected wallet app */\n get name() {\n return this.#connection.info.name;\n }\n\n /** Icon of the connected wallet app */\n get icon() {\n return this.#connection.info.icon;\n }\n\n get chains() {\n return SOLANA_CHAINS.slice();\n }\n\n get features(): StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignTransactionFeature &\n // SolanaSignMessageFeature &\n // SolanaSignInFeature &\n ConnectorFeature {\n return {\n [StandardConnect]: {\n version: '1.0.0',\n connect: this.#connect,\n },\n [StandardDisconnect]: {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n [StandardEvents]: {\n version: '1.0.0',\n on: this.#on,\n },\n [SolanaSignAndSendTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n [SolanaSignTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n // [SolanaSignMessage]: {\n // version: '1.0.0',\n // signMessage: this.#signMessage,\n // },\n // [SolanaSignIn]: {\n // version: '1.0.0',\n // signIn: this.#signIn,\n // },\n [ConnectionNamespace]: {\n connection: this.#connection,\n },\n };\n }\n\n get accounts() {\n return this.#account ? [this.#account] : [];\n }\n\n constructor(connection: Connection) {\n if (new.target === StandardWallet) {\n Object.freeze(this);\n }\n\n this.#connection = connection;\n\n connection.on('connect', this.#connected, this);\n connection.on('disconnect', this.#disconnected, this);\n connection.on('accountChanged', this.#reconnected, this);\n\n this.#connected();\n }\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event] ??= [];\n this.#listeners[event]?.push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #connected = () => {\n const address = this.#connection.publicKey?.toBase58();\n if (address) {\n const publicKey = this.#connection.publicKey!.toBytes();\n\n const account = this.#account;\n if (!account || account.address !== address || !bytesEqual(account.publicKey, publicKey)) {\n this.#account = new ConnectedWalletAccount({ address, publicKey });\n this.#emit('change', { accounts: this.accounts });\n }\n }\n };\n\n #disconnected = () => {\n if (this.#account) {\n this.#account = null;\n this.#emit('change', { accounts: this.accounts });\n }\n };\n\n #reconnected = () => {\n if (this.#connection.publicKey) {\n this.#connected();\n } else {\n this.#disconnected();\n }\n };\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#account) {\n await this.#connection.connect(silent ? { onlyIfTrusted: true } : undefined);\n }\n\n this.#connected();\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#connection.disconnect();\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignAndSendTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain, options } = inputs[0]!;\n const { minContextSlot, preflightCommitment, skipPreflight, maxRetries } = options || {};\n if (account !== this.#account) throw new Error('invalid account');\n if (!isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signature = await this.#connection.signAndSendTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain),\n base64.encode(transaction),\n {\n preflightCommitment,\n minContextSlot,\n maxRetries,\n skipPreflight,\n },\n );\n\n outputs.push({ signature: base58.decode(signature) });\n } else if (inputs.length > 1) {\n for (const input of inputs) {\n outputs.push(...(await this.#signAndSendTransaction(input)));\n }\n }\n\n return outputs;\n };\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain } = inputs[0]!;\n if (account !== this.#account) throw new Error('invalid account');\n if (chain && !isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signedTransaction = await this.#connection.signTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n base64.encode(transaction),\n );\n\n outputs.push({ signedTransaction: base64.decode(signedTransaction) });\n } else if (inputs.length > 1) {\n let chain: SolanaChain | undefined = undefined;\n for (const input of inputs) {\n if (input.account !== this.#account) throw new Error('invalid account');\n if (input.chain) {\n if (!isSolanaChain(input.chain)) throw new Error('invalid chain');\n if (chain) {\n if (input.chain !== chain) throw new Error('conflicting chain');\n } else {\n chain = input.chain;\n }\n }\n }\n\n const transactions = inputs.map(({ transaction }) => base64.encode(transaction));\n\n const signedTransactions = await this.#connection.signAllTransactions(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n transactions,\n );\n\n outputs.push(\n ...signedTransactions.map((signedTransaction) => ({\n signedTransaction: base64.decode(signedTransaction),\n })),\n );\n }\n\n return outputs;\n };\n\n // #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n // if (!this.#account) throw new Error('not connected');\n\n // const outputs: SolanaSignMessageOutput[] = [];\n\n // if (inputs.length === 1) {\n // const { message, account } = inputs[0]!;\n // if (account !== this.#account) throw new Error('invalid account');\n\n // const { signature } = await this.#connection.signMessage(message);\n\n // outputs.push({ signedMessage: message, signature });\n // } else if (inputs.length > 1) {\n // for (const input of inputs) {\n // outputs.push(...(await this.#signMessage(input)));\n // }\n // }\n\n // return outputs;\n // };\n\n // #signIn: SolanaSignInMethod = async (...inputs) => {\n // const outputs: SolanaSignInOutput[] = [];\n\n // if (inputs.length > 1) {\n // for (const input of inputs) {\n // outputs.push(await this.#connection.signIn(input));\n // }\n // } else {\n // return [await this.#connection.signIn(inputs[0])];\n // }\n\n // return outputs;\n // };\n}\n","// This is based on from @wallet-standard/wallet\n\nimport {\n SolanaSignAndSendTransaction,\n // SolanaSignMessage,\n SolanaSignTransaction,\n} from '@solana/wallet-standard-features';\nimport type { WalletAccount } from '@wallet-standard/base';\nimport { SOLANA_CHAINS } from './solana';\n\nconst chains = SOLANA_CHAINS;\nconst features = [\n SolanaSignAndSendTransaction,\n SolanaSignTransaction,\n // SolanaSignMessage,\n] as const;\n\nexport class ConnectedWalletAccount implements WalletAccount {\n readonly #address: WalletAccount['address'];\n readonly #publicKey: WalletAccount['publicKey'];\n readonly #chains: WalletAccount['chains'];\n readonly #features: WalletAccount['features'];\n readonly #label: WalletAccount['label'];\n readonly #icon: WalletAccount['icon'];\n\n get address() {\n return this.#address;\n }\n\n get publicKey() {\n return this.#publicKey.slice();\n }\n\n get chains() {\n return this.#chains.slice();\n }\n\n get features() {\n return this.#features.slice();\n }\n\n get label() {\n return this.#label;\n }\n\n get icon() {\n return this.#icon;\n }\n\n constructor({ address, publicKey, label, icon }: Omit<WalletAccount, 'chains' | 'features'>) {\n if (new.target === ConnectedWalletAccount) {\n Object.freeze(this);\n }\n\n this.#address = address;\n this.#publicKey = publicKey;\n this.#chains = chains;\n this.#features = features;\n this.#label = label;\n this.#icon = icon;\n }\n}\n","// This is based on @solana/wallet-standard-chains\n\nimport type { IdentifierString } from '@wallet-standard/base';\nimport type { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\n/** Solana Mainnet (beta) cluster, e.g. https://api.mainnet-beta.solana.com */\nexport const SOLANA_MAINNET_CHAIN = 'solana:mainnet';\n\n/** Solana Devnet cluster, e.g. https://api.devnet.solana.com */\nexport const SOLANA_DEVNET_CHAIN = 'solana:devnet';\n\n/** Solana Testnet cluster, e.g. https://api.testnet.solana.com */\nexport const SOLANA_TESTNET_CHAIN = 'solana:testnet';\n\n/** Solana Localnet cluster, e.g. http://localhost:8899 */\n// export const SOLANA_LOCALNET_CHAIN = 'solana:localnet';\n\n/** Array of all Solana clusters */\nexport const SOLANA_CHAINS = [\n SOLANA_MAINNET_CHAIN,\n SOLANA_DEVNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n // SOLANA_LOCALNET_CHAIN,\n] as const;\n\n/** Type of all Solana clusters */\nexport type SolanaChain = (typeof SOLANA_CHAINS)[number];\n\nexport const SOLANA_CHAIN_TO_CAIP2_ID = {\n [SOLANA_MAINNET_CHAIN]: SolanaCaip2ChainId.MAINNET,\n [SOLANA_DEVNET_CHAIN]: SolanaCaip2ChainId.DEVNET,\n [SOLANA_TESTNET_CHAIN]: SolanaCaip2ChainId.TESTNET,\n};\n\n/**\n * Check if a chain corresponds with one of the Solana clusters.\n */\nexport function isSolanaChain(chain: IdentifierString): chain is SolanaChain {\n return SOLANA_CHAINS.includes(chain as SolanaChain);\n}\n\nexport function getSolanaCaip2Id(chain: SolanaChain): SolanaCaip2ChainId {\n return SOLANA_CHAIN_TO_CAIP2_ID[chain];\n}\n\nexport function isVersionedTransaction(\n transaction: Transaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n","// This is copied from @wallet-standard/wallet\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n return arraysEqual(a, b);\n}\n\ninterface Indexed<T> {\n length: number;\n [index: number]: T;\n}\n\nexport function arraysEqual<T>(a: Indexed<T>, b: Indexed<T>): boolean {\n if (a === b) return true;\n\n const length = a.length;\n if (length !== b.length) return false;\n\n for (let i = 0; i < length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n}\n","import { registerWallet } from './register';\nimport { StandardWallet } from './wallet';\nimport type { Connection } from './window';\n\nexport function initialize(connection: Connection): void {\n registerWallet(new StandardWallet(connection));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/provider/provider.ts","../../src/provider/public-key.ts","../../src/provider/register.ts","../../src/provider/wallet.ts","../../src/provider/account.ts","../../src/provider/solana.ts","../../src/provider/util.ts","../../src/provider/initialize.ts"],"names":["EventEmitter","NetworkVMType","RpcMethod","SolanaCaip2ChainId","base58","legacyPublicKey","address","byteArray","otherPubKey","_chainAgnosticProvider","_info","_accountsChanged","_getEventHandler","_handleBackgroundMessage","SolanaWalletProvider","chainAgnosticProvider","icon","version","name","__publicField","__privateAdd","accounts","vm","method","__privateGet","params","eventHandler","__privateSet","onlyIfTrusted","account","caipId","serializedTx","sendOptions","serializedTxs","results","tx","signedTx","serializedMessage","registerWallet","wallet","callback","register","RegisterWalletEvent","error","api","_detail","SolanaSignAndSendTransaction","SolanaSignMessage","SolanaSignTransaction","StandardConnect","StandardDisconnect","StandardEvents","base64","SOLANA_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","SOLANA_CHAINS","SOLANA_CHAIN_TO_CAIP2_ID","isSolanaChain","chain","getSolanaCaip2Id","chains","features","_address","_publicKey","_chains","_features","_label","_icon","_ConnectedWalletAccount","publicKey","label","ConnectedWalletAccount","bytesEqual","a","b","arraysEqual","length","i","ConnectionNamespace","_listeners","_version","_connection","_account","_on","_emit","emit_fn","_off","off_fn","_connected","_disconnected","_reconnected","_connect","_disconnect","_signAndSendTransaction","_signTransaction","_signMessage","_StandardWallet","connection","event","listener","__privateMethod","silent","inputs","outputs","transaction","options","minContextSlot","preflightCommitment","skipPreflight","maxRetries","signature","input","signedTransaction","transactions","signedTransactions","message","args","existingListener","StandardWallet","initialize"],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport { NetworkVMType, RpcMethod, type ChainAgnosticProvider } from '@avalabs/vm-module-types';\nimport type { PublicKey, SendOptions } from '@solana/web3.js';\nimport { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\nimport type { Connection } from './window';\nimport { legacyPublicKey } from './public-key';\nimport type { WalletIcon } from '@wallet-standard/base';\n\nenum DAppProviderRequest {\n WALLET_CONNECT = 'wallet_requestAccountPermission',\n}\n\n/**\n * Represents a Solana Wallet Provider that interacts with a chain-agnostic provider\n * to manage wallet connections, transactions, and events.\n *\n * @extends EventEmitter\n * @implements Connection\n */\nexport class SolanaWalletProvider extends EventEmitter implements Connection {\n public publicKey: PublicKey | null = null;\n\n readonly #chainAgnosticProvider: ChainAgnosticProvider;\n readonly #info: { icon: WalletIcon; version: string; name: string };\n\n /**\n * Creates an instance of SolanaWalletProvider.\n *\n * @param chainAgnosticProvider - The chain-agnostic provider used for communication.\n * @param options - Wallet information including icon, version, and name.\n */\n constructor(\n chainAgnosticProvider: ChainAgnosticProvider,\n { icon, version, name }: { icon: WalletIcon; version: string; name: string },\n ) {\n super();\n this.#info = {\n icon,\n name,\n version,\n };\n this.#chainAgnosticProvider = chainAgnosticProvider;\n this.#chainAgnosticProvider.subscribeToMessage(this.#handleBackgroundMessage);\n }\n\n /**\n * Retrieves wallet metadata such as icon, version, and name.\n */\n get info() {\n return this.#info;\n }\n\n /**\n * Connects to the wallet. If already connected, returns the public key.\n *\n * @param options - Connection options.\n * @param options.onlyIfTrusted - If true, connects without approval if previously approved.\n * @returns An object containing the public key.\n */\n async connect({ onlyIfTrusted }: { onlyIfTrusted?: boolean } = {}) {\n if (this.publicKey) {\n return { publicKey: this.publicKey };\n }\n\n const [address] = await this.#chainAgnosticProvider.request<[string]>({\n data: {\n method: DAppProviderRequest.WALLET_CONNECT,\n params: { addressVM: NetworkVMType.SVM, onlyIfTrusted },\n },\n });\n\n this.publicKey = legacyPublicKey(address);\n return { publicKey: this.publicKey };\n }\n\n async disconnect() {\n this.publicKey = null;\n this.emit('disconnect');\n }\n\n /**\n * Signs and sends a transaction.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign and send.\n * @param sendOptions - Options for sending the transaction. See the docs here: https://solana.com/pl/docs/rpc/http/sendtransaction.\n * @returns The transaction signature.\n */\n async signAndSendTransaction(\n account: string,\n caipId: SolanaCaip2ChainId,\n serializedTx: string,\n sendOptions: SendOptions,\n ) {\n const signature = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n sendOptions,\n },\n ],\n },\n });\n\n return signature;\n }\n\n /**\n * Signs a transaction without sending it.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign.\n * @returns The signed transaction.\n */\n async signTransaction(account: string, caipId: SolanaCaip2ChainId, serializedTx: string) {\n const signedTx = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n },\n ],\n },\n });\n\n return signedTx;\n }\n\n /**\n * Handles account changes by updating the public key and emitting appropriate events.\n * The incoming {accounts} array may include non-Solana accounts, so we filter for the\n * address described with the Solana VM type.\n */\n #accountsChanged = (accounts: { address: string; vm: NetworkVMType }[]) => {\n const address = accounts.find(({ vm }) => vm === NetworkVMType.SVM)?.address;\n\n if (!address) {\n // Account switched to an unknown account\n this.disconnect();\n } else if (this.publicKey) {\n // Account switched to a known account while we're already connected to a different one\n this.publicKey = legacyPublicKey(address);\n this.emit('accountChanged');\n } else {\n // Account switched to a known account while we're not connected\n this.publicKey = legacyPublicKey(address);\n this.emit('connect');\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #getEventHandler = (method: string): ((...params: any[]) => void) => {\n const handlerMap = {\n connect: this.connect,\n disconnect: this.disconnect,\n accountsChangedCA: this.#accountsChanged,\n };\n\n return handlerMap[method as keyof typeof handlerMap] ?? (() => {});\n };\n\n #handleBackgroundMessage = ({ method, params }: { method: string; params: unknown }) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n /**\n * Signs multiple transactions without sending them.\n *\n * @param address - The address to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTxs - An array of serialized transactions to sign.\n * @returns An array of signed transactions.\n */\n async signAllTransactions(address: string, caipId: SolanaCaip2ChainId, serializedTxs: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const tx of serializedTxs) {\n const signedTx = await this.signTransaction(address, caipId, tx);\n results.push(signedTx);\n }\n\n return results;\n }\n\n async signMessage(account: string, serializedMessage: string): Promise<string> {\n const signature = await this.#chainAgnosticProvider.request<string>({\n scope: SolanaCaip2ChainId.MAINNET, // Solana dApps do not pass it as they do for transactions, so we fake\n data: {\n method: RpcMethod.SOLANA_SIGN_MESSAGE,\n params: [\n {\n account,\n serializedMessage,\n },\n ],\n },\n });\n\n return signature;\n }\n\n signIn() {\n throw new Error('signIn() not implemented.');\n }\n}\n","import { base58 } from '@scure/base';\nimport type { PublicKey } from '@solana/web3.js';\n\n// The wallet adapters expect a PublicKey instance (from @solana/web3.js < 2.0.0),\n// but we're already on v2.1.0.\n// To just straight up satisfy this requirement, we'd have to either use the legacy\n// @solana/web3.js package, which is already deprecated and has its own issues.\n// So here, I'm importing only the PublicKey type from @solana/web3.js < 2.0.0\n// and satisfying its interface with a custom implementation (minus the static\n// methods, which we do not use anyway).\nexport const legacyPublicKey = (address: string): PublicKey => {\n const byteArray = Buffer.from(base58.decode(address));\n\n const publicKey = {\n get [Symbol.toStringTag]() {\n return `PublicKey(${this.toString()})`;\n },\n toBase58: () => address,\n toBuffer: () => byteArray,\n toBytes: () => byteArray,\n toJSON: () => address,\n toString: () => address,\n equals: (otherPubKey: PublicKey) => address === otherPubKey.toBase58(),\n encode: () => byteArray,\n } as const;\n\n return publicKey satisfies PublicKey;\n};\n","// This is based on @wallet-standard/wallet\n\nimport type {\n DEPRECATED_WalletsWindow,\n Wallet,\n WalletEventsWindow,\n WindowRegisterWalletEvent,\n WindowRegisterWalletEventCallback,\n} from '@wallet-standard/base';\n\nexport function registerWallet(wallet: Wallet): void {\n const callback: WindowRegisterWalletEventCallback = ({ register }) => register(wallet);\n try {\n (window as WalletEventsWindow).dispatchEvent(new RegisterWalletEvent(callback));\n } catch (error) {\n console.error('wallet-standard:register-wallet event could not be dispatched\\n', error);\n }\n try {\n (window as WalletEventsWindow).addEventListener('wallet-standard:app-ready', ({ detail: api }) => callback(api));\n } catch (error) {\n console.error('wallet-standard:app-ready event listener could not be added\\n', error);\n }\n}\n\nclass RegisterWalletEvent extends Event implements WindowRegisterWalletEvent {\n readonly #detail: WindowRegisterWalletEventCallback;\n\n get detail() {\n return this.#detail;\n }\n\n override get type() {\n return 'wallet-standard:register-wallet' as const;\n }\n\n constructor(callback: WindowRegisterWalletEventCallback) {\n super('wallet-standard:register-wallet', {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n this.#detail = callback;\n }\n\n /** @deprecated */\n override preventDefault(): never {\n throw new Error('preventDefault cannot be called');\n }\n\n /** @deprecated */\n override stopImmediatePropagation(): never {\n throw new Error('stopImmediatePropagation cannot be called');\n }\n\n /** @deprecated */\n override stopPropagation(): never {\n throw new Error('stopPropagation cannot be called');\n }\n}\n\n/** @deprecated */\nexport function DEPRECATED_registerWallet(wallet: Wallet): void {\n registerWallet(wallet);\n try {\n ((window as DEPRECATED_WalletsWindow).navigator.wallets ||= []).push(({ register }) => register(wallet));\n } catch (error) {\n console.error('window.navigator.wallets could not be pushed\\n', error);\n }\n}\n","import {\n SolanaSignAndSendTransaction,\n type SolanaSignAndSendTransactionFeature,\n type SolanaSignAndSendTransactionMethod,\n type SolanaSignAndSendTransactionOutput,\n SolanaSignMessage,\n type SolanaSignMessageFeature,\n // type SolanaSignInMethod,\n // type SolanaSignInOutput,\n type SolanaSignMessageMethod,\n type SolanaSignMessageOutput,\n SolanaSignTransaction,\n type SolanaSignTransactionFeature,\n type SolanaSignTransactionMethod,\n type SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport type { Wallet } from '@wallet-standard/base';\nimport {\n StandardConnect,\n type StandardConnectFeature,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectFeature,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsFeature,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from '@wallet-standard/features';\nimport { base58, base64 } from '@scure/base';\nimport { ConnectedWalletAccount } from './account';\nimport type { SolanaChain } from './solana';\nimport { getSolanaCaip2Id, isSolanaChain, SOLANA_CHAINS } from './solana';\nimport { bytesEqual } from './util';\nimport type { Connection } from './window';\n\nexport const ConnectionNamespace = 'connection:';\n\nexport type ConnectorFeature = {\n [ConnectionNamespace]: {\n connection: Connection;\n };\n};\n\nexport class StandardWallet implements Wallet {\n readonly #listeners: {\n [E in StandardEventsNames]?: StandardEventsListeners[E][];\n } = {};\n // Version of the Wallet Standard this wallet implements\n readonly #version = '1.0.0' as const;\n\n // Wallet connection\n readonly #connection: Connection;\n\n // Current account the wallet is connected with\n #account: ConnectedWalletAccount | null = null;\n\n /** Wallet Standard version this wallet implements */\n get version() {\n return this.#version;\n }\n\n /** Wallet version (i.e. Core Extension's version) */\n get walletVersion() {\n return this.#connection.info.version;\n }\n\n /** Name of the connected wallet app */\n get name() {\n return this.#connection.info.name;\n }\n\n /** Icon of the connected wallet app */\n get icon() {\n return this.#connection.info.icon;\n }\n\n get chains() {\n return SOLANA_CHAINS.slice();\n }\n\n get features(): StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignTransactionFeature &\n SolanaSignMessageFeature &\n // SolanaSignInFeature &\n ConnectorFeature {\n return {\n [StandardConnect]: {\n version: '1.0.0',\n connect: this.#connect,\n },\n [StandardDisconnect]: {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n [StandardEvents]: {\n version: '1.0.0',\n on: this.#on,\n },\n [SolanaSignAndSendTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n [SolanaSignTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n [SolanaSignMessage]: {\n version: '1.0.0',\n signMessage: this.#signMessage,\n },\n // [SolanaSignIn]: {\n // version: '1.0.0',\n // signIn: this.#signIn,\n // },\n [ConnectionNamespace]: {\n connection: this.#connection,\n },\n };\n }\n\n get accounts() {\n return this.#account ? [this.#account] : [];\n }\n\n constructor(connection: Connection) {\n if (new.target === StandardWallet) {\n Object.freeze(this);\n }\n\n this.#connection = connection;\n\n connection.on('connect', this.#connected, this);\n connection.on('disconnect', this.#disconnected, this);\n connection.on('accountChanged', this.#reconnected, this);\n\n this.#connected();\n }\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event] ??= [];\n this.#listeners[event]?.push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #connected = () => {\n const address = this.#connection.publicKey?.toBase58();\n if (address) {\n const publicKey = this.#connection.publicKey!.toBytes();\n\n const account = this.#account;\n if (!account || account.address !== address || !bytesEqual(account.publicKey, publicKey)) {\n this.#account = new ConnectedWalletAccount({ address, publicKey });\n this.#emit('change', { accounts: this.accounts });\n }\n }\n };\n\n #disconnected = () => {\n if (this.#account) {\n this.#account = null;\n this.#emit('change', { accounts: this.accounts });\n }\n };\n\n #reconnected = () => {\n if (this.#connection.publicKey) {\n this.#connected();\n } else {\n this.#disconnected();\n }\n };\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#account) {\n await this.#connection.connect(silent ? { onlyIfTrusted: true } : undefined);\n }\n\n this.#connected();\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#connection.disconnect();\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignAndSendTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain, options } = inputs[0]!;\n const { minContextSlot, preflightCommitment, skipPreflight, maxRetries } = options || {};\n if (account !== this.#account) throw new Error('invalid account');\n if (!isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signature = await this.#connection.signAndSendTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain),\n base64.encode(transaction),\n {\n preflightCommitment,\n minContextSlot,\n maxRetries,\n skipPreflight,\n },\n );\n\n outputs.push({ signature: base58.decode(signature) });\n } else if (inputs.length > 1) {\n for (const input of inputs) {\n outputs.push(...(await this.#signAndSendTransaction(input)));\n }\n }\n\n return outputs;\n };\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain } = inputs[0]!;\n if (account !== this.#account) throw new Error('invalid account');\n if (chain && !isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signedTransaction = await this.#connection.signTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n base64.encode(transaction),\n );\n\n outputs.push({ signedTransaction: base64.decode(signedTransaction) });\n } else if (inputs.length > 1) {\n let chain: SolanaChain | undefined = undefined;\n for (const input of inputs) {\n if (input.account !== this.#account) throw new Error('invalid account');\n if (input.chain) {\n if (!isSolanaChain(input.chain)) throw new Error('invalid chain');\n if (chain) {\n if (input.chain !== chain) throw new Error('conflicting chain');\n } else {\n chain = input.chain;\n }\n }\n }\n\n const transactions = inputs.map(({ transaction }) => base64.encode(transaction));\n\n const signedTransactions = await this.#connection.signAllTransactions(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n transactions,\n );\n\n outputs.push(\n ...signedTransactions.map((signedTransaction) => ({\n signedTransaction: base64.decode(signedTransaction),\n })),\n );\n }\n\n return outputs;\n };\n\n #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignMessageOutput[] = [];\n\n if (inputs.length === 1) {\n const { message, account } = inputs[0]!;\n if (account !== this.#account) throw new Error('invalid account');\n const serializedMessage = base64.encode(message);\n\n const signature = await this.#connection.signMessage(account.address, serializedMessage);\n\n outputs.push({ signedMessage: message, signature: base64.decode(signature) });\n } else if (inputs.length > 1) {\n for (const input of inputs) {\n outputs.push(...(await this.#signMessage(input)));\n }\n }\n\n return outputs;\n };\n\n // #signIn: SolanaSignInMethod = async (...inputs) => {\n // const outputs: SolanaSignInOutput[] = [];\n\n // if (inputs.length > 1) {\n // for (const input of inputs) {\n // outputs.push(await this.#connection.signIn(input));\n // }\n // } else {\n // return [await this.#connection.signIn(inputs[0])];\n // }\n\n // return outputs;\n // };\n}\n","// This is based on from @wallet-standard/wallet\n\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignMessage,\n SolanaSignTransaction,\n} from '@solana/wallet-standard-features';\nimport type { WalletAccount } from '@wallet-standard/base';\nimport { SOLANA_CHAINS } from './solana';\n\nconst chains = SOLANA_CHAINS;\nconst features = [SolanaSignAndSendTransaction, SolanaSignTransaction, SolanaSignMessage] as const;\n\nexport class ConnectedWalletAccount implements WalletAccount {\n readonly #address: WalletAccount['address'];\n readonly #publicKey: WalletAccount['publicKey'];\n readonly #chains: WalletAccount['chains'];\n readonly #features: WalletAccount['features'];\n readonly #label: WalletAccount['label'];\n readonly #icon: WalletAccount['icon'];\n\n get address() {\n return this.#address;\n }\n\n get publicKey() {\n return this.#publicKey.slice();\n }\n\n get chains() {\n return this.#chains.slice();\n }\n\n get features() {\n return this.#features.slice();\n }\n\n get label() {\n return this.#label;\n }\n\n get icon() {\n return this.#icon;\n }\n\n constructor({ address, publicKey, label, icon }: Omit<WalletAccount, 'chains' | 'features'>) {\n if (new.target === ConnectedWalletAccount) {\n Object.freeze(this);\n }\n\n this.#address = address;\n this.#publicKey = publicKey;\n this.#chains = chains;\n this.#features = features;\n this.#label = label;\n this.#icon = icon;\n }\n}\n","// This is based on @solana/wallet-standard-chains\n\nimport type { IdentifierString } from '@wallet-standard/base';\nimport type { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\n/** Solana Mainnet (beta) cluster, e.g. https://api.mainnet-beta.solana.com */\nexport const SOLANA_MAINNET_CHAIN = 'solana:mainnet';\n\n/** Solana Devnet cluster, e.g. https://api.devnet.solana.com */\nexport const SOLANA_DEVNET_CHAIN = 'solana:devnet';\n\n/** Solana Testnet cluster, e.g. https://api.testnet.solana.com */\nexport const SOLANA_TESTNET_CHAIN = 'solana:testnet';\n\n/** Solana Localnet cluster, e.g. http://localhost:8899 */\n// export const SOLANA_LOCALNET_CHAIN = 'solana:localnet';\n\n/** Array of all Solana clusters */\nexport const SOLANA_CHAINS = [\n SOLANA_MAINNET_CHAIN,\n SOLANA_DEVNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n // SOLANA_LOCALNET_CHAIN,\n] as const;\n\n/** Type of all Solana clusters */\nexport type SolanaChain = (typeof SOLANA_CHAINS)[number];\n\nexport const SOLANA_CHAIN_TO_CAIP2_ID = {\n [SOLANA_MAINNET_CHAIN]: SolanaCaip2ChainId.MAINNET,\n [SOLANA_DEVNET_CHAIN]: SolanaCaip2ChainId.DEVNET,\n [SOLANA_TESTNET_CHAIN]: SolanaCaip2ChainId.TESTNET,\n};\n\n/**\n * Check if a chain corresponds with one of the Solana clusters.\n */\nexport function isSolanaChain(chain: IdentifierString): chain is SolanaChain {\n return SOLANA_CHAINS.includes(chain as SolanaChain);\n}\n\nexport function getSolanaCaip2Id(chain: SolanaChain): SolanaCaip2ChainId {\n return SOLANA_CHAIN_TO_CAIP2_ID[chain];\n}\n\nexport function isVersionedTransaction(\n transaction: Transaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n","// This is copied from @wallet-standard/wallet\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n return arraysEqual(a, b);\n}\n\ninterface Indexed<T> {\n length: number;\n [index: number]: T;\n}\n\nexport function arraysEqual<T>(a: Indexed<T>, b: Indexed<T>): boolean {\n if (a === b) return true;\n\n const length = a.length;\n if (length !== b.length) return false;\n\n for (let i = 0; i < length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n}\n","import { registerWallet } from './register';\nimport { StandardWallet } from './wallet';\nimport type { Connection } from './window';\n\nexport function initialize(connection: Connection): void {\n registerWallet(new StandardWallet(connection));\n}\n"]}
|
|
@@ -29,6 +29,7 @@ interface Connection extends ConnectionEventEmitter {
|
|
|
29
29
|
signAndSendTransaction(account: string, caipId: SolanaCaip2ChainId, serializedTx: string, options?: SendOptions): Promise<string>;
|
|
30
30
|
signTransaction(account: string, caip2Id: SolanaCaip2ChainId, base64EncodedTx: string): Promise<string>;
|
|
31
31
|
signAllTransactions(account: string, caip2Id: SolanaCaip2ChainId, base64EncodedTxs: string[]): Promise<string[]>;
|
|
32
|
+
signMessage(account: string, base64EncodedMsg: string): Promise<string>;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/**
|
|
@@ -56,7 +57,7 @@ declare class SolanaWalletProvider extends EventEmitter implements Connection {
|
|
|
56
57
|
* Retrieves wallet metadata such as icon, version, and name.
|
|
57
58
|
*/
|
|
58
59
|
get info(): {
|
|
59
|
-
icon:
|
|
60
|
+
icon: WalletIcon;
|
|
60
61
|
version: string;
|
|
61
62
|
name: string;
|
|
62
63
|
};
|
|
@@ -101,7 +102,7 @@ declare class SolanaWalletProvider extends EventEmitter implements Connection {
|
|
|
101
102
|
* @returns An array of signed transactions.
|
|
102
103
|
*/
|
|
103
104
|
signAllTransactions(address: string, caipId: SolanaCaip2ChainId, serializedTxs: string[]): Promise<string[]>;
|
|
104
|
-
signMessage():
|
|
105
|
+
signMessage(account: string, serializedMessage: string): Promise<string>;
|
|
105
106
|
signIn(): void;
|
|
106
107
|
}
|
|
107
108
|
|
package/dist/provider/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ interface Connection extends ConnectionEventEmitter {
|
|
|
29
29
|
signAndSendTransaction(account: string, caipId: SolanaCaip2ChainId, serializedTx: string, options?: SendOptions): Promise<string>;
|
|
30
30
|
signTransaction(account: string, caip2Id: SolanaCaip2ChainId, base64EncodedTx: string): Promise<string>;
|
|
31
31
|
signAllTransactions(account: string, caip2Id: SolanaCaip2ChainId, base64EncodedTxs: string[]): Promise<string[]>;
|
|
32
|
+
signMessage(account: string, base64EncodedMsg: string): Promise<string>;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/**
|
|
@@ -56,7 +57,7 @@ declare class SolanaWalletProvider extends EventEmitter implements Connection {
|
|
|
56
57
|
* Retrieves wallet metadata such as icon, version, and name.
|
|
57
58
|
*/
|
|
58
59
|
get info(): {
|
|
59
|
-
icon:
|
|
60
|
+
icon: WalletIcon;
|
|
60
61
|
version: string;
|
|
61
62
|
name: string;
|
|
62
63
|
};
|
|
@@ -101,7 +102,7 @@ declare class SolanaWalletProvider extends EventEmitter implements Connection {
|
|
|
101
102
|
* @returns An array of signed transactions.
|
|
102
103
|
*/
|
|
103
104
|
signAllTransactions(address: string, caipId: SolanaCaip2ChainId, serializedTxs: string[]): Promise<string[]>;
|
|
104
|
-
signMessage():
|
|
105
|
+
signMessage(account: string, serializedMessage: string): Promise<string>;
|
|
105
106
|
signIn(): void;
|
|
106
107
|
}
|
|
107
108
|
|
package/dist/provider/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { a, c, b as b$1, d, e } from '../chunk-7VP42LRT.js';
|
|
2
|
-
import
|
|
1
|
+
import { a, c, b as b$1, d as d$1, e } from '../chunk-7VP42LRT.js';
|
|
2
|
+
import pn from 'events';
|
|
3
3
|
import { NetworkVMType, RpcMethod } from '@avalabs/vm-module-types';
|
|
4
|
+
import { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';
|
|
4
5
|
import { base58, base64 } from '@scure/base';
|
|
5
|
-
import { SolanaSignAndSendTransaction, SolanaSignTransaction } from '@solana/wallet-standard-features';
|
|
6
|
+
import { SolanaSignAndSendTransaction, SolanaSignTransaction, SolanaSignMessage } from '@solana/wallet-standard-features';
|
|
6
7
|
import { StandardConnect, StandardDisconnect, StandardEvents } from '@wallet-standard/features';
|
|
7
|
-
import { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';
|
|
8
8
|
|
|
9
|
-
var x=o=>{let e=Buffer.from(base58.decode(o));return {get[Symbol.toStringTag](){return `PublicKey(${this.toString()})`},toBase58:()=>o,toBuffer:()=>e,toBytes:()=>e,toJSON:()=>o,toString:()=>o,equals:a=>o===a.toBase58(),encode:()=>e}};var u,m,K,O,
|
|
9
|
+
var x=o=>{let e=Buffer.from(base58.decode(o));return {get[Symbol.toStringTag](){return `PublicKey(${this.toString()})`},toBase58:()=>o,toBuffer:()=>e,toBytes:()=>e,toJSON:()=>o,toString:()=>o,equals:a=>o===a.toBase58(),encode:()=>e}};var u,m,K,O,_,nn=class extends pn{constructor(t,{icon:a$1,version:s,name:c$1}){super();a(this,"publicKey",null);c(this,u,void 0);c(this,m,void 0);c(this,K,t=>{let a=t.find(({vm:s})=>s===NetworkVMType.SVM)?.address;a?this.publicKey?(this.publicKey=x(a),this.emit("accountChanged")):(this.publicKey=x(a),this.emit("connect")):this.disconnect();});c(this,O,t=>({connect:this.connect,disconnect:this.disconnect,accountsChangedCA:b$1(this,K)})[t]??(()=>{}));c(this,_,({method:t,params:a})=>{let s=b$1(this,O).call(this,t);if(s)return s(a);this.emit(t,a);});d$1(this,m,{icon:a$1,name:c$1,version:s}),d$1(this,u,t),b$1(this,u).subscribeToMessage(b$1(this,_));}get info(){return b$1(this,m)}async connect({onlyIfTrusted:t}={}){if(this.publicKey)return {publicKey:this.publicKey};let[a]=await b$1(this,u).request({data:{method:"wallet_requestAccountPermission",params:{addressVM:NetworkVMType.SVM,onlyIfTrusted:t}}});return this.publicKey=x(a),{publicKey:this.publicKey}}async disconnect(){this.publicKey=null,this.emit("disconnect");}async signAndSendTransaction(t,a,s,c){return await b$1(this,u).request({scope:a,data:{method:RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,params:[{account:t,serializedTx:s,sendOptions:c}]}})}async signTransaction(t,a,s){return await b$1(this,u).request({scope:a,data:{method:RpcMethod.SOLANA_SIGN_TRANSACTION,params:[{account:t,serializedTx:s}]}})}async signAllTransactions(t,a,s){let c=[];for(let l of s){let z=await this.signTransaction(t,a,l);c.push(z);}return c}async signMessage(t,a){return await b$1(this,u).request({scope:SolanaCaip2ChainId.MAINNET,data:{method:RpcMethod.SOLANA_SIGN_MESSAGE,params:[{account:t,serializedMessage:a}]}})}signIn(){throw new Error("signIn() not implemented.")}};u=new WeakMap,m=new WeakMap,K=new WeakMap,O=new WeakMap,_=new WeakMap;function tn(o){let e=({register:t})=>t(o);try{window.dispatchEvent(new U(e));}catch(t){console.error(`wallet-standard:register-wallet event could not be dispatched
|
|
10
10
|
`,t);}try{window.addEventListener("wallet-standard:app-ready",({detail:t})=>e(t));}catch(t){console.error(`wallet-standard:app-ready event listener could not be added
|
|
11
|
-
`,t);}}var
|
|
11
|
+
`,t);}}var y,U=class extends Event{constructor(t){super("wallet-standard:register-wallet",{bubbles:!1,cancelable:!1,composed:!1});c(this,y,void 0);d$1(this,y,t);}get detail(){return b$1(this,y)}get type(){return "wallet-standard:register-wallet"}preventDefault(){throw new Error("preventDefault cannot be called")}stopImmediatePropagation(){throw new Error("stopImmediatePropagation cannot be called")}stopPropagation(){throw new Error("stopPropagation cannot be called")}};y=new WeakMap;var en="solana:mainnet",an="solana:devnet",sn="solana:testnet",g=[en,an,sn],Sn={[en]:SolanaCaip2ChainId.MAINNET,[an]:SolanaCaip2ChainId.DEVNET,[sn]:SolanaCaip2ChainId.TESTNET};function P(o){return g.includes(o)}function L(o){return Sn[o]}var wn=g,En=[SolanaSignAndSendTransaction,SolanaSignTransaction,SolanaSignMessage],w,E,A,T,b,C,$=class ${constructor({address:e,publicKey:t,label:a,icon:s}){c(this,w,void 0);c(this,E,void 0);c(this,A,void 0);c(this,T,void 0);c(this,b,void 0);c(this,C,void 0);new.target===$&&Object.freeze(this),d$1(this,w,e),d$1(this,E,t),d$1(this,A,wn),d$1(this,T,En),d$1(this,b,a),d$1(this,C,s);}get address(){return b$1(this,w)}get publicKey(){return b$1(this,E).slice()}get chains(){return b$1(this,A).slice()}get features(){return b$1(this,T).slice()}get label(){return b$1(this,b)}get icon(){return b$1(this,C)}};w=new WeakMap,E=new WeakMap,A=new WeakMap,T=new WeakMap,b=new WeakMap,C=new WeakMap;var D=$;function on(o,e){return An(o,e)}function An(o,e){if(o===e)return !0;let t=o.length;if(t!==e.length)return !1;for(let a=0;a<t;a++)if(o[a]!==e[a])return !1;return !0}var In="connection:",p,V,d,r,R,v,Q,k,rn,f,N,H,q,B,W,j,M,X=class X{constructor(e$1){c(this,v);c(this,k);c(this,p,{});c(this,V,"1.0.0");c(this,d,void 0);c(this,r,null);c(this,R,(e$1,t)=>(b$1(this,p)[e$1]??=[],b$1(this,p)[e$1]?.push(t),()=>e(this,k,rn).call(this,e$1,t)));c(this,f,()=>{let e$1=b$1(this,d).publicKey?.toBase58();if(e$1){let t=b$1(this,d).publicKey.toBytes(),a=b$1(this,r);(!a||a.address!==e$1||!on(a.publicKey,t))&&(d$1(this,r,new D({address:e$1,publicKey:t})),e(this,v,Q).call(this,"change",{accounts:this.accounts}));}});c(this,N,()=>{b$1(this,r)&&(d$1(this,r,null),e(this,v,Q).call(this,"change",{accounts:this.accounts}));});c(this,H,()=>{b$1(this,d).publicKey?b$1(this,f).call(this):b$1(this,N).call(this);});c(this,q,async({silent:e}={})=>(b$1(this,r)||await b$1(this,d).connect(e?{onlyIfTrusted:!0}:void 0),b$1(this,f).call(this),{accounts:this.accounts}));c(this,B,async()=>{await b$1(this,d).disconnect();});c(this,W,async(...e)=>{if(!b$1(this,r))throw new Error("not connected");let t=[];if(e.length===1){let{transaction:a,account:s,chain:c,options:l}=e[0],{minContextSlot:z,preflightCommitment:cn,skipPreflight:ln,maxRetries:dn}=l||{};if(s!==b$1(this,r))throw new Error("invalid account");if(!P(c))throw new Error("invalid chain");let hn=await b$1(this,d).signAndSendTransaction(b$1(this,r).address,L(c),base64.encode(a),{preflightCommitment:cn,minContextSlot:z,maxRetries:dn,skipPreflight:ln});t.push({signature:base58.decode(hn)});}else if(e.length>1)for(let a of e)t.push(...await b$1(this,W).call(this,a));return t});c(this,j,async(...e)=>{if(!b$1(this,r))throw new Error("not connected");let t=[];if(e.length===1){let{transaction:a,account:s,chain:c}=e[0];if(s!==b$1(this,r))throw new Error("invalid account");if(c&&!P(c))throw new Error("invalid chain");let l=await b$1(this,d).signTransaction(b$1(this,r).address,L(c||g[0]),base64.encode(a));t.push({signedTransaction:base64.decode(l)});}else if(e.length>1){let a;for(let l of e){if(l.account!==b$1(this,r))throw new Error("invalid account");if(l.chain){if(!P(l.chain))throw new Error("invalid chain");if(a){if(l.chain!==a)throw new Error("conflicting chain")}else a=l.chain;}}let s=e.map(({transaction:l})=>base64.encode(l)),c=await b$1(this,d).signAllTransactions(b$1(this,r).address,L(a||g[0]),s);t.push(...c.map(l=>({signedTransaction:base64.decode(l)})));}return t});c(this,M,async(...e)=>{if(!b$1(this,r))throw new Error("not connected");let t=[];if(e.length===1){let{message:a,account:s}=e[0];if(s!==b$1(this,r))throw new Error("invalid account");let c=base64.encode(a),l=await b$1(this,d).signMessage(s.address,c);t.push({signedMessage:a,signature:base64.decode(l)});}else if(e.length>1)for(let a of e)t.push(...await b$1(this,M).call(this,a));return t});new.target===X&&Object.freeze(this),d$1(this,d,e$1),e$1.on("connect",b$1(this,f),this),e$1.on("disconnect",b$1(this,N),this),e$1.on("accountChanged",b$1(this,H),this),b$1(this,f).call(this);}get version(){return b$1(this,V)}get walletVersion(){return b$1(this,d).info.version}get name(){return b$1(this,d).info.name}get icon(){return b$1(this,d).info.icon}get chains(){return g.slice()}get features(){return {[StandardConnect]:{version:"1.0.0",connect:b$1(this,q)},[StandardDisconnect]:{version:"1.0.0",disconnect:b$1(this,B)},[StandardEvents]:{version:"1.0.0",on:b$1(this,R)},[SolanaSignAndSendTransaction]:{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:b$1(this,W)},[SolanaSignTransaction]:{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:b$1(this,j)},[SolanaSignMessage]:{version:"1.0.0",signMessage:b$1(this,M)},[In]:{connection:b$1(this,d)}}}get accounts(){return b$1(this,r)?[b$1(this,r)]:[]}};p=new WeakMap,V=new WeakMap,d=new WeakMap,r=new WeakMap,R=new WeakMap,v=new WeakSet,Q=function(e,...t){b$1(this,p)[e]?.forEach(a=>a.apply(null,t));},k=new WeakSet,rn=function(e,t){b$1(this,p)[e]=b$1(this,p)[e]?.filter(a=>t!==a);},f=new WeakMap,N=new WeakMap,H=new WeakMap,q=new WeakMap,B=new WeakMap,W=new WeakMap,j=new WeakMap,M=new WeakMap;var F=X;function at(o){tn(new F(o));}
|
|
12
12
|
|
|
13
|
-
export {
|
|
13
|
+
export { nn as SolanaWalletProvider, at as initialize };
|
|
14
14
|
//# sourceMappingURL=out.js.map
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/provider/provider.ts","../../src/provider/public-key.ts","../../src/provider/register.ts","../../src/provider/wallet.ts","../../src/provider/account.ts","../../src/provider/solana.ts","../../src/provider/util.ts","../../src/provider/initialize.ts"],"names":["EventEmitter","NetworkVMType","RpcMethod","base58","legacyPublicKey","address","byteArray","otherPubKey","_chainAgnosticProvider","_info","_accountsChanged","_getEventHandler","_handleBackgroundMessage","SolanaWalletProvider","chainAgnosticProvider","icon","version","name","__publicField","__privateAdd","accounts","vm","method","__privateGet","params","eventHandler","__privateSet","onlyIfTrusted","account","caipId","serializedTx","sendOptions","serializedTxs","results","tx","signedTx","registerWallet","wallet","callback","register","RegisterWalletEvent","error","api","_detail","SolanaSignAndSendTransaction","SolanaSignTransaction","StandardConnect","StandardDisconnect","StandardEvents","base64","SolanaCaip2ChainId","SOLANA_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","SOLANA_CHAINS","SOLANA_CHAIN_TO_CAIP2_ID","isSolanaChain","chain","getSolanaCaip2Id","chains","features","_address","_publicKey","_chains","_features","_label","_icon","_ConnectedWalletAccount","publicKey","label","ConnectedWalletAccount","bytesEqual","a","b","arraysEqual","length","i","ConnectionNamespace","_listeners","_version","_connection","_account","_on","_emit","emit_fn","_off","off_fn","_connected","_disconnected","_reconnected","_connect","_disconnect","_signAndSendTransaction","_signTransaction","_StandardWallet","connection","event","listener","__privateMethod","silent","inputs","outputs","transaction","options","minContextSlot","preflightCommitment","skipPreflight","maxRetries","signature","input","signedTransaction","transactions","signedTransactions","args","existingListener","StandardWallet","initialize"],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport { NetworkVMType, RpcMethod, type ChainAgnosticProvider } from '@avalabs/vm-module-types';\nimport type { PublicKey, SendOptions } from '@solana/web3.js';\nimport type { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\nimport type { Connection } from './window';\nimport { legacyPublicKey } from './public-key';\nimport type { WalletIcon } from '@wallet-standard/base';\n\nenum DAppProviderRequest {\n WALLET_CONNECT = 'wallet_requestAccountPermission',\n}\n\n/**\n * Represents a Solana Wallet Provider that interacts with a chain-agnostic provider\n * to manage wallet connections, transactions, and events.\n *\n * @extends EventEmitter\n * @implements Connection\n */\nexport class SolanaWalletProvider extends EventEmitter implements Connection {\n public publicKey: PublicKey | null = null;\n\n readonly #chainAgnosticProvider: ChainAgnosticProvider;\n readonly #info: { icon: WalletIcon; version: string; name: string };\n\n /**\n * Creates an instance of SolanaWalletProvider.\n *\n * @param chainAgnosticProvider - The chain-agnostic provider used for communication.\n * @param options - Wallet information including icon, version, and name.\n */\n constructor(\n chainAgnosticProvider: ChainAgnosticProvider,\n { icon, version, name }: { icon: WalletIcon; version: string; name: string },\n ) {\n super();\n this.#info = {\n icon,\n name,\n version,\n };\n this.#chainAgnosticProvider = chainAgnosticProvider;\n this.#chainAgnosticProvider.subscribeToMessage(this.#handleBackgroundMessage);\n }\n\n /**\n * Retrieves wallet metadata such as icon, version, and name.\n */\n get info() {\n return this.#info;\n }\n\n /**\n * Connects to the wallet. If already connected, returns the public key.\n *\n * @param options - Connection options.\n * @param options.onlyIfTrusted - If true, connects without approval if previously approved.\n * @returns An object containing the public key.\n */\n async connect({ onlyIfTrusted }: { onlyIfTrusted?: boolean } = {}) {\n if (this.publicKey) {\n return { publicKey: this.publicKey };\n }\n\n const [address] = await this.#chainAgnosticProvider.request<[string]>({\n data: {\n method: DAppProviderRequest.WALLET_CONNECT,\n params: { addressVM: NetworkVMType.SVM, onlyIfTrusted },\n },\n });\n\n this.publicKey = legacyPublicKey(address);\n return { publicKey: this.publicKey };\n }\n\n async disconnect() {\n this.publicKey = null;\n this.emit('disconnect');\n }\n\n /**\n * Signs and sends a transaction.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign and send.\n * @param sendOptions - Options for sending the transaction. See the docs here: https://solana.com/pl/docs/rpc/http/sendtransaction.\n * @returns The transaction signature.\n */\n async signAndSendTransaction(\n account: string,\n caipId: SolanaCaip2ChainId,\n serializedTx: string,\n sendOptions: SendOptions,\n ) {\n const signature = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n sendOptions,\n },\n ],\n },\n });\n\n return signature;\n }\n\n /**\n * Signs a transaction without sending it.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign.\n * @returns The signed transaction.\n */\n async signTransaction(account: string, caipId: SolanaCaip2ChainId, serializedTx: string) {\n const signedTx = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n },\n ],\n },\n });\n\n return signedTx;\n }\n\n /**\n * Handles account changes by updating the public key and emitting appropriate events.\n * The incoming {accounts} array may include non-Solana accounts, so we filter for the\n * address described with the Solana VM type.\n */\n #accountsChanged = (accounts: { address: string; vm: NetworkVMType }[]) => {\n const address = accounts.find(({ vm }) => vm === NetworkVMType.SVM)?.address;\n\n if (!address) {\n // Account switched to an unknown account\n this.disconnect();\n } else if (this.publicKey) {\n // Account switched to a known account while we're already connected to a different one\n this.publicKey = legacyPublicKey(address);\n this.emit('accountChanged');\n } else {\n // Account switched to a known account while we're not connected\n this.publicKey = legacyPublicKey(address);\n this.emit('connect');\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #getEventHandler = (method: string): ((...params: any[]) => void) => {\n const handlerMap = {\n connect: this.connect,\n disconnect: this.disconnect,\n accountsChangedCA: this.#accountsChanged,\n };\n\n return handlerMap[method as keyof typeof handlerMap] ?? (() => {});\n };\n\n #handleBackgroundMessage = ({ method, params }: { method: string; params: unknown }) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n /**\n * Signs multiple transactions without sending them.\n *\n * @param address - The address to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTxs - An array of serialized transactions to sign.\n * @returns An array of signed transactions.\n */\n async signAllTransactions(address: string, caipId: SolanaCaip2ChainId, serializedTxs: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const tx of serializedTxs) {\n const signedTx = await this.signTransaction(address, caipId, tx);\n results.push(signedTx);\n }\n\n return results;\n }\n\n signMessage() {\n throw new Error('signMessage() not implemented.');\n }\n\n signIn() {\n throw new Error('signIn() not implemented.');\n }\n}\n","import { base58 } from '@scure/base';\nimport type { PublicKey } from '@solana/web3.js';\n\n// The wallet adapters expect a PublicKey instance (from @solana/web3.js < 2.0.0),\n// but we're already on v2.1.0.\n// To just straight up satisfy this requirement, we'd have to either use the legacy\n// @solana/web3.js package, which is already deprecated and has its own issues.\n// So here, I'm importing only the PublicKey type from @solana/web3.js < 2.0.0\n// and satisfying its interface with a custom implementation (minus the static\n// methods, which we do not use anyway).\nexport const legacyPublicKey = (address: string): PublicKey => {\n const byteArray = Buffer.from(base58.decode(address));\n\n const publicKey = {\n get [Symbol.toStringTag]() {\n return `PublicKey(${this.toString()})`;\n },\n toBase58: () => address,\n toBuffer: () => byteArray,\n toBytes: () => byteArray,\n toJSON: () => address,\n toString: () => address,\n equals: (otherPubKey: PublicKey) => address === otherPubKey.toBase58(),\n encode: () => byteArray,\n } as const;\n\n return publicKey satisfies PublicKey;\n};\n","// This is based on @wallet-standard/wallet\n\nimport type {\n DEPRECATED_WalletsWindow,\n Wallet,\n WalletEventsWindow,\n WindowRegisterWalletEvent,\n WindowRegisterWalletEventCallback,\n} from '@wallet-standard/base';\n\nexport function registerWallet(wallet: Wallet): void {\n const callback: WindowRegisterWalletEventCallback = ({ register }) => register(wallet);\n try {\n (window as WalletEventsWindow).dispatchEvent(new RegisterWalletEvent(callback));\n } catch (error) {\n console.error('wallet-standard:register-wallet event could not be dispatched\\n', error);\n }\n try {\n (window as WalletEventsWindow).addEventListener('wallet-standard:app-ready', ({ detail: api }) => callback(api));\n } catch (error) {\n console.error('wallet-standard:app-ready event listener could not be added\\n', error);\n }\n}\n\nclass RegisterWalletEvent extends Event implements WindowRegisterWalletEvent {\n readonly #detail: WindowRegisterWalletEventCallback;\n\n get detail() {\n return this.#detail;\n }\n\n override get type() {\n return 'wallet-standard:register-wallet' as const;\n }\n\n constructor(callback: WindowRegisterWalletEventCallback) {\n super('wallet-standard:register-wallet', {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n this.#detail = callback;\n }\n\n /** @deprecated */\n override preventDefault(): never {\n throw new Error('preventDefault cannot be called');\n }\n\n /** @deprecated */\n override stopImmediatePropagation(): never {\n throw new Error('stopImmediatePropagation cannot be called');\n }\n\n /** @deprecated */\n override stopPropagation(): never {\n throw new Error('stopPropagation cannot be called');\n }\n}\n\n/** @deprecated */\nexport function DEPRECATED_registerWallet(wallet: Wallet): void {\n registerWallet(wallet);\n try {\n ((window as DEPRECATED_WalletsWindow).navigator.wallets ||= []).push(({ register }) => register(wallet));\n } catch (error) {\n console.error('window.navigator.wallets could not be pushed\\n', error);\n }\n}\n","import {\n SolanaSignAndSendTransaction,\n type SolanaSignAndSendTransactionFeature,\n type SolanaSignAndSendTransactionMethod,\n type SolanaSignAndSendTransactionOutput,\n // type SolanaSignInMethod,\n // type SolanaSignInOutput,\n // type SolanaSignMessageMethod,\n // type SolanaSignMessageOutput,\n SolanaSignTransaction,\n type SolanaSignTransactionFeature,\n type SolanaSignTransactionMethod,\n type SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport type { Wallet } from '@wallet-standard/base';\nimport {\n StandardConnect,\n type StandardConnectFeature,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectFeature,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsFeature,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from '@wallet-standard/features';\nimport { base58, base64 } from '@scure/base';\nimport { ConnectedWalletAccount } from './account';\nimport type { SolanaChain } from './solana';\nimport { getSolanaCaip2Id, isSolanaChain, SOLANA_CHAINS } from './solana';\nimport { bytesEqual } from './util';\nimport type { Connection } from './window';\n\nexport const ConnectionNamespace = 'connection:';\n\nexport type ConnectorFeature = {\n [ConnectionNamespace]: {\n connection: Connection;\n };\n};\n\nexport class StandardWallet implements Wallet {\n readonly #listeners: {\n [E in StandardEventsNames]?: StandardEventsListeners[E][];\n } = {};\n // Version of the Wallet Standard this wallet implements\n readonly #version = '1.0.0' as const;\n\n // Wallet connection\n readonly #connection: Connection;\n\n // Current account the wallet is connected with\n #account: ConnectedWalletAccount | null = null;\n\n /** Wallet Standard version this wallet implements */\n get version() {\n return this.#version;\n }\n\n /** Wallet version (i.e. Core Extension's version) */\n get walletVersion() {\n return this.#connection.info.version;\n }\n\n /** Name of the connected wallet app */\n get name() {\n return this.#connection.info.name;\n }\n\n /** Icon of the connected wallet app */\n get icon() {\n return this.#connection.info.icon;\n }\n\n get chains() {\n return SOLANA_CHAINS.slice();\n }\n\n get features(): StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignTransactionFeature &\n // SolanaSignMessageFeature &\n // SolanaSignInFeature &\n ConnectorFeature {\n return {\n [StandardConnect]: {\n version: '1.0.0',\n connect: this.#connect,\n },\n [StandardDisconnect]: {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n [StandardEvents]: {\n version: '1.0.0',\n on: this.#on,\n },\n [SolanaSignAndSendTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n [SolanaSignTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n // [SolanaSignMessage]: {\n // version: '1.0.0',\n // signMessage: this.#signMessage,\n // },\n // [SolanaSignIn]: {\n // version: '1.0.0',\n // signIn: this.#signIn,\n // },\n [ConnectionNamespace]: {\n connection: this.#connection,\n },\n };\n }\n\n get accounts() {\n return this.#account ? [this.#account] : [];\n }\n\n constructor(connection: Connection) {\n if (new.target === StandardWallet) {\n Object.freeze(this);\n }\n\n this.#connection = connection;\n\n connection.on('connect', this.#connected, this);\n connection.on('disconnect', this.#disconnected, this);\n connection.on('accountChanged', this.#reconnected, this);\n\n this.#connected();\n }\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event] ??= [];\n this.#listeners[event]?.push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #connected = () => {\n const address = this.#connection.publicKey?.toBase58();\n if (address) {\n const publicKey = this.#connection.publicKey!.toBytes();\n\n const account = this.#account;\n if (!account || account.address !== address || !bytesEqual(account.publicKey, publicKey)) {\n this.#account = new ConnectedWalletAccount({ address, publicKey });\n this.#emit('change', { accounts: this.accounts });\n }\n }\n };\n\n #disconnected = () => {\n if (this.#account) {\n this.#account = null;\n this.#emit('change', { accounts: this.accounts });\n }\n };\n\n #reconnected = () => {\n if (this.#connection.publicKey) {\n this.#connected();\n } else {\n this.#disconnected();\n }\n };\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#account) {\n await this.#connection.connect(silent ? { onlyIfTrusted: true } : undefined);\n }\n\n this.#connected();\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#connection.disconnect();\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignAndSendTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain, options } = inputs[0]!;\n const { minContextSlot, preflightCommitment, skipPreflight, maxRetries } = options || {};\n if (account !== this.#account) throw new Error('invalid account');\n if (!isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signature = await this.#connection.signAndSendTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain),\n base64.encode(transaction),\n {\n preflightCommitment,\n minContextSlot,\n maxRetries,\n skipPreflight,\n },\n );\n\n outputs.push({ signature: base58.decode(signature) });\n } else if (inputs.length > 1) {\n for (const input of inputs) {\n outputs.push(...(await this.#signAndSendTransaction(input)));\n }\n }\n\n return outputs;\n };\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain } = inputs[0]!;\n if (account !== this.#account) throw new Error('invalid account');\n if (chain && !isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signedTransaction = await this.#connection.signTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n base64.encode(transaction),\n );\n\n outputs.push({ signedTransaction: base64.decode(signedTransaction) });\n } else if (inputs.length > 1) {\n let chain: SolanaChain | undefined = undefined;\n for (const input of inputs) {\n if (input.account !== this.#account) throw new Error('invalid account');\n if (input.chain) {\n if (!isSolanaChain(input.chain)) throw new Error('invalid chain');\n if (chain) {\n if (input.chain !== chain) throw new Error('conflicting chain');\n } else {\n chain = input.chain;\n }\n }\n }\n\n const transactions = inputs.map(({ transaction }) => base64.encode(transaction));\n\n const signedTransactions = await this.#connection.signAllTransactions(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n transactions,\n );\n\n outputs.push(\n ...signedTransactions.map((signedTransaction) => ({\n signedTransaction: base64.decode(signedTransaction),\n })),\n );\n }\n\n return outputs;\n };\n\n // #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n // if (!this.#account) throw new Error('not connected');\n\n // const outputs: SolanaSignMessageOutput[] = [];\n\n // if (inputs.length === 1) {\n // const { message, account } = inputs[0]!;\n // if (account !== this.#account) throw new Error('invalid account');\n\n // const { signature } = await this.#connection.signMessage(message);\n\n // outputs.push({ signedMessage: message, signature });\n // } else if (inputs.length > 1) {\n // for (const input of inputs) {\n // outputs.push(...(await this.#signMessage(input)));\n // }\n // }\n\n // return outputs;\n // };\n\n // #signIn: SolanaSignInMethod = async (...inputs) => {\n // const outputs: SolanaSignInOutput[] = [];\n\n // if (inputs.length > 1) {\n // for (const input of inputs) {\n // outputs.push(await this.#connection.signIn(input));\n // }\n // } else {\n // return [await this.#connection.signIn(inputs[0])];\n // }\n\n // return outputs;\n // };\n}\n","// This is based on from @wallet-standard/wallet\n\nimport {\n SolanaSignAndSendTransaction,\n // SolanaSignMessage,\n SolanaSignTransaction,\n} from '@solana/wallet-standard-features';\nimport type { WalletAccount } from '@wallet-standard/base';\nimport { SOLANA_CHAINS } from './solana';\n\nconst chains = SOLANA_CHAINS;\nconst features = [\n SolanaSignAndSendTransaction,\n SolanaSignTransaction,\n // SolanaSignMessage,\n] as const;\n\nexport class ConnectedWalletAccount implements WalletAccount {\n readonly #address: WalletAccount['address'];\n readonly #publicKey: WalletAccount['publicKey'];\n readonly #chains: WalletAccount['chains'];\n readonly #features: WalletAccount['features'];\n readonly #label: WalletAccount['label'];\n readonly #icon: WalletAccount['icon'];\n\n get address() {\n return this.#address;\n }\n\n get publicKey() {\n return this.#publicKey.slice();\n }\n\n get chains() {\n return this.#chains.slice();\n }\n\n get features() {\n return this.#features.slice();\n }\n\n get label() {\n return this.#label;\n }\n\n get icon() {\n return this.#icon;\n }\n\n constructor({ address, publicKey, label, icon }: Omit<WalletAccount, 'chains' | 'features'>) {\n if (new.target === ConnectedWalletAccount) {\n Object.freeze(this);\n }\n\n this.#address = address;\n this.#publicKey = publicKey;\n this.#chains = chains;\n this.#features = features;\n this.#label = label;\n this.#icon = icon;\n }\n}\n","// This is based on @solana/wallet-standard-chains\n\nimport type { IdentifierString } from '@wallet-standard/base';\nimport type { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\n/** Solana Mainnet (beta) cluster, e.g. https://api.mainnet-beta.solana.com */\nexport const SOLANA_MAINNET_CHAIN = 'solana:mainnet';\n\n/** Solana Devnet cluster, e.g. https://api.devnet.solana.com */\nexport const SOLANA_DEVNET_CHAIN = 'solana:devnet';\n\n/** Solana Testnet cluster, e.g. https://api.testnet.solana.com */\nexport const SOLANA_TESTNET_CHAIN = 'solana:testnet';\n\n/** Solana Localnet cluster, e.g. http://localhost:8899 */\n// export const SOLANA_LOCALNET_CHAIN = 'solana:localnet';\n\n/** Array of all Solana clusters */\nexport const SOLANA_CHAINS = [\n SOLANA_MAINNET_CHAIN,\n SOLANA_DEVNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n // SOLANA_LOCALNET_CHAIN,\n] as const;\n\n/** Type of all Solana clusters */\nexport type SolanaChain = (typeof SOLANA_CHAINS)[number];\n\nexport const SOLANA_CHAIN_TO_CAIP2_ID = {\n [SOLANA_MAINNET_CHAIN]: SolanaCaip2ChainId.MAINNET,\n [SOLANA_DEVNET_CHAIN]: SolanaCaip2ChainId.DEVNET,\n [SOLANA_TESTNET_CHAIN]: SolanaCaip2ChainId.TESTNET,\n};\n\n/**\n * Check if a chain corresponds with one of the Solana clusters.\n */\nexport function isSolanaChain(chain: IdentifierString): chain is SolanaChain {\n return SOLANA_CHAINS.includes(chain as SolanaChain);\n}\n\nexport function getSolanaCaip2Id(chain: SolanaChain): SolanaCaip2ChainId {\n return SOLANA_CHAIN_TO_CAIP2_ID[chain];\n}\n\nexport function isVersionedTransaction(\n transaction: Transaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n","// This is copied from @wallet-standard/wallet\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n return arraysEqual(a, b);\n}\n\ninterface Indexed<T> {\n length: number;\n [index: number]: T;\n}\n\nexport function arraysEqual<T>(a: Indexed<T>, b: Indexed<T>): boolean {\n if (a === b) return true;\n\n const length = a.length;\n if (length !== b.length) return false;\n\n for (let i = 0; i < length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n}\n","import { registerWallet } from './register';\nimport { StandardWallet } from './wallet';\nimport type { Connection } from './window';\n\nexport function initialize(connection: Connection): void {\n registerWallet(new StandardWallet(connection));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/provider/provider.ts","../../src/provider/public-key.ts","../../src/provider/register.ts","../../src/provider/wallet.ts","../../src/provider/account.ts","../../src/provider/solana.ts","../../src/provider/util.ts","../../src/provider/initialize.ts"],"names":["EventEmitter","NetworkVMType","RpcMethod","SolanaCaip2ChainId","base58","legacyPublicKey","address","byteArray","otherPubKey","_chainAgnosticProvider","_info","_accountsChanged","_getEventHandler","_handleBackgroundMessage","SolanaWalletProvider","chainAgnosticProvider","icon","version","name","__publicField","__privateAdd","accounts","vm","method","__privateGet","params","eventHandler","__privateSet","onlyIfTrusted","account","caipId","serializedTx","sendOptions","serializedTxs","results","tx","signedTx","serializedMessage","registerWallet","wallet","callback","register","RegisterWalletEvent","error","api","_detail","SolanaSignAndSendTransaction","SolanaSignMessage","SolanaSignTransaction","StandardConnect","StandardDisconnect","StandardEvents","base64","SOLANA_MAINNET_CHAIN","SOLANA_DEVNET_CHAIN","SOLANA_TESTNET_CHAIN","SOLANA_CHAINS","SOLANA_CHAIN_TO_CAIP2_ID","isSolanaChain","chain","getSolanaCaip2Id","chains","features","_address","_publicKey","_chains","_features","_label","_icon","_ConnectedWalletAccount","publicKey","label","ConnectedWalletAccount","bytesEqual","a","b","arraysEqual","length","i","ConnectionNamespace","_listeners","_version","_connection","_account","_on","_emit","emit_fn","_off","off_fn","_connected","_disconnected","_reconnected","_connect","_disconnect","_signAndSendTransaction","_signTransaction","_signMessage","_StandardWallet","connection","event","listener","__privateMethod","silent","inputs","outputs","transaction","options","minContextSlot","preflightCommitment","skipPreflight","maxRetries","signature","input","signedTransaction","transactions","signedTransactions","message","args","existingListener","StandardWallet","initialize"],"mappings":"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","sourcesContent":["import EventEmitter from 'events';\nimport { NetworkVMType, RpcMethod, type ChainAgnosticProvider } from '@avalabs/vm-module-types';\nimport type { PublicKey, SendOptions } from '@solana/web3.js';\nimport { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\nimport type { Connection } from './window';\nimport { legacyPublicKey } from './public-key';\nimport type { WalletIcon } from '@wallet-standard/base';\n\nenum DAppProviderRequest {\n WALLET_CONNECT = 'wallet_requestAccountPermission',\n}\n\n/**\n * Represents a Solana Wallet Provider that interacts with a chain-agnostic provider\n * to manage wallet connections, transactions, and events.\n *\n * @extends EventEmitter\n * @implements Connection\n */\nexport class SolanaWalletProvider extends EventEmitter implements Connection {\n public publicKey: PublicKey | null = null;\n\n readonly #chainAgnosticProvider: ChainAgnosticProvider;\n readonly #info: { icon: WalletIcon; version: string; name: string };\n\n /**\n * Creates an instance of SolanaWalletProvider.\n *\n * @param chainAgnosticProvider - The chain-agnostic provider used for communication.\n * @param options - Wallet information including icon, version, and name.\n */\n constructor(\n chainAgnosticProvider: ChainAgnosticProvider,\n { icon, version, name }: { icon: WalletIcon; version: string; name: string },\n ) {\n super();\n this.#info = {\n icon,\n name,\n version,\n };\n this.#chainAgnosticProvider = chainAgnosticProvider;\n this.#chainAgnosticProvider.subscribeToMessage(this.#handleBackgroundMessage);\n }\n\n /**\n * Retrieves wallet metadata such as icon, version, and name.\n */\n get info() {\n return this.#info;\n }\n\n /**\n * Connects to the wallet. If already connected, returns the public key.\n *\n * @param options - Connection options.\n * @param options.onlyIfTrusted - If true, connects without approval if previously approved.\n * @returns An object containing the public key.\n */\n async connect({ onlyIfTrusted }: { onlyIfTrusted?: boolean } = {}) {\n if (this.publicKey) {\n return { publicKey: this.publicKey };\n }\n\n const [address] = await this.#chainAgnosticProvider.request<[string]>({\n data: {\n method: DAppProviderRequest.WALLET_CONNECT,\n params: { addressVM: NetworkVMType.SVM, onlyIfTrusted },\n },\n });\n\n this.publicKey = legacyPublicKey(address);\n return { publicKey: this.publicKey };\n }\n\n async disconnect() {\n this.publicKey = null;\n this.emit('disconnect');\n }\n\n /**\n * Signs and sends a transaction.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign and send.\n * @param sendOptions - Options for sending the transaction. See the docs here: https://solana.com/pl/docs/rpc/http/sendtransaction.\n * @returns The transaction signature.\n */\n async signAndSendTransaction(\n account: string,\n caipId: SolanaCaip2ChainId,\n serializedTx: string,\n sendOptions: SendOptions,\n ) {\n const signature = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n sendOptions,\n },\n ],\n },\n });\n\n return signature;\n }\n\n /**\n * Signs a transaction without sending it.\n *\n * @param account - The account to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTx - The serialized transaction to sign.\n * @returns The signed transaction.\n */\n async signTransaction(account: string, caipId: SolanaCaip2ChainId, serializedTx: string) {\n const signedTx = await this.#chainAgnosticProvider.request<string>({\n scope: caipId,\n data: {\n method: RpcMethod.SOLANA_SIGN_TRANSACTION,\n params: [\n {\n account,\n serializedTx,\n },\n ],\n },\n });\n\n return signedTx;\n }\n\n /**\n * Handles account changes by updating the public key and emitting appropriate events.\n * The incoming {accounts} array may include non-Solana accounts, so we filter for the\n * address described with the Solana VM type.\n */\n #accountsChanged = (accounts: { address: string; vm: NetworkVMType }[]) => {\n const address = accounts.find(({ vm }) => vm === NetworkVMType.SVM)?.address;\n\n if (!address) {\n // Account switched to an unknown account\n this.disconnect();\n } else if (this.publicKey) {\n // Account switched to a known account while we're already connected to a different one\n this.publicKey = legacyPublicKey(address);\n this.emit('accountChanged');\n } else {\n // Account switched to a known account while we're not connected\n this.publicKey = legacyPublicKey(address);\n this.emit('connect');\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #getEventHandler = (method: string): ((...params: any[]) => void) => {\n const handlerMap = {\n connect: this.connect,\n disconnect: this.disconnect,\n accountsChangedCA: this.#accountsChanged,\n };\n\n return handlerMap[method as keyof typeof handlerMap] ?? (() => {});\n };\n\n #handleBackgroundMessage = ({ method, params }: { method: string; params: unknown }) => {\n const eventHandler = this.#getEventHandler(method);\n if (eventHandler) {\n return eventHandler(params);\n }\n\n this.emit(method, params);\n };\n\n /**\n * Signs multiple transactions without sending them.\n *\n * @param address - The address to use for signing.\n * @param caipId - The Solana CAIP-2 chain ID.\n * @param serializedTxs - An array of serialized transactions to sign.\n * @returns An array of signed transactions.\n */\n async signAllTransactions(address: string, caipId: SolanaCaip2ChainId, serializedTxs: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const tx of serializedTxs) {\n const signedTx = await this.signTransaction(address, caipId, tx);\n results.push(signedTx);\n }\n\n return results;\n }\n\n async signMessage(account: string, serializedMessage: string): Promise<string> {\n const signature = await this.#chainAgnosticProvider.request<string>({\n scope: SolanaCaip2ChainId.MAINNET, // Solana dApps do not pass it as they do for transactions, so we fake\n data: {\n method: RpcMethod.SOLANA_SIGN_MESSAGE,\n params: [\n {\n account,\n serializedMessage,\n },\n ],\n },\n });\n\n return signature;\n }\n\n signIn() {\n throw new Error('signIn() not implemented.');\n }\n}\n","import { base58 } from '@scure/base';\nimport type { PublicKey } from '@solana/web3.js';\n\n// The wallet adapters expect a PublicKey instance (from @solana/web3.js < 2.0.0),\n// but we're already on v2.1.0.\n// To just straight up satisfy this requirement, we'd have to either use the legacy\n// @solana/web3.js package, which is already deprecated and has its own issues.\n// So here, I'm importing only the PublicKey type from @solana/web3.js < 2.0.0\n// and satisfying its interface with a custom implementation (minus the static\n// methods, which we do not use anyway).\nexport const legacyPublicKey = (address: string): PublicKey => {\n const byteArray = Buffer.from(base58.decode(address));\n\n const publicKey = {\n get [Symbol.toStringTag]() {\n return `PublicKey(${this.toString()})`;\n },\n toBase58: () => address,\n toBuffer: () => byteArray,\n toBytes: () => byteArray,\n toJSON: () => address,\n toString: () => address,\n equals: (otherPubKey: PublicKey) => address === otherPubKey.toBase58(),\n encode: () => byteArray,\n } as const;\n\n return publicKey satisfies PublicKey;\n};\n","// This is based on @wallet-standard/wallet\n\nimport type {\n DEPRECATED_WalletsWindow,\n Wallet,\n WalletEventsWindow,\n WindowRegisterWalletEvent,\n WindowRegisterWalletEventCallback,\n} from '@wallet-standard/base';\n\nexport function registerWallet(wallet: Wallet): void {\n const callback: WindowRegisterWalletEventCallback = ({ register }) => register(wallet);\n try {\n (window as WalletEventsWindow).dispatchEvent(new RegisterWalletEvent(callback));\n } catch (error) {\n console.error('wallet-standard:register-wallet event could not be dispatched\\n', error);\n }\n try {\n (window as WalletEventsWindow).addEventListener('wallet-standard:app-ready', ({ detail: api }) => callback(api));\n } catch (error) {\n console.error('wallet-standard:app-ready event listener could not be added\\n', error);\n }\n}\n\nclass RegisterWalletEvent extends Event implements WindowRegisterWalletEvent {\n readonly #detail: WindowRegisterWalletEventCallback;\n\n get detail() {\n return this.#detail;\n }\n\n override get type() {\n return 'wallet-standard:register-wallet' as const;\n }\n\n constructor(callback: WindowRegisterWalletEventCallback) {\n super('wallet-standard:register-wallet', {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n this.#detail = callback;\n }\n\n /** @deprecated */\n override preventDefault(): never {\n throw new Error('preventDefault cannot be called');\n }\n\n /** @deprecated */\n override stopImmediatePropagation(): never {\n throw new Error('stopImmediatePropagation cannot be called');\n }\n\n /** @deprecated */\n override stopPropagation(): never {\n throw new Error('stopPropagation cannot be called');\n }\n}\n\n/** @deprecated */\nexport function DEPRECATED_registerWallet(wallet: Wallet): void {\n registerWallet(wallet);\n try {\n ((window as DEPRECATED_WalletsWindow).navigator.wallets ||= []).push(({ register }) => register(wallet));\n } catch (error) {\n console.error('window.navigator.wallets could not be pushed\\n', error);\n }\n}\n","import {\n SolanaSignAndSendTransaction,\n type SolanaSignAndSendTransactionFeature,\n type SolanaSignAndSendTransactionMethod,\n type SolanaSignAndSendTransactionOutput,\n SolanaSignMessage,\n type SolanaSignMessageFeature,\n // type SolanaSignInMethod,\n // type SolanaSignInOutput,\n type SolanaSignMessageMethod,\n type SolanaSignMessageOutput,\n SolanaSignTransaction,\n type SolanaSignTransactionFeature,\n type SolanaSignTransactionMethod,\n type SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport type { Wallet } from '@wallet-standard/base';\nimport {\n StandardConnect,\n type StandardConnectFeature,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectFeature,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsFeature,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from '@wallet-standard/features';\nimport { base58, base64 } from '@scure/base';\nimport { ConnectedWalletAccount } from './account';\nimport type { SolanaChain } from './solana';\nimport { getSolanaCaip2Id, isSolanaChain, SOLANA_CHAINS } from './solana';\nimport { bytesEqual } from './util';\nimport type { Connection } from './window';\n\nexport const ConnectionNamespace = 'connection:';\n\nexport type ConnectorFeature = {\n [ConnectionNamespace]: {\n connection: Connection;\n };\n};\n\nexport class StandardWallet implements Wallet {\n readonly #listeners: {\n [E in StandardEventsNames]?: StandardEventsListeners[E][];\n } = {};\n // Version of the Wallet Standard this wallet implements\n readonly #version = '1.0.0' as const;\n\n // Wallet connection\n readonly #connection: Connection;\n\n // Current account the wallet is connected with\n #account: ConnectedWalletAccount | null = null;\n\n /** Wallet Standard version this wallet implements */\n get version() {\n return this.#version;\n }\n\n /** Wallet version (i.e. Core Extension's version) */\n get walletVersion() {\n return this.#connection.info.version;\n }\n\n /** Name of the connected wallet app */\n get name() {\n return this.#connection.info.name;\n }\n\n /** Icon of the connected wallet app */\n get icon() {\n return this.#connection.info.icon;\n }\n\n get chains() {\n return SOLANA_CHAINS.slice();\n }\n\n get features(): StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignTransactionFeature &\n SolanaSignMessageFeature &\n // SolanaSignInFeature &\n ConnectorFeature {\n return {\n [StandardConnect]: {\n version: '1.0.0',\n connect: this.#connect,\n },\n [StandardDisconnect]: {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n [StandardEvents]: {\n version: '1.0.0',\n on: this.#on,\n },\n [SolanaSignAndSendTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n [SolanaSignTransaction]: {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n [SolanaSignMessage]: {\n version: '1.0.0',\n signMessage: this.#signMessage,\n },\n // [SolanaSignIn]: {\n // version: '1.0.0',\n // signIn: this.#signIn,\n // },\n [ConnectionNamespace]: {\n connection: this.#connection,\n },\n };\n }\n\n get accounts() {\n return this.#account ? [this.#account] : [];\n }\n\n constructor(connection: Connection) {\n if (new.target === StandardWallet) {\n Object.freeze(this);\n }\n\n this.#connection = connection;\n\n connection.on('connect', this.#connected, this);\n connection.on('disconnect', this.#disconnected, this);\n connection.on('accountChanged', this.#reconnected, this);\n\n this.#connected();\n }\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event] ??= [];\n this.#listeners[event]?.push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #connected = () => {\n const address = this.#connection.publicKey?.toBase58();\n if (address) {\n const publicKey = this.#connection.publicKey!.toBytes();\n\n const account = this.#account;\n if (!account || account.address !== address || !bytesEqual(account.publicKey, publicKey)) {\n this.#account = new ConnectedWalletAccount({ address, publicKey });\n this.#emit('change', { accounts: this.accounts });\n }\n }\n };\n\n #disconnected = () => {\n if (this.#account) {\n this.#account = null;\n this.#emit('change', { accounts: this.accounts });\n }\n };\n\n #reconnected = () => {\n if (this.#connection.publicKey) {\n this.#connected();\n } else {\n this.#disconnected();\n }\n };\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#account) {\n await this.#connection.connect(silent ? { onlyIfTrusted: true } : undefined);\n }\n\n this.#connected();\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#connection.disconnect();\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignAndSendTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain, options } = inputs[0]!;\n const { minContextSlot, preflightCommitment, skipPreflight, maxRetries } = options || {};\n if (account !== this.#account) throw new Error('invalid account');\n if (!isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signature = await this.#connection.signAndSendTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain),\n base64.encode(transaction),\n {\n preflightCommitment,\n minContextSlot,\n maxRetries,\n skipPreflight,\n },\n );\n\n outputs.push({ signature: base58.decode(signature) });\n } else if (inputs.length > 1) {\n for (const input of inputs) {\n outputs.push(...(await this.#signAndSendTransaction(input)));\n }\n }\n\n return outputs;\n };\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignTransactionOutput[] = [];\n\n if (inputs.length === 1) {\n const { transaction, account, chain } = inputs[0]!;\n if (account !== this.#account) throw new Error('invalid account');\n if (chain && !isSolanaChain(chain)) throw new Error('invalid chain');\n\n const signedTransaction = await this.#connection.signTransaction(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n base64.encode(transaction),\n );\n\n outputs.push({ signedTransaction: base64.decode(signedTransaction) });\n } else if (inputs.length > 1) {\n let chain: SolanaChain | undefined = undefined;\n for (const input of inputs) {\n if (input.account !== this.#account) throw new Error('invalid account');\n if (input.chain) {\n if (!isSolanaChain(input.chain)) throw new Error('invalid chain');\n if (chain) {\n if (input.chain !== chain) throw new Error('conflicting chain');\n } else {\n chain = input.chain;\n }\n }\n }\n\n const transactions = inputs.map(({ transaction }) => base64.encode(transaction));\n\n const signedTransactions = await this.#connection.signAllTransactions(\n this.#account.address,\n getSolanaCaip2Id(chain || SOLANA_CHAINS[0]),\n transactions,\n );\n\n outputs.push(\n ...signedTransactions.map((signedTransaction) => ({\n signedTransaction: base64.decode(signedTransaction),\n })),\n );\n }\n\n return outputs;\n };\n\n #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n if (!this.#account) throw new Error('not connected');\n\n const outputs: SolanaSignMessageOutput[] = [];\n\n if (inputs.length === 1) {\n const { message, account } = inputs[0]!;\n if (account !== this.#account) throw new Error('invalid account');\n const serializedMessage = base64.encode(message);\n\n const signature = await this.#connection.signMessage(account.address, serializedMessage);\n\n outputs.push({ signedMessage: message, signature: base64.decode(signature) });\n } else if (inputs.length > 1) {\n for (const input of inputs) {\n outputs.push(...(await this.#signMessage(input)));\n }\n }\n\n return outputs;\n };\n\n // #signIn: SolanaSignInMethod = async (...inputs) => {\n // const outputs: SolanaSignInOutput[] = [];\n\n // if (inputs.length > 1) {\n // for (const input of inputs) {\n // outputs.push(await this.#connection.signIn(input));\n // }\n // } else {\n // return [await this.#connection.signIn(inputs[0])];\n // }\n\n // return outputs;\n // };\n}\n","// This is based on from @wallet-standard/wallet\n\nimport {\n SolanaSignAndSendTransaction,\n SolanaSignMessage,\n SolanaSignTransaction,\n} from '@solana/wallet-standard-features';\nimport type { WalletAccount } from '@wallet-standard/base';\nimport { SOLANA_CHAINS } from './solana';\n\nconst chains = SOLANA_CHAINS;\nconst features = [SolanaSignAndSendTransaction, SolanaSignTransaction, SolanaSignMessage] as const;\n\nexport class ConnectedWalletAccount implements WalletAccount {\n readonly #address: WalletAccount['address'];\n readonly #publicKey: WalletAccount['publicKey'];\n readonly #chains: WalletAccount['chains'];\n readonly #features: WalletAccount['features'];\n readonly #label: WalletAccount['label'];\n readonly #icon: WalletAccount['icon'];\n\n get address() {\n return this.#address;\n }\n\n get publicKey() {\n return this.#publicKey.slice();\n }\n\n get chains() {\n return this.#chains.slice();\n }\n\n get features() {\n return this.#features.slice();\n }\n\n get label() {\n return this.#label;\n }\n\n get icon() {\n return this.#icon;\n }\n\n constructor({ address, publicKey, label, icon }: Omit<WalletAccount, 'chains' | 'features'>) {\n if (new.target === ConnectedWalletAccount) {\n Object.freeze(this);\n }\n\n this.#address = address;\n this.#publicKey = publicKey;\n this.#chains = chains;\n this.#features = features;\n this.#label = label;\n this.#icon = icon;\n }\n}\n","// This is based on @solana/wallet-standard-chains\n\nimport type { IdentifierString } from '@wallet-standard/base';\nimport type { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport { SolanaCaip2ChainId } from '@avalabs/core-chains-sdk';\n\n/** Solana Mainnet (beta) cluster, e.g. https://api.mainnet-beta.solana.com */\nexport const SOLANA_MAINNET_CHAIN = 'solana:mainnet';\n\n/** Solana Devnet cluster, e.g. https://api.devnet.solana.com */\nexport const SOLANA_DEVNET_CHAIN = 'solana:devnet';\n\n/** Solana Testnet cluster, e.g. https://api.testnet.solana.com */\nexport const SOLANA_TESTNET_CHAIN = 'solana:testnet';\n\n/** Solana Localnet cluster, e.g. http://localhost:8899 */\n// export const SOLANA_LOCALNET_CHAIN = 'solana:localnet';\n\n/** Array of all Solana clusters */\nexport const SOLANA_CHAINS = [\n SOLANA_MAINNET_CHAIN,\n SOLANA_DEVNET_CHAIN,\n SOLANA_TESTNET_CHAIN,\n // SOLANA_LOCALNET_CHAIN,\n] as const;\n\n/** Type of all Solana clusters */\nexport type SolanaChain = (typeof SOLANA_CHAINS)[number];\n\nexport const SOLANA_CHAIN_TO_CAIP2_ID = {\n [SOLANA_MAINNET_CHAIN]: SolanaCaip2ChainId.MAINNET,\n [SOLANA_DEVNET_CHAIN]: SolanaCaip2ChainId.DEVNET,\n [SOLANA_TESTNET_CHAIN]: SolanaCaip2ChainId.TESTNET,\n};\n\n/**\n * Check if a chain corresponds with one of the Solana clusters.\n */\nexport function isSolanaChain(chain: IdentifierString): chain is SolanaChain {\n return SOLANA_CHAINS.includes(chain as SolanaChain);\n}\n\nexport function getSolanaCaip2Id(chain: SolanaChain): SolanaCaip2ChainId {\n return SOLANA_CHAIN_TO_CAIP2_ID[chain];\n}\n\nexport function isVersionedTransaction(\n transaction: Transaction | VersionedTransaction,\n): transaction is VersionedTransaction {\n return 'version' in transaction;\n}\n","// This is copied from @wallet-standard/wallet\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n return arraysEqual(a, b);\n}\n\ninterface Indexed<T> {\n length: number;\n [index: number]: T;\n}\n\nexport function arraysEqual<T>(a: Indexed<T>, b: Indexed<T>): boolean {\n if (a === b) return true;\n\n const length = a.length;\n if (length !== b.length) return false;\n\n for (let i = 0; i < length; i++) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n}\n","import { registerWallet } from './register';\nimport { StandardWallet } from './wallet';\nimport type { Connection } from './window';\n\nexport function initialize(connection: Connection): void {\n registerWallet(new StandardWallet(connection));\n}\n"]}
|
package/manifest.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"permissions": {
|
|
37
37
|
"rpc": {
|
|
38
38
|
"dapps": true,
|
|
39
|
-
"methods": ["solana_signTransaction", "solana_signAndSendTransaction"],
|
|
39
|
+
"methods": ["solana_signTransaction", "solana_signAndSendTransaction", "solana_signMessage"],
|
|
40
40
|
"nonRestrictedMethods": []
|
|
41
41
|
}
|
|
42
42
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avalabs/svm-module",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"main": "dist/index.cjs",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"@avalabs/core-coingecko-sdk": "3.1.0-alpha.44",
|
|
16
16
|
"@avalabs/core-utils-sdk": "3.1.0-alpha.44",
|
|
17
17
|
"@avalabs/core-wallets-sdk": "3.1.0-alpha.44",
|
|
18
|
+
"@blockaid/client": "0.48.0",
|
|
18
19
|
"@metamask/rpc-errors": "6.3.0",
|
|
19
20
|
"@scure/base": "1.2.4",
|
|
20
21
|
"@solana/kit": "2.1.0",
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
"@wallet-standard/base": "1.1.0",
|
|
25
26
|
"@wallet-standard/features": "1.1.0",
|
|
26
27
|
"zod": "3.23.8",
|
|
27
|
-
"@avalabs/vm-module-types": "1.
|
|
28
|
+
"@avalabs/vm-module-types": "1.7.1"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"@solana/web3.js": "1.98.0",
|