@awarizon/web3 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chains.ts","../src/contract.ts","../src/errors.ts","../src/telemetry.ts","../src/standards.ts","../src/sdk.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n mainnet,\n base,\n baseSepolia,\n polygon,\n polygonAmoy,\n arbitrum,\n arbitrumSepolia,\n optimism,\n optimismSepolia,\n bsc,\n avalanche,\n sepolia,\n zora,\n linea,\n scroll,\n mantle,\n celo,\n gnosis,\n fantom,\n moonbeam,\n} from 'viem/chains';\nimport type { Chain } from 'viem';\n\n// ─── Supported chains registry ────────────────────────────────────────────────\n\nexport const CHAINS: Record<string, Chain> = {\n // Mainnet\n mainnet,\n ethereum: mainnet,\n eth: mainnet,\n\n // Base\n base,\n 'base-mainnet': base,\n\n // Base Sepolia\n 'base-sepolia': baseSepolia,\n baseSepolia,\n\n // Polygon\n polygon,\n matic: polygon,\n\n // Polygon Amoy (testnet)\n amoy: polygonAmoy,\n 'polygon-amoy': polygonAmoy,\n\n // Arbitrum\n arbitrum,\n 'arbitrum-one': arbitrum,\n\n // Arbitrum Sepolia\n 'arbitrum-sepolia': arbitrumSepolia,\n arbitrumSepolia,\n\n // Optimism\n optimism,\n op: optimism,\n\n // Optimism Sepolia\n 'optimism-sepolia': optimismSepolia,\n optimismSepolia,\n\n // BSC\n bsc,\n bnb: bsc,\n 'binance-smart-chain': bsc,\n\n // Avalanche\n avalanche,\n avax: avalanche,\n\n // Testnets\n sepolia,\n 'eth-sepolia': sepolia,\n\n // Other L2s\n zora,\n linea,\n scroll,\n mantle,\n celo,\n gnosis,\n xdai: gnosis,\n fantom,\n moonbeam,\n};\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n// Pre-computed once at module load — used in unsupported-chain error messages.\nconst _chainAliases = Object.keys(CHAINS).sort().join(', ');\n\n/**\n * Resolves a chain string identifier or a viem Chain object to a Chain.\n *\n * @example\n * resolveChain(\"base\") // → Chain object for Base\n * resolveChain(base) // → same Chain object, passthrough\n * resolveChain(\"unknown\") // → throws Error\n */\nexport function resolveChain(chain: Chain | string): Chain {\n if (typeof chain === 'object' && 'id' in chain) {\n return chain;\n }\n\n if (typeof chain === 'string') {\n const resolved = CHAINS[chain.toLowerCase()] ?? CHAINS[chain];\n if (!resolved) {\n throw new Error(\n `[awarizon/web3] Unsupported chain: \"${chain}\".\\n` +\n `Available chains: ${_chainAliases}`,\n );\n }\n return resolved;\n }\n\n throw new TypeError(`[awarizon/web3] chain must be a string or Chain object, got: ${typeof chain}`);\n}\n\n/** Returns a list of all unique supported chain IDs */\nexport function getSupportedChainIds(): number[] {\n const seen = new Set<number>();\n return Object.values(CHAINS)\n .filter(c => { if (seen.has(c.id)) return false; seen.add(c.id); return true; })\n .map(c => c.id);\n}\n","import type { Abi, AbiFunction, AbiEvent, Address, PublicClient, Chain } from 'viem';\nimport { parseABI } from '@awarizon/abi-engine';\nimport { TransactionEngine } from '@awarizon/tx-engine';\nimport type { TelemetryClient, TelemetryEventType } from './telemetry';\nimport type { ContractInstance, EventUnsubscribe } from './types';\n\n// ─── Telemetry helper ─────────────────────────────────────────────────────────\n\nfunction trackEvent(\n telemetry: TelemetryClient | undefined,\n type: TelemetryEventType,\n chain: Chain | undefined,\n functionName: string | undefined,\n success: boolean,\n start: number,\n): void {\n telemetry?.track({\n type,\n chain: chain?.name ?? 'unknown',\n chainId: chain?.id ?? 0,\n functionName,\n success,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n}\n\n// ─── ContractFactory ──────────────────────────────────────────────────────────\n\n/**\n * Builds a fully dynamic ContractInstance from an address + ABI.\n *\n * Every function in the ABI is attached as a method that routes to read or\n * write based on stateMutability. Telemetry is tracked for every call.\n *\n * The `txEngine` parameter is shared from the parent SDK instance — one engine\n * per SDK, not one per contract.\n */\nexport function buildContractInstance(\n address: Address,\n abi: Abi,\n publicClient: PublicClient,\n txEngine: TransactionEngine,\n telemetry?: TelemetryClient,\n chain?: Chain,\n): ContractInstance {\n // parseABI is memoized by ABI object identity — free on repeat calls\n const parsed = parseABI(abi);\n\n // O(1) event lookup — built once, used on every .on() call\n const eventsMap = new Map<string, AbiEvent>(parsed.events.map(e => [e.name, e]));\n\n const instance: Record<string, unknown> = {\n _address: address,\n _abi: abi,\n };\n\n for (const fn of parsed.readFunctions) {\n instance[fn.name] = buildReadMethod(fn, address, abi, txEngine, telemetry, chain);\n }\n\n for (const fn of parsed.writeFunctions) {\n instance[fn.name] = buildWriteMethod(fn, address, abi, txEngine, telemetry, chain);\n }\n\n instance['on'] = buildEventSubscription(address, abi, eventsMap, publicClient);\n\n instance['estimateGas'] = async (method: string, ...args: unknown[]): Promise<bigint> => {\n const start = Date.now();\n try {\n const estimate = await txEngine.estimateGas({ address, abi, functionName: method, args });\n trackEvent(telemetry, 'contract.gas_estimate', chain, method, true, start);\n return estimate.gas;\n } catch (error) {\n trackEvent(telemetry, 'contract.gas_estimate', chain, method, false, start);\n throw error;\n }\n };\n\n return instance as ContractInstance;\n}\n\n// ─── Read method ──────────────────────────────────────────────────────────────\n\nfunction buildReadMethod(\n fn: AbiFunction,\n address: Address,\n abi: Abi,\n txEngine: TransactionEngine,\n telemetry: TelemetryClient | undefined,\n chain: Chain | undefined,\n): (...args: unknown[]) => Promise<unknown> {\n return async (...args: unknown[]) => {\n const start = Date.now();\n try {\n const result = await txEngine.read({ address, abi, functionName: fn.name, args });\n trackEvent(telemetry, 'contract.read', chain, fn.name, true, start);\n return result;\n } catch (error) {\n trackEvent(telemetry, 'contract.read', chain, fn.name, false, start);\n throw error;\n }\n };\n}\n\n// ─── Write method ─────────────────────────────────────────────────────────────\n\nfunction buildWriteMethod(\n fn: AbiFunction,\n address: Address,\n abi: Abi,\n txEngine: TransactionEngine,\n telemetry: TelemetryClient | undefined,\n chain: Chain | undefined,\n): (...args: unknown[]) => Promise<unknown> {\n const isPayable = fn.stateMutability === 'payable';\n\n return async (...args: unknown[]) => {\n let callArgs = args;\n let value: bigint | undefined;\n let gas: bigint | undefined;\n\n if (isPayable && args.length > 0) {\n const last = args[args.length - 1];\n if (isPayableOptions(last)) {\n callArgs = args.slice(0, -1);\n value = last.value;\n gas = last.gas;\n }\n }\n\n const start = Date.now();\n try {\n const result = await txEngine.write({\n address, abi, functionName: fn.name, args: callArgs, value, gas,\n });\n trackEvent(telemetry, 'contract.write', chain, fn.name, true, start);\n return result;\n } catch (error) {\n trackEvent(telemetry, 'contract.write', chain, fn.name, false, start);\n throw error;\n }\n };\n}\n\nfunction isPayableOptions(val: unknown): val is { value?: bigint; gas?: bigint } {\n if (!val || typeof val !== 'object') return false;\n const obj = val as Record<string, unknown>;\n const hasValue = 'value' in obj && (obj.value === undefined || typeof obj.value === 'bigint');\n const hasGas = 'gas' in obj && (obj.gas === undefined || typeof obj.gas === 'bigint');\n return hasValue || hasGas;\n}\n\n// ─── Event subscription ───────────────────────────────────────────────────────\n\nfunction buildEventSubscription(\n address: Address,\n abi: Abi,\n eventsMap: Map<string, AbiEvent>,\n publicClient: PublicClient,\n): (event: string, callback: (log: unknown) => void) => EventUnsubscribe {\n return (eventName: string, callback: (log: unknown) => void): EventUnsubscribe => {\n const abiEvent = eventsMap.get(eventName); // O(1)\n\n if (!abiEvent) {\n const available = [...eventsMap.keys()].join(', ') || 'none';\n throw new Error(\n `[awarizon/web3] Event \"${eventName}\" not found on contract ${address}.\\n` +\n `Available events: ${available}`,\n );\n }\n\n const unwatch = publicClient.watchContractEvent({\n address,\n abi,\n eventName,\n onLogs: (logs) => {\n for (const log of logs) callback(log);\n },\n });\n\n return unwatch;\n };\n}\n","export class NetworkMismatchError extends Error {\n readonly code = 'NETWORK_MISMATCH' as const;\n readonly expected: string;\n readonly got: string;\n\n constructor(expected: string | number, got: string | number) {\n super(`[awarizon/web3] Network mismatch: expected chain ID ${expected}, but wallet is on chain ID ${got}`);\n this.name = 'NetworkMismatchError';\n this.expected = String(expected);\n this.got = String(got);\n }\n}\n\nexport class ProviderError extends Error {\n readonly code = 'PROVIDER_ERROR' as const;\n\n constructor(message: string) {\n super(`[awarizon/web3] Provider error: ${message}`);\n this.name = 'ProviderError';\n }\n}\n\nexport class ContractNotLoadedError extends Error {\n readonly code = 'CONTRACT_NOT_LOADED' as const;\n\n constructor(address: string) {\n super(`[awarizon/web3] Contract at ${address} is not loaded. Call awarizon.contract({ address, abi }) first.`);\n this.name = 'ContractNotLoadedError';\n }\n}\n\nexport class UnsupportedChainError extends Error {\n readonly code = 'UNSUPPORTED_CHAIN' as const;\n readonly chain: string;\n\n constructor(chain: string) {\n super(`[awarizon/web3] Unsupported chain: \"${chain}\". Pass a valid chain name or viem Chain object.`);\n this.name = 'UnsupportedChainError';\n this.chain = chain;\n }\n}\n\nexport class ApiKeyRequiredError extends Error {\n readonly code = 'API_KEY_REQUIRED' as const;\n\n constructor() {\n super(\n '[awarizon/web3] An API key is required. Pass apiKey: \"awz_live_...\" to AwarizonWeb3({ ... }). ' +\n 'Get yours at https://awarizon.com/dashboard/api-keys',\n );\n this.name = 'ApiKeyRequiredError';\n }\n}\n\nexport class InvalidApiKeyError extends Error {\n readonly code = 'INVALID_API_KEY' as const;\n\n constructor(message = 'Invalid or revoked API key.') {\n super(`[awarizon/web3] ${message}`);\n this.name = 'InvalidApiKeyError';\n }\n}\n","import { InvalidApiKeyError } from './errors';\n\nexport type TelemetryEventType =\n | 'contract.read'\n | 'contract.write'\n | 'contract.gas_estimate'\n | 'wallet.create'\n | 'wallet.import'\n | 'chain.switch';\n\nexport interface TelemetryEvent {\n type: TelemetryEventType;\n chain: string;\n chainId: number;\n functionName?: string;\n success: boolean;\n durationMs: number;\n ts: number;\n}\n\nconst DEFAULT_BASE_URL = 'https://awarizon.com';\nconst FLUSH_INTERVAL_MS = 10_000;\nconst MAX_BATCH_SIZE = 20;\nconst VALIDATION_TIMEOUT = 5_000;\n\n// ─── TelemetryClient ──────────────────────────────────────────────────────────\n\n/**\n * Handles SDK-to-Awarizon API communication:\n * 1. Validates the API key on first meaningful operation (5s timeout)\n * 2. Batches usage events and flushes them fire-and-forget\n * 3. Flushes remaining events via sendBeacon on browser page unload\n *\n * All telemetry failures are swallowed — they never surface to the caller.\n * The only hard error is InvalidApiKeyError thrown from ensureValidated().\n */\nexport class TelemetryClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n private validated = false;\n private validationPromise: Promise<void> | null = null;\n private queue: TelemetryEvent[] = [];\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private unloadListener: (() => void) | null = null;\n\n constructor(apiKey: string, baseUrl = DEFAULT_BASE_URL) {\n this.apiKey = apiKey;\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n }\n\n /**\n * Ensures the API key has been validated against the Awarizon API.\n * Idempotent — safe to call on every operation; only hits the network once.\n * Times out after 5 seconds to avoid hanging in degraded network conditions.\n *\n * @throws {InvalidApiKeyError} if the key is invalid, revoked, or unreachable\n */\n async ensureValidated(): Promise<void> {\n if (this.validated) return;\n if (this.validationPromise) return this.validationPromise;\n\n this.validationPromise = this._validate().catch((err) => {\n // Reset so callers can retry after transient failures\n this.validationPromise = null;\n throw err;\n });\n\n return this.validationPromise;\n }\n\n /**\n * Queue a usage event. Events are batched and sent periodically.\n * Must only be called after ensureValidated() has resolved.\n */\n track(event: TelemetryEvent): void {\n if (!this.validated) return;\n this.queue.push(event);\n if (this.queue.length >= MAX_BATCH_SIZE) this._flush(false);\n }\n\n /**\n * Flush pending events and stop background timers.\n * Call when tearing down a long-lived SDK instance (e.g. server shutdown).\n */\n async destroy(): Promise<void> {\n this._stopTimers();\n await this._flush(true);\n }\n\n // ─── Private ─────────────────────────────────────────────────────────────────\n\n private async _validate(): Promise<void> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), VALIDATION_TIMEOUT);\n\n let res: Response;\n try {\n res = await fetch(`${this.baseUrl}/api/v1/auth`, {\n method: 'GET',\n headers: { Authorization: `Bearer ${this.apiKey}` },\n signal: controller.signal,\n });\n } catch (err) {\n const msg = controller.signal.aborted\n ? `Awarizon API did not respond within ${VALIDATION_TIMEOUT / 1000}s.`\n : `Could not reach Awarizon API: ${(err as Error).message}`;\n throw new InvalidApiKeyError(msg);\n } finally {\n clearTimeout(timeout);\n }\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({})) as { error?: string };\n throw new InvalidApiKeyError(body.error ?? 'Invalid or revoked API key.');\n }\n\n this.validated = true;\n this._startTimers();\n }\n\n private _startTimers(): void {\n // Periodic background flush\n this.flushTimer = setInterval(() => {\n if (this.queue.length > 0) this._flush(false);\n }, FLUSH_INTERVAL_MS);\n\n // Prevent the interval from blocking Node.js process exit\n const timer = this.flushTimer as unknown as { unref?: () => void };\n if (typeof timer.unref === 'function') timer.unref();\n\n // Browser page-unload: sendBeacon guarantees delivery even as page closes\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {\n this.unloadListener = () => this._flushBeacon();\n window.addEventListener('beforeunload', this.unloadListener);\n }\n }\n\n private _stopTimers(): void {\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.unloadListener !== null && typeof window !== 'undefined') {\n window.removeEventListener('beforeunload', this.unloadListener);\n this.unloadListener = null;\n }\n }\n\n /**\n * Unified flush. Pass `await = true` for graceful shutdown,\n * `await = false` for fire-and-forget mid-session flushes.\n */\n private _flush(awaited: false): void;\n private _flush(awaited: true): Promise<void>;\n private _flush(awaited: boolean): void | Promise<void> {\n if (this.queue.length === 0) return awaited ? Promise.resolve() : undefined;\n\n const batch = this.queue.splice(0, MAX_BATCH_SIZE);\n const promise: Promise<void> = fetch(`${this.baseUrl}/api/v1/usage`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ events: batch }),\n }).then(() => {}, () => {});\n\n return awaited ? promise : undefined;\n }\n\n /** Uses sendBeacon for guaranteed delivery on page unload */\n private _flushBeacon(): void {\n if (this.queue.length === 0 || typeof navigator === 'undefined') return;\n const batch = this.queue.splice(0);\n navigator.sendBeacon(\n `${this.baseUrl}/api/v1/usage`,\n new Blob([JSON.stringify({ events: batch })], { type: 'application/json' }),\n );\n }\n}\n","import { erc20Abi, type Address, type Abi } from 'viem';\nimport type { ContractInstance, TransactionResult } from './types';\n\n// ─── ERC-20 ───────────────────────────────────────────────────────────────────\n\nexport const ERC20_ABI = erc20Abi;\n\nexport interface Erc20Contract {\n name(): Promise<string>;\n symbol(): Promise<string>;\n decimals(): Promise<number>;\n totalSupply(): Promise<bigint>;\n balanceOf(owner: Address): Promise<bigint>;\n allowance(owner: Address, spender: Address): Promise<bigint>;\n transfer(to: Address, amount: bigint): Promise<TransactionResult>;\n transferFrom(from: Address, to: Address, amount: bigint): Promise<TransactionResult>;\n approve(spender: Address, amount: bigint): Promise<TransactionResult>;\n on: ContractInstance['on'];\n estimateGas: ContractInstance['estimateGas'];\n readonly _address: Address;\n readonly _abi: Abi;\n}\n\n// ─── ERC-721 ──────────────────────────────────────────────────────────────────\n// Single safeTransferFrom overload (3-arg) to avoid ABI duplicate conflicts.\n// Includes tokenURI + totalSupply (ERC721Metadata / ERC721Enumerable extensions\n// present on virtually every deployed NFT contract).\n\nexport const ERC721_ABI = [\n { type: 'function', name: 'name', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'symbol', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'tokenURI', stateMutability: 'view', inputs: [{ name: 'tokenId', type: 'uint256' }], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'totalSupply', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },\n { type: 'function', name: 'ownerOf', stateMutability: 'view', inputs: [{ name: 'tokenId', type: 'uint256' }], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'balanceOf', stateMutability: 'view', inputs: [{ name: 'owner', type: 'address' }], outputs: [{ type: 'uint256' }] },\n { type: 'function', name: 'getApproved', stateMutability: 'view', inputs: [{ name: 'tokenId', type: 'uint256' }], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'isApprovedForAll', stateMutability: 'view', inputs: [{ name: 'owner', type: 'address' }, { name: 'operator', type: 'address' }], outputs: [{ type: 'bool' }] },\n { type: 'function', name: 'transferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }], outputs: [] },\n { type: 'function', name: 'safeTransferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }], outputs: [] },\n { type: 'function', name: 'approve', stateMutability: 'nonpayable', inputs: [{ name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }], outputs: [] },\n { type: 'function', name: 'setApprovalForAll', stateMutability: 'nonpayable', inputs: [{ name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }], outputs: [] },\n { type: 'event', name: 'Transfer', inputs: [{ indexed: true, name: 'from', type: 'address' }, { indexed: true, name: 'to', type: 'address' }, { indexed: true, name: 'tokenId', type: 'uint256' }] },\n { type: 'event', name: 'Approval', inputs: [{ indexed: true, name: 'owner', type: 'address' }, { indexed: true, name: 'approved', type: 'address' }, { indexed: true, name: 'tokenId', type: 'uint256' }] },\n { type: 'event', name: 'ApprovalForAll', inputs: [{ indexed: true, name: 'owner', type: 'address' }, { indexed: true, name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }] },\n] as const;\n\nexport interface Erc721Contract {\n name(): Promise<string>;\n symbol(): Promise<string>;\n tokenURI(tokenId: bigint): Promise<string>;\n totalSupply(): Promise<bigint>;\n ownerOf(tokenId: bigint): Promise<Address>;\n balanceOf(owner: Address): Promise<bigint>;\n getApproved(tokenId: bigint): Promise<Address>;\n isApprovedForAll(owner: Address, operator: Address): Promise<boolean>;\n transferFrom(from: Address, to: Address, tokenId: bigint): Promise<TransactionResult>;\n safeTransferFrom(from: Address, to: Address, tokenId: bigint): Promise<TransactionResult>;\n approve(to: Address, tokenId: bigint): Promise<TransactionResult>;\n setApprovalForAll(operator: Address, approved: boolean): Promise<TransactionResult>;\n on: ContractInstance['on'];\n estimateGas: ContractInstance['estimateGas'];\n readonly _address: Address;\n readonly _abi: Abi;\n}\n\n// ─── ERC-1155 ─────────────────────────────────────────────────────────────────\n\nexport const ERC1155_ABI = [\n { type: 'function', name: 'uri', stateMutability: 'view', inputs: [{ name: 'id', type: 'uint256' }], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'balanceOf', stateMutability: 'view', inputs: [{ name: 'account', type: 'address' }, { name: 'id', type: 'uint256' }], outputs: [{ type: 'uint256' }] },\n { type: 'function', name: 'balanceOfBatch', stateMutability: 'view', inputs: [{ name: 'accounts', type: 'address[]' }, { name: 'ids', type: 'uint256[]' }], outputs: [{ type: 'uint256[]' }] },\n { type: 'function', name: 'isApprovedForAll', stateMutability: 'view', inputs: [{ name: 'account', type: 'address' }, { name: 'operator', type: 'address' }], outputs: [{ type: 'bool' }] },\n { type: 'function', name: 'setApprovalForAll', stateMutability: 'nonpayable', inputs: [{ name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }], outputs: [] },\n { type: 'function', name: 'safeTransferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'id', type: 'uint256' }, { name: 'amount', type: 'uint256' }, { name: 'data', type: 'bytes' }], outputs: [] },\n { type: 'function', name: 'safeBatchTransferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'ids', type: 'uint256[]' }, { name: 'amounts', type: 'uint256[]' }, { name: 'data', type: 'bytes' }], outputs: [] },\n { type: 'event', name: 'TransferSingle', inputs: [{ indexed: true, name: 'operator', type: 'address' }, { indexed: true, name: 'from', type: 'address' }, { indexed: true, name: 'to', type: 'address' }, { name: 'id', type: 'uint256' }, { name: 'value', type: 'uint256' }] },\n { type: 'event', name: 'TransferBatch', inputs: [{ indexed: true, name: 'operator', type: 'address' }, { indexed: true, name: 'from', type: 'address' }, { indexed: true, name: 'to', type: 'address' }, { name: 'ids', type: 'uint256[]' }, { name: 'values', type: 'uint256[]' }] },\n { type: 'event', name: 'ApprovalForAll', inputs: [{ indexed: true, name: 'account', type: 'address' }, { indexed: true, name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }] },\n] as const;\n\nexport interface Erc1155Contract {\n uri(id: bigint): Promise<string>;\n balanceOf(account: Address, id: bigint): Promise<bigint>;\n balanceOfBatch(accounts: Address[], ids: bigint[]): Promise<bigint[]>;\n isApprovedForAll(account: Address, operator: Address): Promise<boolean>;\n setApprovalForAll(operator: Address, approved: boolean): Promise<TransactionResult>;\n safeTransferFrom(from: Address, to: Address, id: bigint, amount: bigint, data: `0x${string}`): Promise<TransactionResult>;\n safeBatchTransferFrom(from: Address, to: Address, ids: bigint[], amounts: bigint[], data: `0x${string}`): Promise<TransactionResult>;\n on: ContractInstance['on'];\n estimateGas: ContractInstance['estimateGas'];\n readonly _address: Address;\n readonly _abi: Abi;\n}\n","import {\n createPublicClient,\n http,\n type Chain,\n type WalletClient,\n type PublicClient,\n type Address,\n type Abi,\n type Hex,\n} from 'viem';\nimport { WalletEngine } from '@awarizon/wallet-engine';\nimport type {\n CreatedWallet,\n ImportedWalletFromMnemonic,\n ImportedWalletFromPrivateKey,\n ExternalWalletClient,\n} from '@awarizon/wallet-engine';\nimport { TransactionEngine } from '@awarizon/tx-engine';\nimport type { TransactionResult } from '@awarizon/tx-engine';\nimport { resolveChain } from './chains';\nimport { buildContractInstance } from './contract';\nimport { TelemetryClient } from './telemetry';\nimport { ApiKeyRequiredError } from './errors';\nimport {\n ERC20_ABI,\n ERC721_ABI,\n ERC1155_ABI,\n} from './standards';\nimport type {\n Erc20Contract,\n Erc721Contract,\n Erc1155Contract,\n} from './standards';\nimport type {\n AwarizonConfig,\n ContractConfig,\n ContractInstance,\n ContractRegistryEntry,\n SDKWalletInfo,\n} from './types';\n\n// Re-export errors so consumers only need one import path\nexport {\n WalletNotConnectedError,\n InvalidMnemonicError,\n InvalidPrivateKeyError,\n} from '@awarizon/wallet-engine';\n\nexport {\n ContractExecutionError,\n SimulationError,\n GasEstimationError,\n} from '@awarizon/tx-engine';\n\nexport {\n InvalidABIError,\n} from '@awarizon/abi-engine';\n\nexport {\n NetworkMismatchError,\n ProviderError,\n ContractNotLoadedError,\n UnsupportedChainError,\n ApiKeyRequiredError,\n InvalidApiKeyError,\n} from './errors';\n\n// ─── WalletProxy ──────────────────────────────────────────────────────────────\n\n/**\n * Wraps WalletEngine and gates mutating operations (create, import) behind\n * API key validation. Read-only operations (address, isConnected, etc.) are\n * never gated since they need no network access.\n */\nclass WalletProxy {\n constructor(\n private readonly engine: WalletEngine,\n private readonly ensureReady: () => Promise<void>,\n ) {}\n\n // ── Gated async operations ──────────────────────────────────────────────────\n\n async create(): Promise<CreatedWallet> {\n await this.ensureReady();\n return this.engine.create();\n }\n\n async importMnemonic(\n mnemonic: string,\n accountIndex?: number,\n ): Promise<ImportedWalletFromMnemonic> {\n await this.ensureReady();\n return this.engine.importMnemonic(mnemonic, accountIndex);\n }\n\n async importPrivateKey(\n privateKey: Hex,\n ): Promise<ImportedWalletFromPrivateKey> {\n await this.ensureReady();\n return this.engine.importPrivateKey(privateKey);\n }\n\n // ── Pass-throughs (sync, no network) ───────────────────────────────────────\n\n address(): Address { return this.engine.address(); }\n getSigner(): WalletClient { return this.engine.getWalletClient(); }\n getWalletClient(): WalletClient { return this.engine.getWalletClient(); }\n isConnected(): boolean { return this.engine.isConnected(); }\n hasExternalWallet(): boolean { return this.engine.hasExternalWallet(); }\n hasInternalWallet(): boolean { return this.engine.hasInternalWallet(); }\n connectExternal(c: ExternalWalletClient) { this.engine.connectExternal(c); }\n disconnectExternal(): void { this.engine.disconnectExternal(); }\n disconnect(): void { this.engine.disconnect(); }\n async switchChain(chain: Chain): Promise<void> {\n return this.engine.switchChain(chain);\n }\n}\n\n// ─── AwarizonWeb3 ─────────────────────────────────────────────────────────────\n\n/**\n * Primary entry point for the Awarizon Web3 SDK.\n *\n * An API key is required — get yours at https://awarizon.com/dashboard/api-keys\n *\n * ```ts\n * const awarizon = new AwarizonWeb3({ chain: \"base\", apiKey: \"awz_live_...\" })\n *\n * // Internal wallet\n * const wallet = await awarizon.wallet.create()\n *\n * // Load a contract\n * const staking = await awarizon.contract({ address: \"0x...\", abi })\n * await staking.stake(100n)\n * staking.on(\"Staked\", (log) => console.log(log))\n * ```\n */\nexport class AwarizonWeb3 {\n readonly chain: Chain;\n readonly publicClient: PublicClient;\n\n /** Wallet management — create, import, or connect external wallets */\n readonly wallet: WalletProxy;\n\n private readonly _engine: WalletEngine;\n private readonly _txEngine: TransactionEngine;\n private readonly _telemetry: TelemetryClient;\n\n // Contract instances are cached by address — same address returns same instance.\n // Cache is cleared on switchChain() since contracts are chain-specific.\n private _contractCache = new Map<string, { abiRef: Abi; instance: ContractInstance }>();\n\n // Named contract registry — register once, reference by name anywhere.\n private _registry = new Map<string, ContractRegistryEntry>();\n\n constructor(config: AwarizonConfig) {\n if (!config.apiKey) throw new ApiKeyRequiredError();\n\n this.chain = resolveChain(config.chain);\n\n this.publicClient = createPublicClient({\n chain: this.chain,\n transport: http(config.rpcUrl),\n });\n\n this._engine = new WalletEngine({\n chain: this.chain,\n publicClient: this.publicClient,\n rpcUrl: config.rpcUrl,\n });\n\n // Single TransactionEngine shared across all contracts loaded from this SDK instance\n this._txEngine = new TransactionEngine(\n this.publicClient,\n () => this._engine.getWalletClient(),\n );\n\n this._telemetry = new TelemetryClient(config.apiKey, config.baseUrl);\n\n this.wallet = new WalletProxy(\n this._engine,\n () => this._telemetry.ensureValidated(),\n );\n\n if (config.signer) {\n this._engine.connectExternal(config.signer);\n }\n }\n\n // ─── Wallet API surface ─────────────────────────────────────────────────────\n\n connectWallet(walletClient: WalletClient): this {\n this._engine.connectExternal(walletClient);\n return this;\n }\n\n disconnectWallet(): this {\n this._engine.disconnectExternal();\n return this;\n }\n\n async switchChain(chain: Chain | string): Promise<this> {\n await this._telemetry.ensureValidated();\n const resolved = resolveChain(chain);\n await this._engine.switchChain(resolved);\n this._contractCache.clear(); // contracts are chain-specific\n return this;\n }\n\n getWalletInfo(): SDKWalletInfo {\n return {\n address: this._engine.address(),\n chain: this.chain,\n isExternal: this._engine.hasExternalWallet(),\n };\n }\n\n // ─── Contract API ───────────────────────────────────────────────────────────\n\n /**\n * Load a deployed contract and return a fully typed, ABI-powered instance.\n * Validates the API key on the first call — subsequent calls are instant.\n *\n * Results are cached by address — calling contract() twice with the same\n * address and ABI object returns the same instance without rebuilding.\n */\n async contract<TAbi extends Abi>(config: ContractConfig<TAbi>): Promise<ContractInstance> {\n await this._telemetry.ensureValidated();\n\n if (!config.address || !config.abi) {\n throw new Error('[awarizon/web3] awarizon.contract() requires both address and abi');\n }\n\n const key = config.address.toLowerCase();\n const cached = this._contractCache.get(key);\n if (cached && cached.abiRef === (config.abi as Abi)) return cached.instance;\n\n const instance = buildContractInstance(\n config.address,\n config.abi as Abi,\n this.publicClient,\n this._txEngine,\n this._telemetry,\n this.chain,\n );\n this._contractCache.set(key, { abiRef: config.abi as Abi, instance });\n return instance;\n }\n\n /**\n * Load multiple contracts in parallel. Validates the API key once, then\n * instantiates all contracts concurrently.\n *\n * @example\n * ```ts\n * const [token, staking, nft] = await awarizon.contracts([\n * { address: tokenAddr, abi: ERC20_ABI },\n * { address: stakingAddr, abi: STAKING_ABI },\n * { address: nftAddr, abi: ERC721_ABI },\n * ])\n * ```\n */\n async contracts(configs: Array<{ address: Address; abi: Abi }>): Promise<ContractInstance[]> {\n return Promise.all(configs.map(c => this.contract(c)));\n }\n\n /**\n * Call a read-only (view/pure) contract function directly without loading\n * a full contract instance. Best for one-off reads.\n *\n * @example\n * ```ts\n * const balance = await awarizon.read<bigint>({\n * address: tokenAddress,\n * abi: ERC20_ABI,\n * method: \"balanceOf\",\n * args: [userAddress],\n * })\n * ```\n */\n async read<T = unknown>(params: {\n address: Address;\n abi: Abi;\n method: string;\n args?: unknown[];\n }): Promise<T> {\n await this._telemetry.ensureValidated();\n const start = Date.now();\n try {\n const result = await this._txEngine.read({\n address: params.address,\n abi: params.abi,\n functionName: params.method,\n args: params.args ?? [],\n });\n this._telemetry.track({\n type: 'contract.read',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: true,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n return result as T;\n } catch (err) {\n this._telemetry.track({\n type: 'contract.read',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: false,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n throw err;\n }\n }\n\n /**\n * Execute a state-mutating contract function directly without loading a full\n * contract instance. Best for one-off writes.\n *\n * @example\n * ```ts\n * const { hash, receipt } = await awarizon.write({\n * address: tokenAddress,\n * abi: ERC20_ABI,\n * method: \"transfer\",\n * args: [recipient, 100n],\n * })\n * ```\n */\n async write(params: {\n address: Address;\n abi: Abi;\n method: string;\n args?: unknown[];\n value?: bigint;\n gas?: bigint;\n }): Promise<TransactionResult> {\n await this._telemetry.ensureValidated();\n const start = Date.now();\n try {\n const result = await this._txEngine.write({\n address: params.address,\n abi: params.abi,\n functionName: params.method,\n args: params.args ?? [],\n value: params.value,\n gas: params.gas,\n });\n this._telemetry.track({\n type: 'contract.write',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: true,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n return result;\n } catch (err) {\n this._telemetry.track({\n type: 'contract.write',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: false,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n throw err;\n }\n }\n\n /**\n * Batch multiple read calls into a single RPC round-trip using multicall3.\n * Falls back to parallel individual reads on chains where multicall3 is\n * not deployed.\n *\n * @example\n * ```ts\n * const [balance, supply, allowance] = await awarizon.multicall([\n * { address: tokenAddr, abi: ERC20_ABI, method: \"balanceOf\", args: [userAddr] },\n * { address: tokenAddr, abi: ERC20_ABI, method: \"totalSupply\" },\n * { address: tokenAddr, abi: ERC20_ABI, method: \"allowance\", args: [userAddr, spenderAddr] },\n * ])\n * ```\n */\n async multicall(\n calls: Array<{ address: Address; abi: Abi; method: string; args?: unknown[] }>,\n ): Promise<unknown[]> {\n await this._telemetry.ensureValidated();\n\n const contracts = calls.map(c => ({\n address: c.address,\n abi: c.abi,\n functionName: c.method,\n args: (c.args ?? []) as readonly unknown[],\n }));\n\n try {\n // Single RPC round-trip via multicall3\n const results = await this.publicClient.multicall({\n contracts: contracts as any,\n allowFailure: false,\n });\n return results as unknown[];\n } catch {\n // Multicall3 not deployed on this chain — fall back to parallel reads\n return Promise.all(\n contracts.map(c =>\n this.publicClient.readContract(c as any),\n ),\n );\n }\n }\n\n // ─── ERC Standard Clients ───────────────────────────────────────────────────\n\n /**\n * Load an ERC-20 token with fully typed methods — no ABI import needed.\n *\n * ```ts\n * const token = await awarizon.erc20(\"0x...\")\n * const balance = await token.balanceOf(userAddress)\n * const symbol = await token.symbol()\n * await token.transfer(recipient, 100n)\n * ```\n */\n async erc20(address: Address): Promise<Erc20Contract> {\n const instance = await this.contract({ address, abi: ERC20_ABI as unknown as Abi });\n return instance as unknown as Erc20Contract;\n }\n\n /**\n * Load an ERC-721 NFT contract with fully typed methods — no ABI import needed.\n *\n * ```ts\n * const nft = await awarizon.erc721(\"0x...\")\n * const owner = await nft.ownerOf(1n)\n * const uri = await nft.tokenURI(1n)\n * await nft.transferFrom(from, to, 1n)\n * ```\n */\n async erc721(address: Address): Promise<Erc721Contract> {\n const instance = await this.contract({ address, abi: ERC721_ABI as unknown as Abi });\n return instance as unknown as Erc721Contract;\n }\n\n /**\n * Load an ERC-1155 multi-token contract with fully typed methods — no ABI import needed.\n *\n * ```ts\n * const items = await awarizon.erc1155(\"0x...\")\n * const balance = await items.balanceOf(userAddress, 42n)\n * const uri = await items.uri(42n)\n * await items.safeTransferFrom(from, to, 42n, 1n, \"0x\")\n * ```\n */\n async erc1155(address: Address): Promise<Erc1155Contract> {\n const instance = await this.contract({ address, abi: ERC1155_ABI as unknown as Abi });\n return instance as unknown as Erc1155Contract;\n }\n\n // ─── Named Contract Registry ────────────────────────────────────────────────\n\n /**\n * Register a contract under a human-readable name.\n * After registering, use `awarizon.use(name)` anywhere instead of repeating\n * address + ABI every time.\n *\n * ```ts\n * awarizon.register(\"USDC\", { address: \"0x...\", abi: erc20Abi })\n * awarizon.register(\"Vault\", { address: \"0x...\", abi: vaultAbi })\n *\n * const usdc = await awarizon.use(\"USDC\")\n * const vault = await awarizon.use(\"Vault\")\n * ```\n */\n register(name: string, config: ContractRegistryEntry): this {\n this._registry.set(name, config);\n return this;\n }\n\n /**\n * Retrieve a previously registered contract by name.\n * Throws a descriptive error if the name was never registered.\n *\n * ```ts\n * const usdc = await awarizon.use(\"USDC\")\n * await usdc.transfer(recipient, 100n)\n * ```\n */\n async use(name: string): Promise<ContractInstance> {\n const config = this._registry.get(name);\n if (!config) {\n const registered = [...this._registry.keys()].join(', ') || 'none';\n throw new Error(\n `[awarizon/web3] Contract \"${name}\" is not registered.\\n` +\n `Call awarizon.register(\"${name}\", { address, abi }) first.\\n` +\n `Currently registered: ${registered}`,\n );\n }\n return this.contract(config);\n }\n\n /**\n * Remove a registered contract from the registry.\n *\n * ```ts\n * awarizon.unregister(\"USDC\")\n * ```\n */\n unregister(name: string): this {\n this._registry.delete(name);\n return this;\n }\n\n /**\n * Return all registered contract names.\n */\n registeredContracts(): string[] {\n return [...this._registry.keys()];\n }\n\n // ─── Accessors ──────────────────────────────────────────────────────────────\n\n get chainId(): number {\n return this.chain.id;\n }\n\n get isConnected(): boolean {\n return this._engine.isConnected();\n }\n\n /**\n * Flush pending telemetry and stop background timers.\n * Call when tearing down a long-lived SDK instance (e.g. on server shutdown).\n */\n async destroy(): Promise<void> {\n await this._telemetry.destroy();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/chains.ts","../src/contract.ts","../src/errors.ts","../src/telemetry.ts","../src/standards.ts","../src/sdk.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n mainnet,\n base,\n baseSepolia,\n polygon,\n polygonAmoy,\n arbitrum,\n arbitrumSepolia,\n optimism,\n optimismSepolia,\n bsc,\n avalanche,\n sepolia,\n zora,\n linea,\n scroll,\n mantle,\n celo,\n gnosis,\n fantom,\n moonbeam,\n} from 'viem/chains';\nimport type { Chain } from 'viem';\n\n// ─── Supported chains registry ────────────────────────────────────────────────\n\nexport const CHAINS: Record<string, Chain> = {\n // Mainnet\n mainnet,\n ethereum: mainnet,\n eth: mainnet,\n\n // Base\n base,\n 'base-mainnet': base,\n\n // Base Sepolia\n 'base-sepolia': baseSepolia,\n baseSepolia,\n\n // Polygon\n polygon,\n matic: polygon,\n\n // Polygon Amoy (testnet)\n amoy: polygonAmoy,\n 'polygon-amoy': polygonAmoy,\n\n // Arbitrum\n arbitrum,\n 'arbitrum-one': arbitrum,\n\n // Arbitrum Sepolia\n 'arbitrum-sepolia': arbitrumSepolia,\n arbitrumSepolia,\n\n // Optimism\n optimism,\n op: optimism,\n\n // Optimism Sepolia\n 'optimism-sepolia': optimismSepolia,\n optimismSepolia,\n\n // BSC\n bsc,\n bnb: bsc,\n 'binance-smart-chain': bsc,\n\n // Avalanche\n avalanche,\n avax: avalanche,\n\n // Testnets\n sepolia,\n 'eth-sepolia': sepolia,\n\n // Other L2s\n zora,\n linea,\n scroll,\n mantle,\n celo,\n gnosis,\n xdai: gnosis,\n fantom,\n moonbeam,\n};\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n// Pre-computed once at module load — used in unsupported-chain error messages.\nconst _chainAliases = Object.keys(CHAINS).sort().join(', ');\n\n/**\n * Resolves a chain string identifier or a viem Chain object to a Chain.\n *\n * @example\n * resolveChain(\"base\") // → Chain object for Base\n * resolveChain(base) // → same Chain object, passthrough\n * resolveChain(\"unknown\") // → throws Error\n */\nexport function resolveChain(chain: Chain | string): Chain {\n if (typeof chain === 'object' && 'id' in chain) {\n return chain;\n }\n\n if (typeof chain === 'string') {\n const resolved = CHAINS[chain.toLowerCase()] ?? CHAINS[chain];\n if (!resolved) {\n throw new Error(\n `[awarizon/web3] Unsupported chain: \"${chain}\".\\n` +\n `Available chains: ${_chainAliases}`,\n );\n }\n return resolved;\n }\n\n throw new TypeError(`[awarizon/web3] chain must be a string or Chain object, got: ${typeof chain}`);\n}\n\n/** Returns a list of all unique supported chain IDs */\nexport function getSupportedChainIds(): number[] {\n const seen = new Set<number>();\n return Object.values(CHAINS)\n .filter(c => { if (seen.has(c.id)) return false; seen.add(c.id); return true; })\n .map(c => c.id);\n}\n","import type { Abi, AbiFunction, AbiEvent, Address, PublicClient, Chain } from 'viem';\nimport { parseABI } from '@awarizon/abi-engine';\nimport { TransactionEngine } from '@awarizon/tx-engine';\nimport type { TelemetryClient, TelemetryEventType } from './telemetry';\nimport type { ContractInstance, EventUnsubscribe } from './types';\n\n// ─── Telemetry helper ─────────────────────────────────────────────────────────\n\nfunction trackEvent(\n telemetry: TelemetryClient | undefined,\n type: TelemetryEventType,\n chain: Chain | undefined,\n functionName: string | undefined,\n success: boolean,\n start: number,\n): void {\n telemetry?.track({\n type,\n chain: chain?.name ?? 'unknown',\n chainId: chain?.id ?? 0,\n functionName,\n success,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n}\n\n// ─── ContractFactory ──────────────────────────────────────────────────────────\n\n/**\n * Builds a fully dynamic ContractInstance from an address + ABI.\n *\n * Every function in the ABI is attached as a method that routes to read or\n * write based on stateMutability. Telemetry is tracked for every call.\n *\n * The `txEngine` parameter is shared from the parent SDK instance — one engine\n * per SDK, not one per contract.\n */\nexport function buildContractInstance(\n address: Address,\n abi: Abi,\n publicClient: PublicClient,\n txEngine: TransactionEngine,\n telemetry?: TelemetryClient,\n chain?: Chain,\n): ContractInstance {\n // parseABI is memoized by ABI object identity — free on repeat calls\n const parsed = parseABI(abi);\n\n // O(1) event lookup — built once, used on every .on() call\n const eventsMap = new Map<string, AbiEvent>(parsed.events.map(e => [e.name, e]));\n\n const instance: Record<string, unknown> = {\n _address: address,\n _abi: abi,\n };\n\n for (const fn of parsed.readFunctions) {\n instance[fn.name] = buildReadMethod(fn, address, abi, txEngine, telemetry, chain);\n }\n\n for (const fn of parsed.writeFunctions) {\n instance[fn.name] = buildWriteMethod(fn, address, abi, txEngine, telemetry, chain);\n }\n\n instance['on'] = buildEventSubscription(address, abi, eventsMap, publicClient);\n\n instance['estimateGas'] = async (method: string, ...args: unknown[]): Promise<bigint> => {\n const start = Date.now();\n try {\n const estimate = await txEngine.estimateGas({ address, abi, functionName: method, args });\n trackEvent(telemetry, 'contract.gas_estimate', chain, method, true, start);\n return estimate.gas;\n } catch (error) {\n trackEvent(telemetry, 'contract.gas_estimate', chain, method, false, start);\n throw error;\n }\n };\n\n return instance as ContractInstance;\n}\n\n// ─── Read method ──────────────────────────────────────────────────────────────\n\nfunction buildReadMethod(\n fn: AbiFunction,\n address: Address,\n abi: Abi,\n txEngine: TransactionEngine,\n telemetry: TelemetryClient | undefined,\n chain: Chain | undefined,\n): (...args: unknown[]) => Promise<unknown> {\n return async (...args: unknown[]) => {\n const start = Date.now();\n try {\n const result = await txEngine.read({ address, abi, functionName: fn.name, args });\n trackEvent(telemetry, 'contract.read', chain, fn.name, true, start);\n return result;\n } catch (error) {\n trackEvent(telemetry, 'contract.read', chain, fn.name, false, start);\n throw error;\n }\n };\n}\n\n// ─── Write method ─────────────────────────────────────────────────────────────\n\nfunction buildWriteMethod(\n fn: AbiFunction,\n address: Address,\n abi: Abi,\n txEngine: TransactionEngine,\n telemetry: TelemetryClient | undefined,\n chain: Chain | undefined,\n): (...args: unknown[]) => Promise<unknown> {\n const isPayable = fn.stateMutability === 'payable';\n\n return async (...args: unknown[]) => {\n let callArgs = args;\n let value: bigint | undefined;\n let gas: bigint | undefined;\n\n if (isPayable && args.length > 0) {\n const last = args[args.length - 1];\n if (isPayableOptions(last)) {\n callArgs = args.slice(0, -1);\n value = last.value;\n gas = last.gas;\n }\n }\n\n const start = Date.now();\n try {\n const result = await txEngine.write({\n address, abi, functionName: fn.name, args: callArgs, value, gas,\n });\n trackEvent(telemetry, 'contract.write', chain, fn.name, true, start);\n return result;\n } catch (error) {\n trackEvent(telemetry, 'contract.write', chain, fn.name, false, start);\n throw error;\n }\n };\n}\n\nfunction isPayableOptions(val: unknown): val is { value?: bigint; gas?: bigint } {\n if (!val || typeof val !== 'object') return false;\n const obj = val as Record<string, unknown>;\n const hasValue = 'value' in obj && (obj.value === undefined || typeof obj.value === 'bigint');\n const hasGas = 'gas' in obj && (obj.gas === undefined || typeof obj.gas === 'bigint');\n return hasValue || hasGas;\n}\n\n// ─── Event subscription ───────────────────────────────────────────────────────\n\nfunction buildEventSubscription(\n address: Address,\n abi: Abi,\n eventsMap: Map<string, AbiEvent>,\n publicClient: PublicClient,\n): (event: string, callback: (log: unknown) => void) => EventUnsubscribe {\n return (eventName: string, callback: (log: unknown) => void): EventUnsubscribe => {\n const abiEvent = eventsMap.get(eventName); // O(1)\n\n if (!abiEvent) {\n const available = [...eventsMap.keys()].join(', ') || 'none';\n throw new Error(\n `[awarizon/web3] Event \"${eventName}\" not found on contract ${address}.\\n` +\n `Available events: ${available}`,\n );\n }\n\n const unwatch = publicClient.watchContractEvent({\n address,\n abi,\n eventName,\n onLogs: (logs) => {\n for (const log of logs) callback(log);\n },\n });\n\n return unwatch;\n };\n}\n","export class NetworkMismatchError extends Error {\n readonly code = 'NETWORK_MISMATCH' as const;\n readonly expected: string;\n readonly got: string;\n\n constructor(expected: string | number, got: string | number) {\n super(`[awarizon/web3] Network mismatch: expected chain ID ${expected}, but wallet is on chain ID ${got}`);\n this.name = 'NetworkMismatchError';\n this.expected = String(expected);\n this.got = String(got);\n }\n}\n\nexport class ProviderError extends Error {\n readonly code = 'PROVIDER_ERROR' as const;\n\n constructor(message: string) {\n super(`[awarizon/web3] Provider error: ${message}`);\n this.name = 'ProviderError';\n }\n}\n\nexport class ContractNotLoadedError extends Error {\n readonly code = 'CONTRACT_NOT_LOADED' as const;\n\n constructor(address: string) {\n super(`[awarizon/web3] Contract at ${address} is not loaded. Call awarizon.contract({ address, abi }) first.`);\n this.name = 'ContractNotLoadedError';\n }\n}\n\nexport class UnsupportedChainError extends Error {\n readonly code = 'UNSUPPORTED_CHAIN' as const;\n readonly chain: string;\n\n constructor(chain: string) {\n super(`[awarizon/web3] Unsupported chain: \"${chain}\". Pass a valid chain name or viem Chain object.`);\n this.name = 'UnsupportedChainError';\n this.chain = chain;\n }\n}\n\nexport class ApiKeyRequiredError extends Error {\n readonly code = 'API_KEY_REQUIRED' as const;\n\n constructor() {\n super(\n '[awarizon/web3] An API key is required. Pass apiKey: \"awz_live_...\" to AwarizonWeb3({ ... }). ' +\n 'Get yours at https://awarizon.com/dashboard/api-keys',\n );\n this.name = 'ApiKeyRequiredError';\n }\n}\n\nexport class InvalidApiKeyError extends Error {\n readonly code = 'INVALID_API_KEY' as const;\n\n constructor(message = 'Invalid or revoked API key.') {\n super(`[awarizon/web3] ${message}`);\n this.name = 'InvalidApiKeyError';\n }\n}\n","import { InvalidApiKeyError } from './errors';\n\nexport type TelemetryEventType =\n | 'contract.read'\n | 'contract.write'\n | 'contract.gas_estimate'\n | 'wallet.create'\n | 'wallet.import'\n | 'chain.switch';\n\nexport interface TelemetryEvent {\n type: TelemetryEventType;\n chain: string;\n chainId: number;\n functionName?: string;\n success: boolean;\n durationMs: number;\n ts: number;\n}\n\nconst DEFAULT_BASE_URL = 'https://awarizon.com';\nconst FLUSH_INTERVAL_MS = 10_000;\nconst MAX_BATCH_SIZE = 20;\nconst VALIDATION_TIMEOUT = 5_000;\n\n// ─── TelemetryClient ──────────────────────────────────────────────────────────\n\n/**\n * Handles SDK-to-Awarizon API communication:\n * 1. Validates the API key on first meaningful operation (5s timeout)\n * 2. Batches usage events and flushes them fire-and-forget\n * 3. Flushes remaining events via sendBeacon on browser page unload\n *\n * All telemetry failures are swallowed — they never surface to the caller.\n * The only hard error is InvalidApiKeyError thrown from ensureValidated().\n */\nexport class TelemetryClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n private validated = false;\n private validationPromise: Promise<void> | null = null;\n private queue: TelemetryEvent[] = [];\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private unloadListener: (() => void) | null = null;\n\n constructor(apiKey: string, baseUrl = DEFAULT_BASE_URL) {\n this.apiKey = apiKey;\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n }\n\n /**\n * Ensures the API key has been validated against the Awarizon API.\n * Idempotent — safe to call on every operation; only hits the network once.\n * Times out after 5 seconds to avoid hanging in degraded network conditions.\n *\n * @throws {InvalidApiKeyError} if the key is invalid, revoked, or unreachable\n */\n async ensureValidated(): Promise<void> {\n if (this.validated) return;\n if (this.validationPromise) return this.validationPromise;\n\n this.validationPromise = this._validate().catch((err) => {\n // Reset so callers can retry after transient failures\n this.validationPromise = null;\n throw err;\n });\n\n return this.validationPromise;\n }\n\n /**\n * Queue a usage event. Events are batched and sent periodically.\n * Must only be called after ensureValidated() has resolved.\n */\n track(event: TelemetryEvent): void {\n if (!this.validated) return;\n this.queue.push(event);\n if (this.queue.length >= MAX_BATCH_SIZE) this._flush(false);\n }\n\n /**\n * Flush pending events and stop background timers.\n * Call when tearing down a long-lived SDK instance (e.g. server shutdown).\n */\n async destroy(): Promise<void> {\n this._stopTimers();\n await this._flush(true);\n }\n\n // ─── Private ─────────────────────────────────────────────────────────────────\n\n private async _validate(): Promise<void> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), VALIDATION_TIMEOUT);\n\n let res: Response;\n try {\n res = await fetch(`${this.baseUrl}/api/v1/auth`, {\n method: 'GET',\n headers: { Authorization: `Bearer ${this.apiKey}` },\n signal: controller.signal,\n });\n } catch (err) {\n const msg = controller.signal.aborted\n ? `Awarizon API did not respond within ${VALIDATION_TIMEOUT / 1000}s.`\n : `Could not reach Awarizon API: ${(err as Error).message}`;\n throw new InvalidApiKeyError(msg);\n } finally {\n clearTimeout(timeout);\n }\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({})) as { error?: string };\n throw new InvalidApiKeyError(body.error ?? 'Invalid or revoked API key.');\n }\n\n this.validated = true;\n this._startTimers();\n }\n\n private _startTimers(): void {\n // Periodic background flush\n this.flushTimer = setInterval(() => {\n if (this.queue.length > 0) this._flush(false);\n }, FLUSH_INTERVAL_MS);\n\n // Prevent the interval from blocking Node.js process exit\n const timer = this.flushTimer as unknown as { unref?: () => void };\n if (typeof timer.unref === 'function') timer.unref();\n\n // Browser page-unload: sendBeacon guarantees delivery even as page closes\n if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {\n this.unloadListener = () => this._flushBeacon();\n window.addEventListener('beforeunload', this.unloadListener);\n }\n }\n\n private _stopTimers(): void {\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n if (this.unloadListener !== null && typeof window !== 'undefined') {\n window.removeEventListener('beforeunload', this.unloadListener);\n this.unloadListener = null;\n }\n }\n\n /**\n * Unified flush. Pass `await = true` for graceful shutdown,\n * `await = false` for fire-and-forget mid-session flushes.\n */\n private _flush(awaited: false): void;\n private _flush(awaited: true): Promise<void>;\n private _flush(awaited: boolean): void | Promise<void> {\n if (this.queue.length === 0) return awaited ? Promise.resolve() : undefined;\n\n const batch = this.queue.splice(0, MAX_BATCH_SIZE);\n const promise: Promise<void> = fetch(`${this.baseUrl}/api/v1/usage`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ events: batch }),\n }).then(() => {}, () => {});\n\n return awaited ? promise : undefined;\n }\n\n /** Uses sendBeacon for guaranteed delivery on page unload */\n private _flushBeacon(): void {\n if (this.queue.length === 0 || typeof navigator === 'undefined') return;\n const batch = this.queue.splice(0);\n navigator.sendBeacon(\n `${this.baseUrl}/api/v1/usage`,\n new Blob([JSON.stringify({ events: batch })], { type: 'application/json' }),\n );\n }\n}\n","import { erc20Abi, type Address, type Abi } from 'viem';\nimport type { ContractInstance, TransactionResult } from './types';\n\n// ─── ERC-20 ───────────────────────────────────────────────────────────────────\n\nexport const ERC20_ABI = erc20Abi;\n\nexport interface Erc20Contract {\n name(): Promise<string>;\n symbol(): Promise<string>;\n decimals(): Promise<number>;\n totalSupply(): Promise<bigint>;\n balanceOf(owner: Address): Promise<bigint>;\n allowance(owner: Address, spender: Address): Promise<bigint>;\n transfer(to: Address, amount: bigint): Promise<TransactionResult>;\n transferFrom(from: Address, to: Address, amount: bigint): Promise<TransactionResult>;\n approve(spender: Address, amount: bigint): Promise<TransactionResult>;\n on: ContractInstance['on'];\n estimateGas: ContractInstance['estimateGas'];\n readonly _address: Address;\n readonly _abi: Abi;\n}\n\n// ─── ERC-721 ──────────────────────────────────────────────────────────────────\n// Single safeTransferFrom overload (3-arg) to avoid ABI duplicate conflicts.\n// Includes tokenURI + totalSupply (ERC721Metadata / ERC721Enumerable extensions\n// present on virtually every deployed NFT contract).\n\nexport const ERC721_ABI = [\n { type: 'function', name: 'name', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'symbol', stateMutability: 'view', inputs: [], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'tokenURI', stateMutability: 'view', inputs: [{ name: 'tokenId', type: 'uint256' }], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'totalSupply', stateMutability: 'view', inputs: [], outputs: [{ type: 'uint256' }] },\n { type: 'function', name: 'ownerOf', stateMutability: 'view', inputs: [{ name: 'tokenId', type: 'uint256' }], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'balanceOf', stateMutability: 'view', inputs: [{ name: 'owner', type: 'address' }], outputs: [{ type: 'uint256' }] },\n { type: 'function', name: 'getApproved', stateMutability: 'view', inputs: [{ name: 'tokenId', type: 'uint256' }], outputs: [{ type: 'address' }] },\n { type: 'function', name: 'isApprovedForAll', stateMutability: 'view', inputs: [{ name: 'owner', type: 'address' }, { name: 'operator', type: 'address' }], outputs: [{ type: 'bool' }] },\n { type: 'function', name: 'transferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }], outputs: [] },\n { type: 'function', name: 'safeTransferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }], outputs: [] },\n { type: 'function', name: 'approve', stateMutability: 'nonpayable', inputs: [{ name: 'to', type: 'address' }, { name: 'tokenId', type: 'uint256' }], outputs: [] },\n { type: 'function', name: 'setApprovalForAll', stateMutability: 'nonpayable', inputs: [{ name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }], outputs: [] },\n { type: 'event', name: 'Transfer', inputs: [{ indexed: true, name: 'from', type: 'address' }, { indexed: true, name: 'to', type: 'address' }, { indexed: true, name: 'tokenId', type: 'uint256' }] },\n { type: 'event', name: 'Approval', inputs: [{ indexed: true, name: 'owner', type: 'address' }, { indexed: true, name: 'approved', type: 'address' }, { indexed: true, name: 'tokenId', type: 'uint256' }] },\n { type: 'event', name: 'ApprovalForAll', inputs: [{ indexed: true, name: 'owner', type: 'address' }, { indexed: true, name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }] },\n] as const;\n\nexport interface Erc721Contract {\n name(): Promise<string>;\n symbol(): Promise<string>;\n tokenURI(tokenId: bigint): Promise<string>;\n totalSupply(): Promise<bigint>;\n ownerOf(tokenId: bigint): Promise<Address>;\n balanceOf(owner: Address): Promise<bigint>;\n getApproved(tokenId: bigint): Promise<Address>;\n isApprovedForAll(owner: Address, operator: Address): Promise<boolean>;\n transferFrom(from: Address, to: Address, tokenId: bigint): Promise<TransactionResult>;\n safeTransferFrom(from: Address, to: Address, tokenId: bigint): Promise<TransactionResult>;\n approve(to: Address, tokenId: bigint): Promise<TransactionResult>;\n setApprovalForAll(operator: Address, approved: boolean): Promise<TransactionResult>;\n on: ContractInstance['on'];\n estimateGas: ContractInstance['estimateGas'];\n readonly _address: Address;\n readonly _abi: Abi;\n}\n\n// ─── ERC-1155 ─────────────────────────────────────────────────────────────────\n\nexport const ERC1155_ABI = [\n { type: 'function', name: 'uri', stateMutability: 'view', inputs: [{ name: 'id', type: 'uint256' }], outputs: [{ type: 'string' }] },\n { type: 'function', name: 'balanceOf', stateMutability: 'view', inputs: [{ name: 'account', type: 'address' }, { name: 'id', type: 'uint256' }], outputs: [{ type: 'uint256' }] },\n { type: 'function', name: 'balanceOfBatch', stateMutability: 'view', inputs: [{ name: 'accounts', type: 'address[]' }, { name: 'ids', type: 'uint256[]' }], outputs: [{ type: 'uint256[]' }] },\n { type: 'function', name: 'isApprovedForAll', stateMutability: 'view', inputs: [{ name: 'account', type: 'address' }, { name: 'operator', type: 'address' }], outputs: [{ type: 'bool' }] },\n { type: 'function', name: 'setApprovalForAll', stateMutability: 'nonpayable', inputs: [{ name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }], outputs: [] },\n { type: 'function', name: 'safeTransferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'id', type: 'uint256' }, { name: 'amount', type: 'uint256' }, { name: 'data', type: 'bytes' }], outputs: [] },\n { type: 'function', name: 'safeBatchTransferFrom', stateMutability: 'nonpayable', inputs: [{ name: 'from', type: 'address' }, { name: 'to', type: 'address' }, { name: 'ids', type: 'uint256[]' }, { name: 'amounts', type: 'uint256[]' }, { name: 'data', type: 'bytes' }], outputs: [] },\n { type: 'event', name: 'TransferSingle', inputs: [{ indexed: true, name: 'operator', type: 'address' }, { indexed: true, name: 'from', type: 'address' }, { indexed: true, name: 'to', type: 'address' }, { name: 'id', type: 'uint256' }, { name: 'value', type: 'uint256' }] },\n { type: 'event', name: 'TransferBatch', inputs: [{ indexed: true, name: 'operator', type: 'address' }, { indexed: true, name: 'from', type: 'address' }, { indexed: true, name: 'to', type: 'address' }, { name: 'ids', type: 'uint256[]' }, { name: 'values', type: 'uint256[]' }] },\n { type: 'event', name: 'ApprovalForAll', inputs: [{ indexed: true, name: 'account', type: 'address' }, { indexed: true, name: 'operator', type: 'address' }, { name: 'approved', type: 'bool' }] },\n] as const;\n\nexport interface Erc1155Contract {\n uri(id: bigint): Promise<string>;\n balanceOf(account: Address, id: bigint): Promise<bigint>;\n balanceOfBatch(accounts: Address[], ids: bigint[]): Promise<bigint[]>;\n isApprovedForAll(account: Address, operator: Address): Promise<boolean>;\n setApprovalForAll(operator: Address, approved: boolean): Promise<TransactionResult>;\n safeTransferFrom(from: Address, to: Address, id: bigint, amount: bigint, data: `0x${string}`): Promise<TransactionResult>;\n safeBatchTransferFrom(from: Address, to: Address, ids: bigint[], amounts: bigint[], data: `0x${string}`): Promise<TransactionResult>;\n on: ContractInstance['on'];\n estimateGas: ContractInstance['estimateGas'];\n readonly _address: Address;\n readonly _abi: Abi;\n}\n","import {\n createPublicClient,\n http,\n type Chain,\n type WalletClient,\n type PublicClient,\n type Address,\n type Abi,\n type Hex,\n} from 'viem';\nimport { WalletEngine } from '@awarizon/wallet-engine';\nimport type {\n CreatedWallet,\n ImportedWalletFromMnemonic,\n ImportedWalletFromPrivateKey,\n ExternalWalletClient,\n EIP1193Provider,\n ConnectorInfo,\n WalletChangeEvent,\n ChainChangeEvent,\n SignTypedDataParams,\n} from '@awarizon/wallet-engine';\nimport { TransactionEngine } from '@awarizon/tx-engine';\nimport type { TransactionResult } from '@awarizon/tx-engine';\nimport { resolveChain } from './chains';\nimport { buildContractInstance } from './contract';\nimport { TelemetryClient } from './telemetry';\nimport { ApiKeyRequiredError } from './errors';\nimport {\n ERC20_ABI,\n ERC721_ABI,\n ERC1155_ABI,\n} from './standards';\nimport type {\n Erc20Contract,\n Erc721Contract,\n Erc1155Contract,\n} from './standards';\nimport type {\n AwarizonConfig,\n ContractConfig,\n ContractInstance,\n ContractRegistryEntry,\n SDKWalletInfo,\n} from './types';\n\n// Re-export errors so consumers only need one import path\nexport {\n WalletNotConnectedError,\n InvalidMnemonicError,\n InvalidPrivateKeyError,\n ChainMismatchError,\n} from '@awarizon/wallet-engine';\n\nexport {\n ContractExecutionError,\n SimulationError,\n GasEstimationError,\n} from '@awarizon/tx-engine';\n\nexport {\n InvalidABIError,\n} from '@awarizon/abi-engine';\n\nexport {\n NetworkMismatchError,\n ProviderError,\n ContractNotLoadedError,\n UnsupportedChainError,\n ApiKeyRequiredError,\n InvalidApiKeyError,\n} from './errors';\n\n// ─── WalletProxy ──────────────────────────────────────────────────────────────\n\n/**\n * Wraps WalletEngine and gates mutating operations (create, import) behind\n * API key validation. Read-only operations (address, isConnected, etc.) are\n * never gated since they need no network access.\n */\nclass WalletProxy {\n constructor(\n private readonly engine: WalletEngine,\n private readonly ensureReady: () => Promise<void>,\n ) {}\n\n // ── Gated async operations ──────────────────────────────────────────────────\n\n async create(): Promise<CreatedWallet> {\n await this.ensureReady();\n return this.engine.create();\n }\n\n async importMnemonic(\n mnemonic: string,\n accountIndex?: number,\n ): Promise<ImportedWalletFromMnemonic> {\n await this.ensureReady();\n return this.engine.importMnemonic(mnemonic, accountIndex);\n }\n\n async importPrivateKey(\n privateKey: Hex,\n ): Promise<ImportedWalletFromPrivateKey> {\n await this.ensureReady();\n return this.engine.importPrivateKey(privateKey);\n }\n\n // ── Pass-throughs (sync, no network) ───────────────────────────────────────\n\n address(): Address { return this.engine.address(); }\n getSigner(): WalletClient { return this.engine.getWalletClient(); }\n getWalletClient(): WalletClient { return this.engine.getWalletClient(); }\n isConnected(): boolean { return this.engine.isConnected(); }\n hasExternalWallet(): boolean { return this.engine.hasExternalWallet(); }\n hasInternalWallet(): boolean { return this.engine.hasInternalWallet(); }\n getConnectorInfo(): ConnectorInfo { return this.engine.getConnectorInfo(); }\n\n connectExternal(\n c: ExternalWalletClient,\n info?: { name?: string; icon?: string },\n ): void { this.engine.connectExternal(c, info); }\n\n disconnectExternal(): void { this.engine.disconnectExternal(); }\n disconnect(): void { this.engine.disconnect(); }\n\n async switchChain(chain: Chain): Promise<void> {\n return this.engine.switchChain(chain);\n }\n\n // ── Gated async — EIP-1193, signing, chain awareness ───────────────────────\n\n async connectEIP1193(\n provider: EIP1193Provider,\n info?: { name?: string; icon?: string },\n ): Promise<void> {\n await this.ensureReady();\n return this.engine.connectEIP1193(provider, info);\n }\n\n async signMessage(message: string | { raw: Hex | Uint8Array }): Promise<Hex> {\n await this.ensureReady();\n return this.engine.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n await this.ensureReady();\n return this.engine.signTypedData(params);\n }\n\n async getChainId(): Promise<number> { return this.engine.getChainId(); }\n async isChainMismatch(): Promise<boolean> { return this.engine.isChainMismatch(); }\n\n // ── Event subscriptions ────────────────────────────────────────────────────\n\n onWalletChange(cb: (event: WalletChangeEvent) => void): () => void {\n return this.engine.onWalletChange(cb);\n }\n\n onChainChange(cb: (event: ChainChangeEvent) => void): () => void {\n return this.engine.onChainChange(cb);\n }\n}\n\n// ─── AwarizonWeb3 ─────────────────────────────────────────────────────────────\n\n/**\n * Primary entry point for the Awarizon Web3 SDK.\n *\n * An API key is required — get yours at https://awarizon.com/dashboard/api-keys\n *\n * ```ts\n * const awarizon = new AwarizonWeb3({ chain: \"base\", apiKey: \"awz_live_...\" })\n *\n * // Internal wallet\n * const wallet = await awarizon.wallet.create()\n *\n * // Load a contract\n * const staking = await awarizon.contract({ address: \"0x...\", abi })\n * await staking.stake(100n)\n * staking.on(\"Staked\", (log) => console.log(log))\n * ```\n */\nexport class AwarizonWeb3 {\n readonly chain: Chain;\n readonly publicClient: PublicClient;\n\n /** Wallet management — create, import, or connect external wallets */\n readonly wallet: WalletProxy;\n\n private readonly _engine: WalletEngine;\n private readonly _txEngine: TransactionEngine;\n private readonly _telemetry: TelemetryClient;\n\n // Contract instances are cached by address — same address returns same instance.\n // Cache is cleared on switchChain() since contracts are chain-specific.\n private _contractCache = new Map<string, { abiRef: Abi; instance: ContractInstance }>();\n\n // Named contract registry — register once, reference by name anywhere.\n private _registry = new Map<string, ContractRegistryEntry>();\n\n constructor(config: AwarizonConfig) {\n if (!config.apiKey) throw new ApiKeyRequiredError();\n\n this.chain = resolveChain(config.chain);\n\n this.publicClient = createPublicClient({\n chain: this.chain,\n transport: http(config.rpcUrl),\n });\n\n this._engine = new WalletEngine({\n chain: this.chain,\n publicClient: this.publicClient,\n rpcUrl: config.rpcUrl,\n });\n\n // Single TransactionEngine shared across all contracts loaded from this SDK instance\n this._txEngine = new TransactionEngine(\n this.publicClient,\n () => this._engine.getWalletClient(),\n );\n\n this._telemetry = new TelemetryClient(config.apiKey, config.baseUrl);\n\n this.wallet = new WalletProxy(\n this._engine,\n () => this._telemetry.ensureValidated(),\n );\n\n if (config.signer) {\n this._engine.connectExternal(config.signer);\n }\n }\n\n // ─── Wallet API surface ─────────────────────────────────────────────────────\n\n /**\n * Connect any viem WalletClient (wagmi, RainbowKit, custom).\n * Optionally pass connector metadata to display in the UI.\n *\n * @example\n * awarizon.connectWallet(walletClient, { name: \"MetaMask\" })\n */\n connectWallet(\n walletClient: WalletClient,\n connectorInfo?: { name?: string; icon?: string },\n ): this {\n this._engine.connectExternal(walletClient, connectorInfo);\n return this;\n }\n\n /**\n * Connect directly from a raw EIP-1193 provider without needing wagmi.\n * Works with window.ethereum, WalletConnect v2, and any EIP-1193 object.\n *\n * @example\n * await awarizon.connectEIP1193Provider(window.ethereum, { name: \"MetaMask\" })\n */\n async connectEIP1193Provider(\n provider: EIP1193Provider,\n connectorInfo?: { name?: string; icon?: string },\n ): Promise<this> {\n await this._telemetry.ensureValidated();\n await this._engine.connectEIP1193(provider, connectorInfo);\n return this;\n }\n\n disconnectWallet(): this {\n this._engine.disconnectExternal();\n return this;\n }\n\n async switchChain(chain: Chain | string): Promise<this> {\n await this._telemetry.ensureValidated();\n const resolved = resolveChain(chain);\n await this._engine.switchChain(resolved);\n this._contractCache.clear(); // contracts are chain-specific\n return this;\n }\n\n getWalletInfo(): SDKWalletInfo {\n const info = this._engine.getConnectorInfo();\n return {\n address: this._engine.address(),\n chain: this.chain,\n isExternal: this._engine.hasExternalWallet(),\n connectorName: info.name,\n };\n }\n\n /**\n * Sign a plain text or raw-bytes message.\n * Use for Sign-In with Ethereum (SIWE) and off-chain authorization.\n *\n * @example\n * const sig = await awarizon.signMessage(\"Hello, Awarizon!\")\n */\n async signMessage(message: string | { raw: Hex | Uint8Array }): Promise<Hex> {\n await this._telemetry.ensureValidated();\n return this._engine.signMessage(message);\n }\n\n /**\n * Sign EIP-712 typed structured data (permit2, SIWE, Seaport orders, etc.).\n *\n * @example\n * const sig = await awarizon.signTypedData({\n * domain: { name: \"MyApp\", version: \"1\", chainId: 8453 },\n * types: { Transfer: [{ name: \"to\", type: \"address\" }, { name: \"amount\", type: \"uint256\" }] },\n * primaryType: \"Transfer\",\n * message: { to: \"0x...\", amount: \"1000000\" },\n * })\n */\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n await this._telemetry.ensureValidated();\n return this._engine.signTypedData(params);\n }\n\n /**\n * Returns the chain ID the active wallet is currently on.\n * For external wallets this may differ from the SDK's configured chain.\n */\n async getChainId(): Promise<number> {\n return this._engine.getChainId();\n }\n\n /**\n * Returns true when the external wallet is on a different chain than the SDK.\n * Use this to show a \"wrong network\" banner in your UI.\n *\n * @example\n * if (await awarizon.isChainMismatch()) {\n * alert(\"Please switch to Base in your wallet\")\n * }\n */\n async isChainMismatch(): Promise<boolean> {\n return this._engine.isChainMismatch();\n }\n\n /**\n * Returns metadata about the currently active connector.\n * Useful for displaying \"Connected via MetaMask\" in the UI.\n */\n getConnectorInfo(): ConnectorInfo {\n return this._engine.getConnectorInfo();\n }\n\n /**\n * Subscribe to wallet changes (connect, disconnect, account switch).\n * Returns an unsubscribe function — call it on cleanup.\n *\n * @example\n * const unsub = awarizon.onWalletChange(({ address, type, name }) => {\n * console.log(\"Wallet changed:\", address, type, name)\n * })\n * unsub() // stop listening\n */\n onWalletChange(cb: (event: WalletChangeEvent) => void): () => void {\n return this._engine.onWalletChange(cb);\n }\n\n /**\n * Subscribe to chain changes (switchChain calls).\n * Returns an unsubscribe function.\n */\n onChainChange(cb: (event: ChainChangeEvent) => void): () => void {\n return this._engine.onChainChange(cb);\n }\n\n // ─── Contract API ───────────────────────────────────────────────────────────\n\n /**\n * Load a deployed contract and return a fully typed, ABI-powered instance.\n * Validates the API key on the first call — subsequent calls are instant.\n *\n * Results are cached by address — calling contract() twice with the same\n * address and ABI object returns the same instance without rebuilding.\n */\n async contract<TAbi extends Abi>(config: ContractConfig<TAbi>): Promise<ContractInstance> {\n await this._telemetry.ensureValidated();\n\n if (!config.address || !config.abi) {\n throw new Error('[awarizon/web3] awarizon.contract() requires both address and abi');\n }\n\n const key = config.address.toLowerCase();\n const cached = this._contractCache.get(key);\n if (cached && cached.abiRef === (config.abi as Abi)) return cached.instance;\n\n const instance = buildContractInstance(\n config.address,\n config.abi as Abi,\n this.publicClient,\n this._txEngine,\n this._telemetry,\n this.chain,\n );\n this._contractCache.set(key, { abiRef: config.abi as Abi, instance });\n return instance;\n }\n\n /**\n * Load multiple contracts in parallel. Validates the API key once, then\n * instantiates all contracts concurrently.\n *\n * @example\n * ```ts\n * const [token, staking, nft] = await awarizon.contracts([\n * { address: tokenAddr, abi: ERC20_ABI },\n * { address: stakingAddr, abi: STAKING_ABI },\n * { address: nftAddr, abi: ERC721_ABI },\n * ])\n * ```\n */\n async contracts(configs: Array<{ address: Address; abi: Abi }>): Promise<ContractInstance[]> {\n return Promise.all(configs.map(c => this.contract(c)));\n }\n\n /**\n * Call a read-only (view/pure) contract function directly without loading\n * a full contract instance. Best for one-off reads.\n *\n * @example\n * ```ts\n * const balance = await awarizon.read<bigint>({\n * address: tokenAddress,\n * abi: ERC20_ABI,\n * method: \"balanceOf\",\n * args: [userAddress],\n * })\n * ```\n */\n async read<T = unknown>(params: {\n address: Address;\n abi: Abi;\n method: string;\n args?: unknown[];\n }): Promise<T> {\n await this._telemetry.ensureValidated();\n const start = Date.now();\n try {\n const result = await this._txEngine.read({\n address: params.address,\n abi: params.abi,\n functionName: params.method,\n args: params.args ?? [],\n });\n this._telemetry.track({\n type: 'contract.read',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: true,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n return result as T;\n } catch (err) {\n this._telemetry.track({\n type: 'contract.read',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: false,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n throw err;\n }\n }\n\n /**\n * Execute a state-mutating contract function directly without loading a full\n * contract instance. Best for one-off writes.\n *\n * @example\n * ```ts\n * const { hash, receipt } = await awarizon.write({\n * address: tokenAddress,\n * abi: ERC20_ABI,\n * method: \"transfer\",\n * args: [recipient, 100n],\n * })\n * ```\n */\n async write(params: {\n address: Address;\n abi: Abi;\n method: string;\n args?: unknown[];\n value?: bigint;\n gas?: bigint;\n }): Promise<TransactionResult> {\n await this._telemetry.ensureValidated();\n const start = Date.now();\n try {\n const result = await this._txEngine.write({\n address: params.address,\n abi: params.abi,\n functionName: params.method,\n args: params.args ?? [],\n value: params.value,\n gas: params.gas,\n });\n this._telemetry.track({\n type: 'contract.write',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: true,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n return result;\n } catch (err) {\n this._telemetry.track({\n type: 'contract.write',\n chain: this.chain.name,\n chainId: this.chain.id,\n functionName: params.method,\n success: false,\n durationMs: Date.now() - start,\n ts: Date.now(),\n });\n throw err;\n }\n }\n\n /**\n * Batch multiple read calls into a single RPC round-trip using multicall3.\n * Falls back to parallel individual reads on chains where multicall3 is\n * not deployed.\n *\n * @example\n * ```ts\n * const [balance, supply, allowance] = await awarizon.multicall([\n * { address: tokenAddr, abi: ERC20_ABI, method: \"balanceOf\", args: [userAddr] },\n * { address: tokenAddr, abi: ERC20_ABI, method: \"totalSupply\" },\n * { address: tokenAddr, abi: ERC20_ABI, method: \"allowance\", args: [userAddr, spenderAddr] },\n * ])\n * ```\n */\n async multicall(\n calls: Array<{ address: Address; abi: Abi; method: string; args?: unknown[] }>,\n ): Promise<unknown[]> {\n await this._telemetry.ensureValidated();\n\n const contracts = calls.map(c => ({\n address: c.address,\n abi: c.abi,\n functionName: c.method,\n args: (c.args ?? []) as readonly unknown[],\n }));\n\n try {\n // Single RPC round-trip via multicall3\n const results = await this.publicClient.multicall({\n contracts: contracts as any,\n allowFailure: false,\n });\n return results as unknown[];\n } catch {\n // Multicall3 not deployed on this chain — fall back to parallel reads\n return Promise.all(\n contracts.map(c =>\n this.publicClient.readContract(c as any),\n ),\n );\n }\n }\n\n // ─── ERC Standard Clients ───────────────────────────────────────────────────\n\n /**\n * Load an ERC-20 token with fully typed methods — no ABI import needed.\n *\n * ```ts\n * const token = await awarizon.erc20(\"0x...\")\n * const balance = await token.balanceOf(userAddress)\n * const symbol = await token.symbol()\n * await token.transfer(recipient, 100n)\n * ```\n */\n async erc20(address: Address): Promise<Erc20Contract> {\n const instance = await this.contract({ address, abi: ERC20_ABI as unknown as Abi });\n return instance as unknown as Erc20Contract;\n }\n\n /**\n * Load an ERC-721 NFT contract with fully typed methods — no ABI import needed.\n *\n * ```ts\n * const nft = await awarizon.erc721(\"0x...\")\n * const owner = await nft.ownerOf(1n)\n * const uri = await nft.tokenURI(1n)\n * await nft.transferFrom(from, to, 1n)\n * ```\n */\n async erc721(address: Address): Promise<Erc721Contract> {\n const instance = await this.contract({ address, abi: ERC721_ABI as unknown as Abi });\n return instance as unknown as Erc721Contract;\n }\n\n /**\n * Load an ERC-1155 multi-token contract with fully typed methods — no ABI import needed.\n *\n * ```ts\n * const items = await awarizon.erc1155(\"0x...\")\n * const balance = await items.balanceOf(userAddress, 42n)\n * const uri = await items.uri(42n)\n * await items.safeTransferFrom(from, to, 42n, 1n, \"0x\")\n * ```\n */\n async erc1155(address: Address): Promise<Erc1155Contract> {\n const instance = await this.contract({ address, abi: ERC1155_ABI as unknown as Abi });\n return instance as unknown as Erc1155Contract;\n }\n\n // ─── Named Contract Registry ────────────────────────────────────────────────\n\n /**\n * Register a contract under a human-readable name.\n * After registering, use `awarizon.use(name)` anywhere instead of repeating\n * address + ABI every time.\n *\n * ```ts\n * awarizon.register(\"USDC\", { address: \"0x...\", abi: erc20Abi })\n * awarizon.register(\"Vault\", { address: \"0x...\", abi: vaultAbi })\n *\n * const usdc = await awarizon.use(\"USDC\")\n * const vault = await awarizon.use(\"Vault\")\n * ```\n */\n register(name: string, config: ContractRegistryEntry): this {\n this._registry.set(name, config);\n return this;\n }\n\n /**\n * Retrieve a previously registered contract by name.\n * Throws a descriptive error if the name was never registered.\n *\n * ```ts\n * const usdc = await awarizon.use(\"USDC\")\n * await usdc.transfer(recipient, 100n)\n * ```\n */\n async use(name: string): Promise<ContractInstance> {\n const config = this._registry.get(name);\n if (!config) {\n const registered = [...this._registry.keys()].join(', ') || 'none';\n throw new Error(\n `[awarizon/web3] Contract \"${name}\" is not registered.\\n` +\n `Call awarizon.register(\"${name}\", { address, abi }) first.\\n` +\n `Currently registered: ${registered}`,\n );\n }\n return this.contract(config);\n }\n\n /**\n * Remove a registered contract from the registry.\n *\n * ```ts\n * awarizon.unregister(\"USDC\")\n * ```\n */\n unregister(name: string): this {\n this._registry.delete(name);\n return this;\n }\n\n /**\n * Return all registered contract names.\n */\n registeredContracts(): string[] {\n return [...this._registry.keys()];\n }\n\n // ─── Accessors ──────────────────────────────────────────────────────────────\n\n get chainId(): number {\n return this.chain.id;\n }\n\n get isConnected(): boolean {\n return this._engine.isConnected();\n }\n\n /**\n * Flush pending telemetry and stop background timers.\n * Call when tearing down a long-lived SDK instance (e.g. on server shutdown).\n */\n async destroy(): Promise<void> {\n await this._telemetry.destroy();\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awarizon/web3",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Core Awarizon Web3 SDK — production-grade EVM blockchain abstraction layer",
5
5
  "keywords": [
6
6
  "web3",
@@ -27,8 +27,8 @@
27
27
  ],
28
28
  "dependencies": {
29
29
  "viem": "^2.21.0",
30
- "@awarizon/wallet-engine": "1.0.2",
31
- "@awarizon/tx-engine": "1.1.0",
30
+ "@awarizon/wallet-engine": "1.0.3",
31
+ "@awarizon/tx-engine": "1.1.1",
32
32
  "@awarizon/abi-engine": "1.0.2"
33
33
  },
34
34
  "devDependencies": {