{"version":3,"sources":["../src/near.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { Buffer } from \"buffer\";\nimport Big from \"big.js\";\nimport {\n  getPrice,\n  numberRemoveEndZero,\n  SendType,\n  Service,\n  getChainRpcUrl,\n  Csl,\n  OpenAPI,\n  ExecTime,\n} from \"@stableflow/core\";\nimport { actionCreators } from \"@near-js/transactions\";\n\nconst createFunctionCallAction = (\n  methodName: string,\n  args: Record<string, any>,\n  gas: string,\n  deposit: string\n) => {\n  return actionCreators.functionCall(\n    methodName,\n    args,\n    BigInt(gas),\n    BigInt(deposit)\n  );\n}\n\nexport default class NearWallet {\n  private selector: any;\n  private rpcUrl: string;\n  private csl;\n\n  constructor(_selector: any) {\n    this.selector = _selector;\n    // https://rpc.mainnet.near.org\n    // https://nearinner.deltarpc.com\n    this.rpcUrl = getChainRpcUrl(\"near\").rpcUrl;\n\n    const cs = new Csl(OpenAPI.DEBUG);\n    this.csl = cs.log;\n  }\n\n  private async query(contractId: string, methodName: string, args: any = {}) {\n    const response = await fetch(this.rpcUrl, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\"\n      },\n      body: JSON.stringify({\n        jsonrpc: \"2.0\",\n        id: \"dontcare\",\n        method: \"query\",\n        params: {\n          request_type: \"call_function\",\n          finality: \"final\",\n          account_id: contractId,\n          method_name: methodName,\n          args_base64: Buffer.from(JSON.stringify(args)).toString(\"base64\")\n        }\n      })\n    });\n    const result = await response.json();\n    if (result.result && result.result.result) {\n      return JSON.parse(Buffer.from(result.result.result).toString());\n    }\n    return result;\n  }\n\n  async transfer(data: {\n    originAsset: string;\n    depositAddress: string;\n    amount: string;\n  }) {\n    const wallet = await this.selector.wallet();\n    const checkStorage = await this.query(\n      data.originAsset,\n      \"storage_balance_of\",\n      {\n        account_id: data.depositAddress\n      }\n    );\n    const transactions = [];\n    if (!checkStorage?.available) {\n      transactions.push({\n        receiverId: data.originAsset,\n        actions: [\n          createFunctionCallAction(\n            \"storage_deposit\",\n            {\n              account_id: data.depositAddress,\n              registration_only: true\n            },\n            \"15000000000000\",\n            \"1250000000000000000000\"\n          )\n        ]\n      });\n    }\n    transactions.push({\n      receiverId: data.originAsset,\n      actions: [\n        createFunctionCallAction(\n          \"ft_transfer\",\n          {\n            receiver_id: data.depositAddress,\n            amount: data.amount,\n            memo: null\n          },\n          \"30000000000000\",\n          \"1\"\n        )\n      ]\n    });\n\n    const result = await wallet.signAndSendTransactions({\n      transactions,\n      callbackUrl: \"/\"\n    });\n\n    if (result.slice(-1).length) {\n      return result.slice(-1)[0].transaction.hash;\n    }\n\n    return \"\";\n  }\n\n  async getBalance(token: any, _account: string, options?: { isCatchError?: boolean; }) {\n    const { isCatchError = false } = options || {};\n\n    if (token.symbol === \"near\" || token.symbol === \"NEAR\" || token.symbol === \"native\") {\n      return this.getNearBalance(_account, options);\n    }\n    try {\n      const balance = await this.query(token.contractAddress, \"ft_balance_of\", {\n        account_id: _account\n      });\n      return balance || \"0\";\n    } catch (error) {\n      this.csl(\"Near getTokenBalance\", \"red-500\", \"Get token balance failed: %o\", error);\n      if (isCatchError) {\n        throw error;\n      }\n      return \"0\";\n    }\n  }\n\n  async balanceOf(token: any, account: string, options?: { isCatchError?: boolean; }) {\n    return await this.getBalance(token, account, options);\n  }\n\n  /**\n   * Get native NEAR balance\n   * @param account Account ID\n   * @returns NEAR balance in yoctoNEAR (smallest unit)\n   */\n  async getNearBalance(account: string, options?: { isCatchError?: boolean; }): Promise<string> {\n    const { isCatchError = false } = options || {};\n\n    try {\n      const response = await fetch(this.rpcUrl, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify({\n          jsonrpc: \"2.0\",\n          id: \"dontcare\",\n          method: \"query\",\n          params: {\n            request_type: \"view_account\",\n            finality: \"final\",\n            account_id: account\n          }\n        })\n      });\n      const result = await response.json();\n      return result.result?.amount || \"0\";\n    } catch (error) {\n      console.error(\"Failed to get NEAR balance:\", error);\n      if (isCatchError) {\n        throw error;\n      }\n      return \"0\";\n    }\n  }\n\n  /**\n   * Estimate gas limit for transfer transaction\n   * @param data Transfer data\n   * @returns Gas limit estimate, gas price, and estimated gas cost\n   */\n  async estimateTransferGas(data: {\n    fromToken: any;\n    depositAddress: string;\n    amount: string;\n  }): Promise<{\n    gasLimit: bigint;\n    gasPrice: bigint;\n    estimateGas: bigint;\n  }> {\n    const { fromToken, depositAddress } = data;\n    const originAsset = fromToken.contractAddress;\n\n    // Check if storage deposit is needed\n    const checkStorage = await this.query(\n      originAsset,\n      \"storage_balance_of\",\n      {\n        account_id: depositAddress\n      }\n    );\n\n    let gasLimit: bigint;\n\n    if (!checkStorage?.available) {\n      // Storage deposit: 15000000000000 gas\n      // ft_transfer: 30000000000000 gas\n      gasLimit = BigInt(\"15000000000000\") + BigInt(\"30000000000000\");\n    } else {\n      // Only ft_transfer needed: 30000000000000 gas\n      gasLimit = BigInt(\"30000000000000\");\n    }\n\n    // Increase by 20% to provide buffer\n    gasLimit = (gasLimit * 120n) / 100n;\n\n    // NEAR gas price is typically 100000000 yoctoNEAR per gas unit\n    const gasPrice = BigInt(\"100000000\");\n\n    // Calculate estimated gas cost: gasLimit * gasPrice\n    const estimateGas = gasLimit * gasPrice;\n\n    return {\n      gasLimit,\n      gasPrice,\n      estimateGas\n    };\n  }\n\n  async getEstimateGas(params: any) {\n    const { gasLimit, price, nativeToken, gasPrice } = params;\n\n    let finalGasPrice = gasPrice;\n    if (!finalGasPrice) {\n      try {\n        const gasPriceResponse = await fetch(this.rpcUrl, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\"\n          },\n          body: JSON.stringify({\n            jsonrpc: \"2.0\",\n            id: \"dontcare\",\n            method: \"gas_price\",\n            params: {}\n          })\n        });\n        const gasPriceJson = await gasPriceResponse.json();\n        finalGasPrice = BigInt(gasPriceJson.result.gas_price);\n      } catch {\n        finalGasPrice = BigInt(\"100000000\");\n      }\n    }\n\n    const estimateGas = BigInt(gasLimit) * BigInt(finalGasPrice);\n    const estimateGasAmount = Big(estimateGas.toString()).div(10 ** nativeToken.decimals);\n    const estimateGasUsd = Big(estimateGasAmount).times(price || 1);\n\n    return {\n      gasPrice: finalGasPrice,\n      usd: numberRemoveEndZero(Big(estimateGasUsd).toFixed(20)),\n      wei: estimateGas,\n      amount: numberRemoveEndZero(Big(estimateGasAmount).toFixed(nativeToken.decimals)),\n    };\n  }\n\n  async estimateTransaction(params: any) {\n    const {\n      dry,\n      transactions,\n      fromToken,\n      prices,\n    } = params;\n\n    const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n\n    let totalGasLimit = BigInt(\"50000000000000\"); // ft_transfer_call gas\n    for (let i = 1; i < transactions.length; i++) {\n      totalGasLimit += BigInt(\"15000000000000\");\n    }\n    // Add 20% buffer\n    totalGasLimit = (totalGasLimit * 120n) / 100n;\n\n    const result = {\n      estimateSourceGasLimit: totalGasLimit,\n      estimateSourceGas: 0n,\n      estimateSourceGasUsd: \"0\",\n    };\n\n    const setDefaultGasLimit = async () => {\n      const { usd, wei } = await this.getEstimateGas({\n        gasLimit: totalGasLimit,\n        price: nativeTokenPrice,\n        nativeToken: fromToken.nativeToken,\n        gasPrice: dry ? \"100000000\" : void 0,\n      });\n      result.estimateSourceGas = wei;\n      result.estimateSourceGasUsd = usd;\n    };\n\n    await setDefaultGasLimit();\n\n    return result;\n  }\n\n  async checkTransactionStatus(txHash: string) {\n    const wallet = await this.selector.wallet();\n    const accounts = await wallet.getAccounts();\n    const accountId = accounts[0]?.accountId;\n\n    try {\n      const response = await fetch(this.rpcUrl, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify({\n          jsonrpc: \"2.0\",\n          id: \"dontcare\",\n          method: \"EXPERIMENTAL_tx_status\",\n          params: {\n            tx_hash: txHash,\n            sender_account_id: accountId,\n            wait_until: \"EXECUTED\" // wait_until: \"NONE\" | \"EXECUTED_OPTIMISTIC\" | \"EXECUTED\"\n          }\n        })\n      });\n      const txStatus = await response.json();\n      this.csl(\"Near checkTransactionStatus\", \"green-400\", \"fetch rpc success: %o\", txStatus);\n      this.csl(\"Near checkTransactionStatus\", \"green-400\", \"fetch rpc status success: %o\", typeof txStatus.result?.status?.SuccessValue !== \"undefined\");\n    } catch (error) {\n      this.csl(\"Near checkTransactionStatus\", \"red-500\", \"fetch rpc failed: %o\", error);\n    }\n  }\n\n  async quoteOneClickProxy(params: any) {\n    const {\n      dry,\n      proxyAddress,\n      fromToken,\n      refundTo,\n      depositAddress,\n      amountWei,\n      prices,\n    } = params;\n\n    const execTime = new ExecTime({ type: \"OneClick NEAR\", logStyle: \"lime-200\", isDebug: OpenAPI.DEBUG });\n\n    const result: any = { fees: {} };\n\n    try {\n      const wallet = await this.selector.wallet();\n      const accounts = await wallet.getAccounts();\n      const userAccountId = refundTo || accounts[0]?.accountId;\n\n      if (!userAccountId) {\n        throw new Error(\"No account found\");\n      }\n\n      const tokenContract = fromToken.contractAddress;\n      // proxyAddress should be stableflowstg.near, use default if not provided\n      const STABLEFLOW_CONTRACT = proxyAddress || \"stableflowstg.near\";\n\n      if (!depositAddress) {\n        throw new Error(\"depositAddress is required\");\n      }\n\n      // Check and register token: register for intents address (depositAddress) and stableflowstg.near contract\n      const transactions: any[] = [];\n\n      // Check if depositAddress (intents address) is registered\n      // Check if stableflowstg.near is registered\n      execTime.breakpoint();\n      const mergedCalls = [\n        this.query(\n          tokenContract,\n          \"storage_balance_of\",\n          {\n            account_id: depositAddress\n          }\n        ),\n        this.query(\n          tokenContract,\n          \"storage_balance_of\",\n          {\n            account_id: STABLEFLOW_CONTRACT\n          }\n        )\n      ];\n      const [checkStorageDepositAddress, checkStorageStableflow] = await Promise.all(mergedCalls);\n      execTime.log(\"query storage_balance_of (depositAddress and STABLEFLOW_CONTRACT)\");\n\n      if (!checkStorageDepositAddress?.available) {\n        transactions.push({\n          receiverId: tokenContract,\n          actions: [\n            createFunctionCallAction(\n              \"storage_deposit\",\n              {\n                account_id: depositAddress,\n                registration_only: true\n              },\n              \"15000000000000\",\n              \"1250000000000000000000\"\n            )\n          ]\n        });\n      }\n\n      if (!checkStorageStableflow?.available) {\n        transactions.push({\n          receiverId: tokenContract,\n          actions: [\n            createFunctionCallAction(\n              \"storage_deposit\",\n              {\n                account_id: STABLEFLOW_CONTRACT,\n                registration_only: true\n              },\n              \"15000000000000\",\n              \"1250000000000000000000\"\n            )\n          ]\n        });\n      }\n\n      // Build ft_transfer_call transaction\n      transactions.push({\n        receiverId: tokenContract,\n        actions: [\n          createFunctionCallAction(\n            \"ft_transfer_call\",\n            {\n              receiver_id: STABLEFLOW_CONTRACT,\n              amount: amountWei,\n              msg: depositAddress\n            },\n            \"50000000000000\", // ft_transfer_call requires more gas\n            \"1\"\n          )\n        ]\n      });\n\n      execTime.breakpoint();\n      const ett = await this.estimateTransaction({\n        dry,\n        transactions,\n        fromToken,\n        prices,\n      });\n      execTime.log(\"estimateTransaction\");\n\n      result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n      result.estimateSourceGas = ett.estimateSourceGas;\n      result.totalEstimateSourceGas = ett.estimateSourceGas;\n      result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n      // Set sendParam for subsequent transaction sending\n      result.sendParam = {\n        transactions,\n        callbackUrl: \"/\"\n      };\n\n    } catch (error) {\n      this.csl(\"Near quoteOneClickProxy\", \"red-500\", \"oneclick quote proxy failed: %o\", error);\n      // Use default gas estimation\n      const ett = await this.estimateTransaction({\n        dry,\n        transactions: [null, null, null],\n        fromToken,\n        prices,\n      });\n\n      result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n      result.estimateSourceGas = ett.estimateSourceGas;\n      result.totalEstimateSourceGas = ett.estimateSourceGas;\n      result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n    }\n\n    execTime.logTotal(\"quoteOneClickProxy\");\n    return result;\n  }\n\n  async sendTransaction(params: any) {\n    const { transactions, callbackUrl } = params;\n\n    if (!transactions || !Array.isArray(transactions)) {\n      throw new Error(\"Invalid sendParam: transactions array is required\");\n    }\n\n    const wallet = await this.selector.wallet();\n    const result = await wallet.signAndSendTransactions({\n      transactions,\n      callbackUrl: callbackUrl || \"/\"\n    });\n\n    if (result.slice(-1).length) {\n      return result.slice(-1)[0].transaction.hash;\n    }\n\n    return \"\";\n  }\n\n  /**\n   * Unified quote method that routes to specific quote methods based on type\n   * @param type Service type from Service\n   * @param params Parameters for the quote\n   */\n  async quote(type: Service, params: any) {\n    switch (type) {\n      case Service.OneClick:\n        return await this.quoteOneClickProxy(params);\n      default:\n        throw new Error(`Unsupported quote type: ${type}`);\n    }\n  }\n\n  /**\n   * Unified send method that routes to specific send methods based on type\n   * @param type Send type from SendType enum\n   * @param params Parameters for the send transaction\n   */\n  async send(type: SendType, params: any) {\n    switch (type) {\n      case SendType.SEND:\n        return await this.sendTransaction(params);\n      case SendType.TRANSFER:\n        return await this.transfer(params);\n      default:\n        throw new Error(`Unsupported send type: ${type}`);\n    }\n  }\n}\n\nexport { NearWallet };\n"]}