UNPKG

wido

Version:

JavaScript library for interacting with the Wido protocol which allows you to seamlessly move liquidity across vaults and chains.

1 lines 64.2 kB
{"version":3,"file":"wido.mjs","sources":["../src/WidoError.ts","../src/approve.ts","../src/config.ts","../src/get-status.ts","../src/get-token-allowance.ts","../src/get-wido-contract-address.ts","../src/get-wido-spender.ts","../src/get-supported-tokens-internal.ts","../src/get-supported-tokens.ts","../src/get-balances.ts","../src/quote.ts","../node_modules/@ethersproject/logger/lib.esm/_version.js","../node_modules/@ethersproject/logger/lib.esm/index.js","../node_modules/@ethersproject/properties/lib.esm/_version.js","../node_modules/@ethersproject/properties/lib.esm/index.js","../src/paymaster/core/paymaster.ts","../src/paymaster/biconomy.ts","../src/utils/chain-utils.ts","../src/types.ts"],"sourcesContent":["import { ErrorApiResponse, ErrorCode, ValidationError } from \"./types\"\n\nexport class WidoError extends Error {\n name = \"WidoError\"\n code: ErrorCode\n detail: string\n validationErrors?: ValidationError[]\n\n constructor(\n code: ErrorCode,\n detail: string,\n validationErrors?: ValidationError[]\n ) {\n let message\n\n switch (code) {\n case \"INVALID_REQUEST\":\n message = `${detail}: ${validationErrors\n ?.map((err) => err.msg)\n .join(\", \")}`\n break\n\n default:\n message = `${code}: ${detail}`\n break\n }\n\n super(message)\n\n this.detail = detail\n this.code = code\n this.validationErrors = validationErrors\n }\n\n static from_api_response(response: ErrorApiResponse) {\n return new WidoError(\n response.code,\n response.detail,\n response.validationErrors\n )\n }\n}\n","import { ApproveApiParams, ApproveRequest, ApproveResult } from \"./types\"\nimport { CONFIG, MAX_UINT256 } from \"./wido\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Get an easy-to-consume unsigned transaction for changing the allowance amount,\n * e.g. how many tokens can Wido spend on behalf of `user`.\n *\n * Call this method with `chainId`, `fromToken` and `toToken` before zapping!\n */\nexport async function approve(request: ApproveRequest): Promise<ApproveResult> {\n const {\n tokenAddress,\n fromToken,\n toToken,\n chainId,\n fromChainId,\n toChainId,\n amount = MAX_UINT256,\n tokenId,\n } = request\n\n const endpoint = `approve`\n\n if (!chainId && !fromChainId) {\n throw new Error(`fromChainId must be set`)\n }\n\n const paramsObj: ApproveApiParams = {\n chain_id: fromChainId ? String(fromChainId) : String(chainId),\n amount: amount,\n from_token: fromToken,\n to_token: toToken,\n }\n if (tokenAddress) {\n paramsObj.token_address = tokenAddress\n }\n if (tokenId) {\n paramsObj.token_id = tokenId\n }\n if (toChainId) {\n paramsObj.to_chain_id = String(toChainId)\n }\n\n const params = new URLSearchParams(paramsObj)\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const data: ApproveResult = await res.json()\n\n return {\n to: data.to,\n data: data.data,\n }\n}\n","import { ConfigType } from \"./types\"\n\n/**\n * @internal\n */\nexport const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\"\n\n/**\n * @internal\n */\nexport const CONFIG: ConfigType = {\n WIDO_API_URL: \"https://api.joinwido.com\",\n SEGMENT_KEY: \"G4ttHjzxUXZ2ORLGHpXE8yEfCCkqjPXx\",\n DEBUG: process.env.NODE_ENV === \"development\",\n}\n\n/**\n * @internal\n */\nexport const useLocalApi = () => {\n // eslint-disable-next-line no-console\n console.log(\"Using local Wido API URL...\")\n CONFIG.WIDO_API_URL = \"http://127.0.0.1:8080\"\n CONFIG.SEGMENT_KEY = \"qu7qvYAa1ziyWWkgsInDw4K2YQDFxWOR\"\n}\n\n/**\n * @internal\n */\nexport const useProdApi = () => {\n CONFIG.WIDO_API_URL = \"https://api.joinwido.com\"\n CONFIG.SEGMENT_KEY = \"G4ttHjzxUXZ2ORLGHpXE8yEfCCkqjPXx\"\n}\n","import { CONFIG } from \"./config\"\nimport {\n StatusRequest,\n StatusApiParams,\n StatusApiResponse,\n StatusResult,\n} from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Get the transaction status alongside the transaction hash for the destination chain.\n */\nexport async function getStatus(request: StatusRequest): Promise<StatusResult> {\n const { txHash, chainId } = request\n\n const endpoint = `status`\n\n const paramsObj: StatusApiParams = {\n chain_id: String(chainId),\n tx_hash: txHash,\n }\n const params = new URLSearchParams(paramsObj)\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const data: StatusApiResponse = await res.json()\n\n return {\n status: data.status,\n substatus: data.substatus,\n substatusMessage: data.substatus_message,\n toChainId: data.to_chain_id,\n toTxHash: data.to_tx_hash,\n }\n}\n","import { CONFIG } from \"./config\"\nimport {\n TokenAllowanceResult,\n TokenAllowanceRequest,\n TokenAllowanceApiParams,\n} from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Get the number of tokens that the Wido contract can spend on the user's behalf, as per the ERC-20 standard.\n */\nexport async function getTokenAllowance(\n request: TokenAllowanceRequest\n): Promise<TokenAllowanceResult> {\n const {\n accountAddress,\n tokenAddress,\n chainId,\n fromToken,\n toToken,\n fromChainId,\n toChainId,\n tokenId,\n } = request\n\n const endpoint = `allowance`\n\n if (!chainId && !fromChainId) {\n throw new Error(`fromChainId must be set`)\n }\n\n const paramsObj: TokenAllowanceApiParams = {\n chain_id: fromChainId ? String(fromChainId) : String(chainId),\n account_address: accountAddress,\n from_token: fromToken,\n to_token: toToken,\n }\n if (tokenAddress) {\n paramsObj.token_address = tokenAddress\n }\n if (tokenId) {\n paramsObj.token_id = tokenId\n }\n if (toChainId) {\n paramsObj.to_chain_id = String(toChainId)\n }\n const params = new URLSearchParams(paramsObj)\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const data: TokenAllowanceResult = await res.json()\n\n return {\n spender: data.spender,\n allowance: data.allowance,\n }\n}\n","import { CONFIG } from \"./config\"\nimport { Web3Address, ChainId, WidoContractApiResponse } from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Get the address of the Wido Token Manager contract. Before zapping, the end user needs to approve this contract, allowing it to spend their ERC-20 token.\n * @deprecated in favor of `getWidoSpender`. This function will be removed in the future, please migrate.\n */\nexport async function getWidoContractAddress(\n chainId: ChainId\n): Promise<Web3Address> {\n const endpoint = `contract_address`\n\n const params = new URLSearchParams({\n chain_id: String(chainId),\n })\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const data: WidoContractApiResponse = await res.json()\n\n return data.spender as Web3Address\n}\n","import { CONFIG } from \"./config\"\nimport {\n Web3Address,\n WidoContractApiResponse,\n WidoSpenderRequest,\n ContractAddressApiParams,\n} from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Get contract address that the user needs to approve before zapping.\n * As per the ERC20 standard, Wido needs permission to spend tokens on behalf of `user`.\n */\nexport async function getWidoSpender(\n request: WidoSpenderRequest\n): Promise<Web3Address> {\n const { chainId, fromToken, toChainId, toToken } = request\n const endpoint = `contract_address`\n\n const paramsObj: ContractAddressApiParams = {\n chain_id: String(chainId),\n from_token: fromToken,\n to_chain_id: String(toChainId),\n to_token: toToken,\n }\n const params = new URLSearchParams(paramsObj)\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const data: WidoContractApiResponse = await res.json()\n\n return data.spender as Web3Address\n}\n","import { CONFIG } from \"./config\"\nimport {\n SupportedTokensApiParams,\n SupportedTokensRequest,\n Token,\n} from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * @internal\n */\nexport async function getSupportedTokensInternal(\n request?: SupportedTokensRequest & {\n /**\n * Whether to include the tokens from the preview list.\n *\n * @default false\n */\n includePreview?: boolean\n }\n) {\n const {\n chainId = [],\n protocol = [],\n includePricing = false,\n includePreview = false,\n toChainId,\n toToken,\n } = request || {}\n\n const endpoint = `tokens`\n\n const paramsObj: SupportedTokensApiParams = {\n include_pricing: String(includePricing),\n include_preview: String(includePreview),\n }\n if (toChainId) {\n paramsObj.to_chain_id = String(toChainId)\n }\n if (toToken) {\n paramsObj.to_token = toToken\n }\n const params = new URLSearchParams(paramsObj)\n chainId.forEach((chainId) => params.append(\"chain_id\", String(chainId)))\n protocol.forEach((protocol) => params.append(\"protocol\", protocol))\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n return (await res.json()).tokens as Token[]\n}\n","import { getSupportedTokensInternal } from \"./get-supported-tokens-internal\"\nimport { SupportedTokensRequest } from \"./types\"\n\n/**\n * Query the Wido API and return a list of ERC-20 tokens that can be used for routing.\n */\nexport async function getSupportedTokens(request?: SupportedTokensRequest) {\n return await getSupportedTokensInternal(request)\n}\n","import { CONFIG } from \"./config\"\nimport { Web3Address, ChainId, Balance } from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Query the Wido API and return a list of ERC-20 tokens found in the user's wallet,\n * that can be used for routing.\n */\nexport async function getBalances(user: Web3Address, chainId?: ChainId[]) {\n const endpoint = `balances`\n\n const params = new URLSearchParams({\n user: user,\n })\n chainId?.forEach((chainId) => params.append(\"chain_id\", String(chainId)))\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n return (await res.json()).balances as Balance[]\n}\n","import { CONFIG } from \"./config\"\nimport {\n QuoteResult,\n QuoteApiParams,\n QuoteApiResponse,\n QuoteRequest,\n} from \"./types\"\nimport { WidoError } from \"./WidoError\"\n\n/**\n * Get an easy-to-consume quote and a unsigned transaction for zapping any ERC20 token,\n * on behalf of `user`, spending `fromToken` and receiving `toToken` in exchange.\n *\n * Note: `user` and `amount` are required to receive a valid unsigned tx.\n */\nexport async function quote(request: QuoteRequest): Promise<QuoteResult> {\n const {\n user,\n fromChainId,\n fromToken,\n toChainId,\n toToken,\n amount,\n slippagePercentage = 0.01,\n varsOverride = {},\n partner,\n lowerTick,\n upperTick,\n tokenId,\n recipient,\n gaslessType,\n providers,\n } = request\n\n const endpoint = \"quote_v2\"\n const paramsObj: QuoteApiParams = {\n from_chain_id: String(fromChainId),\n from_token: fromToken,\n to_chain_id: String(toChainId),\n to_token: toToken,\n ...varsOverride,\n }\n\n if (slippagePercentage) {\n paramsObj.slippage_percentage = String(slippagePercentage)\n }\n if (amount) {\n paramsObj.amount = amount\n }\n if (user) {\n paramsObj.user = user\n }\n if (partner) {\n paramsObj.partner = partner\n }\n if (lowerTick) {\n paramsObj.lower_tick = lowerTick\n }\n if (upperTick) {\n paramsObj.upper_tick = upperTick\n }\n if (tokenId) {\n paramsObj.token_id = tokenId\n }\n if (recipient) {\n paramsObj.recipient = recipient\n }\n if (gaslessType) {\n paramsObj.gasless_type = gaslessType\n }\n\n const params = new URLSearchParams(paramsObj)\n\n if (providers) {\n for (const provider of providers) {\n params.append(\"providers\", provider)\n }\n }\n\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}?${params}`\n\n const res = await fetch(url)\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const body: QuoteApiResponse = await res.json()\n const { is_supported, steps, steps_count, messages } = body\n\n const baseQuoteResult: QuoteResult = {\n isSupported: is_supported,\n steps,\n stepsCount: steps_count,\n messages: messages || [],\n }\n\n if (!amount && !user) {\n return baseQuoteResult\n }\n\n const {\n price,\n min_price,\n from_token_usd_price,\n from_token_amount,\n from_token_amount_usd_value,\n to_token_usd_price,\n to_token_amount,\n to_token_amount_usd_value,\n expected_slippage,\n min_to_token_amount,\n from,\n to,\n data,\n value,\n gas_fee,\n gas_fee_usd,\n fee_in_from_token,\n bridge_fee_usd_value,\n fee_usd_value,\n } = body\n\n return {\n ...baseQuoteResult,\n price,\n minPrice: min_price,\n fromTokenUsdPrice: from_token_usd_price,\n fromTokenAmount: from_token_amount,\n fromTokenAmountUsdValue: from_token_amount_usd_value,\n toTokenUsdPrice: to_token_usd_price,\n toTokenAmount: to_token_amount,\n toTokenAmountUsdValue: to_token_amount_usd_value,\n expectedSlippage: expected_slippage,\n minToTokenAmount: min_to_token_amount,\n from,\n to,\n data,\n value,\n gasFee: gas_fee,\n gasFeeUsdValue: gas_fee_usd,\n feeBps: body.fee_bps,\n feeInFromToken: fee_in_from_token,\n bridgeFeeUsdValue: bridge_fee_usd_value,\n feeUsdValue: fee_usd_value,\n } as QuoteResult\n}\n","export const version = \"logger/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\nconst LogLevels = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\nimport { version } from \"./_version\";\nlet _globalLogger = null;\nfunction _checkNormalize() {\n try {\n const missing = [];\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n }\n ;\n }\n catch (error) {\n missing.push(form);\n }\n });\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\");\n }\n }\n catch (error) {\n return error.message;\n }\n return null;\n}\nconst _normalizeError = _checkNormalize();\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[\"DEBUG\"] = \"DEBUG\";\n LogLevel[\"INFO\"] = \"INFO\";\n LogLevel[\"WARNING\"] = \"WARNING\";\n LogLevel[\"ERROR\"] = \"ERROR\";\n LogLevel[\"OFF\"] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ///////////////////\n // Generic Errors\n // Unknown Error\n ErrorCode[\"UNKNOWN_ERROR\"] = \"UNKNOWN_ERROR\";\n // Not Implemented\n ErrorCode[\"NOT_IMPLEMENTED\"] = \"NOT_IMPLEMENTED\";\n // Unsupported Operation\n // - operation\n ErrorCode[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n ErrorCode[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n // Some sort of bad response from the server\n ErrorCode[\"SERVER_ERROR\"] = \"SERVER_ERROR\";\n // Timeout\n ErrorCode[\"TIMEOUT\"] = \"TIMEOUT\";\n ///////////////////\n // Operational Errors\n // Buffer Overrun\n ErrorCode[\"BUFFER_OVERRUN\"] = \"BUFFER_OVERRUN\";\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n ErrorCode[\"NUMERIC_FAULT\"] = \"NUMERIC_FAULT\";\n ///////////////////\n // Argument Errors\n // Missing new operator to an object\n // - name: The name of the class\n ErrorCode[\"MISSING_NEW\"] = \"MISSING_NEW\";\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n ErrorCode[\"INVALID_ARGUMENT\"] = \"INVALID_ARGUMENT\";\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"MISSING_ARGUMENT\"] = \"MISSING_ARGUMENT\";\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n ErrorCode[\"UNEXPECTED_ARGUMENT\"] = \"UNEXPECTED_ARGUMENT\";\n ///////////////////\n // Blockchain Errors\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n ErrorCode[\"CALL_EXCEPTION\"] = \"CALL_EXCEPTION\";\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n ErrorCode[\"INSUFFICIENT_FUNDS\"] = \"INSUFFICIENT_FUNDS\";\n // Nonce has already been used\n // - transaction: the transaction attempted\n ErrorCode[\"NONCE_EXPIRED\"] = \"NONCE_EXPIRED\";\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n ErrorCode[\"REPLACEMENT_UNDERPRICED\"] = \"REPLACEMENT_UNDERPRICED\";\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n ErrorCode[\"UNPREDICTABLE_GAS_LIMIT\"] = \"UNPREDICTABLE_GAS_LIMIT\";\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n ErrorCode[\"TRANSACTION_REPLACED\"] = \"TRANSACTION_REPLACED\";\n ///////////////////\n // Interaction Errors\n // The user rejected the action, such as signing a message or sending\n // a transaction\n ErrorCode[\"ACTION_REJECTED\"] = \"ACTION_REJECTED\";\n})(ErrorCode || (ErrorCode = {}));\n;\nconst HEX = \"0123456789abcdef\";\nexport class Logger {\n constructor(version) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n _log(logLevel, args) {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) {\n return;\n }\n console.log.apply(console, args);\n }\n debug(...args) {\n this._log(Logger.levels.DEBUG, args);\n }\n info(...args) {\n this._log(Logger.levels.INFO, args);\n }\n warn(...args) {\n this._log(Logger.levels.WARNING, args);\n }\n makeError(message, code, params) {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, {});\n }\n if (!code) {\n code = Logger.errors.UNKNOWN_ERROR;\n }\n if (!params) {\n params = {};\n }\n const messageDetails = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n }\n else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n }\n catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${code}`);\n messageDetails.push(`version=${this.version}`);\n const reason = message;\n let url = \"\";\n switch (code) {\n case ErrorCode.NUMERIC_FAULT: {\n url = \"NUMERIC_FAULT\";\n const fault = message;\n switch (fault) {\n case \"overflow\":\n case \"underflow\":\n case \"division-by-zero\":\n url += \"-\" + fault;\n break;\n case \"negative-power\":\n case \"negative-width\":\n url += \"-unsupported\";\n break;\n case \"unbound-bitwise-result\":\n url += \"-unbound-result\";\n break;\n }\n break;\n }\n case ErrorCode.CALL_EXCEPTION:\n case ErrorCode.INSUFFICIENT_FUNDS:\n case ErrorCode.MISSING_NEW:\n case ErrorCode.NONCE_EXPIRED:\n case ErrorCode.REPLACEMENT_UNDERPRICED:\n case ErrorCode.TRANSACTION_REPLACED:\n case ErrorCode.UNPREDICTABLE_GAS_LIMIT:\n url = code;\n break;\n }\n if (url) {\n message += \" [ See: https:/\\/links.ethers.org/v5-errors-\" + url + \" ]\";\n }\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n // @TODO: Any??\n const error = new Error(message);\n error.reason = reason;\n error.code = code;\n Object.keys(params).forEach(function (key) {\n error[key] = params[key];\n });\n return error;\n }\n throwError(message, code, params) {\n throw this.makeError(message, code, params);\n }\n throwArgumentError(message, name, value) {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n assert(condition, message, code, params) {\n if (!!condition) {\n return;\n }\n this.throwError(message, code, params);\n }\n assertArgument(condition, message, name, value) {\n if (!!condition) {\n return;\n }\n this.throwArgumentError(message, name, value);\n }\n checkNormalize(message) {\n if (message == null) {\n message = \"platform missing String.prototype.normalize\";\n }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n checkSafeUint53(value, message) {\n if (typeof (value) !== \"number\") {\n return;\n }\n if (message == null) {\n message = \"value not safe\";\n }\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n checkArgumentCount(count, expectedCount, message) {\n if (message) {\n message = \": \" + message;\n }\n else {\n message = \"\";\n }\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n checkNew(target, kind) {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n checkAbstract(target, kind) {\n if (target === kind) {\n this.throwError(\"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \"new\" });\n }\n else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n static globalLogger() {\n if (!_globalLogger) {\n _globalLogger = new Logger(version);\n }\n return _globalLogger;\n }\n static setCensorship(censorship, permanent) {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n if (_permanentCensorErrors) {\n if (!censorship) {\n return;\n }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n static setLogLevel(logLevel) {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n static from(version) {\n return new Logger(version);\n }\n}\nLogger.errors = ErrorCode;\nLogger.levels = LogLevel;\n//# sourceMappingURL=index.js.map","export const version = \"properties/5.7.0\";\n//# sourceMappingURL=_version.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\nexport function defineReadOnly(object, name, value) {\n Object.defineProperty(object, name, {\n enumerable: true,\n value: value,\n writable: false,\n });\n}\n// Crawl up the constructor chain to find a static method\nexport function getStatic(ctor, key) {\n for (let i = 0; i < 32; i++) {\n if (ctor[key]) {\n return ctor[key];\n }\n if (!ctor.prototype || typeof (ctor.prototype) !== \"object\") {\n break;\n }\n ctor = Object.getPrototypeOf(ctor.prototype).constructor;\n }\n return null;\n}\nexport function resolveProperties(object) {\n return __awaiter(this, void 0, void 0, function* () {\n const promises = Object.keys(object).map((key) => {\n const value = object[key];\n return Promise.resolve(value).then((v) => ({ key: key, value: v }));\n });\n const results = yield Promise.all(promises);\n return results.reduce((accum, result) => {\n accum[(result.key)] = result.value;\n return accum;\n }, {});\n });\n}\nexport function checkProperties(object, properties) {\n if (!object || typeof (object) !== \"object\") {\n logger.throwArgumentError(\"invalid object\", \"object\", object);\n }\n Object.keys(object).forEach((key) => {\n if (!properties[key]) {\n logger.throwArgumentError(\"invalid object key - \" + key, \"transaction:\" + key, object);\n }\n });\n}\nexport function shallowCopy(object) {\n const result = {};\n for (const key in object) {\n result[key] = object[key];\n }\n return result;\n}\nconst opaque = { bigint: true, boolean: true, \"function\": true, number: true, string: true };\nfunction _isFrozen(object) {\n // Opaque objects are not mutable, so safe to copy by assignment\n if (object === undefined || object === null || opaque[typeof (object)]) {\n return true;\n }\n if (Array.isArray(object) || typeof (object) === \"object\") {\n if (!Object.isFrozen(object)) {\n return false;\n }\n const keys = Object.keys(object);\n for (let i = 0; i < keys.length; i++) {\n let value = null;\n try {\n value = object[keys[i]];\n }\n catch (error) {\n // If accessing a value triggers an error, it is a getter\n // designed to do so (e.g. Result) and is therefore \"frozen\"\n continue;\n }\n if (!_isFrozen(value)) {\n return false;\n }\n }\n return true;\n }\n return logger.throwArgumentError(`Cannot deepCopy ${typeof (object)}`, \"object\", object);\n}\n// Returns a new copy of object, such that no properties may be replaced.\n// New properties may be added only to objects.\nfunction _deepCopy(object) {\n if (_isFrozen(object)) {\n return object;\n }\n // Arrays are mutable, so we need to create a copy\n if (Array.isArray(object)) {\n return Object.freeze(object.map((item) => deepCopy(item)));\n }\n if (typeof (object) === \"object\") {\n const result = {};\n for (const key in object) {\n const value = object[key];\n if (value === undefined) {\n continue;\n }\n defineReadOnly(result, key, deepCopy(value));\n }\n return result;\n }\n return logger.throwArgumentError(`Cannot deepCopy ${typeof (object)}`, \"object\", object);\n}\nexport function deepCopy(object) {\n return _deepCopy(object);\n}\nexport class Description {\n constructor(info) {\n for (const key in info) {\n this[key] = deepCopy(info[key]);\n }\n }\n}\n//# sourceMappingURL=index.js.map","import { PaymasterApiRequest, PaymasterApiResponse } from \"../../types\"\nimport { CONFIG } from \"../../config\"\nimport { WidoError } from \"../../WidoError\"\nimport { UserOperation } from \"@biconomy/core-types\"\n\nexport async function getPaymasterAndData(\n chainId: number,\n userOp: UserOperation\n): Promise<PaymasterApiResponse> {\n const endpoint = \"paymaster\"\n const request: PaymasterApiRequest = {\n chainId: chainId,\n sender: userOp.sender, // address\n nonce: userOp.nonce.toString(), // uint256\n initCode: userOp.initCode, // bytes\n callData: userOp.callData, // bytes\n callGasLimit: userOp.callGasLimit.toString(), // uint256\n verificationGasLimit: userOp.verificationGasLimit.toString(), // uint256\n preVerificationGas: userOp.preVerificationGas.toString(), // uint256\n maxFeePerGas: userOp.maxFeePerGas.toString(), // uint256\n maxPriorityFeePerGas: userOp.maxPriorityFeePerGas.toString(), // uint256\n paymasterAndData: userOp.paymasterAndData, // bytes\n signature: userOp.signature,\n }\n const url = `${CONFIG.WIDO_API_URL}/${endpoint}`\n\n const res = await fetch(url, {\n method: \"POST\",\n mode: \"cors\",\n headers: {\n Accept: \"*/*\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n })\n\n if (!res.ok) {\n throw WidoError.from_api_response(await res.json())\n }\n\n const { paymasterAndData } = await res.json()\n\n return { paymasterAndData }\n}\n","import { UserOperation } from \"@biconomy/core-types\"\nimport { IPaymaster, PaymasterAndDataResponse } from \"@biconomy/paymaster\"\nimport { resolveProperties } from \"@ethersproject/properties\"\nimport { ChainId } from \"../types\"\nimport { getPaymasterAndData } from \"./core/paymaster\"\n\nexport class BiconomyPaymaster implements IPaymaster {\n chainId: ChainId\n\n constructor(chainId: number) {\n this.chainId = chainId\n }\n\n getDummyPaymasterAndData(_userOp: Partial<UserOperation>): Promise<string> {\n return Promise.resolve(\n \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"\n )\n }\n\n async getPaymasterAndData(\n userOp: Partial<UserOperation>\n ): Promise<PaymasterAndDataResponse> {\n userOp = await resolveProperties(userOp)\n\n userOp.nonce = Number(userOp.nonce)\n userOp.callGasLimit = Number(userOp.callGasLimit)\n userOp.verificationGasLimit = Number(userOp.verificationGasLimit)\n userOp.maxFeePerGas = Number(userOp.maxFeePerGas)\n userOp.maxPriorityFeePerGas = Number(userOp.maxPriorityFeePerGas)\n userOp.preVerificationGas = Number(userOp.preVerificationGas)\n userOp.signature = \"0x\"\n userOp.paymasterAndData = \"0x\"\n\n const paymasterResponse = await getPaymasterAndData(\n this.chainId,\n userOp as UserOperation\n )\n\n return {\n paymasterAndData: paymasterResponse.paymasterAndData,\n }\n }\n}\n","import { ChainId, ChainName } from \"../types\"\n\n/**\n * @internal\n */\nexport const MAX_UINT256 =\n \"115792089237316195423570985008687907853269984665640564039457584007913129639935\"\n\nconst chainIdMap: Record<ChainName, ChainId> = {\n other: 1,\n mainnet: 1,\n goerli: 5,\n fantom: 250,\n arbitrum: 42161,\n avalanche: 43114,\n moonriver: 1285,\n polygon: 137,\n celo: 42220,\n phuture: 1338,\n optimism: 10,\n binance: 56,\n aurora: 1313161554,\n base: 8453\n}\n\n/**\n * @internal\n */\nexport function getChainId(chainName: ChainName): ChainId {\n if (!chainIdMap[chainName]) {\n throw new Error(`InputError: chain with name ${chainName} not found.`)\n }\n\n return chainIdMap[chainName]\n}\n\nconst chainNameMap: Record<ChainId, ChainName> = {\n 1: \"mainnet\",\n 5: \"goerli\",\n 250: \"fantom\",\n 43114: \"avalanche\",\n 42161: \"arbitrum\",\n 1285: \"moonriver\",\n 137: \"polygon\",\n 42220: \"celo\",\n 1338: \"phuture\",\n 10: \"optimism\",\n 56: \"binance\",\n 1313161554: \"aurora\",\n 8453: \"base\"\n}\n\n/**\n * @internal\n */\nexport function getChainName(chainId: ChainId): ChainName {\n if (!chainNameMap[chainId]) {\n throw new Error(`InputError: chain with id ${chainId} not found.`)\n }\n\n return chainNameMap[chainId]\n}\n","/**\n * @internal\n */\nexport type ChainName =\n | \"other\"\n | \"mainnet\"\n | \"fantom\"\n | \"avalanche\"\n | \"moonriver\"\n | \"polygon\"\n | \"arbitrum\"\n | \"celo\"\n | \"goerli\"\n | \"phuture\"\n | \"optimism\"\n | \"binance\"\n | \"aurora\"\n | \"base\"\n\nexport type ChainId =\n | 1\n | 250\n | 43114\n | 42161\n | 5\n | 1285\n | 137\n | 42220\n | 1338\n | 10\n | 56\n | 15366\n | 15367\n | 1313161554\n | 8453\n | number\n\nexport type TokenAllowanceApiParams = {\n chain_id: string\n account_address: string\n token_address?: string\n from_token: string\n to_token: string\n token_id?: string\n to_chain_id?: string\n}\n\nexport type TokenAllowanceRequest = {\n /**\n * Alias for `fromChainId`. This will be deprecated in the future: use `fromChainId`.\n */\n chainId?: ChainId\n accountAddress: Web3Address\n /**\n * Alias for `fromToken`. This will be deprecated in the future: use `fromToken`.\n *\n * @deprecated in favor of `fromToken`. This parameter will be removed in the future, please migrate.\n */\n tokenAddress?: Web3Address\n /**\n * ChainId of `fromToken`.\n * See https://chainlist.org/.\n */\n fromChainId?: ChainId\n /**\n * Address of `fromToken`, the token you wish to zap with.\n */\n fromToken: Web3Address\n /**\n * ChainId of `toToken`.\n * See https://chainlist.org/.\n */\n toChainId: ChainId\n /**\n * Address of `toToken`, the token you wish to zap into.\n */\n toToken: Web3Address\n /**\n * ERC-721 tokenId.\n */\n tokenId?: string\n}\n\nexport type TokenAllowanceResult = {\n allowance: string\n spender: Web3Address\n}\n\nexport type StatusRequest = {\n chainId: ChainId\n txHash: string\n}\n\nexport type StatusApiParams = {\n chain_id: string\n tx_hash?: string\n}\n\nexport type StatusApiResponse = {\n status: string\n substatus: string\n substatus_message: string\n to_tx_hash: string\n to_chain_id?: string\n}\n\nexport type StatusResult = {\n status: string\n substatus: string\n substatusMessage: string\n toTxHash: string\n toChainId?: string\n}\n\nexport type ApproveApiParams = {\n chain_id: string\n token_address?: string\n from_token: string\n to_token: string\n amount?: string\n token_id?: string\n to_chain_id?: string\n}\n\nexport type ApproveRequest = {\n /**\n * Alias for `fromChainId`. This will be deprecated in the future: use `fromChainId`.\n */\n chainId?: ChainId\n /**\n * Alias for `fromToken`.\n *\n * @deprecated in favor of `fromToken`. This parameter will be removed in the future, please migrate.\n */\n tokenAddress?: Web3Address\n /**\n * ChainId of `fromToken`.\n * See https://chainlist.org/.\n */\n fromChainId?: ChainId\n /**\n * Address of `fromToken`, the token you wish to zap with.\n */\n fromToken: Web3Address\n /**\n * ChainId of `toToken`.\n * See https://chainlist.org/.\n */\n toChainId: ChainId\n /**\n * Address of `toToken`, the token you wish to zap into.\n */\n toToken: Web3Address\n /**\n * @default \"115792089237316195423570985008687907853269984665640564039457584007913129639935\"\n */\n amount?: string\n /**\n * ERC-721 tokenId.\n */\n tokenId?: string\n}\n\nexport type ApproveResult = {\n /**\n * Contract address where the unsigned transaction needs to be sent.\n */\n to: Web3Address\n /**\n * Unsigned transaction data.\n */\n data: string\n}\n\nexport type ContractAddressApiParams = {\n chain_id: string\n from_token: string\n to_token: string\n to_chain_id: string\n}\n\nexport type WidoSpenderRequest = {\n /**\n * ChainId of `fromToken`.\n * See https://chainlist.org/.\n */\n chainId: ChainId\n /**\n * Address of `fromToken`, the token you wish to zap with.\n */\n fromToken: Web3Address\n /**\n * Address of `toToken`, the token you wish to zap into.\n */\n toToken: Web3Address\n /**\n * ChainId of the `to_token`.\n * See https://chainlist.org/.\n */\n toChainId: ChainId\n}\n\nexport enum GaslessType {\n ERC4337 = \"erc4337\",\n EOA = \"eoa\",\n}\n\nexport enum Providers {\n LiFi = \"LiFi\",\n ZeroEx = \"ZeroEx\",\n OpenOcean = \"OpenOcean\",\n}\n\nexport type QuoteRequest = {\n /**\n * ChainId of `fromToken`.\n * See https://chainlist.org/.\n */\n fromChainId: ChainId\n /**\n * Address of `fromToken`, the token you wish to zap with.\n */\n fromToken: Web3Address\n /**\n * ChainId of the `to_token`.\n * See https://chainlist.org/.\n */\n toChainId: ChainId\n /**\n * Address of the to token.\n */\n toToken: Web3Address\n /**\n * Amount of the `fromToken` to spend on the user's behalf.\n */\n amount?: string\n /**\n * Address of user placing the order.\n * Required to receive a valid unsigned tx.\n */\n user?: Web3Address\n /**\n * The maximum acceptable slippage of the `to_token` amount.\n * A number between `0` and `1`.\n * E.g.: `0.01` for 1% slippage tolerance.\n *\n * @default 0.01\n */\n slippagePercentage?: number\n /**\n * Address of where the zapped funds should be sent after the order executes.\n */\n recipient?: Web3Address\n varsOverride?: Record<string, number | string | unknown>\n /**\n * Address of partner referring the user.\n */\n partner?: Web3Address\n /**\n * For Uniswap V3 zaps.\n */\n lowerTick?: Web3Address\n /**\n * For Uniswap V3 zaps.\n */\n upperTick?: Web3Address\n /**\n * ERC-721 tokenId.\n */\n tokenId?: string\n /**\n * Gas-less type of transaction\n */\n gaslessType?: GaslessType\n /**\n * Specific swap providers\n */\n providers?: Providers[]\n}\n\n/**\n * @internal\n */\nexport type QuoteApiParams = {\n from_chain_id: string\n from_token: string\n to_chain_id: string\n to_token: string\n amount?: string\n user?: string\n slippage_percentage?: string\n partner?: string\n lower_tick?: string\n upper_tick?: string\n token_id?: string\n recipient?: string\n gasless_type?: string\n providers?: string\n}\n\n/**\n * @internal\n */\nexport type QuoteApiResponse = {\n is_supported: boolean\n steps: Step[]\n steps_count: number\n //\n price: string\n min_price: string\n from_token_usd_price: string\n from_token_amount: string\n from_token_amount_usd_value: string\n to_token_usd_price: string\n to_token_amount: string\n to_token_amount_usd_value: string\n min_to_token_amount: string\n expected_slippage: string\n from: Web3Address\n to: Web3Address\n value: string\n data: string\n messages?: { type: \"info\" | \"warning\"; message: string }[]\n gas_fee?: string\n gas_fee_usd?: string\n fee_bps?: number\n fee_in_from_token?: number\n bridge_fee_usd_value?: string\n fee_usd_value?: string\n}\n\nexport type QuoteResult = {\n /**\n * Whether the route is supported or not.\n */\n isSupported: boolean\n /**\n * The steps this route will take. Used to show the route breakdown.\n */\n steps: {\n protocol: string\n chainId: ChainId\n toChainId: ChainId\n fromToken: Web3Address\n toToken: Web3Address\n swapAddress: Web3Address\n functionName: string\n }[]\n /**\n * Number of steps the route will take.\n */\n stepsCount: number\n /**\n * Expected price of `toToken`.\n */\n price?: string\n /**\n * Minimum accepted price for a successful transaction.\n */\n minPrice?: string\n /**\n * Price of `fromToken` in US dollars.\n */\n fromTokenUsdPrice?: string\n /**\n * Amount of `fromToken` to send.\n */\n fromTokenAmount?: string\n /**\n * Value of `fromTokenAmount` in US dollars.\n */\n fromTokenAmountUsdValue?: string\n /**\n * Price of `toToken` in US dollars.\n */\n toTokenUsdPrice?: string\n /**\n * Expected amount of `toToken` to receive.\n */\n toTokenAmount?: string\n /**\n * Value of `toTokenAmount` in US dollars.\n */\n toTokenAmountUsdValue?: string\n /**\n * Expected slippage calculated from `fromTokenAmountUsdValue` and `toTokenAmountUsdValue`.\n * If the value returned is < 0, the zap is expected to result in positive slippage.\n */\n expectedSlippage?: string\n /**\n * Minimum amount of the to token the user is willing to accept for a successful transaction.\n */\n minToTokenAmount?: string\n /**\n * User address who should be sending the tx.\n */\n from?: Web3Address\n /**\n * Contract address where the unsigned transaction needs to be sent.\n */\n to?: Web3Address\n /**\n * Unsigned transaction data.\n */\n data?: string\n /**\n * Amount of native tokens that need to be sent.\n */\n value?: string\n messages: { type: \"info\" | \"warning\"; message: string }[]\n gasFee?: string\n gasFeeUsdValue?: string\n feeBps?: string\n /**\n * Service fee denoted in the 'from' token units\n */\n feeInFromToken?: number\n /**\n * Bridge fee value in US dollars.\n */\n bridgeFeeUsdValue?: string\n /**\n * Service fee value in US dollars.\n */\n feeUsdValue?: string\n}\n\n/**\n * @internal\n */\nexport type Order = {\n user: Web3Address\n fromToken: Web3Address\n fromChainId: ChainId\n toToken: Web3Address\n toChainId: ChainId\n fromTokenAmount: string\n minToTokenAmount: string\n nonce: number\n expiration: number\n}\n\n/**\n * @internal\n */\nexport type Step = {\n protocol: string\n chainId: ChainId\n toChainId: ChainId\n fromToken: Web3Address\n toToken: Web3Address\n swapAddress: Web3Address\n functionName: string\n}\n\n/**\n * @internal\n */\nexport type ConfigType = {\n WIDO_API_URL: string\n DEBUG: boolean\n SEGMENT_KEY: string\n}\n\nexport type SupportedTokensApiParams = {\n include_pricing?: string\n include_preview?: string\n to_chain_id?: string\n to_token?: string\n}\n\nexport type SupportedTokensRequest = {\n /**\n * Filter by `chainId`.\n *\n * @default []\n */\n chainId?: ChainId[]\n /**\n * Filter by `protocol`.\n *\n * @default []\n */\n protocol?: Protocol[]\n /**\n * Whether to include pricing.\n *\n * @default false\n */\n includePricing?: boolean\n /**\n * Address of `toToken`, the token you wish to zap into.\n * Use this if you'd like to receive a list of tokens you can zap in with.\n */\n toToken?: Web3Address\n /**\n * ChainId of the `to_token`.\n * See https://chainlist.org/.\n */\n toChainId?: ChainId\n}\n\nexport type Token = {\n address: Web3Address\n chainId: ChainId\n protocol: Protocol\n /**\n * @default \"0.0\"\n */\n usdPrice: string\n symbol: string\n name: string\n decimals: number\n logoURI: string\n}\n\nexport type Balance = {\n address: Web3Address\n chainId: ChainId\n protocol: Protocol\n /**\n * @default \"0.0\"\n */\n usdPrice: string\n symbol: string\n name: string\n decimals: number\n logoURI: string\n balance: string\n balanceUsdValue: string\n}\n\n/**\n * @internal\n */\nexport type WidoContractApiResponse = {\n spender: Web3Address\n err?: string\n}\n\nexport type ErrorCode = \"SERVER_ERR\" | \"INVALID_REQUEST\" | string\nexport type ValidationError = {\n loc: string[]\n msg: string\n type: string\n}\n\n/**\n * @internal\n */\nexport type ErrorApiResponse = {\n code: ErrorCode\n detail: string\n validationErrors: ValidationError[]\n}\n\n/**\n * @internal\n */\nexport type PaymasterApiRequest = {\n chainId: ChainId\n sender: string\n nonce: number\n initCode: string\n callData: string\n callGasLimit: number\n verificationGasLimit: number\n preVerificationGas: number\n maxFeePerGas: number\n maxPriorityFeePerGas: number\n paymasterAndData: string\n signature: string\n}\n\n/**\n * @internal\n */\nexport type PaymasterApiResponse = {\n paymasterAndData: string\n}\n\n/**\n * Example: `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`\n */\nexport type Web3Address = string\n\nexport type Protocol =\n | \"curve.fi\"\n | \"aave.com\"\n | \"yearn.finance\"\n | \"sturdy.finance\"\n | \"pickle.finance\"\n | \"dex\"\n | \"unknown\"\n | string\n"],"names":["chainId","protocol","version","LogLevel","ErrorCode","error","this","GaslessType","Providers"],"mappings":";;;;;;AAEO,MAAM,kBAAkB,MAAM;AAAA,EAMnC,YACE,MACA,QACA,kBACA;AACI,QAAA;AAEI,YAAA;AAAA,WACD;AACO,kBAAA,GAAG,WAAW,qDACpB,IAAI,CAAC,QAAQ,IAAI,KAClB,KAAK;AACR;AAAA;AAGA,kBAAU,GAAG,SAAS;AACtB;AAAA;AAGJ,UAAM,OAAO;AAxBf,gCAAO;AACP;AACA;AACA;AAuBE,SAAK,SAAS;AACd,SAAK,OAAO;AACZ,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,OAAO,kBAAkB,UAA4B;AACnD,WAAO,IAAI;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,EAEb;AACF;AC/BA,eAAsB,QAAQ,SAAiD;AACvE,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACE,IAAA;AAEJ,QAAM,WAAW;AAEb,MAAA,CAAC,WAAW,CAAC,aAAa;AACtB,UAAA,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,QAAM,YAA8B;AAAA,IAClC,UAAU,cAAc,OAAO,WAAW,IAAI,OAAO,OAAO;AAAA,IAC5D;AAAA,IACA,YAAY;AAAA,IACZ,UAAU;AAAA,EAAA;AAEZ,MAAI,cAAc;AAChB,cAAU,gBAAgB;AAAA,EAC5B;AACA,MAAI,SAAS;AACX,cAAU,WAAW;AAAA,EACvB