opentool 0.13.0 → 0.14.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/adapters/hyperliquid/browser.js +10 -10
- package/dist/adapters/hyperliquid/browser.js.map +1 -1
- package/dist/adapters/hyperliquid/index.js +7 -7
- package/dist/adapters/hyperliquid/index.js.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/wallet/browser.js +3 -2
- package/dist/wallet/browser.js.map +1 -1
- package/package.json +1 -1
- package/templates/base/package.json +1 -1
package/dist/wallet/browser.js
CHANGED
|
@@ -128,6 +128,7 @@ function createMonotonicNonceSource(start = Date.now()) {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
// src/wallet/browser.ts
|
|
131
|
+
var browserFetch = (...args) => fetch(...args);
|
|
131
132
|
function resolveChainSlug(reference) {
|
|
132
133
|
if (reference === void 0) {
|
|
133
134
|
return Object.entries(chains).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] || DEFAULT_CHAIN.slug;
|
|
@@ -214,7 +215,7 @@ function createBrowserWalletContext(options) {
|
|
|
214
215
|
const rpcUrl = getRpcUrl(slug, overrides);
|
|
215
216
|
const publicClient = options.publicClient ?? createPublicClient({
|
|
216
217
|
chain: chain.chain,
|
|
217
|
-
transport: http(rpcUrl)
|
|
218
|
+
transport: http(rpcUrl, { fetchFn: browserFetch })
|
|
218
219
|
});
|
|
219
220
|
const walletClient = options.walletClient;
|
|
220
221
|
const helperNonceSource = options.nonceSource ?? createMonotonicNonceSource();
|
|
@@ -244,7 +245,7 @@ async function createTurnkeyBrowserProvider(config) {
|
|
|
244
245
|
signWith: config.signWith,
|
|
245
246
|
...config.ethereumAddress ? { ethereumAddress: config.ethereumAddress } : {}
|
|
246
247
|
});
|
|
247
|
-
const transport = http(config.rpcUrl);
|
|
248
|
+
const transport = http(config.rpcUrl, { fetchFn: browserFetch });
|
|
248
249
|
const publicClient = createPublicClient({
|
|
249
250
|
chain: config.chain.chain,
|
|
250
251
|
transport
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/wallet/constants.ts","../../src/wallet/nonces.ts","../../src/wallet/browser.ts"],"names":["tokens"],"mappings":"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","file":"browser.js","sourcesContent":["import { zeroAddress } from \"viem\";\nimport { arbitrum, arbitrumSepolia, base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\nconst ARBITRUM_ALCHEMY_HOST = \"https://arb-mainnet.g.alchemy.com/v2/\";\nconst ARBITRUM_SEPOLIA_ALCHEMY_HOST = \"https://arb-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(host: string, fallbackUrls: readonly string[]): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\",\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(ETHEREUM_ALCHEMY_HOST, mainnet.rpcUrls.default.http),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(BASE_SEPOLIA_ALCHEMY_HOST, baseSepolia.rpcUrls.default.http),\n },\n arbitrum: {\n id: arbitrum.id,\n slug: \"arbitrum\",\n name: \"Arbitrum One\",\n chain: arbitrum,\n rpcUrl: buildRpcResolver(ARBITRUM_ALCHEMY_HOST, arbitrum.rpcUrls.default.http),\n publicRpcUrls: arbitrum.rpcUrls.default.http,\n },\n arbitrumSepolia: {\n id: arbitrumSepolia.id,\n slug: \"arbitrum-sepolia\",\n name: \"Arbitrum Sepolia\",\n chain: arbitrumSepolia,\n rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),\n publicRpcUrls: arbitrumSepolia.rpcUrls.default.http,\n },\n};\n\nfunction createNativeToken(chainId: number, symbol: string, name: string): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number,\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(base.id, \"USDC\", \"USD Coin\", \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\", 6),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(mainnet.id, \"USDC\", \"USD Coin\", \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\", 6),\n },\n arbitrum: {\n ...createNativeToken(arbitrum.id, \"ETH\", \"Ether\"),\n USDC: token(arbitrum.id, \"USDC\", \"USD Coin\", \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\", 6),\n },\n arbitrumSepolia: {\n ...createNativeToken(arbitrumSepolia.id, \"ETH\", \"Ether\"),\n USDC: token(\n arbitrumSepolia.id,\n \"USDC\",\n \"USD Coin\",\n \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n 6,\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","export type NonceSource = () => number;\n\nexport function createMonotonicNonceSource(start: number = Date.now()): NonceSource {\n let last = start;\n return () => {\n const now = Date.now();\n if (now > last) {\n last = now;\n } else {\n last += 1;\n }\n return last;\n };\n}\n","import { createAccount } from \"@turnkey/viem\";\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n type WalletClient,\n} from \"viem\";\nimport type { Account } from \"viem/accounts\";\n\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createMonotonicNonceSource, type NonceSource } from \"./nonces\";\nimport type {\n ChainMetadata,\n ChainReference,\n HexAddress,\n RpcProviderOptions,\n TurnkeySignWith,\n WalletFullContext,\n WalletProviderType,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"./types\";\n\ntype ChainSlug = keyof typeof chainRegistry;\ntype TurnkeyBrowserClientLike = Parameters<typeof createAccount>[0][\"client\"];\n\nfunction resolveChainSlug(reference?: ChainReference): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nfunction getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nfunction createWalletHelpers(params: {\n account: Account;\n publicClient: PublicClient<Transport, Chain>;\n walletClient: WalletClient<Transport, Chain, Account>;\n}) {\n async function sendTransaction(options: WalletSendTransactionParams) {\n const tx: {\n account: Account;\n to?: HexAddress;\n value?: bigint;\n data?: `0x${string}`;\n } = {\n account: params.account,\n };\n\n if (options.to) {\n tx.to = options.to;\n }\n if (options.value !== undefined) {\n tx.value = options.value;\n }\n if (options.data !== undefined) {\n tx.data = options.data;\n }\n\n return params.walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return params.publicClient.getBalance({ address: params.account.address });\n }\n\n async function transfer(options: WalletTransferParams) {\n return sendTransaction({\n to: options.to,\n value: options.amount,\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n }\n\n return {\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n\nexport interface BrowserWalletContextOptions {\n chain?: ChainReference;\n apiKey?: string;\n rpcUrl?: string;\n address: HexAddress;\n account: Account;\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient?: PublicClient<Transport, Chain> | undefined;\n nonceSource?: NonceSource | undefined;\n providerType?: WalletProviderType | undefined;\n}\n\nexport function createBrowserWalletContext(\n options: BrowserWalletContextOptions,\n): WalletFullContext {\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? DEFAULT_TOKENS;\n const overrides: RpcProviderOptions = {};\n\n if (options.rpcUrl) {\n overrides.url = options.rpcUrl;\n }\n if (options.apiKey) {\n overrides.apiKey = options.apiKey;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n const publicClient =\n options.publicClient ??\n createPublicClient<Transport, Chain>({\n chain: chain.chain,\n transport: http(rpcUrl),\n });\n const walletClient = options.walletClient;\n const helperNonceSource = options.nonceSource ?? createMonotonicNonceSource();\n const helpers = createWalletHelpers({\n account: options.account,\n publicClient,\n walletClient,\n });\n\n return {\n chain,\n tokens,\n rpcUrl,\n providerType: options.providerType ?? \"turnkey\",\n publicClient,\n address: options.address,\n account: options.account,\n walletClient,\n nonceSource: helperNonceSource,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n ...helpers,\n };\n}\n\nexport interface TurnkeyBrowserProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n signWith: TurnkeySignWith;\n client: TurnkeyBrowserClientLike;\n ethereumAddress?: HexAddress | undefined;\n nonceSource?: NonceSource | undefined;\n}\n\nexport async function createTurnkeyBrowserProvider(\n config: TurnkeyBrowserProviderConfig,\n): Promise<WalletFullContext> {\n const account = (await createAccount({\n client: config.client,\n organizationId: config.organizationId,\n signWith: config.signWith,\n ...(config.ethereumAddress ? { ethereumAddress: config.ethereumAddress } : {}),\n })) as Account;\n\n const transport = http(config.rpcUrl);\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n return createBrowserWalletContext({\n chain: config.chain.slug,\n rpcUrl: config.rpcUrl,\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n ...(config.nonceSource ? { nonceSource: config.nonceSource } : {}),\n providerType: \"turnkey\",\n });\n}\n\nexport { createMonotonicNonceSource };\nexport type { NonceSource };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/wallet/constants.ts","../../src/wallet/nonces.ts","../../src/wallet/browser.ts"],"names":["tokens"],"mappings":"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","file":"browser.js","sourcesContent":["import { zeroAddress } from \"viem\";\nimport { arbitrum, arbitrumSepolia, base, baseSepolia, mainnet } from \"viem/chains\";\n\nimport type {\n ChainMetadata,\n ChainTokenMap,\n HexAddress,\n RpcUrlResolver,\n WalletRegistry,\n} from \"./types\";\n\nconst BASE_ALCHEMY_HOST = \"https://base-mainnet.g.alchemy.com/v2/\";\nconst ETHEREUM_ALCHEMY_HOST = \"https://eth-mainnet.g.alchemy.com/v2/\";\nconst BASE_SEPOLIA_ALCHEMY_HOST = \"https://base-sepolia.g.alchemy.com/v2/\";\nconst ARBITRUM_ALCHEMY_HOST = \"https://arb-mainnet.g.alchemy.com/v2/\";\nconst ARBITRUM_SEPOLIA_ALCHEMY_HOST = \"https://arb-sepolia.g.alchemy.com/v2/\";\n\nfunction buildRpcResolver(host: string, fallbackUrls: readonly string[]): RpcUrlResolver {\n return (options) => {\n if (options?.url) {\n return options.url;\n }\n\n if (options?.apiKey) {\n return `${host}${options.apiKey}`;\n }\n\n if (fallbackUrls.length > 0) {\n return fallbackUrls[0];\n }\n\n throw new Error(\n \"No RPC URL available: supply a full url via options or an apiKey for the default host\",\n );\n };\n}\n\nconst chains: Record<string, ChainMetadata> = {\n base: {\n id: base.id,\n slug: \"base\",\n name: \"Base\",\n chain: base,\n rpcUrl: buildRpcResolver(BASE_ALCHEMY_HOST, base.rpcUrls.default.http),\n publicRpcUrls: base.rpcUrls.default.http,\n },\n ethereum: {\n id: mainnet.id,\n slug: \"ethereum\",\n name: \"Ethereum\",\n chain: mainnet,\n rpcUrl: buildRpcResolver(ETHEREUM_ALCHEMY_HOST, mainnet.rpcUrls.default.http),\n publicRpcUrls: mainnet.rpcUrls.default.http,\n },\n baseSepolia: {\n id: baseSepolia.id,\n slug: \"base-sepolia\",\n name: \"Base Sepolia\",\n chain: baseSepolia,\n rpcUrl: buildRpcResolver(BASE_SEPOLIA_ALCHEMY_HOST, baseSepolia.rpcUrls.default.http),\n },\n arbitrum: {\n id: arbitrum.id,\n slug: \"arbitrum\",\n name: \"Arbitrum One\",\n chain: arbitrum,\n rpcUrl: buildRpcResolver(ARBITRUM_ALCHEMY_HOST, arbitrum.rpcUrls.default.http),\n publicRpcUrls: arbitrum.rpcUrls.default.http,\n },\n arbitrumSepolia: {\n id: arbitrumSepolia.id,\n slug: \"arbitrum-sepolia\",\n name: \"Arbitrum Sepolia\",\n chain: arbitrumSepolia,\n rpcUrl: buildRpcResolver(ARBITRUM_SEPOLIA_ALCHEMY_HOST, arbitrumSepolia.rpcUrls.default.http),\n publicRpcUrls: arbitrumSepolia.rpcUrls.default.http,\n },\n};\n\nfunction createNativeToken(chainId: number, symbol: string, name: string): ChainTokenMap {\n return {\n [symbol]: {\n symbol,\n name,\n decimals: 18,\n address: zeroAddress,\n chainId,\n isNative: true,\n },\n };\n}\n\nfunction token(\n chainId: number,\n symbol: string,\n name: string,\n address: HexAddress,\n decimals: number,\n) {\n return {\n symbol,\n name,\n decimals,\n address,\n chainId,\n };\n}\n\nconst tokens: Record<string, ChainTokenMap> = {\n base: {\n ...createNativeToken(base.id, \"ETH\", \"Ether\"),\n USDC: token(base.id, \"USDC\", \"USD Coin\", \"0x833589fCD6eDb6E08f4c7C31c9A8Ba32D74b86B2\", 6),\n },\n ethereum: {\n ...createNativeToken(mainnet.id, \"ETH\", \"Ether\"),\n USDC: token(mainnet.id, \"USDC\", \"USD Coin\", \"0xA0b86991c6218b36c1d19d4a2e9Eb0cE3606eB48\", 6),\n },\n arbitrum: {\n ...createNativeToken(arbitrum.id, \"ETH\", \"Ether\"),\n USDC: token(arbitrum.id, \"USDC\", \"USD Coin\", \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\", 6),\n },\n arbitrumSepolia: {\n ...createNativeToken(arbitrumSepolia.id, \"ETH\", \"Ether\"),\n USDC: token(\n arbitrumSepolia.id,\n \"USDC\",\n \"USD Coin\",\n \"0x1baAbB04529D43a73232B713C0FE471f7c7334d5\",\n 6,\n ),\n },\n};\n\nexport const DEFAULT_CHAIN = chains.base;\nexport const DEFAULT_TOKENS = tokens.base;\n\nexport const registry: WalletRegistry = {\n chains,\n tokens,\n};\n\nexport { chains, tokens };\n","export type NonceSource = () => number;\n\nexport function createMonotonicNonceSource(start: number = Date.now()): NonceSource {\n let last = start;\n return () => {\n const now = Date.now();\n if (now > last) {\n last = now;\n } else {\n last += 1;\n }\n return last;\n };\n}\n","import { createAccount } from \"@turnkey/viem\";\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type PublicClient,\n type Transport,\n type WalletClient,\n} from \"viem\";\nimport type { Account } from \"viem/accounts\";\n\nimport {\n chains as chainRegistry,\n tokens as tokenRegistry,\n DEFAULT_CHAIN,\n DEFAULT_TOKENS,\n} from \"./constants\";\nimport { createMonotonicNonceSource, type NonceSource } from \"./nonces\";\nimport type {\n ChainMetadata,\n ChainReference,\n HexAddress,\n RpcProviderOptions,\n TurnkeySignWith,\n WalletFullContext,\n WalletProviderType,\n WalletSendTransactionParams,\n WalletTransferParams,\n} from \"./types\";\n\ntype ChainSlug = keyof typeof chainRegistry;\ntype TurnkeyBrowserClientLike = Parameters<typeof createAccount>[0][\"client\"];\n\nconst browserFetch: typeof fetch = (...args) => fetch(...args);\n\nfunction resolveChainSlug(reference?: ChainReference): ChainSlug {\n if (reference === undefined) {\n return (Object.entries(chainRegistry).find(([, meta]) => meta.id === DEFAULT_CHAIN.id)?.[0] ||\n DEFAULT_CHAIN.slug) as ChainSlug;\n }\n\n if (typeof reference === \"number\") {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === reference);\n if (match) {\n return match[0] as ChainSlug;\n }\n } else if (typeof reference === \"string\") {\n const sanitize = (value: string) => value.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n\n if (reference in chainRegistry) {\n return reference as ChainSlug;\n }\n\n const normalized = sanitize(reference);\n\n const keyMatch = Object.entries(chainRegistry).find(([key]) => sanitize(key) === normalized);\n if (keyMatch) {\n return keyMatch[0] as ChainSlug;\n }\n\n const slugMatch = Object.entries(chainRegistry).find(([, meta]) => {\n return meta.slug && sanitize(meta.slug) === normalized;\n });\n if (slugMatch) {\n return slugMatch[0] as ChainSlug;\n }\n\n const asNumber = Number.parseInt(normalized, 10);\n if (!Number.isNaN(asNumber)) {\n const match = Object.entries(chainRegistry).find(([, meta]) => meta.id === asNumber);\n if (match) {\n return match[0] as ChainSlug;\n }\n }\n }\n\n throw new Error(`Unknown chain reference: ${reference}`);\n}\n\nfunction getRpcUrl(chain: ChainSlug | number, options?: RpcProviderOptions): string {\n const slug = resolveChainSlug(chain);\n const entry = chainRegistry[slug];\n return entry.rpcUrl(options);\n}\n\nfunction createWalletHelpers(params: {\n account: Account;\n publicClient: PublicClient<Transport, Chain>;\n walletClient: WalletClient<Transport, Chain, Account>;\n}) {\n async function sendTransaction(options: WalletSendTransactionParams) {\n const tx: {\n account: Account;\n to?: HexAddress;\n value?: bigint;\n data?: `0x${string}`;\n } = {\n account: params.account,\n };\n\n if (options.to) {\n tx.to = options.to;\n }\n if (options.value !== undefined) {\n tx.value = options.value;\n }\n if (options.data !== undefined) {\n tx.data = options.data;\n }\n\n return params.walletClient.sendTransaction(tx);\n }\n\n async function getNativeBalance() {\n return params.publicClient.getBalance({ address: params.account.address });\n }\n\n async function transfer(options: WalletTransferParams) {\n return sendTransaction({\n to: options.to,\n value: options.amount,\n ...(options.data !== undefined ? { data: options.data } : {}),\n });\n }\n\n return {\n sendTransaction,\n getNativeBalance,\n transfer,\n };\n}\n\nexport interface BrowserWalletContextOptions {\n chain?: ChainReference;\n apiKey?: string;\n rpcUrl?: string;\n address: HexAddress;\n account: Account;\n walletClient: WalletClient<Transport, Chain, Account>;\n publicClient?: PublicClient<Transport, Chain> | undefined;\n nonceSource?: NonceSource | undefined;\n providerType?: WalletProviderType | undefined;\n}\n\nexport function createBrowserWalletContext(\n options: BrowserWalletContextOptions,\n): WalletFullContext {\n const slug = resolveChainSlug(options.chain);\n const chain = chainRegistry[slug];\n const tokens = tokenRegistry[slug] ?? DEFAULT_TOKENS;\n const overrides: RpcProviderOptions = {};\n\n if (options.rpcUrl) {\n overrides.url = options.rpcUrl;\n }\n if (options.apiKey) {\n overrides.apiKey = options.apiKey;\n }\n\n const rpcUrl = getRpcUrl(slug, overrides);\n const publicClient =\n options.publicClient ??\n createPublicClient<Transport, Chain>({\n chain: chain.chain,\n transport: http(rpcUrl, { fetchFn: browserFetch }),\n });\n const walletClient = options.walletClient;\n const helperNonceSource = options.nonceSource ?? createMonotonicNonceSource();\n const helpers = createWalletHelpers({\n account: options.account,\n publicClient,\n walletClient,\n });\n\n return {\n chain,\n tokens,\n rpcUrl,\n providerType: options.providerType ?? \"turnkey\",\n publicClient,\n address: options.address,\n account: options.account,\n walletClient,\n nonceSource: helperNonceSource,\n getRpcUrl: (override?: RpcProviderOptions) => getRpcUrl(slug, override),\n ...helpers,\n };\n}\n\nexport interface TurnkeyBrowserProviderConfig {\n chain: ChainMetadata;\n rpcUrl: string;\n organizationId: string;\n signWith: TurnkeySignWith;\n client: TurnkeyBrowserClientLike;\n ethereumAddress?: HexAddress | undefined;\n nonceSource?: NonceSource | undefined;\n}\n\nexport async function createTurnkeyBrowserProvider(\n config: TurnkeyBrowserProviderConfig,\n): Promise<WalletFullContext> {\n const account = (await createAccount({\n client: config.client,\n organizationId: config.organizationId,\n signWith: config.signWith,\n ...(config.ethereumAddress ? { ethereumAddress: config.ethereumAddress } : {}),\n })) as Account;\n\n const transport = http(config.rpcUrl, { fetchFn: browserFetch });\n const publicClient = createPublicClient<Transport, Chain>({\n chain: config.chain.chain,\n transport,\n });\n\n const walletClient = createWalletClient<Transport, Chain, Account>({\n account,\n chain: config.chain.chain,\n transport,\n });\n\n return createBrowserWalletContext({\n chain: config.chain.slug,\n rpcUrl: config.rpcUrl,\n address: account.address as HexAddress,\n account,\n walletClient,\n publicClient,\n ...(config.nonceSource ? { nonceSource: config.nonceSource } : {}),\n providerType: \"turnkey\",\n });\n}\n\nexport { createMonotonicNonceSource };\nexport type { NonceSource };\n"]}
|
package/package.json
CHANGED