@dynamic-labs-sdk/stellar 1.18.0 → 1.19.0
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/addStellarExtension/addStellarExtension.d.ts +9 -0
- package/dist/addStellarExtension/addStellarExtension.d.ts.map +1 -1
- package/dist/index.cjs +34 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +34 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/isStellarWalletAccount/isStellarWalletAccount.d.ts +8 -0
- package/dist/isStellarWalletAccount/isStellarWalletAccount.d.ts.map +1 -1
- package/dist/signTransaction/signTransaction.d.ts +16 -5
- package/dist/signTransaction/signTransaction.d.ts.map +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +4 -4
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","names":["watcher: WatchWalletChanges | undefined","eventCallbacks: Map<\n StellarProviderEvent,\n Set<StellarEventCallback>\n >","signTransaction","signFreighterMessage","isConnected","signTransaction","signLobstrMessage","oneKeyEventMap: Record<StellarProviderEvent, string>","STELLAR_PASSPHRASE_BY_NAME: Record<StellarNetworkName, string>","STELLAR_HORIZON_URL_BY_NAME: Record<StellarNetworkName, string>","connect: StellarWalletProvider['connect']","getActiveNetworkId: StellarWalletProvider['getActiveNetworkId']","getConnectedAddresses: StellarWalletProvider['getConnectedAddresses']","signMessage: StellarWalletProvider['signMessage']","signTransaction: StellarWalletProvider['signTransaction']","destroy: StellarWalletProvider['destroy']","disconnectWalletAccount: StellarWalletProvider['disconnectWalletAccount']","getDefaultClient","packageName","packageVersion"],"sources":["../package.json","../src/errors/NotStellarProviderError/NotStellarProviderError.ts","../src/isStellarWalletAccount/isStellarWalletAccount.ts","../src/errors/FetchStellarBalanceError/FetchStellarBalanceError.ts","../src/utils/fetchStellarBalance/fetchStellarBalance.ts","../src/utils/createStellarNetworkProvider/createStellarNetworkProvider.ts","../src/registerStellarNetworkProviderBuilder/registerStellarNetworkProviderBuilder.ts","../src/injected/utils/createFreighterProvider/createFreighterProvider.ts","../src/injected/utils/createLobstrProvider/createLobstrProvider.ts","../src/errors/NotOneKeyProviderError/NotOneKeyProviderError.ts","../src/utils/normalizeNetworkName/normalizeNetworkName.ts","../src/injected/utils/getOneKeyStellarProvider/getOneKeyStellarProvider.ts","../src/injected/utils/createOneKeyProvider/createOneKeyProvider.ts","../src/utils/constants.ts","../src/utils/getStellarNetworkId/getStellarNetworkId.ts","../src/utils/getNetworkPassphrase/getNetworkPassphrase.ts","../src/isStellarWalletProvider/isStellarWalletProvider.ts","../src/signTransaction/signTransaction.ts","../src/utils/buildPaymentTransaction/buildPaymentTransaction.ts","../src/utils/checkTrustline/checkTrustline.ts","../src/utils/createPaymentAsset/createPaymentAsset.ts","../src/utils/stellarTransferAmount/stellarTransferAmount.ts","../src/injected/utils/createWalletProviderFromStellarProvider/createWalletProviderFromStellarProvider.ts","../src/injected/addStellarInjectedWalletsExtension/addStellarInjectedWalletsExtension.ts","../src/addStellarExtension/addStellarExtension.ts","../src/exports/index.ts"],"sourcesContent":["","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotStellarProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_stellar_provider_error',\n docsUrl: null,\n name: 'NotStellarProviderError',\n shortMessage: 'Provider is not a Stellar wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { StellarWalletAccount } from '../StellarWalletAccount.types';\n\n/**\n * Type guard to check if a wallet account is a Stellar wallet account.\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Stellar wallet account.\n * @notInstrumented\n */\nexport const isStellarWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is StellarWalletAccount => {\n return walletAccount.chain === 'STELLAR';\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class FetchStellarBalanceError extends BaseError {\n public readonly address: string;\n\n constructor(params: { address: string; cause?: Error | null }) {\n super({\n cause: params.cause ?? null,\n code: 'fetch_stellar_balance_error',\n docsUrl: null,\n name: 'FetchStellarBalanceError',\n shortMessage: `Failed to fetch Stellar balance for address ${params.address}`,\n });\n\n this.address = params.address;\n }\n}\n","import { Horizon } from '@stellar/stellar-sdk';\nimport type { NetworkData } from '@dynamic-labs-sdk/client';\n\nimport { FetchStellarBalanceError } from '../../errors/FetchStellarBalanceError';\n\ntype FetchStellarBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/**\n * Fetches the native XLM balance for an address from Horizon.\n * Returns '0' when the account has no native balance, and throws a\n * FetchStellarBalanceError when the balance cannot be retrieved.\n *\n * @param address - The Stellar public key.\n * @param networkData - Network data carrying the Horizon RPC URL.\n * @notInstrumented\n */\nexport const fetchStellarBalance = async ({\n address,\n networkData,\n}: FetchStellarBalanceParams): Promise<string> => {\n const server = new Horizon.Server(networkData.rpcUrls.http[0]);\n\n try {\n const account = await server.loadAccount(address);\n\n const nativeBalance = account.balances.find(\n (balance) => balance.asset_type === 'native'\n );\n\n if (!nativeBalance || !('balance' in nativeBalance)) {\n return '0';\n }\n\n // Horizon API returns balance already in XLM (human-readable format)\n return Number(nativeBalance.balance).toString();\n } catch (error) {\n throw new FetchStellarBalanceError({\n address,\n cause: error instanceof Error ? error : null,\n });\n }\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { StellarNetworkProvider } from '../../StellarNetworkProvider.types';\nimport { fetchStellarBalance } from '../fetchStellarBalance';\n\n/**\n * Creates a Stellar network provider from network data.\n *\n * @param networkData - The network data for the Stellar network.\n * @notInstrumented\n */\nexport const createStellarNetworkProvider = (\n networkData: NetworkData\n): StellarNetworkProvider => ({\n ...createBaseNetworkProvider('STELLAR', networkData),\n cluster: networkData.cluster,\n getBalance: async ({ address }) => ({\n balance: await fetchStellarBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createStellarNetworkProvider } from '../utils/createStellarNetworkProvider';\n\n/**\n * Registers the Stellar network provider builder on the client (idempotent).\n *\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const registerStellarNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Stellar network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('STELLAR')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createStellarNetworkProvider,\n chain: 'STELLAR',\n });\n};\n","import {\n WatchWalletChanges,\n getNetwork,\n isConnected,\n requestAccess,\n // Aliased so the call site is not a bare `signMessage(...)`, which the\n // custom-rules/require-client-param lint rule would mistake for the\n // Dynamic `signMessage` that defaults its client parameter.\n signMessage as signFreighterMessage,\n signTransaction,\n} from '@stellar/freighter-api';\n\nimport type {\n IStellarProvider,\n StellarEventCallback,\n StellarProviderEvent,\n} from '../../../StellarProvider.types';\n\n/**\n * Freighter Wallet provider adapter that implements IStellarProvider\n * using the Freighter API.\n *\n * @notInstrumented\n */\nexport const createFreighterProvider = (): IStellarProvider => {\n let watcher: WatchWalletChanges | undefined;\n const eventCallbacks: Map<\n StellarProviderEvent,\n Set<StellarEventCallback>\n > = new Map();\n let isWatcherStarted = false;\n\n const startWatcher = () => {\n if (isWatcherStarted) {\n return;\n }\n\n if (!watcher) {\n watcher = new WatchWalletChanges();\n }\n\n watcher.watch((params) => {\n const accountChangedCallbacks = eventCallbacks.get('accountChanged');\n const networkChangedCallbacks = eventCallbacks.get('networkChanged');\n\n if (accountChangedCallbacks && params.address !== undefined) {\n accountChangedCallbacks.forEach((callback) => {\n callback(params.address);\n });\n }\n\n if (networkChangedCallbacks && params.network !== undefined) {\n networkChangedCallbacks.forEach((callback) => {\n callback(params.network);\n });\n }\n });\n\n isWatcherStarted = true;\n };\n\n return {\n close: () => {\n watcher?.stop();\n // Drop the stopped instance so a later re-subscription creates a fresh\n // watcher. Calling watch() on a stopped WatchWalletChanges silently\n // delivers no events, which would break event delivery after close().\n watcher = undefined;\n eventCallbacks.clear();\n isWatcherStarted = false;\n },\n\n connect: async () => {\n const response = await requestAccess();\n return response.address ?? '';\n },\n\n disconnect: async () => undefined,\n\n getNetwork: async () => {\n const response = await getNetwork();\n return response.network ?? 'PUBLIC';\n },\n\n isUnlocked: async () => {\n const response = await isConnected();\n return response.isConnected ?? false;\n },\n\n on: ({ event, callback }) => {\n if (!eventCallbacks.has(event)) {\n eventCallbacks.set(event, new Set());\n }\n\n eventCallbacks.get(event)!.add(callback);\n\n startWatcher();\n },\n\n sign: async ({ transactionXdr, options }) => {\n const response = await signTransaction(transactionXdr, {\n networkPassphrase: options?.networkPassphrase,\n });\n return response.signedTxXdr ?? '';\n },\n\n signMessage: async ({ message }) => {\n const response = await signFreighterMessage(message);\n return String(response.signedMessage ?? '');\n },\n };\n};\n","import {\n getPublicKey,\n isConnected,\n // Aliased so the call site is not a bare `signMessage(...)`, which the\n // custom-rules/require-client-param lint rule would mistake for the\n // Dynamic `signMessage` that defaults its client parameter.\n signMessage as signLobstrMessage,\n signTransaction,\n} from '@lobstrco/signer-extension-api';\n\nimport type { IStellarProvider } from '../../../StellarProvider.types';\n\n/**\n * Lobstr Wallet provider adapter that implements IStellarProvider\n * using the Lobstr signer extension API.\n *\n * @notInstrumented\n */\n// Lobstr's SDK has no close/disconnect/on; those IStellarProvider methods are\n// optional, so they are intentionally omitted here.\nexport const createLobstrProvider = (): IStellarProvider => ({\n connect: async () => {\n const publicKey = await getPublicKey();\n // Guard the IStellarProvider `Promise<string>` contract in case the API\n // ever resolves without a key (mirrors the Freighter adapter).\n return publicKey ?? '';\n },\n\n // Lobstr uses mainnet by default\n getNetwork: async () => 'PUBLIC',\n\n isUnlocked: async () => isConnected(),\n\n sign: async ({ transactionXdr }) => {\n const signedXdr = await signTransaction(transactionXdr);\n return signedXdr;\n },\n\n signMessage: async ({ message }) => {\n const response = await signLobstrMessage(message);\n return response?.signedMessage ?? '';\n },\n});\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotOneKeyProviderError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'not_onekey_provider_error',\n docsUrl: null,\n name: 'NotOneKeyProviderError',\n shortMessage: 'OneKey Stellar provider not found',\n });\n }\n}\n","import type { StellarNetworkName } from '../../StellarProvider.types';\n\ntype NormalizeNetworkNameParams = {\n network: string;\n};\n\n/**\n * Normalize network name to standard format\n *\n * @param network - Raw network name from wallet\n * @returns Normalized network name (PUBLIC, TESTNET, or FUTURENET)\n *\n * @example\n * ```typescript\n * normalizeNetworkName({ network: 'mainnet' }) // 'PUBLIC'\n * normalizeNetworkName({ network: 'testnet' }) // 'TESTNET'\n * normalizeNetworkName({ network: 'Test SDF Network ; September 2015' }) // 'TESTNET'\n * ```\n * @notInstrumented\n */\nexport const normalizeNetworkName = ({\n network,\n}: NormalizeNetworkNameParams): StellarNetworkName => {\n const networkUpper = network.toUpperCase();\n\n // Check FUTURENET first - handles both 'FUTURENET' and Stellar passphrase\n // 'Test SDF Future Network ; October 2022'\n if (networkUpper.includes('FUTURENET') || networkUpper.includes('FUTURE')) {\n return 'FUTURENET';\n }\n\n // Handles both 'TESTNET' and Stellar passphrase 'Test SDF Network ; September 2015'\n if (networkUpper.includes('TESTNET') || networkUpper.includes('TEST SDF')) {\n return 'TESTNET';\n }\n\n if (networkUpper.includes('PUBLIC') || networkUpper.includes('MAINNET')) {\n return 'PUBLIC';\n }\n\n // Default to PUBLIC if unknown\n return 'PUBLIC';\n};\n","/**\n * OneKey Stellar provider interface based on the actual OneKey API\n */\nexport type OneKeyStellarProvider = {\n disconnect: () => void;\n getAddress: () => Promise<{ address: string; network: string }>;\n getNetwork: () => Promise<string>;\n on: (event: string, callback: (...args: unknown[]) => void) => void;\n removeListener: (\n event: string,\n callback: (...args: unknown[]) => void,\n ) => void;\n signAuthEntry?: (\n entry: string,\n options?: { network?: string; networkPassphrase?: string },\n ) => Promise<string>;\n signMessage: (message: string) => Promise<{ signedMessage: string }>;\n signTransaction: (\n transactionXdr: string,\n options?: { network?: string; networkPassphrase?: string },\n ) => Promise<string>;\n};\n\n/**\n * Methods the injected OneKey Stellar object must expose to be trusted.\n * `signAuthEntry` is intentionally excluded because it is optional.\n */\nconst REQUIRED_ONEKEY_METHODS = [\n 'disconnect',\n 'getAddress',\n 'getNetwork',\n 'on',\n 'removeListener',\n 'signMessage',\n 'signTransaction',\n] as const;\n\n/**\n * Gets the OneKey Stellar provider from the window object.\n *\n * The injected `$onekey.stellar` object comes from an untrusted browser global\n * (any extension or script could inject a fake one), so its shape is validated\n * before use: every required method must be a function. Anything that does not\n * conform is rejected rather than trusted.\n *\n * @returns The OneKey Stellar provider, or undefined if it is unavailable or malformed.\n * @notInstrumented\n */\nexport const getOneKeyStellarProvider = ():\n | OneKeyStellarProvider\n | undefined => {\n if (typeof globalThis.window === 'undefined') {\n return undefined;\n }\n\n const stellar = (\n globalThis.window as unknown as {\n $onekey?: { stellar?: Record<string, unknown> };\n }\n ).$onekey?.stellar;\n\n if (!stellar) {\n return undefined;\n }\n\n const conformsToInterface = REQUIRED_ONEKEY_METHODS.every(\n (method) => typeof stellar[method] === 'function'\n );\n\n if (!conformsToInterface) {\n return undefined;\n }\n\n return stellar as unknown as OneKeyStellarProvider;\n};\n","import type {\n IStellarProvider,\n StellarEventCallback,\n StellarProviderEvent,\n} from '../../../StellarProvider.types';\nimport { NotOneKeyProviderError } from '../../../errors/NotOneKeyProviderError';\nimport { normalizeNetworkName } from '../../../utils/normalizeNetworkName';\nimport { getOneKeyStellarProvider } from '../getOneKeyStellarProvider';\n\n/**\n * OneKey Wallet provider adapter that implements IStellarProvider\n * using the OneKey Stellar API.\n *\n * @notInstrumented\n */\nexport const createOneKeyProvider = (): IStellarProvider => {\n const oneKeyProvider = getOneKeyStellarProvider();\n\n if (!oneKeyProvider) {\n throw new NotOneKeyProviderError();\n }\n\n const eventListeners = new Map<\n StellarProviderEvent,\n Set<StellarEventCallback>\n >();\n // Keyed by event then callback so the same callback registered for multiple\n // events maps to a distinct wrapped callback. Keying by callback alone would\n // let one registration overwrite the other and leak the listener.\n const wrappedCallbacks = new Map<\n StellarProviderEvent,\n Map<StellarEventCallback, (...args: unknown[]) => void>\n >();\n\n // Maps Stellar provider events to their OneKey equivalents. Declared once so\n // subscription and teardown resolve the same OneKey event name.\n const oneKeyEventMap: Record<StellarProviderEvent, string> = {\n accountChanged: 'accountChanged',\n networkChanged: 'networkChanged',\n };\n\n return {\n close: () => {\n // Remove all event listeners using the wrapped callbacks\n eventListeners.forEach((callbacks, event) => {\n const oneKeyEvent = oneKeyEventMap[event];\n\n callbacks.forEach((callback) => {\n const wrappedCallback = wrappedCallbacks.get(event)?.get(callback);\n if (wrappedCallback) {\n oneKeyProvider.removeListener(oneKeyEvent, wrappedCallback);\n }\n });\n });\n eventListeners.clear();\n wrappedCallbacks.clear();\n },\n\n connect: async () => {\n const response = await oneKeyProvider.getAddress();\n return response?.address ?? '';\n },\n\n disconnect: async () => {\n oneKeyProvider.disconnect();\n },\n\n getNetwork: async () => {\n const network = await oneKeyProvider.getNetwork();\n // Delegate to the shared normalizer so OneKey's mapping stays consistent\n // with the rest of the pipeline (and gets passphrase handling for free).\n return normalizeNetworkName({ network });\n },\n\n isUnlocked: async () => {\n try {\n // Try to get address to check if wallet is unlocked\n await oneKeyProvider.getAddress();\n return true;\n } catch {\n return false;\n }\n },\n\n on: ({ event, callback }) => {\n if (!eventListeners.has(event)) {\n eventListeners.set(event, new Set());\n }\n\n const callbacks = eventListeners.get(event);\n // Ignore duplicate (event, callback) subscriptions. Registering a second\n // wrapped listener would leak the first on close(), since only the latest\n // wrapped callback is tracked per (event, callback).\n if (callbacks?.has(callback)) {\n return;\n }\n callbacks?.add(callback);\n\n const oneKeyEvent = oneKeyEventMap[event];\n\n const wrappedCallback = (...args: unknown[]) => {\n // Both supported events deliver the changed value (address or network)\n // as the first argument, so they are forwarded identically.\n callback(args[0] as string);\n };\n\n if (!wrappedCallbacks.has(event)) {\n wrappedCallbacks.set(event, new Map());\n }\n wrappedCallbacks.get(event)?.set(callback, wrappedCallback);\n oneKeyProvider.on(oneKeyEvent, wrappedCallback);\n },\n\n sign: async ({ transactionXdr, options }) => {\n const signedXdr = await oneKeyProvider.signTransaction(transactionXdr, {\n network: options?.network,\n networkPassphrase: options?.networkPassphrase,\n });\n return signedXdr ?? '';\n },\n\n signMessage: async ({ message }) => {\n const signature = await oneKeyProvider.signMessage(message);\n return String(signature?.signedMessage ?? '');\n },\n };\n};\n","import type { StellarNetworkName } from '../StellarProvider.types';\n\n/**\n * Stellar network passphrase for mainnet\n */\nexport const STELLAR_PUBLIC_NETWORK_PASSPHRASE =\n 'Public Global Stellar Network ; September 2015';\n\n/**\n * Stellar network passphrase for testnet\n */\nexport const STELLAR_TESTNET_NETWORK_PASSPHRASE =\n 'Test SDF Network ; September 2015';\n\n/**\n * Stellar network passphrase for futurenet\n */\nexport const STELLAR_FUTURENET_NETWORK_PASSPHRASE =\n 'Test SDF Future Network ; October 2022';\n\n/**\n * Number of stroops per XLM (1 XLM = 10,000,000 stroops)\n */\nexport const STROOPS_PER_XLM = 1e7;\n\n/**\n * Network passphrase keyed by Stellar network name. The SDK's network\n * identifier (chain ID) is the SHA-256 hash of these passphrases.\n */\nexport const STELLAR_PASSPHRASE_BY_NAME: Record<StellarNetworkName, string> = {\n FUTURENET: STELLAR_FUTURENET_NETWORK_PASSPHRASE,\n PUBLIC: STELLAR_PUBLIC_NETWORK_PASSPHRASE,\n TESTNET: STELLAR_TESTNET_NETWORK_PASSPHRASE,\n};\n\n/**\n * Public Horizon server URL keyed by Stellar network name. Transaction\n * submission must target a write-capable Horizon server (not an arbitrary RPC\n * URL, which returns 405 on POST /transactions).\n */\nexport const STELLAR_HORIZON_URL_BY_NAME: Record<StellarNetworkName, string> = {\n FUTURENET: 'https://horizon-futurenet.stellar.org',\n PUBLIC: 'https://horizon.stellar.org',\n TESTNET: 'https://horizon-testnet.stellar.org',\n};\n","import { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport { hash } from '@stellar/stellar-sdk';\n\nimport { STELLAR_PASSPHRASE_BY_NAME } from '../constants';\nimport { normalizeNetworkName } from '../normalizeNetworkName';\n\ntype GetStellarNetworkIdParams = {\n network: string;\n};\n\n/**\n * Maps a wallet-reported Stellar network (name or passphrase) to its Dynamic\n * network identifier: the hex-encoded SHA-256 hash of the network passphrase\n * (Stellar's canonical Network ID), which is how the backend identifies the\n * network.\n *\n * @param network - Raw network value reported by the wallet.\n * @returns The hex SHA-256 hash of the network passphrase.\n *\n * @example\n * ```typescript\n * // pubnet -> 7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a979\n * getStellarNetworkId({ network: 'PUBLIC' });\n * ```\n * @notInstrumented\n */\nexport const getStellarNetworkId = ({\n network,\n}: GetStellarNetworkIdParams): string => {\n const passphrase =\n STELLAR_PASSPHRASE_BY_NAME[normalizeNetworkName({ network })];\n\n return hash(getBuffer().from(passphrase)).toString('hex');\n};\n","import {\n STELLAR_PASSPHRASE_BY_NAME,\n STELLAR_PUBLIC_NETWORK_PASSPHRASE,\n} from '../constants';\nimport { getStellarNetworkId } from '../getStellarNetworkId';\n\n/**\n * Gets the network passphrase for a given Dynamic Stellar network id (the\n * SHA-256 hash of a network passphrase). Defaults to the public network when\n * the id is unknown.\n *\n * @param networkId - The network id (hex SHA-256 hash of the passphrase).\n * @returns The matching network passphrase.\n * @notInstrumented\n */\nexport const getNetworkPassphrase = ({\n networkId,\n}: {\n networkId: string | undefined;\n}): string =>\n Object.values(STELLAR_PASSPHRASE_BY_NAME).find(\n (passphrase) => getStellarNetworkId({ network: passphrase }) === networkId\n ) ?? STELLAR_PUBLIC_NETWORK_PASSPHRASE;\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { StellarWalletProvider } from '../StellarWalletProvider.types';\n\n/**\n * Type guard to check if a wallet provider is a Stellar wallet provider.\n *\n * @param provider - The wallet provider to check.\n * @returns True if the wallet provider is a Stellar wallet provider.\n * @notInstrumented\n */\nexport const isStellarWalletProvider = (\n provider: WalletProvider\n): provider is StellarWalletProvider => {\n return provider.chain === 'STELLAR';\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport type { StellarWalletAccount } from '../StellarWalletAccount.types';\nimport { NotStellarProviderError } from '../errors/NotStellarProviderError';\nimport { isStellarWalletProvider } from '../isStellarWalletProvider';\n\ntype SignTransactionParams = {\n transactionXdr: string;\n walletAccount: StellarWalletAccount;\n};\n\n/**\n * Signs a Stellar transaction\n * @param params.transactionXdr - The transaction XDR to sign\n * @param params.walletAccount - The wallet account to sign the transaction with\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n *\n * @returns An object containing the signed XDR\n * @notInstrumented\n */\nexport const signTransaction = async (\n { transactionXdr, walletAccount }: SignTransactionParams,\n client = getDefaultClient()\n): Promise<{ signedXdr: string }> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isStellarWalletProvider(provider)) {\n throw new NotStellarProviderError({ providerKey: provider.key });\n }\n\n return provider.signTransaction({ transactionXdr, walletAccount });\n};\n","import {\n type Asset,\n BASE_FEE,\n type Horizon,\n Operation,\n type Transaction,\n TransactionBuilder,\n} from '@stellar/stellar-sdk';\n\nconst DEFAULT_TIMEOUT_SECONDS = 180;\n\ntype BuildPaymentTransactionParams = {\n amount: string;\n asset: Asset;\n networkPassphrase: string;\n recipient: string;\n sourceAccount: Horizon.AccountResponse;\n};\n\n/**\n * Builds a Stellar payment transaction sending `amount` of `asset` from the\n * source account to the recipient.\n *\n * @param amount - Amount to send, as a decimal string in the asset's units.\n * @param asset - The asset to send (native or custom).\n * @param networkPassphrase - The network passphrase to sign against.\n * @param recipient - The destination account address.\n * @param sourceAccount - The sender's account loaded from Horizon.\n * @notInstrumented\n */\nexport const buildPaymentTransaction = ({\n amount,\n asset,\n networkPassphrase,\n recipient,\n sourceAccount,\n}: BuildPaymentTransactionParams): Transaction =>\n new TransactionBuilder(sourceAccount, {\n fee: BASE_FEE,\n networkPassphrase,\n })\n .addOperation(\n Operation.payment({\n amount,\n asset,\n destination: recipient,\n })\n )\n .setTimeout(DEFAULT_TIMEOUT_SECONDS)\n .build();\n","import type { Asset, Horizon } from '@stellar/stellar-sdk';\n\ntype CheckTrustlineParams = {\n account: Horizon.AccountResponse;\n asset: Asset;\n};\n\n/**\n * Returns whether an account can receive the given asset. The native asset\n * (XLM) never needs a trustline; non-native assets require a matching\n * credit balance (trustline) on the account.\n *\n * @param account - The destination account loaded from Horizon.\n * @param asset - The asset being sent.\n * @notInstrumented\n */\nexport const checkTrustline = ({\n account,\n asset,\n}: CheckTrustlineParams): boolean => {\n if (asset.isNative()) {\n return true;\n }\n\n const assetCode = asset.getCode();\n const assetIssuer = asset.getIssuer();\n\n return account.balances.some(\n (balance) =>\n (balance.asset_type === 'credit_alphanum4' ||\n balance.asset_type === 'credit_alphanum12') &&\n balance.asset_code === assetCode &&\n balance.asset_issuer === assetIssuer\n );\n};\n","import { Asset } from '@stellar/stellar-sdk';\n\ntype CreatePaymentAssetParams = {\n code: string;\n issuer: string;\n};\n\n/**\n * Creates a Stellar Asset for a payment operation. Returns the native asset\n * (XLM) when no code/issuer is provided, otherwise a custom asset.\n *\n * @param asset - Optional `{ code, issuer }` for a non-native asset.\n * @notInstrumented\n */\nexport const createPaymentAsset = (asset?: CreatePaymentAssetParams): Asset =>\n asset ? new Asset(asset.code, asset.issuer) : Asset.native();\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n assertDefined,\n} from '@dynamic-labs-sdk/client/core';\nimport { Horizon, TransactionBuilder } from '@stellar/stellar-sdk';\n\nimport { isStellarWalletAccount } from '../../isStellarWalletAccount';\nimport { signTransaction } from '../../signTransaction';\nimport { buildPaymentTransaction } from '../buildPaymentTransaction';\nimport { checkTrustline } from '../checkTrustline';\nimport { STELLAR_HORIZON_URL_BY_NAME } from '../constants';\nimport { createPaymentAsset } from '../createPaymentAsset';\nimport { getNetworkPassphrase } from '../getNetworkPassphrase';\nimport { normalizeNetworkName } from '../normalizeNetworkName';\n\n/**\n * Transfers native XLM or a custom Stellar asset from a wallet account.\n *\n * A custom asset is identified by `token.address` in the form `CODE:ISSUER`\n * (or `CODE-ISSUER`). Amounts are decimal strings in the asset's display\n * units. The destination account must exist, and for non-native assets it must\n * already hold a trustline for the asset.\n *\n * @param amount - Amount to send, as a decimal string (e.g. \"1.5\").\n * @param recipient - Destination Stellar account address.\n * @param token - Optional non-native asset (`address: \"CODE:ISSUER\"`).\n * @param walletAccount - The Stellar wallet account to send from.\n * @param client - The Dynamic client instance.\n * @returns The submitted transaction hash.\n * @notInstrumented\n */\nexport const stellarTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isStellarWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Stellar wallet account'\n );\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n assertDefined(networkData, 'No active network data found');\n\n const networkPassphrase = getNetworkPassphrase({\n networkId: networkData.networkId,\n });\n // Submission must target a write-capable Horizon server (mirrors\n // dynamic-auth's getHorizonServer); the network's rpcUrls are not guaranteed\n // to accept POST /transactions and return 405.\n const horizonUrl =\n STELLAR_HORIZON_URL_BY_NAME[\n normalizeNetworkName({ network: networkPassphrase })\n ];\n const server = new Horizon.Server(horizonUrl);\n\n let asset;\n if (token?.address) {\n const [code, issuer] = token.address.split(/[:-]/);\n if (!code || !issuer) {\n throw new InvalidParamError(\n 'Invalid token address. Expected \"CODE:ISSUER\" (e.g. \"USDC:GA5Z...\").'\n );\n }\n asset = createPaymentAsset({ code, issuer });\n } else {\n asset = createPaymentAsset();\n }\n\n const sourceAccount = await server.loadAccount(walletAccount.address);\n\n let destinationAccount;\n try {\n destinationAccount = await server.loadAccount(recipient);\n } catch {\n throw new InvalidParamError(\n `Destination account ${recipient} does not exist or is not funded.`\n );\n }\n\n if (\n !asset.isNative() &&\n !checkTrustline({ account: destinationAccount, asset })\n ) {\n throw new InvalidParamError(\n `Destination ${recipient} has no trustline for ${asset.getCode()}:${asset.getIssuer()}.`\n );\n }\n\n const transaction = buildPaymentTransaction({\n amount,\n asset,\n networkPassphrase,\n recipient,\n sourceAccount,\n });\n\n const { signedXdr } = await signTransaction(\n { transactionXdr: transaction.toXDR(), walletAccount },\n client\n );\n\n const signedTransaction = TransactionBuilder.fromXDR(\n signedXdr,\n networkPassphrase\n );\n const response = await server.submitTransaction(signedTransaction);\n\n return { transactionHash: response.hash };\n};\n","import {\n type DynamicClient,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type { IStellarProvider } from '../../../StellarProvider.types';\nimport type { StellarWalletProvider } from '../../../StellarWalletProvider.types';\nimport { getNetworkPassphrase } from '../../../utils/getNetworkPassphrase';\nimport { getStellarNetworkId } from '../../../utils/getStellarNetworkId';\nimport { stellarTransferAmount } from '../../../utils/stellarTransferAmount';\n\ntype CreateWalletProviderFromStellarProviderParams = {\n dynamicClient: DynamicClient;\n stellarProvider: IStellarProvider;\n walletInfo: {\n displayName: string;\n icon: string;\n key: string;\n };\n};\n\n/**\n * Builds a Stellar wallet provider from an injected Stellar provider adapter.\n *\n * @param dynamicClient - The Dynamic client instance.\n * @param stellarProvider - The injected Stellar provider adapter.\n * @param walletInfo - Display metadata for the wallet (name, icon, key).\n * @notInstrumented\n */\nexport const createWalletProviderFromStellarProvider = ({\n dynamicClient,\n stellarProvider,\n walletInfo,\n}: CreateWalletProviderFromStellarProviderParams): StellarWalletProvider => {\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'STELLAR',\n displayName: walletInfo.displayName,\n walletProviderType,\n });\n\n const connect: StellarWalletProvider['connect'] = async () => {\n const address = await stellarProvider.connect();\n\n return {\n addresses: [{ address }],\n };\n };\n\n const getActiveNetworkId: StellarWalletProvider['getActiveNetworkId'] =\n async () => {\n const network = await stellarProvider.getNetwork();\n\n return {\n networkId: getStellarNetworkId({ network }),\n };\n };\n\n const getConnectedAddresses: StellarWalletProvider['getConnectedAddresses'] =\n async () => {\n const address = await stellarProvider.connect();\n\n return {\n addresses: [address],\n };\n };\n\n const signMessage: StellarWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signature = await stellarProvider.signMessage({ message });\n\n return { signature };\n };\n\n const signTransaction: StellarWalletProvider['signTransaction'] = async ({\n transactionXdr,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const { networkData } = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n\n assertDefined(networkData, 'No active network data found');\n\n const networkPassphrase = getNetworkPassphrase({\n networkId: networkData.networkId,\n });\n\n const signedXdr = await stellarProvider.sign({\n options: { networkPassphrase },\n transactionXdr,\n });\n\n return { signedXdr };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<{\n removeAccountChangeListener: VoidFunction;\n removeNetworkChangeListener: VoidFunction;\n }>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue.removeNetworkChangeListener();\n setupReturnValue.removeAccountChangeListener();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleNetworkChanged,\n }) => {\n const onAccountsChanged = (address: unknown) => {\n if (typeof address === 'string') {\n handleAccountsChanged({\n addresses: [address],\n });\n }\n };\n stellarProvider.on?.({\n callback: onAccountsChanged,\n event: 'accountChanged',\n });\n // IStellarProvider exposes no per-listener `off`, so individual\n // listeners cannot be removed. All listeners are torn down once via\n // `close()` in `destroy`, so this remover is intentionally a no-op.\n const removeAccountChangeListener = () => {};\n\n const onNetworkChanged = (network: unknown) => {\n if (typeof network === 'string') {\n handleNetworkChanged({\n networkId: getStellarNetworkId({ network }),\n });\n }\n };\n stellarProvider.on?.({\n callback: onNetworkChanged,\n event: 'networkChanged',\n });\n // See removeAccountChangeListener: no per-listener `off` exists, so\n // this is a no-op; `close()` in `destroy` removes all listeners once.\n const removeNetworkChangeListener = () => {};\n\n return {\n removeAccountChangeListener,\n removeNetworkChangeListener,\n };\n },\n\n supportedEvents: ['accountsChanged', 'networkChanged'],\n });\n\n const destroy: StellarWalletProvider['destroy'] = async () => {\n cleanupEventEmitter();\n stellarProvider.close?.();\n };\n\n const disconnectWalletAccount: StellarWalletProvider['disconnectWalletAccount'] =\n async () => {\n await stellarProvider.disconnect?.();\n };\n\n const walletProvider: StellarWalletProvider = {\n chain: 'STELLAR',\n connect,\n destroy,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(walletInfo.displayName),\n key,\n metadata: {\n displayName: walletInfo.displayName,\n icon: walletInfo.icon,\n },\n signMessage,\n signTransaction,\n transferAmount: (args) => stellarTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getCore,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport { isConnected as isFreighterConnected } from '@stellar/freighter-api';\nimport { isConnected as isLobstrConnected } from '@lobstrco/signer-extension-api';\n\nimport { registerStellarNetworkProviderBuilder } from '../../registerStellarNetworkProviderBuilder';\nimport { createFreighterProvider } from '../utils/createFreighterProvider';\nimport { createLobstrProvider } from '../utils/createLobstrProvider';\nimport { createOneKeyProvider } from '../utils/createOneKeyProvider';\nimport { createWalletProviderFromStellarProvider } from '../utils/createWalletProviderFromStellarProvider';\nimport { getOneKeyStellarProvider } from '../utils/getOneKeyStellarProvider';\n\nexport const STELLAR_INJECTED_WALLETS_EXTENSION_KEY = 'stellarInjectedWallets';\n\n/**\n * Adds the Stellar Injected Wallets extension to the Dynamic client.\n *\n * This extension enables integration with Stellar wallets, including Freighter, Lobstr, and OneKey.\n *\n * Internal: consumers should call `addStellarExtension`, which supplies the\n * client. The client is required here (no `getDefaultClient()` default) per the\n * internal-function client-param rule.\n *\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const addStellarInjectedWalletsExtension = (\n client: DynamicClient\n): void => {\n if (\n hasExtension(\n { extensionKey: STELLAR_INJECTED_WALLETS_EXTENSION_KEY },\n client\n )\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: STELLAR_INJECTED_WALLETS_EXTENSION_KEY },\n client\n );\n\n registerStellarNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n // Detect and register Freighter wallet\n isFreighterConnected()\n .then((response) => {\n if (response.isConnected) {\n try {\n const freighterProvider = createFreighterProvider();\n const walletProvider = createWalletProviderFromStellarProvider({\n dynamicClient: client,\n stellarProvider: freighterProvider,\n walletInfo: {\n displayName: 'Freighter',\n icon: 'https://stellar.creit.tech/wallet-icons/freighter.png',\n key: 'freighter',\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n } catch (error) {\n getCore(client).logger.error('Error creating Freighter provider', error);\n }\n }\n })\n .catch((error) => {\n getCore(client).logger.error('Error checking Freighter connection', error);\n });\n\n // Detect and register Lobstr wallet. Lobstr's isConnected() reports whether\n // the wallet is *connected* (not merely installed) and rejects when the\n // extension is absent. Registration is therefore gated on the call resolving\n // rather than on its boolean, so an installed-but-not-yet-connected Lobstr\n // still appears in the wallet list.\n isLobstrConnected()\n .then(() => {\n try {\n const lobstrProvider = createLobstrProvider();\n const walletProvider = createWalletProviderFromStellarProvider({\n dynamicClient: client,\n stellarProvider: lobstrProvider,\n walletInfo: {\n displayName: 'Lobstr',\n icon: 'https://stellar.creit.tech/wallet-icons/lobstr.svg',\n key: 'lobstr',\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n } catch (error) {\n getCore(client).logger.error('Error creating Lobstr provider', error);\n }\n })\n .catch((error) => {\n getCore(client).logger.error('Error checking Lobstr connection', error);\n });\n\n // Detect and register OneKey wallet. getOneKeyStellarProvider encapsulates\n // the untrusted-window access and validates the injected provider's shape,\n // returning undefined when OneKey is absent or malformed.\n Promise.resolve()\n .then(() => {\n if (getOneKeyStellarProvider()) {\n try {\n const oneKeyProvider = createOneKeyProvider();\n const walletProvider = createWalletProviderFromStellarProvider({\n dynamicClient: client,\n stellarProvider: oneKeyProvider,\n walletInfo: {\n displayName: 'OneKey',\n icon: 'https://uni.onekey-asset.com/static/logo/onekey.png',\n key: 'onekey',\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n } catch (error) {\n getCore(client).logger.error('Error creating OneKey provider', error);\n }\n }\n })\n .catch((error) => {\n getCore(client).logger.error('Error checking OneKey connection', error);\n });\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client/core';\n\nimport { addStellarInjectedWalletsExtension } from '../injected/addStellarInjectedWalletsExtension';\n\n/**\n * Adds the Stellar extension to the Dynamic client.\n *\n * This is a convenience function that adds support for Stellar wallets,\n * including Freighter, Lobstr, and OneKey.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @notInstrumented\n */\nexport const addStellarExtension = (client = getDefaultClient()): void => {\n addStellarInjectedWalletsExtension(client);\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport type {\n IStellarProvider,\n StellarProviderEvent,\n StellarEventCallback,\n StellarSignTransactionOptions,\n StellarNetworkName,\n} from '../StellarProvider.types';\nexport type { StellarWalletAccount } from '../StellarWalletAccount.types';\nexport { NotStellarProviderError } from '../errors/NotStellarProviderError';\nexport { isStellarWalletAccount } from '../isStellarWalletAccount';\nexport { addStellarExtension } from '../addStellarExtension';\nexport { signTransaction } from '../signTransaction';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","names":["watcher: WatchWalletChanges | undefined","eventCallbacks: Map<\n StellarProviderEvent,\n Set<StellarEventCallback>\n >","signTransaction","signFreighterMessage","isConnected","signTransaction","signLobstrMessage","oneKeyEventMap: Record<StellarProviderEvent, string>","STELLAR_PASSPHRASE_BY_NAME: Record<StellarNetworkName, string>","STELLAR_HORIZON_URL_BY_NAME: Record<StellarNetworkName, string>","connect: StellarWalletProvider['connect']","getActiveNetworkId: StellarWalletProvider['getActiveNetworkId']","getConnectedAddresses: StellarWalletProvider['getConnectedAddresses']","signMessage: StellarWalletProvider['signMessage']","signTransaction: StellarWalletProvider['signTransaction']","destroy: StellarWalletProvider['destroy']","disconnectWalletAccount: StellarWalletProvider['disconnectWalletAccount']","getDefaultClient","packageName","packageVersion"],"sources":["../package.json","../src/errors/NotStellarProviderError/NotStellarProviderError.ts","../src/isStellarWalletAccount/isStellarWalletAccount.ts","../src/errors/FetchStellarBalanceError/FetchStellarBalanceError.ts","../src/utils/fetchStellarBalance/fetchStellarBalance.ts","../src/utils/createStellarNetworkProvider/createStellarNetworkProvider.ts","../src/registerStellarNetworkProviderBuilder/registerStellarNetworkProviderBuilder.ts","../src/injected/utils/createFreighterProvider/createFreighterProvider.ts","../src/injected/utils/createLobstrProvider/createLobstrProvider.ts","../src/errors/NotOneKeyProviderError/NotOneKeyProviderError.ts","../src/utils/normalizeNetworkName/normalizeNetworkName.ts","../src/injected/utils/getOneKeyStellarProvider/getOneKeyStellarProvider.ts","../src/injected/utils/createOneKeyProvider/createOneKeyProvider.ts","../src/utils/constants.ts","../src/utils/getStellarNetworkId/getStellarNetworkId.ts","../src/utils/getNetworkPassphrase/getNetworkPassphrase.ts","../src/isStellarWalletProvider/isStellarWalletProvider.ts","../src/signTransaction/signTransaction.ts","../src/utils/buildPaymentTransaction/buildPaymentTransaction.ts","../src/utils/checkTrustline/checkTrustline.ts","../src/utils/createPaymentAsset/createPaymentAsset.ts","../src/utils/stellarTransferAmount/stellarTransferAmount.ts","../src/injected/utils/createWalletProviderFromStellarProvider/createWalletProviderFromStellarProvider.ts","../src/injected/addStellarInjectedWalletsExtension/addStellarInjectedWalletsExtension.ts","../src/addStellarExtension/addStellarExtension.ts","../src/exports/index.ts"],"sourcesContent":["","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotStellarProviderError extends BaseError {\n public readonly providerKey: string;\n\n constructor(params: { providerKey: string }) {\n super({\n cause: null,\n code: 'not_stellar_provider_error',\n docsUrl: null,\n name: 'NotStellarProviderError',\n shortMessage: 'Provider is not a Stellar wallet provider',\n });\n\n this.providerKey = params.providerKey;\n }\n}\n","import type { WalletAccount } from '@dynamic-labs-sdk/client';\n\nimport type { StellarWalletAccount } from '../StellarWalletAccount.types';\n\n/**\n * Type guard to check if a wallet account is a Stellar wallet account.\n *\n * @example\n * ```ts\n * const accounts = getWalletAccounts();\n * const stellarAccounts = accounts.filter(isStellarWalletAccount);\n * ```\n *\n * @param walletAccount - The wallet account to check.\n * @returns True if the wallet account is a Stellar wallet account.\n * @see addStellarExtension\n * @see signTransaction\n * @notInstrumented\n */\nexport const isStellarWalletAccount = (\n walletAccount: WalletAccount\n): walletAccount is StellarWalletAccount => {\n return walletAccount.chain === 'STELLAR';\n};\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class FetchStellarBalanceError extends BaseError {\n public readonly address: string;\n\n constructor(params: { address: string; cause?: Error | null }) {\n super({\n cause: params.cause ?? null,\n code: 'fetch_stellar_balance_error',\n docsUrl: null,\n name: 'FetchStellarBalanceError',\n shortMessage: `Failed to fetch Stellar balance for address ${params.address}`,\n });\n\n this.address = params.address;\n }\n}\n","import { Horizon } from '@stellar/stellar-sdk';\nimport type { NetworkData } from '@dynamic-labs-sdk/client';\n\nimport { FetchStellarBalanceError } from '../../errors/FetchStellarBalanceError';\n\ntype FetchStellarBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\n/**\n * Fetches the native XLM balance for an address from Horizon.\n * Returns '0' when the account has no native balance, and throws a\n * FetchStellarBalanceError when the balance cannot be retrieved.\n *\n * @param address - The Stellar public key.\n * @param networkData - Network data carrying the Horizon RPC URL.\n * @notInstrumented\n */\nexport const fetchStellarBalance = async ({\n address,\n networkData,\n}: FetchStellarBalanceParams): Promise<string> => {\n const server = new Horizon.Server(networkData.rpcUrls.http[0]);\n\n try {\n const account = await server.loadAccount(address);\n\n const nativeBalance = account.balances.find(\n (balance) => balance.asset_type === 'native'\n );\n\n if (!nativeBalance || !('balance' in nativeBalance)) {\n return '0';\n }\n\n // Horizon API returns balance already in XLM (human-readable format)\n return Number(nativeBalance.balance).toString();\n } catch (error) {\n throw new FetchStellarBalanceError({\n address,\n cause: error instanceof Error ? error : null,\n });\n }\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { StellarNetworkProvider } from '../../StellarNetworkProvider.types';\nimport { fetchStellarBalance } from '../fetchStellarBalance';\n\n/**\n * Creates a Stellar network provider from network data.\n *\n * @param networkData - The network data for the Stellar network.\n * @notInstrumented\n */\nexport const createStellarNetworkProvider = (\n networkData: NetworkData\n): StellarNetworkProvider => ({\n ...createBaseNetworkProvider('STELLAR', networkData),\n cluster: networkData.cluster,\n getBalance: async ({ address }) => ({\n balance: await fetchStellarBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createStellarNetworkProvider } from '../utils/createStellarNetworkProvider';\n\n/**\n * Registers the Stellar network provider builder on the client (idempotent).\n *\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const registerStellarNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Stellar network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('STELLAR')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createStellarNetworkProvider,\n chain: 'STELLAR',\n });\n};\n","import {\n WatchWalletChanges,\n getNetwork,\n isConnected,\n requestAccess,\n // Aliased so the call site is not a bare `signMessage(...)`, which the\n // custom-rules/require-client-param lint rule would mistake for the\n // Dynamic `signMessage` that defaults its client parameter.\n signMessage as signFreighterMessage,\n signTransaction,\n} from '@stellar/freighter-api';\n\nimport type {\n IStellarProvider,\n StellarEventCallback,\n StellarProviderEvent,\n} from '../../../StellarProvider.types';\n\n/**\n * Freighter Wallet provider adapter that implements IStellarProvider\n * using the Freighter API.\n *\n * @notInstrumented\n */\nexport const createFreighterProvider = (): IStellarProvider => {\n let watcher: WatchWalletChanges | undefined;\n const eventCallbacks: Map<\n StellarProviderEvent,\n Set<StellarEventCallback>\n > = new Map();\n let isWatcherStarted = false;\n\n const startWatcher = () => {\n if (isWatcherStarted) {\n return;\n }\n\n if (!watcher) {\n watcher = new WatchWalletChanges();\n }\n\n watcher.watch((params) => {\n const accountChangedCallbacks = eventCallbacks.get('accountChanged');\n const networkChangedCallbacks = eventCallbacks.get('networkChanged');\n\n if (accountChangedCallbacks && params.address !== undefined) {\n accountChangedCallbacks.forEach((callback) => {\n callback(params.address);\n });\n }\n\n if (networkChangedCallbacks && params.network !== undefined) {\n networkChangedCallbacks.forEach((callback) => {\n callback(params.network);\n });\n }\n });\n\n isWatcherStarted = true;\n };\n\n return {\n close: () => {\n watcher?.stop();\n // Drop the stopped instance so a later re-subscription creates a fresh\n // watcher. Calling watch() on a stopped WatchWalletChanges silently\n // delivers no events, which would break event delivery after close().\n watcher = undefined;\n eventCallbacks.clear();\n isWatcherStarted = false;\n },\n\n connect: async () => {\n const response = await requestAccess();\n return response.address ?? '';\n },\n\n disconnect: async () => undefined,\n\n getNetwork: async () => {\n const response = await getNetwork();\n return response.network ?? 'PUBLIC';\n },\n\n isUnlocked: async () => {\n const response = await isConnected();\n return response.isConnected ?? false;\n },\n\n on: ({ event, callback }) => {\n if (!eventCallbacks.has(event)) {\n eventCallbacks.set(event, new Set());\n }\n\n eventCallbacks.get(event)!.add(callback);\n\n startWatcher();\n },\n\n sign: async ({ transactionXdr, options }) => {\n const response = await signTransaction(transactionXdr, {\n networkPassphrase: options?.networkPassphrase,\n });\n return response.signedTxXdr ?? '';\n },\n\n signMessage: async ({ message }) => {\n const response = await signFreighterMessage(message);\n return String(response.signedMessage ?? '');\n },\n };\n};\n","import {\n getPublicKey,\n isConnected,\n // Aliased so the call site is not a bare `signMessage(...)`, which the\n // custom-rules/require-client-param lint rule would mistake for the\n // Dynamic `signMessage` that defaults its client parameter.\n signMessage as signLobstrMessage,\n signTransaction,\n} from '@lobstrco/signer-extension-api';\n\nimport type { IStellarProvider } from '../../../StellarProvider.types';\n\n/**\n * Lobstr Wallet provider adapter that implements IStellarProvider\n * using the Lobstr signer extension API.\n *\n * @notInstrumented\n */\n// Lobstr's SDK has no close/disconnect/on; those IStellarProvider methods are\n// optional, so they are intentionally omitted here.\nexport const createLobstrProvider = (): IStellarProvider => ({\n connect: async () => {\n const publicKey = await getPublicKey();\n // Guard the IStellarProvider `Promise<string>` contract in case the API\n // ever resolves without a key (mirrors the Freighter adapter).\n return publicKey ?? '';\n },\n\n // Lobstr uses mainnet by default\n getNetwork: async () => 'PUBLIC',\n\n isUnlocked: async () => isConnected(),\n\n sign: async ({ transactionXdr }) => {\n const signedXdr = await signTransaction(transactionXdr);\n return signedXdr;\n },\n\n signMessage: async ({ message }) => {\n const response = await signLobstrMessage(message);\n return response?.signedMessage ?? '';\n },\n});\n","import { BaseError } from '@dynamic-labs-sdk/client';\n\nexport class NotOneKeyProviderError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'not_onekey_provider_error',\n docsUrl: null,\n name: 'NotOneKeyProviderError',\n shortMessage: 'OneKey Stellar provider not found',\n });\n }\n}\n","import type { StellarNetworkName } from '../../StellarProvider.types';\n\ntype NormalizeNetworkNameParams = {\n network: string;\n};\n\n/**\n * Normalize network name to standard format\n *\n * @param network - Raw network name from wallet\n * @returns Normalized network name (PUBLIC, TESTNET, or FUTURENET)\n *\n * @example\n * ```typescript\n * normalizeNetworkName({ network: 'mainnet' }) // 'PUBLIC'\n * normalizeNetworkName({ network: 'testnet' }) // 'TESTNET'\n * normalizeNetworkName({ network: 'Test SDF Network ; September 2015' }) // 'TESTNET'\n * ```\n * @notInstrumented\n */\nexport const normalizeNetworkName = ({\n network,\n}: NormalizeNetworkNameParams): StellarNetworkName => {\n const networkUpper = network.toUpperCase();\n\n // Check FUTURENET first - handles both 'FUTURENET' and Stellar passphrase\n // 'Test SDF Future Network ; October 2022'\n if (networkUpper.includes('FUTURENET') || networkUpper.includes('FUTURE')) {\n return 'FUTURENET';\n }\n\n // Handles both 'TESTNET' and Stellar passphrase 'Test SDF Network ; September 2015'\n if (networkUpper.includes('TESTNET') || networkUpper.includes('TEST SDF')) {\n return 'TESTNET';\n }\n\n if (networkUpper.includes('PUBLIC') || networkUpper.includes('MAINNET')) {\n return 'PUBLIC';\n }\n\n // Default to PUBLIC if unknown\n return 'PUBLIC';\n};\n","/**\n * OneKey Stellar provider interface based on the actual OneKey API\n */\nexport type OneKeyStellarProvider = {\n disconnect: () => void;\n getAddress: () => Promise<{ address: string; network: string }>;\n getNetwork: () => Promise<string>;\n on: (event: string, callback: (...args: unknown[]) => void) => void;\n removeListener: (\n event: string,\n callback: (...args: unknown[]) => void,\n ) => void;\n signAuthEntry?: (\n entry: string,\n options?: { network?: string; networkPassphrase?: string },\n ) => Promise<string>;\n signMessage: (message: string) => Promise<{ signedMessage: string }>;\n signTransaction: (\n transactionXdr: string,\n options?: { network?: string; networkPassphrase?: string },\n ) => Promise<string>;\n};\n\n/**\n * Methods the injected OneKey Stellar object must expose to be trusted.\n * `signAuthEntry` is intentionally excluded because it is optional.\n */\nconst REQUIRED_ONEKEY_METHODS = [\n 'disconnect',\n 'getAddress',\n 'getNetwork',\n 'on',\n 'removeListener',\n 'signMessage',\n 'signTransaction',\n] as const;\n\n/**\n * Gets the OneKey Stellar provider from the window object.\n *\n * The injected `$onekey.stellar` object comes from an untrusted browser global\n * (any extension or script could inject a fake one), so its shape is validated\n * before use: every required method must be a function. Anything that does not\n * conform is rejected rather than trusted.\n *\n * @returns The OneKey Stellar provider, or undefined if it is unavailable or malformed.\n * @notInstrumented\n */\nexport const getOneKeyStellarProvider = ():\n | OneKeyStellarProvider\n | undefined => {\n if (typeof globalThis.window === 'undefined') {\n return undefined;\n }\n\n const stellar = (\n globalThis.window as unknown as {\n $onekey?: { stellar?: Record<string, unknown> };\n }\n ).$onekey?.stellar;\n\n if (!stellar) {\n return undefined;\n }\n\n const conformsToInterface = REQUIRED_ONEKEY_METHODS.every(\n (method) => typeof stellar[method] === 'function'\n );\n\n if (!conformsToInterface) {\n return undefined;\n }\n\n return stellar as unknown as OneKeyStellarProvider;\n};\n","import type {\n IStellarProvider,\n StellarEventCallback,\n StellarProviderEvent,\n} from '../../../StellarProvider.types';\nimport { NotOneKeyProviderError } from '../../../errors/NotOneKeyProviderError';\nimport { normalizeNetworkName } from '../../../utils/normalizeNetworkName';\nimport { getOneKeyStellarProvider } from '../getOneKeyStellarProvider';\n\n/**\n * OneKey Wallet provider adapter that implements IStellarProvider\n * using the OneKey Stellar API.\n *\n * @notInstrumented\n */\nexport const createOneKeyProvider = (): IStellarProvider => {\n const oneKeyProvider = getOneKeyStellarProvider();\n\n if (!oneKeyProvider) {\n throw new NotOneKeyProviderError();\n }\n\n const eventListeners = new Map<\n StellarProviderEvent,\n Set<StellarEventCallback>\n >();\n // Keyed by event then callback so the same callback registered for multiple\n // events maps to a distinct wrapped callback. Keying by callback alone would\n // let one registration overwrite the other and leak the listener.\n const wrappedCallbacks = new Map<\n StellarProviderEvent,\n Map<StellarEventCallback, (...args: unknown[]) => void>\n >();\n\n // Maps Stellar provider events to their OneKey equivalents. Declared once so\n // subscription and teardown resolve the same OneKey event name.\n const oneKeyEventMap: Record<StellarProviderEvent, string> = {\n accountChanged: 'accountChanged',\n networkChanged: 'networkChanged',\n };\n\n return {\n close: () => {\n // Remove all event listeners using the wrapped callbacks\n eventListeners.forEach((callbacks, event) => {\n const oneKeyEvent = oneKeyEventMap[event];\n\n callbacks.forEach((callback) => {\n const wrappedCallback = wrappedCallbacks.get(event)?.get(callback);\n if (wrappedCallback) {\n oneKeyProvider.removeListener(oneKeyEvent, wrappedCallback);\n }\n });\n });\n eventListeners.clear();\n wrappedCallbacks.clear();\n },\n\n connect: async () => {\n const response = await oneKeyProvider.getAddress();\n return response?.address ?? '';\n },\n\n disconnect: async () => {\n oneKeyProvider.disconnect();\n },\n\n getNetwork: async () => {\n const network = await oneKeyProvider.getNetwork();\n // Delegate to the shared normalizer so OneKey's mapping stays consistent\n // with the rest of the pipeline (and gets passphrase handling for free).\n return normalizeNetworkName({ network });\n },\n\n isUnlocked: async () => {\n try {\n // Try to get address to check if wallet is unlocked\n await oneKeyProvider.getAddress();\n return true;\n } catch {\n return false;\n }\n },\n\n on: ({ event, callback }) => {\n if (!eventListeners.has(event)) {\n eventListeners.set(event, new Set());\n }\n\n const callbacks = eventListeners.get(event);\n // Ignore duplicate (event, callback) subscriptions. Registering a second\n // wrapped listener would leak the first on close(), since only the latest\n // wrapped callback is tracked per (event, callback).\n if (callbacks?.has(callback)) {\n return;\n }\n callbacks?.add(callback);\n\n const oneKeyEvent = oneKeyEventMap[event];\n\n const wrappedCallback = (...args: unknown[]) => {\n // Both supported events deliver the changed value (address or network)\n // as the first argument, so they are forwarded identically.\n callback(args[0] as string);\n };\n\n if (!wrappedCallbacks.has(event)) {\n wrappedCallbacks.set(event, new Map());\n }\n wrappedCallbacks.get(event)?.set(callback, wrappedCallback);\n oneKeyProvider.on(oneKeyEvent, wrappedCallback);\n },\n\n sign: async ({ transactionXdr, options }) => {\n const signedXdr = await oneKeyProvider.signTransaction(transactionXdr, {\n network: options?.network,\n networkPassphrase: options?.networkPassphrase,\n });\n return signedXdr ?? '';\n },\n\n signMessage: async ({ message }) => {\n const signature = await oneKeyProvider.signMessage(message);\n return String(signature?.signedMessage ?? '');\n },\n };\n};\n","import type { StellarNetworkName } from '../StellarProvider.types';\n\n/**\n * Stellar network passphrase for mainnet\n */\nexport const STELLAR_PUBLIC_NETWORK_PASSPHRASE =\n 'Public Global Stellar Network ; September 2015';\n\n/**\n * Stellar network passphrase for testnet\n */\nexport const STELLAR_TESTNET_NETWORK_PASSPHRASE =\n 'Test SDF Network ; September 2015';\n\n/**\n * Stellar network passphrase for futurenet\n */\nexport const STELLAR_FUTURENET_NETWORK_PASSPHRASE =\n 'Test SDF Future Network ; October 2022';\n\n/**\n * Number of stroops per XLM (1 XLM = 10,000,000 stroops)\n */\nexport const STROOPS_PER_XLM = 1e7;\n\n/**\n * Network passphrase keyed by Stellar network name. The SDK's network\n * identifier (chain ID) is the SHA-256 hash of these passphrases.\n */\nexport const STELLAR_PASSPHRASE_BY_NAME: Record<StellarNetworkName, string> = {\n FUTURENET: STELLAR_FUTURENET_NETWORK_PASSPHRASE,\n PUBLIC: STELLAR_PUBLIC_NETWORK_PASSPHRASE,\n TESTNET: STELLAR_TESTNET_NETWORK_PASSPHRASE,\n};\n\n/**\n * Public Horizon server URL keyed by Stellar network name. Transaction\n * submission must target a write-capable Horizon server (not an arbitrary RPC\n * URL, which returns 405 on POST /transactions).\n */\nexport const STELLAR_HORIZON_URL_BY_NAME: Record<StellarNetworkName, string> = {\n FUTURENET: 'https://horizon-futurenet.stellar.org',\n PUBLIC: 'https://horizon.stellar.org',\n TESTNET: 'https://horizon-testnet.stellar.org',\n};\n","import { getBuffer } from '@dynamic-labs-sdk/client/core';\nimport { hash } from '@stellar/stellar-sdk';\n\nimport { STELLAR_PASSPHRASE_BY_NAME } from '../constants';\nimport { normalizeNetworkName } from '../normalizeNetworkName';\n\ntype GetStellarNetworkIdParams = {\n network: string;\n};\n\n/**\n * Maps a wallet-reported Stellar network (name or passphrase) to its Dynamic\n * network identifier: the hex-encoded SHA-256 hash of the network passphrase\n * (Stellar's canonical Network ID), which is how the backend identifies the\n * network.\n *\n * @param network - Raw network value reported by the wallet.\n * @returns The hex SHA-256 hash of the network passphrase.\n *\n * @example\n * ```typescript\n * // pubnet -> 7ac33997544e3175d266bd022439b22cdb16508c01163f26e5cb2a3e1045a979\n * getStellarNetworkId({ network: 'PUBLIC' });\n * ```\n * @notInstrumented\n */\nexport const getStellarNetworkId = ({\n network,\n}: GetStellarNetworkIdParams): string => {\n const passphrase =\n STELLAR_PASSPHRASE_BY_NAME[normalizeNetworkName({ network })];\n\n return hash(getBuffer().from(passphrase)).toString('hex');\n};\n","import {\n STELLAR_PASSPHRASE_BY_NAME,\n STELLAR_PUBLIC_NETWORK_PASSPHRASE,\n} from '../constants';\nimport { getStellarNetworkId } from '../getStellarNetworkId';\n\n/**\n * Gets the network passphrase for a given Dynamic Stellar network id (the\n * SHA-256 hash of a network passphrase). Defaults to the public network when\n * the id is unknown.\n *\n * @param networkId - The network id (hex SHA-256 hash of the passphrase).\n * @returns The matching network passphrase.\n * @notInstrumented\n */\nexport const getNetworkPassphrase = ({\n networkId,\n}: {\n networkId: string | undefined;\n}): string =>\n Object.values(STELLAR_PASSPHRASE_BY_NAME).find(\n (passphrase) => getStellarNetworkId({ network: passphrase }) === networkId\n ) ?? STELLAR_PUBLIC_NETWORK_PASSPHRASE;\n","import type { WalletProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { StellarWalletProvider } from '../StellarWalletProvider.types';\n\n/**\n * Type guard to check if a wallet provider is a Stellar wallet provider.\n *\n * @param provider - The wallet provider to check.\n * @returns True if the wallet provider is a Stellar wallet provider.\n * @notInstrumented\n */\nexport const isStellarWalletProvider = (\n provider: WalletProvider\n): provider is StellarWalletProvider => {\n return provider.chain === 'STELLAR';\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { getWalletProviderFromWalletAccount } from '@dynamic-labs-sdk/client/core';\n\nimport type { StellarWalletAccount } from '../StellarWalletAccount.types';\nimport { NotStellarProviderError } from '../errors/NotStellarProviderError';\nimport { isStellarWalletProvider } from '../isStellarWalletProvider';\n\ntype SignTransactionParams = {\n transactionXdr: string;\n walletAccount: StellarWalletAccount;\n};\n\n/**\n * Signs a Stellar transaction.\n *\n * @example\n * ```ts\n * const { signedXdr } = await signTransaction({\n * walletAccount: stellarAccount,\n * transactionXdr: 'AAAAAgAAAA...',\n * });\n * ```\n *\n * @param params.transactionXdr - The transaction XDR to sign.\n * @param params.walletAccount - The wallet account to sign the transaction with.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An object containing the signed XDR.\n * @throws {NotStellarProviderError} If the wallet account's provider is not a Stellar provider.\n * @see isStellarWalletAccount\n * @see addStellarExtension\n * @notInstrumented\n */\nexport const signTransaction = async (\n { transactionXdr, walletAccount }: SignTransactionParams,\n client = getDefaultClient()\n): Promise<{ signedXdr: string }> => {\n const provider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n if (!isStellarWalletProvider(provider)) {\n throw new NotStellarProviderError({ providerKey: provider.key });\n }\n\n return provider.signTransaction({ transactionXdr, walletAccount });\n};\n","import {\n type Asset,\n BASE_FEE,\n type Horizon,\n Operation,\n type Transaction,\n TransactionBuilder,\n} from '@stellar/stellar-sdk';\n\nconst DEFAULT_TIMEOUT_SECONDS = 180;\n\ntype BuildPaymentTransactionParams = {\n amount: string;\n asset: Asset;\n networkPassphrase: string;\n recipient: string;\n sourceAccount: Horizon.AccountResponse;\n};\n\n/**\n * Builds a Stellar payment transaction sending `amount` of `asset` from the\n * source account to the recipient.\n *\n * @param amount - Amount to send, as a decimal string in the asset's units.\n * @param asset - The asset to send (native or custom).\n * @param networkPassphrase - The network passphrase to sign against.\n * @param recipient - The destination account address.\n * @param sourceAccount - The sender's account loaded from Horizon.\n * @notInstrumented\n */\nexport const buildPaymentTransaction = ({\n amount,\n asset,\n networkPassphrase,\n recipient,\n sourceAccount,\n}: BuildPaymentTransactionParams): Transaction =>\n new TransactionBuilder(sourceAccount, {\n fee: BASE_FEE,\n networkPassphrase,\n })\n .addOperation(\n Operation.payment({\n amount,\n asset,\n destination: recipient,\n })\n )\n .setTimeout(DEFAULT_TIMEOUT_SECONDS)\n .build();\n","import type { Asset, Horizon } from '@stellar/stellar-sdk';\n\ntype CheckTrustlineParams = {\n account: Horizon.AccountResponse;\n asset: Asset;\n};\n\n/**\n * Returns whether an account can receive the given asset. The native asset\n * (XLM) never needs a trustline; non-native assets require a matching\n * credit balance (trustline) on the account.\n *\n * @param account - The destination account loaded from Horizon.\n * @param asset - The asset being sent.\n * @notInstrumented\n */\nexport const checkTrustline = ({\n account,\n asset,\n}: CheckTrustlineParams): boolean => {\n if (asset.isNative()) {\n return true;\n }\n\n const assetCode = asset.getCode();\n const assetIssuer = asset.getIssuer();\n\n return account.balances.some(\n (balance) =>\n (balance.asset_type === 'credit_alphanum4' ||\n balance.asset_type === 'credit_alphanum12') &&\n balance.asset_code === assetCode &&\n balance.asset_issuer === assetIssuer\n );\n};\n","import { Asset } from '@stellar/stellar-sdk';\n\ntype CreatePaymentAssetParams = {\n code: string;\n issuer: string;\n};\n\n/**\n * Creates a Stellar Asset for a payment operation. Returns the native asset\n * (XLM) when no code/issuer is provided, otherwise a custom asset.\n *\n * @param asset - Optional `{ code, issuer }` for a non-native asset.\n * @notInstrumented\n */\nexport const createPaymentAsset = (asset?: CreatePaymentAssetParams): Asset =>\n asset ? new Asset(asset.code, asset.issuer) : Asset.native();\n","import {\n type DynamicClient,\n InvalidParamError,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n type TransferAmountParams,\n assertDefined,\n} from '@dynamic-labs-sdk/client/core';\nimport { Horizon, TransactionBuilder } from '@stellar/stellar-sdk';\n\nimport { isStellarWalletAccount } from '../../isStellarWalletAccount';\nimport { signTransaction } from '../../signTransaction';\nimport { buildPaymentTransaction } from '../buildPaymentTransaction';\nimport { checkTrustline } from '../checkTrustline';\nimport { STELLAR_HORIZON_URL_BY_NAME } from '../constants';\nimport { createPaymentAsset } from '../createPaymentAsset';\nimport { getNetworkPassphrase } from '../getNetworkPassphrase';\nimport { normalizeNetworkName } from '../normalizeNetworkName';\n\n/**\n * Transfers native XLM or a custom Stellar asset from a wallet account.\n *\n * A custom asset is identified by `token.address` in the form `CODE:ISSUER`\n * (or `CODE-ISSUER`). Amounts are decimal strings in the asset's display\n * units. The destination account must exist, and for non-native assets it must\n * already hold a trustline for the asset.\n *\n * @param amount - Amount to send, as a decimal string (e.g. \"1.5\").\n * @param recipient - Destination Stellar account address.\n * @param token - Optional non-native asset (`address: \"CODE:ISSUER\"`).\n * @param walletAccount - The Stellar wallet account to send from.\n * @param client - The Dynamic client instance.\n * @returns The submitted transaction hash.\n * @notInstrumented\n */\nexport const stellarTransferAmount = async (\n { amount, recipient, token, walletAccount }: TransferAmountParams,\n client: DynamicClient\n): Promise<{ transactionHash: string }> => {\n if (!isStellarWalletAccount(walletAccount)) {\n throw new InvalidParamError(\n 'Wallet account is not a Stellar wallet account'\n );\n }\n\n const { networkData } = await getActiveNetworkData({ walletAccount }, client);\n assertDefined(networkData, 'No active network data found');\n\n const networkPassphrase = getNetworkPassphrase({\n networkId: networkData.networkId,\n });\n // Submission must target a write-capable Horizon server (mirrors\n // dynamic-auth's getHorizonServer); the network's rpcUrls are not guaranteed\n // to accept POST /transactions and return 405.\n const horizonUrl =\n STELLAR_HORIZON_URL_BY_NAME[\n normalizeNetworkName({ network: networkPassphrase })\n ];\n const server = new Horizon.Server(horizonUrl);\n\n let asset;\n if (token?.address) {\n const [code, issuer] = token.address.split(/[:-]/);\n if (!code || !issuer) {\n throw new InvalidParamError(\n 'Invalid token address. Expected \"CODE:ISSUER\" (e.g. \"USDC:GA5Z...\").'\n );\n }\n asset = createPaymentAsset({ code, issuer });\n } else {\n asset = createPaymentAsset();\n }\n\n const sourceAccount = await server.loadAccount(walletAccount.address);\n\n let destinationAccount;\n try {\n destinationAccount = await server.loadAccount(recipient);\n } catch {\n throw new InvalidParamError(\n `Destination account ${recipient} does not exist or is not funded.`\n );\n }\n\n if (\n !asset.isNative() &&\n !checkTrustline({ account: destinationAccount, asset })\n ) {\n throw new InvalidParamError(\n `Destination ${recipient} has no trustline for ${asset.getCode()}:${asset.getIssuer()}.`\n );\n }\n\n const transaction = buildPaymentTransaction({\n amount,\n asset,\n networkPassphrase,\n recipient,\n sourceAccount,\n });\n\n const { signedXdr } = await signTransaction(\n { transactionXdr: transaction.toXDR(), walletAccount },\n client\n );\n\n const signedTransaction = TransactionBuilder.fromXDR(\n signedXdr,\n networkPassphrase\n );\n const response = await server.submitTransaction(signedTransaction);\n\n return { transactionHash: response.hash };\n};\n","import {\n type DynamicClient,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type { IStellarProvider } from '../../../StellarProvider.types';\nimport type { StellarWalletProvider } from '../../../StellarWalletProvider.types';\nimport { getNetworkPassphrase } from '../../../utils/getNetworkPassphrase';\nimport { getStellarNetworkId } from '../../../utils/getStellarNetworkId';\nimport { stellarTransferAmount } from '../../../utils/stellarTransferAmount';\n\ntype CreateWalletProviderFromStellarProviderParams = {\n dynamicClient: DynamicClient;\n stellarProvider: IStellarProvider;\n walletInfo: {\n displayName: string;\n icon: string;\n key: string;\n };\n};\n\n/**\n * Builds a Stellar wallet provider from an injected Stellar provider adapter.\n *\n * @param dynamicClient - The Dynamic client instance.\n * @param stellarProvider - The injected Stellar provider adapter.\n * @param walletInfo - Display metadata for the wallet (name, icon, key).\n * @notInstrumented\n */\nexport const createWalletProviderFromStellarProvider = ({\n dynamicClient,\n stellarProvider,\n walletInfo,\n}: CreateWalletProviderFromStellarProviderParams): StellarWalletProvider => {\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'STELLAR',\n displayName: walletInfo.displayName,\n walletProviderType,\n });\n\n const connect: StellarWalletProvider['connect'] = async () => {\n const address = await stellarProvider.connect();\n\n return {\n addresses: [{ address }],\n };\n };\n\n const getActiveNetworkId: StellarWalletProvider['getActiveNetworkId'] =\n async () => {\n const network = await stellarProvider.getNetwork();\n\n return {\n networkId: getStellarNetworkId({ network }),\n };\n };\n\n const getConnectedAddresses: StellarWalletProvider['getConnectedAddresses'] =\n async () => {\n const address = await stellarProvider.connect();\n\n return {\n addresses: [address],\n };\n };\n\n const signMessage: StellarWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signature = await stellarProvider.signMessage({ message });\n\n return { signature };\n };\n\n const signTransaction: StellarWalletProvider['signTransaction'] = async ({\n transactionXdr,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const { networkData } = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n\n assertDefined(networkData, 'No active network data found');\n\n const networkPassphrase = getNetworkPassphrase({\n networkId: networkData.networkId,\n });\n\n const signedXdr = await stellarProvider.sign({\n options: { networkPassphrase },\n transactionXdr,\n });\n\n return { signedXdr };\n };\n\n const { getEventEmitter, cleanupEventEmitter } =\n createWalletProviderEventEmitter<{\n removeAccountChangeListener: VoidFunction;\n removeNetworkChangeListener: VoidFunction;\n }>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue.removeNetworkChangeListener();\n setupReturnValue.removeAccountChangeListener();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleNetworkChanged,\n }) => {\n const onAccountsChanged = (address: unknown) => {\n if (typeof address === 'string') {\n handleAccountsChanged({\n addresses: [address],\n });\n }\n };\n stellarProvider.on?.({\n callback: onAccountsChanged,\n event: 'accountChanged',\n });\n // IStellarProvider exposes no per-listener `off`, so individual\n // listeners cannot be removed. All listeners are torn down once via\n // `close()` in `destroy`, so this remover is intentionally a no-op.\n const removeAccountChangeListener = () => {};\n\n const onNetworkChanged = (network: unknown) => {\n if (typeof network === 'string') {\n handleNetworkChanged({\n networkId: getStellarNetworkId({ network }),\n });\n }\n };\n stellarProvider.on?.({\n callback: onNetworkChanged,\n event: 'networkChanged',\n });\n // See removeAccountChangeListener: no per-listener `off` exists, so\n // this is a no-op; `close()` in `destroy` removes all listeners once.\n const removeNetworkChangeListener = () => {};\n\n return {\n removeAccountChangeListener,\n removeNetworkChangeListener,\n };\n },\n\n supportedEvents: ['accountsChanged', 'networkChanged'],\n });\n\n const destroy: StellarWalletProvider['destroy'] = async () => {\n cleanupEventEmitter();\n stellarProvider.close?.();\n };\n\n const disconnectWalletAccount: StellarWalletProvider['disconnectWalletAccount'] =\n async () => {\n await stellarProvider.disconnect?.();\n };\n\n const walletProvider: StellarWalletProvider = {\n chain: 'STELLAR',\n connect,\n destroy,\n disconnectWalletAccount,\n get events() {\n return getEventEmitter();\n },\n getActiveNetworkId,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(walletInfo.displayName),\n key,\n metadata: {\n displayName: walletInfo.displayName,\n icon: walletInfo.icon,\n },\n signMessage,\n signTransaction,\n transferAmount: (args) => stellarTransferAmount(args, dynamicClient),\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getCore,\n getWalletProviderRegistry,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\nimport { isConnected as isFreighterConnected } from '@stellar/freighter-api';\nimport { isConnected as isLobstrConnected } from '@lobstrco/signer-extension-api';\n\nimport { registerStellarNetworkProviderBuilder } from '../../registerStellarNetworkProviderBuilder';\nimport { createFreighterProvider } from '../utils/createFreighterProvider';\nimport { createLobstrProvider } from '../utils/createLobstrProvider';\nimport { createOneKeyProvider } from '../utils/createOneKeyProvider';\nimport { createWalletProviderFromStellarProvider } from '../utils/createWalletProviderFromStellarProvider';\nimport { getOneKeyStellarProvider } from '../utils/getOneKeyStellarProvider';\n\nexport const STELLAR_INJECTED_WALLETS_EXTENSION_KEY = 'stellarInjectedWallets';\n\n/**\n * Adds the Stellar Injected Wallets extension to the Dynamic client.\n *\n * This extension enables integration with Stellar wallets, including Freighter, Lobstr, and OneKey.\n *\n * Internal: consumers should call `addStellarExtension`, which supplies the\n * client. The client is required here (no `getDefaultClient()` default) per the\n * internal-function client-param rule.\n *\n * @param client - The Dynamic client instance.\n * @notInstrumented\n */\nexport const addStellarInjectedWalletsExtension = (\n client: DynamicClient\n): void => {\n if (\n hasExtension(\n { extensionKey: STELLAR_INJECTED_WALLETS_EXTENSION_KEY },\n client\n )\n ) {\n return;\n }\n\n registerExtension(\n { extensionKey: STELLAR_INJECTED_WALLETS_EXTENSION_KEY },\n client\n );\n\n registerStellarNetworkProviderBuilder(client);\n\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n // Detect and register Freighter wallet\n isFreighterConnected()\n .then((response) => {\n if (response.isConnected) {\n try {\n const freighterProvider = createFreighterProvider();\n const walletProvider = createWalletProviderFromStellarProvider({\n dynamicClient: client,\n stellarProvider: freighterProvider,\n walletInfo: {\n displayName: 'Freighter',\n icon: 'https://stellar.creit.tech/wallet-icons/freighter.png',\n key: 'freighter',\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n } catch (error) {\n getCore(client).logger.error('Error creating Freighter provider', error);\n }\n }\n })\n .catch((error) => {\n getCore(client).logger.error('Error checking Freighter connection', error);\n });\n\n // Detect and register Lobstr wallet. Lobstr's isConnected() reports whether\n // the wallet is *connected* (not merely installed) and rejects when the\n // extension is absent. Registration is therefore gated on the call resolving\n // rather than on its boolean, so an installed-but-not-yet-connected Lobstr\n // still appears in the wallet list.\n isLobstrConnected()\n .then(() => {\n try {\n const lobstrProvider = createLobstrProvider();\n const walletProvider = createWalletProviderFromStellarProvider({\n dynamicClient: client,\n stellarProvider: lobstrProvider,\n walletInfo: {\n displayName: 'Lobstr',\n icon: 'https://stellar.creit.tech/wallet-icons/lobstr.svg',\n key: 'lobstr',\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n } catch (error) {\n getCore(client).logger.error('Error creating Lobstr provider', error);\n }\n })\n .catch((error) => {\n getCore(client).logger.error('Error checking Lobstr connection', error);\n });\n\n // Detect and register OneKey wallet. getOneKeyStellarProvider encapsulates\n // the untrusted-window access and validates the injected provider's shape,\n // returning undefined when OneKey is absent or malformed.\n Promise.resolve()\n .then(() => {\n if (getOneKeyStellarProvider()) {\n try {\n const oneKeyProvider = createOneKeyProvider();\n const walletProvider = createWalletProviderFromStellarProvider({\n dynamicClient: client,\n stellarProvider: oneKeyProvider,\n walletInfo: {\n displayName: 'OneKey',\n icon: 'https://uni.onekey-asset.com/static/logo/onekey.png',\n key: 'onekey',\n },\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WINDOW_INJECT,\n walletProvider,\n });\n } catch (error) {\n getCore(client).logger.error('Error creating OneKey provider', error);\n }\n }\n })\n .catch((error) => {\n getCore(client).logger.error('Error checking OneKey connection', error);\n });\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client/core';\n\nimport { addStellarInjectedWalletsExtension } from '../injected/addStellarInjectedWalletsExtension';\n\n/**\n * Adds the Stellar extension to the Dynamic client.\n *\n * This is a convenience function that adds support for Stellar wallets,\n * including Freighter, Lobstr, and OneKey.\n *\n * @example\n * ```ts\n * const client = createDynamicClient({ environmentId: 'env-123' });\n * addStellarExtension(client);\n * ```\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns void\n * @see isStellarWalletAccount\n * @see signTransaction\n * @notInstrumented\n */\nexport const addStellarExtension = (client = getDefaultClient()): void => {\n addStellarInjectedWalletsExtension(client);\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport type {\n IStellarProvider,\n StellarProviderEvent,\n StellarEventCallback,\n StellarSignTransactionOptions,\n StellarNetworkName,\n} from '../StellarProvider.types';\nexport type { StellarWalletAccount } from '../StellarWalletAccount.types';\nexport { NotStellarProviderError } from '../errors/NotStellarProviderError';\nexport { isStellarWalletAccount } from '../isStellarWalletAccount';\nexport { addStellarExtension } from '../addStellarExtension';\nexport { signTransaction } from '../signTransaction';\n"],"mappings":"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"}
|
|
@@ -3,8 +3,16 @@ import type { StellarWalletAccount } from '../StellarWalletAccount.types';
|
|
|
3
3
|
/**
|
|
4
4
|
* Type guard to check if a wallet account is a Stellar wallet account.
|
|
5
5
|
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const accounts = getWalletAccounts();
|
|
9
|
+
* const stellarAccounts = accounts.filter(isStellarWalletAccount);
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
6
12
|
* @param walletAccount - The wallet account to check.
|
|
7
13
|
* @returns True if the wallet account is a Stellar wallet account.
|
|
14
|
+
* @see addStellarExtension
|
|
15
|
+
* @see signTransaction
|
|
8
16
|
* @notInstrumented
|
|
9
17
|
*/
|
|
10
18
|
export declare const isStellarWalletAccount: (walletAccount: WalletAccount) => walletAccount is StellarWalletAccount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isStellarWalletAccount.d.ts","sourceRoot":"","sources":["../../src/isStellarWalletAccount/isStellarWalletAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"isStellarWalletAccount.d.ts","sourceRoot":"","sources":["../../src/isStellarWalletAccount/isStellarWalletAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,kBAClB,aAAa,KAC3B,aAAa,IAAI,oBAEnB,CAAC"}
|
|
@@ -4,12 +4,23 @@ type SignTransactionParams = {
|
|
|
4
4
|
walletAccount: StellarWalletAccount;
|
|
5
5
|
};
|
|
6
6
|
/**
|
|
7
|
-
* Signs a Stellar transaction
|
|
8
|
-
*
|
|
9
|
-
* @
|
|
10
|
-
*
|
|
7
|
+
* Signs a Stellar transaction.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const { signedXdr } = await signTransaction({
|
|
12
|
+
* walletAccount: stellarAccount,
|
|
13
|
+
* transactionXdr: 'AAAAAgAAAA...',
|
|
14
|
+
* });
|
|
15
|
+
* ```
|
|
11
16
|
*
|
|
12
|
-
* @
|
|
17
|
+
* @param params.transactionXdr - The transaction XDR to sign.
|
|
18
|
+
* @param params.walletAccount - The wallet account to sign the transaction with.
|
|
19
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
20
|
+
* @returns An object containing the signed XDR.
|
|
21
|
+
* @throws {NotStellarProviderError} If the wallet account's provider is not a Stellar provider.
|
|
22
|
+
* @see isStellarWalletAccount
|
|
23
|
+
* @see addStellarExtension
|
|
13
24
|
* @notInstrumented
|
|
14
25
|
*/
|
|
15
26
|
export declare const signTransaction: ({ transactionXdr, walletAccount }: SignTransactionParams, client?: import("@dynamic-labs-sdk/client").DynamicClient) => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../src/signTransaction/signTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,KAAK,qBAAqB,GAAG;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"signTransaction.d.ts","sourceRoot":"","sources":["../../src/signTransaction/signTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,KAAK,qBAAqB,GAAG;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,oBAAoB,CAAC;CACrC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe,sCACS,qBAAqB,gEAEvD,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAa/B,CAAC"}
|