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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opentool",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "OpenTool framework for building serverless MCP tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,7 +10,7 @@
10
10
  "validate": "opentool validate"
11
11
  },
12
12
  "dependencies": {
13
- "opentool": "^0.13.0",
13
+ "opentool": "^0.14.0",
14
14
  "zod": "^4.3.6"
15
15
  },
16
16
  "devDependencies": {