{"version":3,"file":"OkxSwapWidget.DkwTXtLQ.mjs","sources":["../src/events/events.ts","../src/events/OkxEventEmitter.ts","../src/messages.ts","../src/types.ts","../src/IframeEventEmitter.ts","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_freeGlobal.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_root.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Symbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getRawTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_objectToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObjectLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isLength.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLike.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isPrototype.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArguments.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubFalse.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUnary.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nodeUtil.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overArg.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.js","../src/widgetHelp.ts","../src/verifyParamsUtils.ts","../src/transactions/EvmStrategy.ts","../../../node_modules/.pnpm/base-x@4.0.0/node_modules/base-x/src/index.js","../../../node_modules/.pnpm/bs58@5.0.0/node_modules/bs58/index.js","../src/transactions/SolanaStrategy.ts","../src/transactions/TransactionProcessor.ts","../src/IframeRpcProviderBridge.ts","../src/updateIframeStyle.ts","../src/OkxSwapWidget.ts"],"sourcesContent":["import { ProviderEventMessage } from 'src/types';\n\nimport {\n    OnFulfilledOrderPayload,\n    OnPostedOrderPayload,\n    OnCancelledOrderPayload,\n    OnExpiredOrderPayload,\n    OnPresignedOrderPayload,\n} from './orders';\nimport { OnToastMessagePayload } from './toastMessages';\nimport { OnTradeParamsPayload } from './trade';\nimport { OnTransactionPayload } from './transactions';\n\nexport enum OkxEvents {\n    ON_TOAST_MESSAGE = 'ON_TOAST_MESSAGE',\n    ON_POSTED_ORDER = 'ON_POSTED_ORDER',\n    ON_FULFILLED_ORDER = 'ON_FULFILLED_ORDER',\n    ON_CANCELLED_ORDER = 'ON_CANCELLED_ORDER',\n    ON_EXPIRED_ORDER = 'ON_EXPIRED_ORDER',\n    ON_PRESIGNED_ORDER = 'ON_PRESIGNED_ORDER',\n    ON_ONCHAIN_TRANSACTION = 'ON_ONCHAIN_TRANSACTION',\n    ON_CHANGE_TRADE_PARAMS = 'ON_CHANGE_TRADE_PARAMS',\n    NO_WALLET_CONNECT = 'NO_WALLET_CONNECT',\n    ON_CONNECT_WALLET = 'ON_CONNECT_WALLET',\n    ON_FROM_CHAIN_CHANGE = 'ON_FROM_CHAIN_CHANGE',\n    ON_SUBMIT_TX = 'ON_SUBMIT_TX',\n}\n\n// Define types for event payloads\nexport interface OkxEventPayloadMap {\n    [OkxEvents.ON_TOAST_MESSAGE]: OnToastMessagePayload;\n    [OkxEvents.ON_POSTED_ORDER]: OnPostedOrderPayload;\n    [OkxEvents.ON_FULFILLED_ORDER]: OnFulfilledOrderPayload;\n    [OkxEvents.ON_CANCELLED_ORDER]: OnCancelledOrderPayload;\n    [OkxEvents.ON_EXPIRED_ORDER]: OnExpiredOrderPayload;\n    [OkxEvents.ON_PRESIGNED_ORDER]: OnPresignedOrderPayload;\n    [OkxEvents.ON_ONCHAIN_TRANSACTION]: OnTransactionPayload;\n    [OkxEvents.ON_CHANGE_TRADE_PARAMS]: OnTradeParamsPayload;\n    [OkxEvents.NO_WALLET_CONNECT]: ProviderEventMessage;\n    [OkxEvents.ON_CONNECT_WALLET]: ProviderEventMessage;\n    [OkxEvents.ON_FROM_CHAIN_CHANGE]: ProviderEventMessage;\n    [OkxEvents.ON_SUBMIT_TX]: ProviderEventMessage;\n}\n\nexport type OkxEventPayloads = OkxEventPayloadMap[OkxEvents];\n","import { OkxEvents, OkxEventPayloadMap } from '.';\n\nexport type OkxEventHandler<T extends OkxEvents> = (payload: OkxEventPayloadMap[T]) => void;\n\nexport type OkxEventListener<T extends OkxEvents> = T extends OkxEvents\n  ? { event: T; handler: OkxEventHandler<T> }\n  : never;\n\nexport type OkxEventListeners = OkxEventListener<OkxEvents>[];\n\nexport interface OkxEventEmitter {\n  on(listener: OkxEventListener<OkxEvents>): void;\n  off(listener: OkxEventListener<OkxEvents>): void;\n  emit<T extends OkxEvents>(event: T, payload: OkxEventPayloadMap[T]): void;\n}\n\nexport class SimpleOkxEventEmitter implements OkxEventEmitter {\n  private subscriptions: {\n    [key: string]: OkxEventHandler<any>[]; // Use generic parameter for listener type\n  } = {};\n\n  on(listener: OkxEventListener<OkxEvents>): void {\n    const { event, handler } = listener;\n    if (!this.subscriptions[event]) {\n      this.subscriptions[event] = [];\n    }\n    this.subscriptions[event].push(handler);\n  }\n\n  off(listener: OkxEventListener<OkxEvents>): void {\n    const { event, handler } = listener;\n    if (this.subscriptions[event]) {\n      this.subscriptions[event] = this.subscriptions[event].filter(\n        listener => listener !== handler,\n      );\n    }\n  }\n\n  emit<T extends OkxEvents>(event: T, payload: OkxEventPayloadMap[T]): void {\n    if (this.subscriptions[event]) {\n      this.subscriptions[event].forEach(handler => {\n        console.log('emit', event, payload);\n        handler(payload);\n      });\n    }\n  }\n}\n","import {\n    WidgetMethodsEmit,\n    WidgetMethodsEmitPayloadMap,\n    WidgetMethodsListen,\n    WidgetMethodsListenPayloadMap,\n    WidgetProviderEventPayloadMap,\n    WidgetProviderEvents,\n} from './types';\n\n/**\n * Key for identifying the event associated with the Okx Swap Widget.\n */\nconst OKX_SWAP_WIDGET_EVENT_KEY = 'okxWidget';\n\nexport function postMessageToWindow<T extends WidgetMethodsEmit>(\n    contentWindow: Window,\n    method: T,\n    payload: WidgetMethodsEmitPayloadMap[T],\n): void;\nexport function postMessageToWindow<T extends WidgetMethodsListen>(\n    contentWindow: Window,\n    method: T,\n    payload: WidgetMethodsListenPayloadMap[T],\n): void;\nexport function postMessageToWindow<T extends WidgetProviderEvents>(\n    contentWindow: Window,\n    method: T,\n    payload: WidgetProviderEventPayloadMap[T],\n): void;\n\nexport function postMessageToWindow(contentWindow: Window, method: string, payload: unknown) {\n    const data = typeof payload === 'object' ? payload : {};\n    const postPayload = {\n        key: OKX_SWAP_WIDGET_EVENT_KEY,\n        method,\n        ...data,\n    };\n\n    contentWindow?.postMessage(\n        postPayload,\n        '*', // TODO: Change to Okx specific origin in production.\n    );\n}\n\nexport type WindowListener = (event: MessageEvent<unknown>) => void;\n\nexport function listenToMessageFromWindow<T extends WidgetMethodsListen>(\n    contentWindow: Window,\n    method: T,\n    callback: (payload: WidgetMethodsListenPayloadMap[T]) => void,\n): WindowListener;\nexport function listenToMessageFromWindow<T extends WidgetMethodsEmit>(\n    contentWindow: Window,\n    method: T,\n    callback: (payload: WidgetMethodsEmitPayloadMap[T]) => void,\n): WindowListener;\n\nexport function listenToMessageFromWindow<T extends WidgetProviderEvents>(\n    contentWindow: Window,\n    method: T,\n    callback: (payload: WidgetProviderEventPayloadMap[T]) => void,\n): WindowListener;\n\nexport function listenToMessageFromWindow<T = unknown>(\n    contentWindow: Window,\n    method: string,\n    callback: (payload: T) => void,\n): (payload: MessageEvent<unknown>) => void {\n    const listener = (event: MessageEvent<unknown>) => {\n        if (\n            !isEventData(event.data) ||\n            event.data.key !== OKX_SWAP_WIDGET_EVENT_KEY ||\n            event.data.method !== method\n        ) {\n            return;\n        }\n        callback(event.data as unknown as T);\n    };\n    contentWindow.addEventListener('message', listener);\n\n    return listener;\n}\n\ninterface EventData {\n    key: string;\n    method: string;\n}\n\nfunction isEventData(obj): obj is EventData {\n    return (\n        typeof obj === 'object' &&\n        obj !== null &&\n        'key' in obj &&\n        'method' in obj &&\n        typeof obj.key === 'string' &&\n        typeof obj.method === 'string'\n    );\n}\n\nexport function stopListeningToMessageFromWindow<T extends WidgetMethodsListen>(\n    contentWindow: Window,\n    method: T,\n    callback: (payload: WidgetMethodsListenPayloadMap[T]) => void,\n): void;\nexport function stopListeningToMessageFromWindow<T extends WidgetMethodsEmit>(\n    contentWindow: Window,\n    method: T,\n    callback: (payload: WidgetMethodsEmitPayloadMap[T]) => void,\n): void;\n\nexport function stopListeningToMessageFromWindow<T extends WidgetProviderEvents>(\n    contentWindow: Window,\n    _method: string,\n    callback: (payload: WidgetProviderEventPayloadMap[T]) => void,\n): void;\n\nexport function stopListeningToMessageFromWindow(\n    contentWindow: Window,\n    _method: string,\n    callback: (payload: unknown) => void,\n) {\n    contentWindow.removeEventListener('message', callback);\n}\n\nexport function stopListeningWindowListener(contentWindow: Window, callback: WindowListener) {\n    contentWindow.removeEventListener('message', callback);\n}\n","import { PublicKey } from '@solana/web3.js';\n\nimport type { SupportedChainId } from './common';\nimport { OkxEventListeners, OkxEventPayloadMap, OkxEvents } from './events';\n\nexport { SupportedChainId } from './common';\n\nexport enum WidgetMethodsEmit {\n    ACTIVATE = 'ACTIVATE',\n    UPDATE_HEIGHT = 'UPDATE_HEIGHT',\n    SET_FULL_HEIGHT = 'SET_FULL_HEIGHT',\n    EMIT_OKX_EVENT = 'EMIT_OKX_EVENT',\n    PROVIDER_RPC_REQUEST = 'PROVIDER_RPC_REQUEST',\n    INTERCEPT_WINDOW_OPEN = 'INTERCEPT_WINDOW_OPEN',\n    LOAD_READY = 'LOAD_READY',\n}\n\nexport enum WidgetMethodsListen {\n    UPDATE_PARAMS = 'UPDATE_PARAMS',\n    UPDATE_APP_DATA = 'UPDATE_APP_DATA',\n    PROVIDER_RPC_RESPONSE = 'PROVIDER_RPC_RESPONSE',\n    PROVIDER_ON_EVENT = 'PROVIDER_ON_EVENT',\n    PROVIDER_ON_EVENT_CONNECT = 'PROVIDER_ON_EVENT_CONNECT',\n    PROVIDER_ONEVENT_WALLET_SATUS = 'PROVIDER_ONEVENT_WALLET_SATUS',\n    PROVIDER_ONEVENT_WALLET_SOLANA_SATUS = 'PROVIDER_ONEVENT_WALLET_SOLANA_SATUS',\n    UPDATE_PROVIDER = 'UPDATE_PROVIDER',\n}\n\nexport enum WidgetProviderEvents {\n    PROVIDER_ON_EVENT_CONNECT = 'PROVIDER_ON_EVENT_CONNECT',\n    PROVIDER_ON_EVENT = 'PROVIDER_ON_EVENT',\n    PROVIDER_ONEVENT_WALLET_SATUS = 'PROVIDER_ONEVENT_WALLET_SATUS',\n    NO_WALLET_CONNECT = 'NO_WALLET_CONNECT',\n}\n\ntype OkxSwapWidgetParams = any;\n\nexport interface OkxSwapWidgetProps {\n    params: OkxSwapWidgetParams;\n    provider?: EthereumProvider | SolanaProvider;\n    listeners?: OkxEventListeners;\n    connectWalletHandle?: () => void;\n}\n\nexport interface JsonRpcRequest {\n    id: number;\n    method: string;\n    params: unknown[];\n}\n\nexport interface SolanaProvider {\n    isPhantom?: boolean;\n    connect(): Promise<{ publicKey: { toString(): string; toBase58(): string } }>;\n    disconnect(): Promise<void>;\n    signTransaction(transaction: any): Promise<any>;\n    signAllTransactions(transactions: any[]): Promise<any[]>;\n    signMessage(message: Uint8Array): Promise<any>;\n    on(event: string, listener: (...args: any[]) => void): void;\n    removeListener(event: string, listener: (...args: any[]) => void): void;\n    removeAllListeners(): void;\n    publicKey: PublicKey;\n}\n\n// https://eips.ethereum.org/EIPS/ei  p-1193\nexport interface EthereumProvider {\n    on(event: string, args: unknown): void;\n    request<T>(params: JsonRpcRequest): Promise<T>;\n    enable(): Promise<void>;\n    removeAllListeners: () => void;\n    selectedAddress: string;\n    accounts: string[];\n}\n\nexport type OkxSwapTheme = 'dark' | 'light';\n\n/**\n *Trade asset parameters, for example:\n * { asset: 'WBTC', amount: 12 }\n * or\n * { asset: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' } // USDC\n */\nexport interface TradeAsset {\n    /** The asset symbol or identifier. */\n    asset: string;\n    /**\n     * The amount of the asset (optional).\n     * If specified, represents the quantity or value of the asset.\n     */\n    amount?: string;\n}\n\nexport enum TradeType {\n    SWAP = 'swap',\n    BRIDGE = 'bridge',\n    AUTO = 'auto',\n}\n\nexport enum TradeTab {\n    SWAP = 'swap',\n    BRIDGE = 'bridge',\n}\n\nexport enum THEME {\n    LIGHT = 'light',\n    DARK = 'dark',\n}\n\n/**\n * The partner fee\n *\n * Please contact https://okprotocol.typeform.com/to/rONXaxHV\n */\nexport interface PartnerFee {\n    /**\n     * The fee in basis points (BPS). One basis point is equivalent to 0.01% (1/100th of a percent)\n     */\n    bps: number;\n\n    /**\n     * The Ethereum address of the partner to receive the fee.\n     */\n    recipient: string | Record<SupportedChainId, string>;\n}\n\n/**\n * ERC-20 token information\n */\nexport type TokenInfo = {\n    chainId: number;\n    address: string;\n    name: string;\n    decimals: number;\n    symbol: string;\n    logoURI?: string;\n};\n\nexport const WIDGET_PALETTE_COLORS = [\n    'primary',\n    'background',\n    'paper',\n    'text',\n    'danger',\n    'warning',\n    'alert',\n    'info',\n    'success',\n] as const;\n\nexport type OkxSwapWidgetPaletteColors = typeof WIDGET_PALETTE_COLORS[number];\n\nexport type OkxSwapWidgetPaletteParams = { [K in OkxSwapWidgetPaletteColors]: string };\n\nexport type OkxSwapWidgetPalette = { baseTheme: OkxSwapTheme } & OkxSwapWidgetPaletteParams;\n\nexport interface OkxSwapWidgetSounds {\n    /**\n     * The sound to play when the order is executed. Defaults to world wide famous Okx Swap moooooooooo!\n     * Alternatively, you can use a URL to a custom sound file, or set to null to disable the sound.\n     */\n    postOrder?: string | null;\n\n    /**\n     * The sound to play when the order is executed. Defaults to world wide famous Okx Swap happy moooooooooo!\n     * Alternatively, you can use a URL to a custom sound file, or set to null to disable the sound.\n     */\n    orderExecuted?: string | null;\n\n    /**\n     * The sound to play when the order is executed. Defaults to world wide famous Okx Swap unhappy moooooooooo!\n     * Alternatively, you can use a URL to a custom sound file, or set to null to disable the sound.\n     */\n    orderError?: string | null;\n}\n\nexport interface OkxSwapWidgetImages {\n    /**\n     * The image to display when the orders table is empty (no orders yet). It defaults to \"Yoga Okx\" image.\n     * Alternatively, you can use a URL to a custom image file, or set to null to disable the image.\n     */\n    emptyOrders?: string | null;\n}\n\nexport interface OkxSwapWidgetBanners {\n    /**\n     * Banner text: \"Use Safe web app...\"\n     *\n     * Conditions for displaying the banner:\n     *  - Safe-like app is connected to Okx Swap via WalletConnect\n     *  - Selling native token via Swap\n     *  - Sell token needs approval\n     *\n     *  If the flag is set to true, the banner will not be displayed\n     */\n    hideSafeWebAppBanner?: boolean;\n}\n\nexport interface OkxSwapWidgetContent {\n    feeLabel?: string;\n    feeTooltipMarkdown?: string;\n}\n\nexport type WalletType = 'metamask' | 'phantom' | 'walletconnect';\n\n// Define types for event payloads\nexport interface WidgetMethodsEmitPayloadMap {\n    [WidgetMethodsEmit.ACTIVATE]: void;\n    [WidgetMethodsEmit.EMIT_OKX_EVENT]: EmitOkxEventPayload<OkxEvents>;\n    [WidgetMethodsEmit.UPDATE_HEIGHT]: UpdateWidgetHeightPayload;\n    [WidgetMethodsEmit.SET_FULL_HEIGHT]: SetWidgetFullHeightPayload;\n    [WidgetMethodsEmit.PROVIDER_RPC_REQUEST]: ProviderRpcRequestPayload;\n    [WidgetMethodsEmit.INTERCEPT_WINDOW_OPEN]: WindowOpenPayload;\n    [WidgetMethodsEmit.LOAD_READY]: UpdateParamsPayload;\n}\n\nexport interface WidgetMethodsListenPayloadMap {\n    [WidgetMethodsListen.UPDATE_APP_DATA]: UpdateAppDataPayload;\n    [WidgetMethodsListen.UPDATE_PARAMS]: UpdateParamsPayload;\n    [WidgetMethodsListen.UPDATE_PROVIDER]: UpdateProviderPayload;\n    [WidgetMethodsListen.PROVIDER_RPC_RESPONSE]: ProviderRpcResponsePayload;\n    [WidgetMethodsListen.PROVIDER_ON_EVENT]: ProviderOnEventPayload;\n    [WidgetMethodsListen.PROVIDER_ON_EVENT_CONNECT]: ProviderOnEventPayload;\n    [WidgetMethodsListen.PROVIDER_ONEVENT_WALLET_SATUS]: ProviderOnWalletEventPayload;\n    [WidgetMethodsListen.PROVIDER_ONEVENT_WALLET_SOLANA_SATUS]: ProviderOnWalletEventPayload;\n}\n\nexport interface WidgetProviderEventPayloadMap {\n    [WidgetProviderEvents.PROVIDER_ON_EVENT_CONNECT]: ProviderEventMessage;\n    [WidgetProviderEvents.PROVIDER_ON_EVENT]: ProviderEventMessage;\n    [WidgetProviderEvents.PROVIDER_ONEVENT_WALLET_SATUS]: ProviderOnWalletEventPayload;\n    [WidgetProviderEvents.NO_WALLET_CONNECT]: ProviderOnWalletEventPayload;\n}\n\nexport type WidgetMethodsEmitPayloads = WidgetMethodsEmitPayloadMap[WidgetMethodsEmit];\nexport type WidgetMethodsListenPayloads = WidgetMethodsListenPayloadMap[WidgetMethodsListen];\n\n// export type OkxSwapWidgetAppParams = Omit<OkxSwapWidgetParams, 'theme'>\n\nexport interface UpdateProviderParams {\n    providerType: ProviderType;\n    walletType: WalletType;\n    chainId: string | number;\n    address: string;\n    walletName?: string;\n}\n\nexport interface UpdateProviderPayload {\n    appParams: UpdateProviderParams;\n    hasProvider: boolean;\n}\n\nexport interface UpdateAppDataPayload {\n    metaData?: {\n        appCode: string;\n    };\n}\n\nexport interface UpdateWidgetHeightPayload {\n    height?: number;\n}\n\nexport interface SetWidgetFullHeightPayload {\n    isUpToSmall?: boolean;\n}\n\nexport interface EmitOkxEventPayload<T extends OkxEvents> {\n    event: T;\n    payload: OkxEventPayloadMap[T];\n}\n\nexport type WidgetMethodsEmitListener<T extends WidgetMethodsEmit> = T extends WidgetMethodsEmit\n    ? { event: T; handler: WidgetMethodHandler<T> }\n    : never;\n\nexport type WidgetMethodHandler<T extends WidgetMethodsEmit> = (\n    payload: WidgetMethodsEmitPayloadMap[T],\n) => void;\n\nexport interface ProviderRpcRequestPayload {\n    rpcRequest: JsonRpcRequestMessage;\n}\n\nexport interface WindowOpenPayload {\n    href: string | URL;\n    target: string;\n    rel: string;\n}\n\nexport interface JsonRpcRequestMessage {\n    jsonrpc: '2.0';\n    // Optional in the request.\n    id?: number;\n    method: string;\n    params: unknown[];\n}\n\nexport interface ProviderEventMessage {\n    id: string;\n    mode: 'iframe' | 'window';\n    params: any[];\n    path: string;\n    type: string;\n}\n\nexport interface BaseJsonRpcResponseMessage {\n    // Required but null if not identified in request\n    id: number;\n    jsonrpc: '2.0';\n}\n\nexport interface JsonRpcSucessfulResponseMessage<TResult = unknown>\n    extends BaseJsonRpcResponseMessage {\n    result: TResult;\n}\n\nexport interface JsonRpcError<TData = unknown> {\n    code: number;\n    message: string;\n    data?: TData;\n}\n\nexport interface JsonRpcErrorResponseMessage<TErrorData = unknown>\n    extends BaseJsonRpcResponseMessage {\n    error: JsonRpcError<TErrorData>;\n}\n\nexport type ProviderRpcResponsePayload = {\n    rpcResponse: JsonRpcResponse;\n};\n\nexport type JsonRpcResponse =\n    | JsonRpcRequestMessage\n    | JsonRpcErrorResponseMessage\n    | JsonRpcSucessfulResponseMessage;\n\nexport interface ProviderOnEventPayload {\n    id: string;\n    mode: 'iframe' | 'window';\n    success: boolean;\n    path: string;\n    type: string;\n    data?: unknown;\n    error?: string;\n}\n\nexport interface ProviderOnWalletEventPayload {\n    event: string;\n    params: unknown;\n}\n\n// new\nexport interface IFeeConfig {\n    [key: string]: {\n        feePercent?: string | number;\n        referrerAddress?: {\n            [key: string]: {\n                feePercent: string | number;\n            };\n        } | string;\n    };\n}\n\nexport interface ITokenPair {\n    fromChain: string | number;\n    toChain: string | number;\n    fromToken?: string;\n    toToken?: string;\n}\n\nexport interface IFormattedTokenPair {\n    inputChain?: string | number;\n    outputChain?: string | number;\n    inputCurrency?: string;\n    outputCurrency?: string;\n}\n\nexport enum ProviderType {\n    EVM = 'EVM',\n    SOLANA = 'SOLANA',\n    WALLET_CONNECT = 'WALLET_CONNECT',\n}\n\nexport type TWalletTypeRecord = Record<ProviderType, WalletType>;\n\nexport interface IWidgetProps {\n    widgetVersion: string;\n    tradeType: TradeType[];\n    feeConfig: IFeeConfig;\n    theme: THEME;\n    providerType: ProviderType;\n    walletType: WalletType;\n    tokenPair?: IFormattedTokenPair;\n    bridgeTokenPair?: IFormattedTokenPair;\n    lang?: string;\n    chainIds?: string[];\n    sdkVersion?: string;\n    referer?: string;\n    walletName?: string;\n}\n\nexport interface IFormattedWidgetProps {\n    url: string;\n    data: IWidgetProps;\n}\n\nexport interface IWidgetParams {\n    // todo: check this\n    appCode?: string;\n\n    width?: number;\n\n    height?: string;\n\n    // only for developer\n    baseUrl?: string;\n\n    // Swap, Bridget or Auto\n    tradeType?: TradeType;\n\n    feeConfig?: IFeeConfig;\n\n    // The theme of the widget. Default: 'light'\n    theme?: THEME;\n\n    providerType?: ProviderType;\n\n    tokenPair?: ITokenPair;\n\n    bridgeTokenPair?: ITokenPair;\n\n    lang?: string;\n\n    chainIds?: string[];\n\n    walletName?: string;\n\n    // The default tab of the widget. if setup, use this tab as default tab.\n    defaultTab?: TradeTab;\n\n    extraParams?: any;\n}\nexport interface IWidgetConfig {\n    params: IWidgetParams;\n    provider?: EthereumProvider;\n    listeners?: OkxEventListeners;\n    connectWalletHandle?: () => void;\n}\n\nexport interface UpdateParamsPayload {\n    appParams: IWidgetProps;\n}\n\nexport interface TransactionInput {\n    readonly [key: string]: unknown;\n    readonly to?: string; // If its a contract creation tx then no address wil be specified.\n    readonly from?: string;\n    readonly data?: string;\n    readonly input?: string;\n    readonly gas: string;\n    readonly gasLimit?: string;\n    readonly gasPrice?: string;\n    readonly maxPriorityFeePerGas?: string;\n    readonly maxFeePerGas?: string;\n    readonly nonce: string;\n    readonly value: string;\n    readonly blockNumber?: string;\n    readonly transactionIndex?: string;\n    readonly type?: string;\n    readonly chainId?: string;\n}\n\n// Make each attribute mutable by removing `readonly`\nexport type Mutable<T> = {\n    -readonly [P in keyof T]: T[P];\n};\n\nexport type HexString = string;\nexport type Numbers = number | bigint | string | HexString;\n\nexport type TransactionOutput = {\n    readonly [key: string]: unknown;\n    readonly to?: HexString; // If its a contract creation tx then no address wil be specified.\n    readonly from?: HexString;\n    readonly input: string;\n    readonly gas?: Numbers;\n    readonly gasLimit?: string;\n    readonly nonce: Numbers;\n    readonly value: Numbers;\n    readonly blockNumber?: Numbers;\n    readonly transactionIndex?: Numbers;\n} & (\n        | { maxPriorityFeePerGas: Numbers; maxFeePerGas: Numbers; gasPrice?: never }\n        | { maxPriorityFeePerGas?: never; maxFeePerGas?: never; gasPrice: Numbers }\n    );\n\n\nexport type ValidInputTypes = Uint8Array | bigint | string | number | boolean;","import { SimpleOkxEventEmitter, OkxEventListener, OkxEventListeners, OkxEvents } from './events';\nimport { WindowListener, listenToMessageFromWindow, stopListeningWindowListener } from './messages';\nimport { WidgetMethodsEmit } from './types';\n\nexport class IframeEventEmitter {\n  private eventEmitter: SimpleOkxEventEmitter = new SimpleOkxEventEmitter();\n  private listeners: OkxEventListeners = [];\n  private widgetListener: WindowListener;\n\n  constructor(private contentWindow: Window, listeners: OkxEventListeners = []) {\n    // Subscribe listeners to local event emitter\n    this.updateListeners(listeners);\n\n    // Listen to iFrame, and forward to local event emitter\n    this.widgetListener = listenToMessageFromWindow(\n      this.contentWindow,\n      WidgetMethodsEmit.EMIT_OKX_EVENT,\n      okxEvent => {\n        const payload = okxEvent.payload || (okxEvent as any)?.params;\n        console.log('eventEmitter:', {\n          okxEvent,\n          event: okxEvent.event,\n          payload,\n        });\n\n        const res = {\n          payload,\n          data: null,\n        };\n\n        if (\n          (okxEvent as any)?.params &&\n          [OkxEvents.ON_SUBMIT_TX, OkxEvents.ON_FROM_CHAIN_CHANGE].includes(okxEvent.event)\n        ) {\n          const passedParams = (okxEvent as any)?.params;\n          let tx = null;\n          try {\n            tx = JSON.parse(passedParams[0].params);\n            res.data = tx || passedParams;\n          } catch (e) {\n            console.error('Error parsing params:', e);\n          }\n        }\n\n        this.eventEmitter.emit(okxEvent.event, res as any);\n      },\n    );\n  }\n\n  public stopListeningIframe() {\n    stopListeningWindowListener(this.contentWindow, this.widgetListener);\n  }\n\n  public updateListeners(listeners?: OkxEventListeners): void {\n    // Unsubscribe from previous listeners\n    for (const listener of this.listeners) {\n      this.eventEmitter.off(listener as OkxEventListener<OkxEvents>);\n    }\n\n    // Subscribe to events\n    this.listeners = listeners || [];\n    for (const listener of this.listeners) {\n      this.eventEmitter.on(listener as OkxEventListener<OkxEvents>);\n    }\n  }\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nexport default arrayEach;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n  return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n *   console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n *   console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n  var func = isArray(collection) ? arrayEach : baseEach;\n  return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import { isString, forEach, isObject } from 'lodash-es';\n\nimport {\n  TradeType,\n  IWidgetParams,\n  ITokenPair,\n  TWalletTypeRecord,\n  ProviderType,\n  IFormattedTokenPair,\n  IFormattedWidgetProps,\n  TradeTab,\n} from './types';\nimport { verifyWidgetParams } from './verifyParamsUtils';\n\nconst DEFAULT_BASE_URL = 'https://web3.okx.com';\n\nconst ROUTER_PRE = (process.env.VITE_BASE_ROUTER_PREFIX as string) || '';\n\nexport const WIDGET_ROUTE_CONSTANTS = {\n  SWAP: `${ROUTER_PRE}dex-widget`,\n  BRIDGE: `${ROUTER_PRE}dex-widget/bridge`,\n};\n\nexport const WALLET_TYPE: TWalletTypeRecord = {\n  [ProviderType.EVM]: 'metamask',\n  [ProviderType.SOLANA]: 'phantom',\n  [ProviderType.WALLET_CONNECT]: 'walletconnect',\n};\n\nexport const SOLANA_CHAIN_ID = 501;\n\nexport const formatTokenPair = (tokenPair?: ITokenPair): IFormattedTokenPair => {\n  return tokenPair\n    ? {\n        inputChain: tokenPair.fromChain,\n        outputChain: tokenPair.toChain,\n        inputCurrency: tokenPair.fromToken,\n        outputCurrency: tokenPair.toToken,\n      }\n    : null;\n};\n\n// this function is designed to determine the supported trade types and the appropriate route based on the provided trade type and token pairs.\n// It returns an object containing the supported trade types, the route, and formatted token pairs.\ninterface FormatDefaultConfigParams {\n  tradeType: TradeType;\n  tokenPair?: ITokenPair;\n  bridgeTokenPair?: ITokenPair;\n  defaultTab?: TradeTab;\n}\n\nexport function formatDefaultConfig({\n  tradeType,\n  tokenPair,\n  bridgeTokenPair,\n  defaultTab,\n}: FormatDefaultConfigParams): {\n  supportTradeType: TradeType[];\n  route: string;\n  defaultTokenPair?: IFormattedTokenPair;\n  formattedTokenPair?: IFormattedTokenPair;\n  formattedBridgeTokenPair?: IFormattedTokenPair;\n} {\n  const formattedTokenPair = formatTokenPair(tokenPair);\n  const formattedBridgeTokenPair = formatTokenPair(bridgeTokenPair);\n\n  if (tradeType === TradeType.SWAP) {\n    return {\n      supportTradeType: [TradeType.SWAP],\n      route: WIDGET_ROUTE_CONSTANTS.SWAP,\n      defaultTokenPair: formattedTokenPair,\n      formattedTokenPair,\n      formattedBridgeTokenPair: null,\n    };\n  }\n\n  if (tradeType === TradeType.BRIDGE) {\n    return {\n      supportTradeType: [TradeType.BRIDGE],\n      route: WIDGET_ROUTE_CONSTANTS.BRIDGE,\n      defaultTokenPair: formattedBridgeTokenPair,\n      formattedTokenPair: null,\n      formattedBridgeTokenPair,\n    };\n  }\n\n  if (defaultTab === TradeTab.SWAP) {\n    return {\n      supportTradeType: [TradeType.SWAP, TradeType.BRIDGE],\n      route: WIDGET_ROUTE_CONSTANTS.SWAP,\n      defaultTokenPair: formattedTokenPair,\n      formattedTokenPair,\n      formattedBridgeTokenPair,\n    };\n  }\n\n  if (defaultTab === TradeTab.BRIDGE) {\n    return {\n      supportTradeType: [TradeType.SWAP, TradeType.BRIDGE],\n      route: WIDGET_ROUTE_CONSTANTS.BRIDGE,\n      defaultTokenPair: formattedBridgeTokenPair,\n      formattedTokenPair,\n      formattedBridgeTokenPair,\n    };\n  }\n\n  const defaultIsBridge = !formattedTokenPair && formattedBridgeTokenPair;\n  const route = defaultIsBridge ? WIDGET_ROUTE_CONSTANTS.BRIDGE : WIDGET_ROUTE_CONSTANTS.SWAP;\n  const defaultTokenPair = defaultIsBridge ? formattedBridgeTokenPair : formattedTokenPair;\n\n  return {\n    supportTradeType: [TradeType.SWAP, TradeType.BRIDGE],\n    route,\n    defaultTokenPair,\n    formattedTokenPair,\n    formattedBridgeTokenPair,\n  };\n}\n\nexport const createWidgetParams = (widgetParams: IWidgetParams): IFormattedWidgetProps => {\n  const {\n    baseUrl,\n    feeConfig,\n    tokenPair,\n    bridgeTokenPair,\n    providerType,\n    tradeType,\n    theme,\n    lang,\n    chainIds,\n    extraParams,\n    walletName,\n    defaultTab,\n  } = widgetParams;\n\n  const widgetVersion = process.env.WIDGET_VERSION;\n  const sdkVersion = process.env.SDK_VERSION;\n  // verify widget params, if invalid, throw error\n  verifyWidgetParams({\n    widgetVersion,\n    feeConfig,\n    tokenPair,\n    bridgeTokenPair,\n    providerType,\n  });\n\n  // get trade type config, route, default token pair and formatted tokenPair/bridgeTokenPair config\n  const {\n    supportTradeType,\n    route,\n    defaultTokenPair,\n    formattedTokenPair,\n    formattedBridgeTokenPair,\n  } = formatDefaultConfig({ tradeType, tokenPair, bridgeTokenPair, defaultTab });\n\n  // define initial params\n  const initParams = {\n    tradeType: supportTradeType,\n    theme,\n    lang,\n    walletType: WALLET_TYPE[providerType],\n    widgetVersion,\n    sdkVersion,\n    chainIds,\n    walletName,\n  };\n\n  // add token info to url params\n  const urlParams = {\n    ...initParams,\n    ...defaultTokenPair,\n  };\n  const params = new URLSearchParams();\n  // Append non-empty key-value pairs to URLSearchParams\n  for (const key in urlParams) {\n    if (urlParams.hasOwnProperty(key)) {\n      const value = urlParams[key];\n      if (value !== '' && value !== null && value !== undefined) {\n        params.append(key, value);\n      }\n    }\n  }\n  // get query\n  const queryString = params.toString();\n  // generate url\n  const host = typeof baseUrl === 'string' ? baseUrl : DEFAULT_BASE_URL;\n  const url = `${host}/${route}?${queryString}`;\n\n  // add tokenPair, feeConfig, providerType to generate data\n  const data = {\n    ...initParams,\n    tokenPair: formattedTokenPair,\n    bridgeTokenPair: formattedBridgeTokenPair,\n    feeConfig,\n    providerType,\n    extraParams,\n    referrer: getReferrer(),\n  };\n\n  return {\n    url,\n    data,\n  };\n};\n\nconst requestChainId = async (provider: any) => {\n  try {\n    const chainId = await provider.request({ method: 'eth_chainId' });\n    // Convert hexadecimal to decimal\n    const decimalChainId = parseInt(chainId, 16);\n    console.log(`log-requestChainId => decimal number: ${decimalChainId}`);\n    return decimalChainId;\n  } catch (error) {\n    console.error('log-requestChainId => Failed to get chainId:', error);\n    return null;\n  }\n};\n\nconst requestAddress = async (provider: any) => {\n  try {\n    const accounts = await provider.request({ method: 'eth_accounts' });\n    console.log(`log-requestAddress: ${accounts.join(',')}`);\n    return accounts[0];\n  } catch (error) {\n    console.log('log-requestAddress-Failed to get account:', error);\n    return null;\n  }\n};\n\nexport const isEvmProvider = (providerType: ProviderType) => {\n  return providerType === ProviderType.EVM;\n};\n\nexport const getChainId = async (provider: any, providerType: ProviderType) => {\n  console.log('log-getChainId-start', provider, providerType);\n  let chainId = null;\n\n  if (isEvmProvider(providerType)) {\n    chainId = await requestChainId(provider);\n    if (chainId === null) {\n      chainId = provider?.chainId ? parseInt(provider.chainId, 16) : null;\n    }\n  }\n\n  if (providerType === ProviderType.WALLET_CONNECT && provider?.chainId) {\n    chainId = provider.chainId;\n  }\n\n  if (providerType === ProviderType.SOLANA) {\n    chainId = SOLANA_CHAIN_ID;\n  }\n\n  console.log('log-getChainId-end', { chainId, providerChainId: provider?.chainId });\n\n  return chainId;\n};\n\nexport const getAddress = async (provider: any, providerType: ProviderType) => {\n  console.log('log-getAddress-start', provider, providerType);\n  let account = null;\n\n  if (providerType === ProviderType.EVM && provider?.chainId) {\n    account = provider.selectedAddress;\n  }\n\n  if (providerType === ProviderType.WALLET_CONNECT && provider?.chainId) {\n    account = provider.accounts?.[0];\n  }\n\n  if (!account && provider && isEvmProvider(providerType)) {\n    account = await requestAddress(provider);\n  }\n\n  if (providerType === ProviderType.SOLANA) {\n    account = provider?.publicKey?.toBase58();\n  }\n  console.log('log-getAddress-end', account);\n  return account;\n};\n\n/**\n * Checks if a decoded URI component contains valid printable characters\n * @param {string} str - The decoded string to check\n * @returns {boolean} - Returns true if the string is valid, false if it contains \"garbage\" characters\n */\nexport const isPrintableString = (str: string): boolean => {\n  // Regular expression to match printable ASCII characters (from space to tilde)\n  const printablePattern = /^[\\x20-\\x7E]*$/;\n\n  // Check if the string contains only printable characters\n  return printablePattern.test(str);\n};\n\n/**\n * Safely decodes a URI component, checking if it contains printable characters\n * @param {string} value - The URI component to decode\n * @returns {string} - The decoded value, or throws an error if the decoded value contains garbage characters\n */\nexport const safeDecodeURIComponent = (value: string): string => {\n  try {\n    // Decode the URI component\n    const decodedValue = decodeURIComponent(value);\n\n    // Check if the decoded string contains valid printable characters\n    if (!isPrintableString(decodedValue)) {\n      throw new Error(`Decoded value contains invalid characters: ${decodedValue}`);\n    }\n\n    return decodedValue;\n  } catch (e) {\n    throw new Error(`Failed to decode URI component: ${value}. Error: ${e.message}`);\n  }\n};\n\n/**\n * Checks if all URL parameters are valid, and stops on the first invalid one\n * @param {string} url - The URL string to check\n * @returns An object containing valid parameters, or throws an error if any parameter is invalid\n */\nexport const checkUrlParam = (url: string): Record<string, string> => {\n  // Parse the URL to extract query string parameters\n  const urlObj = new URL(url);\n  const params = new URLSearchParams(urlObj.search);\n\n  // Object to store the result of valid parameters\n  const result = {};\n\n  // Iterate over all parameters in the URL\n  for (const [key, value] of params.entries()) {\n    // Safely decode the parameter value, stops execution if an error occurs\n    const decodedValue = safeDecodeURIComponent(value);\n\n    // You can add more validation logic here, if needed\n    result[key] = decodedValue;\n  }\n\n  return result;\n};\n\n/**\n * Recursively validates the given parameters.\n * If the value is a string, it checks if it's printable.\n * If the value is an object, it recursively checks each key-value pair.\n *\n * @param params - The object or string to validate\n * @throws {Error} If any parameter is invalid or contains illegal characters\n * @returns {boolean} - Returns true if all parameters are valid\n */\nexport const validateWidgetParams = (params: any): boolean => {\n  console.log('params:', params);\n  if (isString(params)) {\n    // If the parameter is a string, check if it's valid\n    if (!isPrintableString(params)) {\n      throw new Error(`Invalid string found: ${params}`);\n    }\n    return true;\n  }\n\n  if (isObject(params)) {\n    // If the parameter is an object, recursively validate its key-value pairs\n    forEach(params, (value, key) => {\n      // Validate both the key and the value\n      if (!isPrintableString(key)) {\n        throw new Error(`Invalid object key found: ${key}`);\n      }\n      validateWidgetParams(value); // Recursively validate the value\n    });\n    return true;\n  }\n\n  // If neither string nor object, assume it's valid (you can extend this logic as needed)\n  return true;\n};\n\nexport const getReferrer = () => {\n  return encodeURIComponent(window.location.origin);\n};\n\nexport const getWalletInfo = (walletName: string, provider?: any) => {\n  const params = new URLSearchParams();\n  params.append('walletName', walletName);\n  try {\n    if (provider) {\n      Object.keys(provider).forEach(key => {\n        if (key.startsWith('is')) {\n          const value = provider[key];\n          if (typeof value === 'boolean') {\n            params.append(key, String(value));\n          }\n        }\n      });\n    }\n  } catch (e) {\n    console.error('Error getting wallet info:', e, provider);\n  }\n  return encodeURIComponent(params.toString());\n};\n","import { isNullish, numberToHex, toNumber } from 'web3-utils';\n\nimport { WALLET_TYPE } from './widgetHelp';\nimport { IFeeConfig, ITokenPair, Mutable, Numbers, TransactionInput, TransactionOutput } from './types';\n\nexport const ERROR_MSG = {\n    INVALID_FEE_CONFIG: 'FeeConfig MUST be an object',\n    INVALID_FEE_PERCENT: 'FeePercent MUST be a number > 0 and <= 3',\n    INVALID_TOKEN_PAIR: 'Invalid tokenPair',\n    INVALID_BRIDGE_TOKEN_PAIR: 'Invalid bridgeTokenPair',\n    INVALID_PROVIDER_TYPE: 'Invalid providerType',\n    INVALID_WIDGET_VERSION: 'WIDGET_VERSION IS REQUIRED',\n};\n\nexport const isObject = (obj: any) => {\n    return obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n};\n\nexport const isNumberOrNumberString = (val: any) => {\n    return (\n        !Number.isNaN(Number(val)) &&\n        val !== null &&\n        val !== undefined &&\n        val !== '' &&\n        !Array.isArray(val)\n    );\n};\n\nexport const verifyPercent = (feePercent: string | number) => {\n    return isNumberOrNumberString(feePercent) && Number(feePercent) > 0 && Number(feePercent) <= 3;\n};\n\nexport const checkFeeConfig = (feeConfig: IFeeConfig) => {\n    if (!isObject(feeConfig)) {\n        return ERROR_MSG.INVALID_FEE_CONFIG;\n    }\n    const errorFeeConfig = Object.values(feeConfig).some(fee => {\n        const commonFeePercent = fee?.feePercent;\n        if (!isObject(fee?.referrerAddress)) {\n            return !verifyPercent(commonFeePercent);\n        }\n        if (isObject(fee?.referrerAddress)) {\n            const errorFee = Object.values(fee?.referrerAddress).some(item => {\n                if (!isNumberOrNumberString(item.feePercent)) {\n                    return !verifyPercent(commonFeePercent);\n                }\n                return !verifyPercent(item?.feePercent);\n            });\n            return !!errorFee;\n        }\n        return false;\n    });\n    if (errorFeeConfig) {\n        return ERROR_MSG.INVALID_FEE_PERCENT;\n    }\n    return null;\n};\n\nexport const verifyChainId = (chainId: string | number) => {\n    return (typeof chainId === 'string' || typeof chainId === 'number') && Number(chainId) >= 0;\n};\n\nexport const isSameChain = (tokenPair: ITokenPair): boolean => {\n    const legalChains = verifyChainId(tokenPair?.fromChain) && verifyChainId(tokenPair?.toChain);\n    return Number(tokenPair?.fromChain) === Number(tokenPair?.toChain) && legalChains;\n};\n\nexport const checkTokenPairChain = (tokenPair: ITokenPair) => {\n    return verifyChainId(tokenPair?.fromChain) && verifyChainId(tokenPair?.toChain);\n};\n\nexport const verifyWidgetParams = ({ widgetVersion, feeConfig = {}, tokenPair, bridgeTokenPair, providerType }) => {\n    const walletType = WALLET_TYPE[providerType];\n\n    if (!widgetVersion) {\n        throw new Error(ERROR_MSG.INVALID_WIDGET_VERSION);\n    }\n    if (providerType && !walletType) {\n        throw new Error(ERROR_MSG.INVALID_PROVIDER_TYPE);\n    }\n    if (tokenPair && !checkTokenPairChain(tokenPair)) {\n        throw new Error(ERROR_MSG.INVALID_TOKEN_PAIR);\n    }\n    if (bridgeTokenPair && !checkTokenPairChain(bridgeTokenPair)) {\n        throw new Error(ERROR_MSG.INVALID_BRIDGE_TOKEN_PAIR);\n    }\n    const errorTips = checkFeeConfig(feeConfig);\n    if (errorTips) {\n        throw new Error(errorTips);\n    }\n    return true;\n};\n\nexport function txInputParamsFormatter(options: TransactionInput): Mutable<TransactionOutput> {\n    const modifiedOptions = { ...options } as unknown as Mutable<TransactionOutput>;\n\n    // allow both\n    if (options.gas || options.gasLimit) {\n        modifiedOptions.gas = toNumber(options.gas ?? options.gasLimit);\n    }\n\n    if (options.maxPriorityFeePerGas || options.maxFeePerGas) {\n        delete modifiedOptions.gasPrice;\n    }\n\n    ['gasPrice', 'gas', 'gasLimit', 'value', 'maxPriorityFeePerGas', 'maxFeePerGas', 'nonce', 'chainId']\n        .filter(key => !isNullish(modifiedOptions[key]))\n        .forEach(key => {\n            modifiedOptions[key] = numberToHex(modifiedOptions[key] as Numbers);\n        });\n\n    return modifiedOptions as TransactionOutput;\n}","import { txInputParamsFormatter } from '../verifyParamsUtils';\nimport { postMessageToWindow } from '../messages';\nimport { WidgetMethodsListen, EthereumProvider, TransactionInput } from '../types';\n\nimport { BlockchainStrategy } from './IBlockchainStrategy';\n\nexport class EvmStrategy implements BlockchainStrategy {\n    private iframeWindow: Window;\n\n    constructor(iframeWindow: Window) {\n        this.iframeWindow = iframeWindow;\n    }\n\n    async processTransaction(\n        method: string,\n        id: string,\n        path: string,\n        requestArgs: any[],\n        provider: EthereumProvider,\n        type: string,\n    ) {\n        const requestPara = { method, id: Number(id), params: requestArgs };\n        try {\n            const isConneted = provider?.selectedAddress || provider?.accounts?.[0];\n\n            if (!isConneted) {\n                await provider.request({\n                    method: 'eth_requestAccounts',\n                    id: Date.now(),\n                    params: [],\n                });\n            }\n\n            if (method === 'eth_sendTransaction') {\n                const payload = txInputParamsFormatter(requestArgs[0] as unknown as TransactionInput);\n\n                const requestPayload = { method, id: Number(id), params: [payload] };\n\n                console.log('eth_sendTransaction requestPara.params[0]', { requestPara, requestPayload });\n\n                const hash = await provider?.request?.(requestPayload as any);\n\n                console.log('provider.request===>', hash);\n\n                postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                    id,\n                    mode: 'iframe',\n                    data: hash,\n                    path,\n                    type,\n                    error: null,\n                    success: true,\n                });\n            } else {\n                const data = await provider.request(requestPara);\n                console.log('sent evm transaction request:', data);\n                postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                    id,\n                    mode: 'iframe',\n                    data,\n                    path,\n                    type,\n                    success: true,\n                });\n            }\n        } catch (error) {\n            console.error('EVM Error:', error);\n            postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                id,\n                mode: 'iframe',\n                error: error && JSON.stringify(error),\n                path,\n                type,\n                success: false,\n            });\n        }\n    }\n\n    onProviderEvent(event: string, params: unknown) {\n        postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ONEVENT_WALLET_SATUS, {\n            event,\n            params,\n        });\n    }\n\n    registerProviderEventListeners(provider: any): void {\n        const EVENTS_TO_FORWARD_TO_IFRAME = [\n            'connect',\n            'disconnect',\n            'close',\n            'chainChanged',\n            'accountsChanged',\n        ];\n\n        EVENTS_TO_FORWARD_TO_IFRAME.forEach(event => {\n            provider.on(event, (params: unknown) => {\n                this.onProviderEvent(event, params);\n            });\n        });\n    }\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n  if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n  var BASE_MAP = new Uint8Array(256)\n  for (var j = 0; j < BASE_MAP.length; j++) {\n    BASE_MAP[j] = 255\n  }\n  for (var i = 0; i < ALPHABET.length; i++) {\n    var x = ALPHABET.charAt(i)\n    var xc = x.charCodeAt(0)\n    if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n    BASE_MAP[xc] = i\n  }\n  var BASE = ALPHABET.length\n  var LEADER = ALPHABET.charAt(0)\n  var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n  var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n  function encode (source) {\n    if (source instanceof Uint8Array) {\n    } else if (ArrayBuffer.isView(source)) {\n      source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n    } else if (Array.isArray(source)) {\n      source = Uint8Array.from(source)\n    }\n    if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n    if (source.length === 0) { return '' }\n        // Skip & count leading zeroes.\n    var zeroes = 0\n    var length = 0\n    var pbegin = 0\n    var pend = source.length\n    while (pbegin !== pend && source[pbegin] === 0) {\n      pbegin++\n      zeroes++\n    }\n        // Allocate enough space in big-endian base58 representation.\n    var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n    var b58 = new Uint8Array(size)\n        // Process the bytes.\n    while (pbegin !== pend) {\n      var carry = source[pbegin]\n            // Apply \"b58 = b58 * 256 + ch\".\n      var i = 0\n      for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n        carry += (256 * b58[it1]) >>> 0\n        b58[it1] = (carry % BASE) >>> 0\n        carry = (carry / BASE) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      pbegin++\n    }\n        // Skip leading zeroes in base58 result.\n    var it2 = size - length\n    while (it2 !== size && b58[it2] === 0) {\n      it2++\n    }\n        // Translate the result into a string.\n    var str = LEADER.repeat(zeroes)\n    for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n    return str\n  }\n  function decodeUnsafe (source) {\n    if (typeof source !== 'string') { throw new TypeError('Expected String') }\n    if (source.length === 0) { return new Uint8Array() }\n    var psz = 0\n        // Skip and count leading '1's.\n    var zeroes = 0\n    var length = 0\n    while (source[psz] === LEADER) {\n      zeroes++\n      psz++\n    }\n        // Allocate enough space in big-endian base256 representation.\n    var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n    var b256 = new Uint8Array(size)\n        // Process the characters.\n    while (source[psz]) {\n            // Decode character\n      var carry = BASE_MAP[source.charCodeAt(psz)]\n            // Invalid character\n      if (carry === 255) { return }\n      var i = 0\n      for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n        carry += (BASE * b256[it3]) >>> 0\n        b256[it3] = (carry % 256) >>> 0\n        carry = (carry / 256) >>> 0\n      }\n      if (carry !== 0) { throw new Error('Non-zero carry') }\n      length = i\n      psz++\n    }\n        // Skip leading zeroes in b256.\n    var it4 = size - length\n    while (it4 !== size && b256[it4] === 0) {\n      it4++\n    }\n    var vch = new Uint8Array(zeroes + (size - it4))\n    var j = zeroes\n    while (it4 !== size) {\n      vch[j++] = b256[it4++]\n    }\n    return vch\n  }\n  function decode (string) {\n    var buffer = decodeUnsafe(string)\n    if (buffer) { return buffer }\n    throw new Error('Non-base' + BASE + ' character')\n  }\n  return {\n    encode: encode,\n    decodeUnsafe: decodeUnsafe,\n    decode: decode\n  }\n}\nmodule.exports = base\n","const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","import { Transaction, PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\n\nimport { postMessageToWindow } from '../messages';\nimport { ProviderEventMessage, SolanaProvider, WidgetMethodsListen } from '../types';\nimport { SOLANA_CHAIN_ID, WALLET_TYPE } from '../widgetHelp';\n\nimport { BlockchainStrategy } from './IBlockchainStrategy';\n\n\n\nconst decodeMsg = (message) => {\n    try {\n        return Transaction.from(bs58.decode(message));\n    } catch (error) {\n        const deserializeTransaction = VersionedTransaction.deserialize(\n            bs58.decode(message),\n        );\n        console.log('new version deserializeTransaction:', deserializeTransaction);\n        return deserializeTransaction;\n    }\n}\n\nexport class SolanaStrategy implements BlockchainStrategy {\n    private iframeWindow: Window;\n\n    constructor(iframeWindow: Window) {\n        this.iframeWindow = iframeWindow;\n    }\n\n    async processTransaction(\n        method: string,\n        id: string,\n        path: string,\n        requestArgs: any[],\n        provider: SolanaProvider,\n        type: string,\n    ) {\n        try {\n            const solanaTransactionArgs = Array.isArray(requestArgs) ? requestArgs : [requestArgs];\n            const message = solanaTransactionArgs[0];\n            const onlyIfTrusted = solanaTransactionArgs[0]?.onlyIfTrusted;\n            const okxArgs = solanaTransactionArgs[0]?.okxArgs;\n            const transaction = solanaTransactionArgs[0]?.transaction;\n            const okxType = solanaTransactionArgs[0]?.type;\n\n\n            if (method === 'signAllTransactions') {\n                // decodeMsg and create newParams;\n                const newParams = solanaTransactionArgs.map(decodeMsg);\n                console.log('solana signAllTransactions newParams:', newParams);\n                // request\n                const resData = await provider[method](newParams);\n                // encode response\n                const data = resData.map((signedTransaction) => {\n                    const signature =\n                        signedTransaction?.signature || signedTransaction?.signatures[0];\n                    const encodeSignature = bs58.encode(signature);\n                    const serializedTransaction = bs58.encode(signedTransaction.serialize());\n                    return {signature: encodeSignature, serializedTransaction};\n                });\n\n                console.log('solana signAllTransactions request:', resData, data);\n\n                postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                    id,\n                    mode: 'iframe',\n                    data,\n                    path,\n                    type,\n                    success: true,\n                });\n                return;\n            }\n\n            if (onlyIfTrusted) {\n                postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                    id,\n                    mode: 'iframe',\n                    data: {\n                        onlyIfTrusted: true,\n                    },\n                    path,\n                    type,\n                    success: true,\n                });\n                return;\n            }\n\n            if (typeof message === 'string') {\n                try {\n                    const deserializeTransaction = Transaction.from(bs58.decode(message));\n                    solanaTransactionArgs[0] = deserializeTransaction;\n                } catch (error) {\n                    const deserializeTransaction = VersionedTransaction.deserialize(\n                        bs58.decode(message),\n                    );\n                    console.log('new version deserializeTransaction:', deserializeTransaction);\n                    solanaTransactionArgs[0] = deserializeTransaction;\n                }\n            }\n\n            if (okxArgs && okxType && transaction) {\n                const deserializeTransaction = VersionedTransaction.deserialize(\n                    bs58.decode(transaction),\n                );\n                const options = solanaTransactionArgs[0]?.options;\n\n                solanaTransactionArgs[0] = deserializeTransaction;\n                solanaTransactionArgs[1] = options;\n                solanaTransactionArgs[2] = okxArgs;\n            }\n\n            const data = await provider[method](...solanaTransactionArgs);\n            console.log('solana request:', data);\n\n            postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                id,\n                mode: 'iframe',\n                data,\n                path,\n                type,\n                success: true,\n            });\n        } catch (error) {\n            console.error('Solana Error:', error);\n            postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT, {\n                id,\n                mode: 'iframe',\n                error: JSON.stringify(error),\n                path,\n                type,\n                success: false,\n            });\n        }\n    }\n\n    onProviderEvent(event: string, params: PublicKey) {\n        const address = params?.toBase58();\n        postMessageToWindow(\n            this.iframeWindow,\n            WidgetMethodsListen.PROVIDER_ONEVENT_WALLET_SOLANA_SATUS,\n            {\n                event,\n                params: {\n                    address,\n                    chainId: SOLANA_CHAIN_ID,\n                    walletType: WALLET_TYPE.SOLANA,\n                },\n            },\n        );\n    }\n\n    registerProviderEventListeners(provider: any): void {\n        const EVENTS_TO_FORWARD_TO_IFRAME_SOLANA = ['connect', 'disconnect', 'accountChanged'];\n        EVENTS_TO_FORWARD_TO_IFRAME_SOLANA.forEach(event => {\n            provider.on(event, (params: PublicKey) => {\n                this.onProviderEvent(event, params);\n            });\n        });\n    }\n\n    async processConnectEvent(args: ProviderEventMessage, ethereumProvider: SolanaProvider) {\n        const { id, mode, params, path, type } = args || {\n            params: null,\n            mode: null,\n            id: null,\n            path: null,\n            type: null,\n        };\n        try {\n            if (!ethereumProvider || mode === 'iframe') {\n                throw new Error('No Provider');\n            }\n\n            const { method } = params[0] || { method: null };\n\n            if (type === 'solana' && method === 'connect') {\n                const solana = ethereumProvider as SolanaProvider;\n                if (!solana?.connect) throw new Error('Not solana provider');\n\n                solana\n                    .connect()\n                    .then(key => {\n                        postMessageToWindow(\n                            this.iframeWindow,\n                            WidgetMethodsListen.PROVIDER_ON_EVENT_CONNECT,\n                            {\n                                id,\n                                mode: 'iframe',\n                                data: key.publicKey.toBase58(),\n                                path,\n                                type,\n                                success: true,\n                            },\n                        );\n                    })\n                    .catch(error => {\n                        postMessageToWindow(\n                            this.iframeWindow,\n                            WidgetMethodsListen.PROVIDER_ON_EVENT_CONNECT,\n                            {\n                                id,\n                                mode: 'iframe',\n                                error: JSON.stringify(error),\n                                path,\n                                type,\n                                success: false,\n                            },\n                        );\n                    });\n            }\n        } catch (error) {\n            postMessageToWindow(this.iframeWindow, WidgetMethodsListen.PROVIDER_ON_EVENT_CONNECT, {\n                id,\n                mode: 'iframe',\n                error: JSON.stringify(error),\n                path,\n                type,\n                success: false,\n            });\n        }\n    }\n}\n","import { ProviderEventMessage, ProviderType, EthereumProvider, SolanaProvider } from '../types';\n\nimport { EvmStrategy } from './EvmStrategy';\nimport { BlockchainStrategy } from './IBlockchainStrategy';\nimport { SolanaStrategy } from './SolanaStrategy';\n\nexport class TransactionProcessor {\n    private strategy: BlockchainStrategy;\n\n    constructor(providerType: ProviderType, iframeWindow: Window) {\n        switch (providerType) {\n            case ProviderType.SOLANA:\n                this.strategy = new SolanaStrategy(iframeWindow);\n                break;\n            case ProviderType.WALLET_CONNECT:\n            case ProviderType.EVM:\n                this.strategy = new EvmStrategy(iframeWindow);\n                break;\n            default:\n                throw new Error('Unsupported provider type or network error', providerType);\n        }\n    }\n\n    setStrategy(strategy: BlockchainStrategy) {\n        this.strategy = strategy;\n    }\n\n    async processTransaction(\n        method: string,\n        id: string,\n        path: string,\n        requestArgs: any[],\n        provider: any,\n        type: string,\n    ) {\n        console.log('processTransaction:', { method, id, path, requestArgs, provider, type });\n        await this.strategy.processTransaction(method, id, path, requestArgs, provider, type);\n    }\n\n    registerProviderEventListeners(provider: any) {\n        this.strategy.registerProviderEventListeners(provider);\n    }\n\n    async processConnectEvent(\n        args: ProviderEventMessage,\n        provider: EthereumProvider | SolanaProvider | null,\n    ) {\n        if (this.strategy instanceof SolanaStrategy) {\n            console.log('processConnectEvent:', this.strategy, { provider });\n            await this.strategy.processConnectEvent(args, provider as SolanaProvider);\n        }\n    }\n}\n","import { listenToMessageFromWindow, stopListeningToMessageFromWindow } from './messages';\nimport { TransactionProcessor } from './transactions/TransactionProcessor';\nimport {\n    EthereumProvider,\n    SolanaProvider,\n    ProviderEventMessage,\n    ProviderType,\n    WidgetProviderEvents,\n} from './types';\n\n/**\n * Handles JSON-RPC request coming from an iFrame by delegating to a given Ethereum provider.\n * The result will be passed back to the iFrame.\n *\n * Additionally, it will forward some special events from the wallet, to the iFrame window, for example connect/disconnect/chainChanged\n */\nexport class IframeRpcProviderBridge {\n    /**\n     * The Ethereum provider instance.\n     * When is null the JSON-RPC bridge is disconnected from the Ethereum provider.\n     * */\n    private provider: EthereumProvider | SolanaProvider | null = null;\n\n    /** Listener for Ethereum provider events */\n    private processor: TransactionProcessor;\n    private listener: (...args: any[]) => void;\n    private connectListener: (...args: any[]) => void;\n\n    /**\n     * Creates an instance of IframeRpcProviderBridge.\n     * @param iframeWindow - The iFrame window that will post up general RPC messages and to which the IframeRpcProviderBridge will forward the RPC result.\n     *  Also it will receive some special RPC events coming from the wallet, like connect/chainChanged,accountChanged\n     */\n    constructor(private iframeWindow: Window, providerType: ProviderType) {\n        this.processor = new TransactionProcessor(providerType, this.iframeWindow);\n    }\n\n    disconnect() {\n        this.provider = null;\n        stopListeningToMessageFromWindow(\n            window,\n            WidgetProviderEvents.PROVIDER_ON_EVENT,\n            this.listener,\n        );\n        stopListeningToMessageFromWindow(\n            window,\n            WidgetProviderEvents.PROVIDER_ON_EVENT_CONNECT,\n            this.connectListener,\n        );\n    }\n\n    onConnect(newProvider: EthereumProvider | SolanaProvider) {\n        if (this.provider) {\n            this.disconnect();\n        } else {\n            // Listen for messages coming to the main window (from the iFrame window)\n            console.log('onConnect====>');\n            this.listener = listenToMessageFromWindow(\n                window,\n                WidgetProviderEvents.PROVIDER_ON_EVENT,\n                this.processProviderEventFromWindow,\n            );\n            this.connectListener = listenToMessageFromWindow(\n                window,\n                WidgetProviderEvents.PROVIDER_ON_EVENT_CONNECT,\n                this.processConnectEvent,\n            );\n        }\n\n        // Save the provider\n        this.provider = newProvider;\n\n        // Register provider event listeners based on the type of provider (Solana or EVM)\n        this.processor.registerProviderEventListeners(newProvider);\n    }\n\n    /**\n     * Process provider events coming from the window (from iFrame).\n     */\n    private processProviderEventFromWindow = async (args: ProviderEventMessage) => {\n        console.log('processProviderEventFromWindow:', args);\n        const { type } = args;\n        const { method, params: requestArgs } = args.params[0];\n        await this.processor.processTransaction(\n            method,\n            args.id,\n            args.path,\n            requestArgs,\n            this.provider,\n            type,\n        );\n    };\n\n    /**\n     * Process connect event for Solana\n     */\n    private processConnectEvent = async (args: ProviderEventMessage) => {\n        await this.processor.processConnectEvent(args, this.provider);\n    };\n}\n","export const DEFAULT_HEIGHT = '480px';\nexport const DEFAULT_WIDTH = 450;\nexport const MIN_WIDTH = 375;\n\nexport function updateIframeStyle(iframe: HTMLIFrameElement, style: { width: number }) {\n    updateIframeWidth(iframe, style.width);\n}\n\nexport const getStyleElementIdentifier = (function () {\n    const uniqId = Date.now().toString();\n    return function () {\n        return {\n            id: uniqId,\n            defaultClassName: `default-widget-iframe-${uniqId}`,\n            specifiedClassName: `specified-widget-iframe-${uniqId}`,\n        };\n    };\n})();\n\nfunction updateStyleTagInnerHTML(\n    styleElement: HTMLStyleElement,\n    {\n        defaultClassName,\n        specifiedClassName,\n        width,\n    }: {\n        defaultClassName: string;\n        specifiedClassName: string;\n        width: number;\n    },\n) {\n    styleElement.innerHTML = '';\n    styleElement.innerHTML = `\n        .${defaultClassName} {\n            width: ${DEFAULT_WIDTH}px;\n            min-height: ${DEFAULT_HEIGHT};\n            border: none;\n        }\n        @media (max-width: 767px) {\n            .${defaultClassName} {\n                width: 100%;\n            }\n        }\n        .${specifiedClassName} {\n            width: ${width}px;\n            min-height: ${DEFAULT_HEIGHT};\n            border: none;\n        }\n    `;\n}\n\nfunction importWidthHeightStyle(width: number) {\n    const { id, defaultClassName, specifiedClassName } = getStyleElementIdentifier();\n\n    const existStyleElement = document.getElementById(id);\n    if (existStyleElement) {\n        updateStyleTagInnerHTML(existStyleElement as HTMLStyleElement, {\n            defaultClassName,\n            specifiedClassName,\n            width,\n        });\n        return existStyleElement;\n    }\n    const styleElement = document.createElement('style');\n    updateStyleTagInnerHTML(styleElement, { defaultClassName, specifiedClassName, width });\n    styleElement.id = id;\n    document.head.appendChild(styleElement);\n    return styleElement;\n}\n\nfunction updateIframeWidth(iframe: HTMLIFrameElement, width?: number) {\n    const newWidth = Number(width);\n    const { defaultClassName, specifiedClassName } = getStyleElementIdentifier();\n    if (!newWidth) {\n        importWidthHeightStyle(DEFAULT_WIDTH);\n        iframe.className = defaultClassName;\n    } else {\n        importWidthHeightStyle(newWidth < MIN_WIDTH ? MIN_WIDTH : newWidth);\n        iframe.className = specifiedClassName;\n    }\n}\n\nexport function destroyStyleElement() {\n    const { id } = getStyleElementIdentifier();\n    const styleElement = document.getElementById(id);\n    if (styleElement) {\n        styleElement.parentNode.removeChild(styleElement);\n    }\n}\n","import { OkxEventListeners } from './events';\nimport { IframeEventEmitter } from './IframeEventEmitter';\nimport { IframeRpcProviderBridge } from './IframeRpcProviderBridge';\nimport {\n    WindowListener,\n    listenToMessageFromWindow,\n    postMessageToWindow,\n    stopListeningWindowListener,\n} from './messages';\nimport {\n    EthereumProvider,\n    IWidgetConfig,\n    IWidgetParams,\n    IWidgetProps,\n    ProviderType,\n    UpdateProviderParams,\n    WidgetMethodsEmit,\n    WidgetMethodsListen,\n} from './types';\nimport {\n    checkUrlParam,\n    createWidgetParams,\n    getAddress,\n    getChainId,\n    getWalletInfo,\n    validateWidgetParams,\n    WALLET_TYPE,\n} from './widgetHelp';\nimport { updateIframeStyle, DEFAULT_HEIGHT, destroyStyleElement } from './updateIframeStyle';\n\n/**\n * Callback function signature for updating the Okx Swap Widget.\n */\nexport interface OkxSwapWidgetHandler {\n    updateParams: (params: IWidgetParams) => void;\n    updateListeners: (newListeners?: OkxEventListeners) => void;\n    updateProvider: (newProvider: EthereumProvider, providerType: ProviderType) => void;\n    destroy: () => void;\n    iframeWindow: Window;\n}\n\nconst getConnectWalletParams = async (provider, providerType, walletName) => {\n    const updateProviderParams = {\n        providerType,\n        walletType: WALLET_TYPE[providerType],\n        chainId: await getChainId(provider, providerType),\n        address: await getAddress(provider, providerType),\n        walletInfo: getWalletInfo(walletName, provider),\n    };\n    return updateProviderParams;\n}\n\n/**\n * Generates and injects a Okx Swap Widget into the provided container.\n * @param container - The HTML element to inject the widget into.\n * @param params - Parameters for configuring the widget.\n * @returns A callback function to update the widget with new settings.\n */\nexport function createOkxSwapWidget(\n    container: HTMLElement,\n    config: IWidgetConfig,\n): OkxSwapWidgetHandler {\n    console.log('createOkxSwapWidget====>', container, config);\n    const { params, provider: providerAux, listeners } = config;\n    let provider = providerAux;\n    // eslint-disable-next-line prefer-const\n    let { data: currentParams, url } = createWidgetParams(params);\n\n    // 1. Create a brand new iframe\n    const iframe = createIframe(params, url);\n\n    // 2. Clear the content (delete any previous iFrame if it exists)\n    container.innerHTML = '';\n    container.appendChild(iframe);\n\n    const { contentWindow: iframeWindow } = iframe;\n\n    if (!iframeWindow) {\n        console.error('Iframe does not contain a window', iframe);\n        throw new Error('Iframe does not contain a window!');\n    }\n\n    // 3. Send appCode (once the widget posts the ACTIVATE message)\n    const windowListeners: WindowListener[] = [];\n    // todo: check this\n    // windowListeners.push(sendAppCodeOnActivation(iframeWindow, params.appCode));\n\n    const updateProviderCallback = async () => {\n        const providerParams = await getConnectWalletParams(provider, currentParams.providerType, currentParams.walletName);\n        console.log('updateProviderEmitEvent====>dex-ready', providerParams, provider);\n        updateProviderEmitEvent(iframeWindow, providerParams, provider);\n    }\n\n    // 4. Handle widget height changes\n    // todo: check this\n    windowListeners.push(\n        ...listenToHeightChanges(iframe, params.height),\n        listenToDexLoadReady(iframeWindow, currentParams, updateProviderCallback),\n    );\n\n    // 5. Intercept deep links navigation in the iframe\n    // windowListeners.push(interceptDeepLinks());\n\n    // 6. Handle and forward widget events to the listeners\n    const iFrameOkxEventEmitter = new IframeEventEmitter(window, listeners);\n\n    // 7. Wire up the iframeRpcProviderBridge with the provider (so RPC calls flow back and forth)\n    let iframeRpcProviderBridge = updateProvider(iframeWindow, null, provider, params.providerType);\n\n    // 8. Schedule the uploading of the params, once the iframe is loaded\n    iframe.addEventListener('load', () => {\n        console.log('updateParams====>load', provider, currentParams);\n        updateParams(iframeWindow, currentParams);\n        getConnectWalletParams(\n          provider,\n          currentParams.providerType,\n          currentParams.walletName,\n        ).then((updateProviderParams) => {\n            console.log('updateProviderEmitEvent====>load-success', updateProviderParams, provider);\n            updateProviderEmitEvent(iframeWindow, updateProviderParams, provider);\n        }).catch((error) => {\n            console.log('updateProviderEmitEvent====>load-error', provider, error);\n        })\n    });\n\n    // 9. Listen for messages from the iframe\n    // const iframeSafeSdkBridge = new IframeSafeSdkBridge(window, iframeWindow);\n\n    // 10. Return the handler, so the widget, listeners, and provider can be updated\n    return {\n        updateParams: (newParams: IWidgetParams) => {\n            // width, lang, theme\n            const { width, lang, theme, walletName, extraParams } = newParams;\n\n            updateIframeStyle(iframe, { width });\n\n            const nextParams = {\n                ...params,\n                lang,\n                theme,\n                walletName,\n                extraParams,\n            };\n            currentParams = createWidgetParams(nextParams).data;\n\n            validateWidgetParams(currentParams);\n            console.log('updateParams====>updateParamsFunction', provider, params);\n            updateParams(iframeWindow, currentParams);\n        },\n        updateListeners: (newListeners?: OkxEventListeners) =>\n            iFrameOkxEventEmitter.updateListeners(newListeners),\n        updateProvider: async (newProvider, providerType: ProviderType, walletName?: string) => {\n            validateWidgetParams(providerType);\n            iframeRpcProviderBridge?.disconnect();\n            provider?.removeAllListeners?.();\n            // iframeSafeSdkBridge.stopListening();\n\n            provider = newProvider;\n\n            const updateProviderParams = await getConnectWalletParams(provider, providerType, walletName);\n\n            currentParams = { ...currentParams, ...updateProviderParams };\n\n            iframeRpcProviderBridge = updateProvider(\n                iframeWindow,\n                iframeRpcProviderBridge,\n                newProvider,\n                providerType,\n            );\n            console.log('updateProvider====>updateProviderFunction', newProvider, providerType);\n            updateProviderEmitEvent(iframeWindow, updateProviderParams, provider);\n\n            // updateParams(iframeWindow, currentParams, newProvider);\n        },\n\n        destroy: () => {\n            // disconnect rpc provider and unsubscribe to events\n            iframeRpcProviderBridge?.disconnect();\n            // Stop listening for Okx events\n            iFrameOkxEventEmitter.stopListeningIframe();\n\n            // Disconnect all listeners\n            windowListeners.forEach(listener => window.removeEventListener('message', listener));\n\n            // Stop listening for SDK messages\n            // iframeSafeSdkBridge.stopListening();\n\n            // Destroy the iframe\n            try {\n                container.removeChild(iframe);\n            } catch (e) {\n                console.error('Error removing iframe, maybe iframe is removed', e);\n            }\n            destroyStyleElement();\n        },\n        iframeWindow,\n    };\n}\n\n/**\n * Update the provider for the iframeRpcProviderBridge.\n *\n * It will disconnect from the previous provider and connect to the new one.\n *\n * @param iframe iframe window\n * @param iframeRpcProviderBridge iframe RPC manager\n * @param newProvider new provider\n *\n * @returns the iframeRpcProviderBridge\n */\nfunction updateProvider(\n    iframe: Window,\n    iframeRpcProviderBridge: IframeRpcProviderBridge | null,\n    newProvider: EthereumProvider,\n    providerType: ProviderType,\n): IframeRpcProviderBridge {\n    // Verify the params\n    if (!newProvider) {\n        return;\n    }\n\n    const Types = Object.values(ProviderType);\n\n    if (!Types.includes(providerType)) {\n        throw new Error('providerType is required');\n    }\n\n    console.log('updateProvider iframeRpcProviderBridge===>', iframeRpcProviderBridge);\n\n    // TODO: check provider\n\n    // Disconnect from the previous provider bridge\n    if (iframeRpcProviderBridge) {\n        iframeRpcProviderBridge.disconnect();\n    }\n\n    const providerBridge = new IframeRpcProviderBridge(iframe, providerType);\n\n    // Connect to the new provider\n    if (newProvider) {\n        providerBridge.onConnect(newProvider);\n    }\n\n    return providerBridge;\n}\n\n/**\n * Creates an iframe element for the Okx Swap Widget based on provided parameters and settings.\n * @param params - Parameters for the widget.\n * @returns The generated HTMLIFrameElement.\n */\nfunction createIframe(params: IWidgetParams, url: string): HTMLIFrameElement {\n    // todo: check this\n    const { width } = params;\n\n    const iframe = document.createElement('iframe');\n\n    // Check if the URL is valid\n    checkUrlParam(url);\n\n    console.log('log-url', url);\n    iframe.src = url;\n    // update iframe style\n    updateIframeStyle(iframe, { width });\n\n    iframe.scrolling = 'no';\n    iframe.style.border = 'none';\n\n    return iframe;\n}\n\n/**\n * Updates the Okx Swap Widget based on the new settings provided.\n * @param params - New params for the widget.\n * @param contentWindow - Window object of the widget's iframe.\n */\nfunction updateProviderEmitEvent(\n    contentWindow: Window,\n    params: UpdateProviderParams,\n    provider: EthereumProvider | undefined,\n) {\n    const hasProvider = !!provider;\n\n    console.trace('updateProviderEmitEvent', params, provider);\n\n    postMessageToWindow<WidgetMethodsListen.UPDATE_PROVIDER>(\n        contentWindow,\n        WidgetMethodsListen.UPDATE_PROVIDER,\n        {\n            appParams: params,\n            hasProvider,\n        },\n    );\n}\n\n/**\n * Updates the Okx Swap Widget based on the new settings provided.\n * @param params - New params for the widget.\n * @param contentWindow - Window object of the widget's iframe.\n */\nfunction updateParams(contentWindow: Window, props: IWidgetProps) {\n    console.log('updateParams====>end', props, contentWindow);\n    postMessageToWindow(contentWindow, WidgetMethodsListen.UPDATE_PARAMS, {\n        appParams: props,\n    });\n}\n\n/**\n * Listens for iframeHeight emitted by the widget, and applies dynamic height adjustments to the widget's iframe.\n *\n * @param iframe - The HTMLIFrameElement of the widget.\n * @param defaultHeight - Default height for the widget.\n */\nfunction listenToHeightChanges(\n    iframe: HTMLIFrameElement,\n    defaultHeight = DEFAULT_HEIGHT,\n): WindowListener[] {\n    return [\n        listenToMessageFromWindow(window, WidgetMethodsEmit.UPDATE_HEIGHT, data => {\n            iframe.style.height = data.height ? `${data.height}px` : defaultHeight;\n            iframe.style.minHeight = data.height ? `${data.height}px` : defaultHeight;\n        }),\n        listenToMessageFromWindow(window, WidgetMethodsEmit.SET_FULL_HEIGHT, ({ isUpToSmall }) => {\n            iframe.style.height = isUpToSmall ? defaultHeight : `${document.body.offsetHeight}px`;\n            iframe.style.minHeight = isUpToSmall ? defaultHeight : `${document.body.offsetHeight}px`;\n        }),\n    ];\n}\n\nfunction listenToDexLoadReady(iframeWindow: Window, params: IWidgetProps, updateProviderCallback: Function): WindowListener {\n    const listener = listenToMessageFromWindow(window, WidgetMethodsEmit.LOAD_READY, () => {\n        // updateParams again;\n        console.log('updateParams=====>dex-ready', iframeWindow, params);\n        updateParams(iframeWindow, params);\n        // update provider again\n        updateProviderCallback();\n        stopListeningWindowListener(window, listener);\n    });\n    return listener;\n}\n"],"names":["OkxEvents","SimpleOkxEventEmitter","__publicField","listener","event","handler","payload","OKX_SWAP_WIDGET_EVENT_KEY","postMessageToWindow","contentWindow","method","postPayload","listenToMessageFromWindow","callback","isEventData","obj","stopListeningToMessageFromWindow","_method","stopListeningWindowListener","WidgetMethodsEmit","WidgetMethodsListen","WidgetProviderEvents","TradeType","TradeTab","THEME","WIDGET_PALETTE_COLORS","ProviderType","IframeEventEmitter","listeners","okxEvent","res","passedParams","tx","e","freeGlobal","freeSelf","root","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","value","isOwn","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","isArray","isObject","type","identity","asyncTag","funcTag","genTag","proxyTag","isFunction","arrayEach","array","iteratee","index","length","MAX_SAFE_INTEGER","reIsUint","isIndex","isLength","isArrayLike","isPrototype","Ctor","proto","baseTimes","n","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","func","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","key","overArg","transform","arg","nativeKeys","baseKeys","object","keys","createBaseFor","fromRight","keysFunc","iterable","props","baseFor","baseForOwn","createBaseEach","eachFunc","collection","baseEach","castFunction","forEach","isString","DEFAULT_BASE_URL","ROUTER_PRE","WIDGET_ROUTE_CONSTANTS","WALLET_TYPE","SOLANA_CHAIN_ID","formatTokenPair","tokenPair","formatDefaultConfig","tradeType","bridgeTokenPair","defaultTab","formattedTokenPair","formattedBridgeTokenPair","defaultIsBridge","route","defaultTokenPair","createWidgetParams","widgetParams","baseUrl","feeConfig","providerType","theme","lang","chainIds","extraParams","walletName","widgetVersion","define_process_env_default","sdkVersion","verifyWidgetParams","supportTradeType","initParams","urlParams","params","queryString","url","data","getReferrer","requestChainId","provider","chainId","decimalChainId","error","requestAddress","accounts","isEvmProvider","getChainId","getAddress","account","_a","_b","isPrintableString","str","safeDecodeURIComponent","decodedValue","checkUrlParam","urlObj","validateWidgetParams","getWalletInfo","ERROR_MSG","isNumberOrNumberString","val","verifyPercent","feePercent","checkFeeConfig","fee","commonFeePercent","item","verifyChainId","isSameChain","legalChains","checkTokenPairChain","walletType","errorTips","txInputParamsFormatter","options","modifiedOptions","toNumber","isNullish","numberToHex","EvmStrategy","iframeWindow","id","path","requestArgs","requestPara","requestPayload","hash","base","ALPHABET","BASE_MAP","j","i","x","xc","BASE","LEADER","FACTOR","iFACTOR","encode","source","zeroes","pbegin","pend","size","b58","carry","it1","it2","decodeUnsafe","psz","b256","it3","it4","vch","decode","string","buffer","src","basex","require$$0","bs58","decodeMsg","message","Transaction","deserializeTransaction","VersionedTransaction","SolanaStrategy","solanaTransactionArgs","onlyIfTrusted","okxArgs","transaction","_c","okxType","_d","newParams","resData","signedTransaction","signature","encodeSignature","serializedTransaction","_e","address","args","ethereumProvider","mode","solana","TransactionProcessor","strategy","IframeRpcProviderBridge","newProvider","DEFAULT_HEIGHT","DEFAULT_WIDTH","MIN_WIDTH","updateIframeStyle","iframe","style","updateIframeWidth","getStyleElementIdentifier","uniqId","updateStyleTagInnerHTML","styleElement","defaultClassName","specifiedClassName","width","importWidthHeightStyle","existStyleElement","newWidth","destroyStyleElement","getConnectWalletParams","createOkxSwapWidget","container","config","providerAux","currentParams","createIframe","windowListeners","updateProviderCallback","providerParams","updateProviderEmitEvent","listenToHeightChanges","listenToDexLoadReady","iFrameOkxEventEmitter","iframeRpcProviderBridge","updateProvider","updateParams","updateProviderParams","nextParams","newListeners","providerBridge","hasProvider","defaultHeight","isUpToSmall"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,46,47]}