@vleap/warps-adapter-near 0.1.0-beta.2 → 0.1.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -929,6 +929,7 @@ var WarpNearExplorer = class {
929
929
  };
930
930
 
931
931
  // src/WarpNearWallet.ts
932
+ var import_crypto = require("@near-js/crypto");
932
933
  var bip39 = __toESM(require("@scure/bip39"), 1);
933
934
  var import_english = require("@scure/bip39/wordlists/english.js");
934
935
  var import_warps5 = require("@vleap/warps");
@@ -1000,7 +1001,7 @@ var WarpNearWallet = class {
1000
1001
  const seed = bip39.mnemonicToSeedSync(mnemonic);
1001
1002
  const keyPair = import_near_api_js4.KeyPair.fromRandom("ed25519");
1002
1003
  const publicKey = keyPair.getPublicKey();
1003
- const accountId = publicKey.toString().split(":")[1] || publicKey.toString();
1004
+ const accountId = (0, import_crypto.keyToImplicitAddress)(publicKey.toString());
1004
1005
  return {
1005
1006
  address: accountId,
1006
1007
  privateKey: keyPair.toString(),
@@ -1012,7 +1013,7 @@ var WarpNearWallet = class {
1012
1013
  const seed = bip39.mnemonicToSeedSync(mnemonic);
1013
1014
  const keyPair = import_near_api_js4.KeyPair.fromRandom("ed25519");
1014
1015
  const publicKey = keyPair.getPublicKey();
1015
- const accountId = publicKey.toString().split(":")[1] || publicKey.toString();
1016
+ const accountId = (0, import_crypto.keyToImplicitAddress)(publicKey.toString());
1016
1017
  return {
1017
1018
  address: accountId,
1018
1019
  privateKey: keyPair.toString(),
@@ -1021,12 +1022,19 @@ var WarpNearWallet = class {
1021
1022
  }
1022
1023
  getAddress() {
1023
1024
  try {
1025
+ const wallet = this.config.user?.wallets?.[this.chain.name];
1026
+ if (wallet && typeof wallet === "object" && "address" in wallet) {
1027
+ return wallet.address;
1028
+ }
1029
+ if (wallet && typeof wallet === "string") {
1030
+ return wallet;
1031
+ }
1024
1032
  const privateKey = (0, import_warps5.getWarpWalletPrivateKeyFromConfig)(this.config, this.chain.name);
1025
1033
  if (privateKey) {
1026
1034
  try {
1027
1035
  const keyPair = import_near_api_js4.KeyPair.fromString(privateKey);
1028
1036
  const publicKey = keyPair.getPublicKey();
1029
- return publicKey.toString().split(":")[1] || publicKey.toString();
1037
+ return (0, import_crypto.keyToImplicitAddress)(publicKey.toString());
1030
1038
  } catch {
1031
1039
  return null;
1032
1040
  }
@@ -1036,14 +1044,7 @@ var WarpNearWallet = class {
1036
1044
  const seed = bip39.mnemonicToSeedSync(mnemonic);
1037
1045
  const keyPair = import_near_api_js4.KeyPair.fromRandom("ed25519");
1038
1046
  const publicKey = keyPair.getPublicKey();
1039
- return publicKey.toString().split(":")[1] || publicKey.toString();
1040
- }
1041
- const wallet = this.config.user?.wallets?.[this.chain.name];
1042
- if (wallet && typeof wallet === "object" && "address" in wallet) {
1043
- return wallet.address;
1044
- }
1045
- if (wallet && typeof wallet === "string") {
1046
- return wallet;
1047
+ return (0, import_crypto.keyToImplicitAddress)(publicKey.toString());
1047
1048
  }
1048
1049
  return null;
1049
1050
  } catch {
@@ -1113,7 +1114,7 @@ var NativeTokenNear = {
1113
1114
  symbol: "NEAR",
1114
1115
  name: "NEAR",
1115
1116
  decimals: 24,
1116
- logoUrl: "https://vleap.ai/images/tokens/near.svg"
1117
+ logoUrl: "https://joai.ai/images/tokens/near-black.svg"
1117
1118
  };
1118
1119
  var getNearAdapter = createNearAdapter("near", {
1119
1120
  mainnet: {
@@ -1123,7 +1124,7 @@ var getNearAdapter = createNearAdapter("near", {
1123
1124
  blockTime: 1200,
1124
1125
  addressHrp: "",
1125
1126
  defaultApiUrl: "https://rpc.mainnet.near.org",
1126
- logoUrl: "https://vleap.ai/images/chains/near.svg",
1127
+ logoUrl: "https://joai.ai/images/chains/near-black.svg",
1127
1128
  nativeToken: NativeTokenNear
1128
1129
  },
1129
1130
  testnet: {
@@ -1133,7 +1134,7 @@ var getNearAdapter = createNearAdapter("near", {
1133
1134
  blockTime: 1200,
1134
1135
  addressHrp: "",
1135
1136
  defaultApiUrl: "https://rpc.testnet.near.org",
1136
- logoUrl: "https://vleap.ai/images/chains/near.svg",
1137
+ logoUrl: "https://joai.ai/images/chains/near-black.svg",
1137
1138
  nativeToken: NativeTokenNear
1138
1139
  },
1139
1140
  devnet: {
@@ -1143,7 +1144,7 @@ var getNearAdapter = createNearAdapter("near", {
1143
1144
  blockTime: 1200,
1144
1145
  addressHrp: "",
1145
1146
  defaultApiUrl: "https://rpc.testnet.near.org",
1146
- logoUrl: "https://vleap.ai/images/chains/near.svg",
1147
+ logoUrl: "https://joai.ai/images/chains/near-black.svg",
1147
1148
  nativeToken: NativeTokenNear
1148
1149
  }
1149
1150
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/WarpNearDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/WarpNearExecutor.ts","../src/WarpNearOutput.ts","../src/WarpNearSerializer.ts","../src/WarpNearExplorer.ts","../src/WarpNearWallet.ts","../src/chains/common.ts","../src/chains/near.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './main'\nexport * from './tokens'\nexport * from './WarpNearDataLoader'\nexport * from './WarpNearExecutor'\nexport * from './WarpNearExplorer'\nexport * from './WarpNearOutput'\nexport * from './WarpNearSerializer'\nexport * from './WarpNearWallet'\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\nexport class WarpNearDataLoader implements AdapterWarpDataLoader {\n private cache: WarpCache\n private nearConfig: any\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.cache = new WarpCache(config.cache?.type)\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(address)\n const balance = await account.getAccountBalance()\n const balanceBigInt = BigInt(balance.total)\n\n return {\n chain: this.chain.name,\n address,\n balance: balanceBigInt,\n }\n } catch (error) {\n throw new Error(`Failed to get account: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const account = await this.getAccount(address)\n const assets: WarpChainAsset[] = account.balance > 0n ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownTokens = getKnownTokensForChain(this.chain.name, env)\n\n for (const token of knownTokens) {\n try {\n const near = await connect(this.nearConfig)\n const accountObj = await near.account(address)\n const balance = await accountObj.viewFunction({\n contractId: token.identifier,\n methodName: 'ft_balance_of',\n args: { account_id: address },\n })\n if (balance && BigInt(balance) > 0n) {\n assets.push({\n ...token,\n amount: BigInt(balance),\n })\n }\n } catch {\n // Token contract might not exist or method might not be available\n }\n }\n\n return assets\n } catch (error) {\n return []\n }\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier || identifier === WarpNearConstants.NativeToken.Identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownToken = findKnownTokenById(this.chain.name, env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(identifier)\n const metadata = await account.viewFunction({\n contractId: identifier,\n methodName: 'ft_metadata',\n args: {},\n })\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name || 'Unknown Token',\n symbol: metadata.symbol || 'UNKNOWN',\n amount: 0n,\n decimals: metadata.decimals || WarpNearConstants.NativeToken.Decimals,\n logoUrl: metadata.icon || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch {\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n amount: 0n,\n decimals: WarpNearConstants.NativeToken.Decimals,\n logoUrl: '',\n }\n\n return asset\n }\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(identifier, this.nearConfig.networkId)\n\n if (!txStatus) return null\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const status = isSuccess ? 'success' : 'failed'\n const transaction = txStatus.transaction\n const receipt = txStatus.receipts?.[0]\n\n const sender = transaction.signer_id\n const receiver = transaction.receiver_id\n const value = transaction.actions?.[0]?.Transfer?.deposit ? BigInt(transaction.actions[0].Transfer.deposit) : 0n\n\n return {\n chain: this.chain.name,\n id: identifier,\n receiver,\n sender,\n value,\n function: transaction.actions?.[0]?.FunctionCall?.method_name || 'transfer',\n status,\n createdAt: new Date().toISOString(),\n error: status === 'failed' ? JSON.stringify(txStatus.status) : null,\n tx: txStatus as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n}\n","export const WarpNearConstants = {\n NativeToken: {\n Identifier: 'NEAR',\n Decimals: 24,\n },\n Gas: {\n Default: '300000000000000',\n Transfer: '100000000000000',\n FunctionCall: '300000000000000',\n },\n}\n\nexport enum NearExplorers {\n NearExplorer = 'near_explorer',\n NearBlocks = 'near_blocks',\n NearScan = 'nearscan',\n}\n\nexport type ExplorerName = NearExplorers\n\nexport const NearExplorerMap = {\n near: {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [NearExplorers.NearExplorer]: 'https://explorer.near.org',\n [NearExplorers.NearBlocks]: 'https://nearblocks.io',\n [NearExplorers.NearScan]: 'https://nearscan.io',\n}\n\nexport const NearExplorerNames = {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n} as const\n\nexport const NearExplorerUrls: Record<ExplorerName, string> = ExplorerUrls\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\n\nexport const NearTokens: WarpChainAsset[] = []\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n near: {\n mainnet: NearTokens,\n testnet: NearTokens,\n devnet: NearTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyOutputToMessages,\n extractResolvedInputValues,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecutionResult,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { WarpNearOutput } from './WarpNearOutput'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly output: WarpNearOutput\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.output = new WarpNearOutput(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<any> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: any | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpNearExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createTransfer - user address not set')\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const amount = executable.value > 0n ? executable.value : 0n\n const amountInYoctoNear = amount.toString()\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: amountInYoctoNear,\n },\n },\n ],\n }\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpNearExecutor: Contract action must have a function name')\n if (!executable.destination) throw new Error('WarpNearExecutor: Contract address is required')\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const gas = WarpNearConstants.Gas.FunctionCall\n const deposit = executable.value > 0n ? executable.value.toString() : '0'\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: action.func,\n args,\n gas,\n deposit,\n },\n },\n ],\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpNearExecutor: Failed to create contract call: ${errorMessage}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<any> {\n if (executable.transfers.length === 0) throw new Error('WarpNearExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpNearExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier === this.chain.nativeToken!.identifier || transfer.identifier === WarpNearConstants.NativeToken.Identifier\n )\n const ftTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier !== this.chain.nativeToken!.identifier && transfer.identifier !== WarpNearConstants.NativeToken.Identifier\n )\n\n if (nativeTokenTransfers.length === 1 && ftTokenTransfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n if (transfer.amount <= 0n) throw new Error('WarpNearExecutor: Native token transfer amount must be positive')\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: transfer.amount.toString(),\n },\n },\n ],\n }\n }\n\n if (nativeTokenTransfers.length === 0 && ftTokenTransfers.length === 1) {\n return this.createSingleTokenTransfer(executable, ftTokenTransfers[0])\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpNearExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpNearExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(executable: WarpExecutable, transfer: WarpChainAssetValue): Promise<any> {\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: User wallet not set')\n\n const args = {\n receiver_id: executable.destination,\n amount: transfer.amount.toString(),\n }\n\n return {\n receiverId: transfer.identifier,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer',\n args,\n gas: WarpNearConstants.Gas.FunctionCall,\n deposit: '1',\n },\n },\n ],\n }\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecutionResult> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpNearExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpNearExecutor: Query action must have a function name')\n\n let queryAddress: string\n try {\n if (!executable.destination) throw new Error('WarpNearExecutor: Query address is required')\n queryAddress = executable.destination\n } catch {\n throw new Error(`WarpNearExecutor: Invalid address for query: ${executable.destination}`)\n }\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const near = await connect(this.nearConfig)\n const account = await near.account(queryAddress)\n const result = await account.viewFunction({\n contractId: queryAddress,\n methodName: action.func,\n args,\n })\n\n const { values, output } = await this.output.extractQueryOutput(\n executable.warp,\n Array.isArray(result) ? result : [result],\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, output)\n\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'success',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n output: { ...output, _DATA: result },\n messages: applyOutputToMessages(executable.warp, output, this.config),\n destination,\n resolvedInputs,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'error',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: { _DATA: errorMessage, _ERROR: errorMessage },\n messages: {},\n destination,\n resolvedInputs,\n }\n }\n }\n}\n","import {\n AdapterWarpOutput,\n evaluateOutputCommon,\n extractResolvedInputValues,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseOutputOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecutionResult,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpCache,\n WarpCacheKey,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionOutput,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearOutput implements AdapterWarpOutput {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.cache = new WarpCache(config.cache?.type)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecutionResult> {\n const inputs: ResolvedInput[] = this.cache.get(WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || '', actionIndex)) ?? []\n const resolvedInputs = extractResolvedInputValues(inputs)\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction, resolvedInputs)\n }\n\n if (typeof tx === 'string') {\n return this.handleTransactionHash(warp, actionIndex, tx, resolvedInputs)\n }\n\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex, resolvedInputs: string[] = []): WarpActionExecutionResult {\n return {\n status: 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private handleWarpChainAction(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpChainAction,\n resolvedInputs: string[] = []\n ): WarpActionExecutionResult {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n\n const rawValues = [transactionHash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleTransactionHash(\n warp: Warp,\n actionIndex: WarpActionIndex,\n hash: string,\n resolvedInputs: string[] = []\n ): Promise<WarpActionExecutionResult> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(hash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n const statusObj = txStatus.status as any\n const success = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const transaction = txStatus.transaction\n\n const rawValues = [hash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: hash,\n tx: {\n hash,\n transaction,\n status: txStatus.status,\n } as any,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n } catch (error) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n }\n\n async extractQueryOutput(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[]; mapped: Record<string, any> }; output: WarpExecutionOutput }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues, mapped: {} }\n let output: WarpExecutionOutput = {}\n\n if (!warp.output) return { values, output }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.output)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseOutputOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n output[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n output[key] = getNestedValue(path) || null\n } else {\n output[key] = path\n }\n }\n\n return { values, output: await evaluateOutputCommon(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return { status: 'pending' }\n }\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n return {\n status: isSuccess ? 'confirmed' : 'failed',\n blockNumber: (txStatus.transaction_outcome as any)?.block_hash ? 0 : undefined,\n gasUsed: BigInt(0),\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<any> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return null\n }\n\n return {\n hash: txHash,\n transaction: txStatus.transaction,\n status: txStatus.status as any,\n }\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\n\nexport class WarpNearSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (value.endsWith('.near') || (value.length > 2 && value.length < 65 && /^[a-z0-9._-]+$/.test(value) && !value.includes(' '))) {\n return `address:${value}`\n }\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (value instanceof Uint8Array) {\n return `hex:${Buffer.from(value).toString('hex')}`\n }\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n const asset = value as { identifier: string; amount: bigint; decimals?: number }\n if (asset.decimals !== undefined) {\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${WarpConstants.ArgCompositeSeparator}${asset.decimals}`\n }\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n case 'asset':\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n return value\n }\n return value\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n case 'asset':\n const assetParts = stringValue.split(WarpConstants.ArgCompositeSeparator)\n const identifier = assetParts[0] || ''\n const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n\n const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : undefined\n return { identifier, amount, decimals }\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ExplorerName, NearExplorerNames, NearExplorers, NearExplorerUrls } from './constants'\n\nexport class WarpNearExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const explorers = NearExplorerNames[this.config.env]\n if (!explorers) {\n return [NearExplorers.NearExplorer as ExplorerName]\n }\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = NearExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = NearExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = NearExplorerUrls[primaryExplorer]\n return url || NearExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/transactions/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/blocks/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/tokens/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/transactions/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/tokens/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/blocks/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { connect, KeyPair, keyStores } from 'near-api-js'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.signature) {\n return tx\n }\n\n const signedTx = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return {\n ...tx,\n signature: signedTx.transaction.hash,\n transactionHash: signedTx.transaction.hash,\n }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const keyPair = this.getKeyPair()\n const messageBytes = new TextEncoder().encode(message)\n const signature = keyPair.sign(messageBytes)\n return bs58.encode(signature.signature)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = publicKey.toString().split(':')[1] || publicKey.toString()\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = publicKey.toString().split(':')[1] || publicKey.toString()\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n getAddress(): string | null {\n try {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n const keyPair = KeyPair.fromString(privateKey as any)\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString().split(':')[1] || publicKey.toString()\n } catch {\n return null\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString().split(':')[1] || publicKey.toString()\n }\n\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (wallet && typeof wallet === 'object' && 'address' in wallet) {\n return wallet.address\n }\n if (wallet && typeof wallet === 'string') {\n return wallet\n }\n\n return null\n } catch {\n return null\n }\n }\n\n getPublicKey(): string | null {\n try {\n const keyPair = this.getKeyPair()\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString()\n } catch {\n return null\n }\n }\n\n private getKeyPair(): KeyPair {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n try {\n return KeyPair.fromString(privateKey as any)\n } catch {\n // If fromString fails, generate a new keypair\n }\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid private key format: ${error.message}`)\n }\n throw new Error('Invalid private key format')\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n }\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpNearDataLoader } from '../WarpNearDataLoader'\nimport { WarpNearExecutor } from '../WarpNearExecutor'\nimport { WarpNearExplorer } from '../WarpNearExplorer'\nimport { WarpNearOutput } from '../WarpNearOutput'\nimport { WarpNearSerializer } from '../WarpNearSerializer'\nimport { WarpNearWallet } from '../WarpNearWallet'\n\nexport const createNearAdapter = (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpNearExecutor(config, chainInfos[config.env]),\n output: new WarpNearOutput(config, chainInfos[config.env]),\n serializer: new WarpNearSerializer(),\n registry: fallback.registry,\n explorer: new WarpNearExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpNearDataLoader(config, chainInfos[config.env]),\n wallet: new WarpNearWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createNearAdapter } from './common'\n\nexport const NativeTokenNear: WarpChainAsset = {\n chain: 'near' as WarpChainName,\n identifier: 'NEAR',\n symbol: 'NEAR',\n name: 'NEAR',\n decimals: 24,\n logoUrl: 'https://vleap.ai/images/tokens/near.svg',\n}\n\nexport const getNearAdapter: AdapterFactory = createNearAdapter('near' as WarpChain, {\n mainnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Mainnet',\n chainId: 'mainnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.mainnet.near.org',\n logoUrl: 'https://vleap.ai/images/chains/near.svg',\n nativeToken: NativeTokenNear,\n },\n testnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Testnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://vleap.ai/images/chains/near.svg',\n nativeToken: NativeTokenNear,\n },\n devnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Devnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://vleap.ai/images/chains/near.svg',\n nativeToken: NativeTokenNear,\n },\n})\n"],"mappings":"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","names":["NearExplorers","import_warps","import_near_api_js","import_warps","import_near_api_js","import_warps","url","import_warps","import_near_api_js","bs58"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/WarpNearDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/WarpNearExecutor.ts","../src/WarpNearOutput.ts","../src/WarpNearSerializer.ts","../src/WarpNearExplorer.ts","../src/WarpNearWallet.ts","../src/chains/common.ts","../src/chains/near.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './main'\nexport * from './tokens'\nexport * from './WarpNearDataLoader'\nexport * from './WarpNearExecutor'\nexport * from './WarpNearExplorer'\nexport * from './WarpNearOutput'\nexport * from './WarpNearSerializer'\nexport * from './WarpNearWallet'\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\nexport class WarpNearDataLoader implements AdapterWarpDataLoader {\n private cache: WarpCache\n private nearConfig: any\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.cache = new WarpCache(config.cache?.type)\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(address)\n const balance = await account.getAccountBalance()\n const balanceBigInt = BigInt(balance.total)\n\n return {\n chain: this.chain.name,\n address,\n balance: balanceBigInt,\n }\n } catch (error) {\n throw new Error(`Failed to get account: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const account = await this.getAccount(address)\n const assets: WarpChainAsset[] = account.balance > 0n ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownTokens = getKnownTokensForChain(this.chain.name, env)\n\n for (const token of knownTokens) {\n try {\n const near = await connect(this.nearConfig)\n const accountObj = await near.account(address)\n const balance = await accountObj.viewFunction({\n contractId: token.identifier,\n methodName: 'ft_balance_of',\n args: { account_id: address },\n })\n if (balance && BigInt(balance) > 0n) {\n assets.push({\n ...token,\n amount: BigInt(balance),\n })\n }\n } catch {\n // Token contract might not exist or method might not be available\n }\n }\n\n return assets\n } catch (error) {\n return []\n }\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier || identifier === WarpNearConstants.NativeToken.Identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownToken = findKnownTokenById(this.chain.name, env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(identifier)\n const metadata = await account.viewFunction({\n contractId: identifier,\n methodName: 'ft_metadata',\n args: {},\n })\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name || 'Unknown Token',\n symbol: metadata.symbol || 'UNKNOWN',\n amount: 0n,\n decimals: metadata.decimals || WarpNearConstants.NativeToken.Decimals,\n logoUrl: metadata.icon || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch {\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n amount: 0n,\n decimals: WarpNearConstants.NativeToken.Decimals,\n logoUrl: '',\n }\n\n return asset\n }\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(identifier, this.nearConfig.networkId)\n\n if (!txStatus) return null\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const status = isSuccess ? 'success' : 'failed'\n const transaction = txStatus.transaction\n const receipt = txStatus.receipts?.[0]\n\n const sender = transaction.signer_id\n const receiver = transaction.receiver_id\n const value = transaction.actions?.[0]?.Transfer?.deposit ? BigInt(transaction.actions[0].Transfer.deposit) : 0n\n\n return {\n chain: this.chain.name,\n id: identifier,\n receiver,\n sender,\n value,\n function: transaction.actions?.[0]?.FunctionCall?.method_name || 'transfer',\n status,\n createdAt: new Date().toISOString(),\n error: status === 'failed' ? JSON.stringify(txStatus.status) : null,\n tx: txStatus as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n}\n","export const WarpNearConstants = {\n NativeToken: {\n Identifier: 'NEAR',\n Decimals: 24,\n },\n Gas: {\n Default: '300000000000000',\n Transfer: '100000000000000',\n FunctionCall: '300000000000000',\n },\n}\n\nexport enum NearExplorers {\n NearExplorer = 'near_explorer',\n NearBlocks = 'near_blocks',\n NearScan = 'nearscan',\n}\n\nexport type ExplorerName = NearExplorers\n\nexport const NearExplorerMap = {\n near: {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [NearExplorers.NearExplorer]: 'https://explorer.near.org',\n [NearExplorers.NearBlocks]: 'https://nearblocks.io',\n [NearExplorers.NearScan]: 'https://nearscan.io',\n}\n\nexport const NearExplorerNames = {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n} as const\n\nexport const NearExplorerUrls: Record<ExplorerName, string> = ExplorerUrls\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\n\nexport const NearTokens: WarpChainAsset[] = []\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n near: {\n mainnet: NearTokens,\n testnet: NearTokens,\n devnet: NearTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyOutputToMessages,\n extractResolvedInputValues,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecutionResult,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { WarpNearOutput } from './WarpNearOutput'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly output: WarpNearOutput\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.output = new WarpNearOutput(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<any> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: any | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpNearExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createTransfer - user address not set')\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const amount = executable.value > 0n ? executable.value : 0n\n const amountInYoctoNear = amount.toString()\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: amountInYoctoNear,\n },\n },\n ],\n }\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpNearExecutor: Contract action must have a function name')\n if (!executable.destination) throw new Error('WarpNearExecutor: Contract address is required')\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const gas = WarpNearConstants.Gas.FunctionCall\n const deposit = executable.value > 0n ? executable.value.toString() : '0'\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: action.func,\n args,\n gas,\n deposit,\n },\n },\n ],\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpNearExecutor: Failed to create contract call: ${errorMessage}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<any> {\n if (executable.transfers.length === 0) throw new Error('WarpNearExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpNearExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier === this.chain.nativeToken!.identifier || transfer.identifier === WarpNearConstants.NativeToken.Identifier\n )\n const ftTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier !== this.chain.nativeToken!.identifier && transfer.identifier !== WarpNearConstants.NativeToken.Identifier\n )\n\n if (nativeTokenTransfers.length === 1 && ftTokenTransfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n if (transfer.amount <= 0n) throw new Error('WarpNearExecutor: Native token transfer amount must be positive')\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: transfer.amount.toString(),\n },\n },\n ],\n }\n }\n\n if (nativeTokenTransfers.length === 0 && ftTokenTransfers.length === 1) {\n return this.createSingleTokenTransfer(executable, ftTokenTransfers[0])\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpNearExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpNearExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(executable: WarpExecutable, transfer: WarpChainAssetValue): Promise<any> {\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: User wallet not set')\n\n const args = {\n receiver_id: executable.destination,\n amount: transfer.amount.toString(),\n }\n\n return {\n receiverId: transfer.identifier,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer',\n args,\n gas: WarpNearConstants.Gas.FunctionCall,\n deposit: '1',\n },\n },\n ],\n }\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecutionResult> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpNearExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpNearExecutor: Query action must have a function name')\n\n let queryAddress: string\n try {\n if (!executable.destination) throw new Error('WarpNearExecutor: Query address is required')\n queryAddress = executable.destination\n } catch {\n throw new Error(`WarpNearExecutor: Invalid address for query: ${executable.destination}`)\n }\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const near = await connect(this.nearConfig)\n const account = await near.account(queryAddress)\n const result = await account.viewFunction({\n contractId: queryAddress,\n methodName: action.func,\n args,\n })\n\n const { values, output } = await this.output.extractQueryOutput(\n executable.warp,\n Array.isArray(result) ? result : [result],\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, output)\n\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'success',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n output: { ...output, _DATA: result },\n messages: applyOutputToMessages(executable.warp, output, this.config),\n destination,\n resolvedInputs,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'error',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: { _DATA: errorMessage, _ERROR: errorMessage },\n messages: {},\n destination,\n resolvedInputs,\n }\n }\n }\n}\n","import {\n AdapterWarpOutput,\n evaluateOutputCommon,\n extractResolvedInputValues,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseOutputOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecutionResult,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpCache,\n WarpCacheKey,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionOutput,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearOutput implements AdapterWarpOutput {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.cache = new WarpCache(config.cache?.type)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecutionResult> {\n const inputs: ResolvedInput[] = this.cache.get(WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || '', actionIndex)) ?? []\n const resolvedInputs = extractResolvedInputValues(inputs)\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction, resolvedInputs)\n }\n\n if (typeof tx === 'string') {\n return this.handleTransactionHash(warp, actionIndex, tx, resolvedInputs)\n }\n\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex, resolvedInputs: string[] = []): WarpActionExecutionResult {\n return {\n status: 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private handleWarpChainAction(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpChainAction,\n resolvedInputs: string[] = []\n ): WarpActionExecutionResult {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n\n const rawValues = [transactionHash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleTransactionHash(\n warp: Warp,\n actionIndex: WarpActionIndex,\n hash: string,\n resolvedInputs: string[] = []\n ): Promise<WarpActionExecutionResult> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(hash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n const statusObj = txStatus.status as any\n const success = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const transaction = txStatus.transaction\n\n const rawValues = [hash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: hash,\n tx: {\n hash,\n transaction,\n status: txStatus.status,\n } as any,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n } catch (error) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n }\n\n async extractQueryOutput(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[]; mapped: Record<string, any> }; output: WarpExecutionOutput }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues, mapped: {} }\n let output: WarpExecutionOutput = {}\n\n if (!warp.output) return { values, output }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.output)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseOutputOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n output[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n output[key] = getNestedValue(path) || null\n } else {\n output[key] = path\n }\n }\n\n return { values, output: await evaluateOutputCommon(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return { status: 'pending' }\n }\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n return {\n status: isSuccess ? 'confirmed' : 'failed',\n blockNumber: (txStatus.transaction_outcome as any)?.block_hash ? 0 : undefined,\n gasUsed: BigInt(0),\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<any> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return null\n }\n\n return {\n hash: txHash,\n transaction: txStatus.transaction,\n status: txStatus.status as any,\n }\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\n\nexport class WarpNearSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (value.endsWith('.near') || (value.length > 2 && value.length < 65 && /^[a-z0-9._-]+$/.test(value) && !value.includes(' '))) {\n return `address:${value}`\n }\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (value instanceof Uint8Array) {\n return `hex:${Buffer.from(value).toString('hex')}`\n }\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n const asset = value as { identifier: string; amount: bigint; decimals?: number }\n if (asset.decimals !== undefined) {\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${WarpConstants.ArgCompositeSeparator}${asset.decimals}`\n }\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n case 'asset':\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n return value\n }\n return value\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n case 'asset':\n const assetParts = stringValue.split(WarpConstants.ArgCompositeSeparator)\n const identifier = assetParts[0] || ''\n const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n\n const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : undefined\n return { identifier, amount, decimals }\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ExplorerName, NearExplorerNames, NearExplorers, NearExplorerUrls } from './constants'\n\nexport class WarpNearExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const explorers = NearExplorerNames[this.config.env]\n if (!explorers) {\n return [NearExplorers.NearExplorer as ExplorerName]\n }\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = NearExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = NearExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = NearExplorerUrls[primaryExplorer]\n return url || NearExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/transactions/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/blocks/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/tokens/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/transactions/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/tokens/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/blocks/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { connect, KeyPair, keyStores } from 'near-api-js'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.signature) {\n return tx\n }\n\n const signedTx = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return {\n ...tx,\n signature: signedTx.transaction.hash,\n transactionHash: signedTx.transaction.hash,\n }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const keyPair = this.getKeyPair()\n const messageBytes = new TextEncoder().encode(message)\n const signature = keyPair.sign(messageBytes)\n return bs58.encode(signature.signature)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n getAddress(): string | null {\n try {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (wallet && typeof wallet === 'object' && 'address' in wallet) {\n return wallet.address\n }\n if (wallet && typeof wallet === 'string') {\n return wallet\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n const keyPair = KeyPair.fromString(privateKey as any)\n const publicKey = keyPair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n }\n\n return null\n } catch {\n return null\n }\n }\n\n getPublicKey(): string | null {\n try {\n const keyPair = this.getKeyPair()\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString()\n } catch {\n return null\n }\n }\n\n private getKeyPair(): KeyPair {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n try {\n return KeyPair.fromString(privateKey as any)\n } catch {\n // If fromString fails, generate a new keypair\n }\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid private key format: ${error.message}`)\n }\n throw new Error('Invalid private key format')\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n }\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpNearDataLoader } from '../WarpNearDataLoader'\nimport { WarpNearExecutor } from '../WarpNearExecutor'\nimport { WarpNearExplorer } from '../WarpNearExplorer'\nimport { WarpNearOutput } from '../WarpNearOutput'\nimport { WarpNearSerializer } from '../WarpNearSerializer'\nimport { WarpNearWallet } from '../WarpNearWallet'\n\nexport const createNearAdapter = (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpNearExecutor(config, chainInfos[config.env]),\n output: new WarpNearOutput(config, chainInfos[config.env]),\n serializer: new WarpNearSerializer(),\n registry: fallback.registry,\n explorer: new WarpNearExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpNearDataLoader(config, chainInfos[config.env]),\n wallet: new WarpNearWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createNearAdapter } from './common'\n\nexport const NativeTokenNear: WarpChainAsset = {\n chain: 'near' as WarpChainName,\n identifier: 'NEAR',\n symbol: 'NEAR',\n name: 'NEAR',\n decimals: 24,\n logoUrl: 'https://joai.ai/images/tokens/near-black.svg',\n}\n\nexport const getNearAdapter: AdapterFactory = createNearAdapter('near' as WarpChain, {\n mainnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Mainnet',\n chainId: 'mainnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.mainnet.near.org',\n logoUrl: 'https://joai.ai/images/chains/near-black.svg',\n nativeToken: NativeTokenNear,\n },\n testnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Testnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://joai.ai/images/chains/near-black.svg',\n nativeToken: NativeTokenNear,\n },\n devnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Devnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://joai.ai/images/chains/near-black.svg',\n nativeToken: NativeTokenNear,\n },\n})\n"],"mappings":"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","names":["NearExplorers","import_warps","import_near_api_js","import_warps","import_near_api_js","import_warps","url","import_warps","import_near_api_js","bs58"]}
package/dist/index.mjs CHANGED
@@ -900,6 +900,7 @@ var WarpNearExplorer = class {
900
900
  };
901
901
 
902
902
  // src/WarpNearWallet.ts
903
+ import { keyToImplicitAddress } from "@near-js/crypto";
903
904
  import * as bip39 from "@scure/bip39";
904
905
  import { wordlist } from "@scure/bip39/wordlists/english.js";
905
906
  import {
@@ -975,7 +976,7 @@ var WarpNearWallet = class {
975
976
  const seed = bip39.mnemonicToSeedSync(mnemonic);
976
977
  const keyPair = KeyPair.fromRandom("ed25519");
977
978
  const publicKey = keyPair.getPublicKey();
978
- const accountId = publicKey.toString().split(":")[1] || publicKey.toString();
979
+ const accountId = keyToImplicitAddress(publicKey.toString());
979
980
  return {
980
981
  address: accountId,
981
982
  privateKey: keyPair.toString(),
@@ -987,7 +988,7 @@ var WarpNearWallet = class {
987
988
  const seed = bip39.mnemonicToSeedSync(mnemonic);
988
989
  const keyPair = KeyPair.fromRandom("ed25519");
989
990
  const publicKey = keyPair.getPublicKey();
990
- const accountId = publicKey.toString().split(":")[1] || publicKey.toString();
991
+ const accountId = keyToImplicitAddress(publicKey.toString());
991
992
  return {
992
993
  address: accountId,
993
994
  privateKey: keyPair.toString(),
@@ -996,12 +997,19 @@ var WarpNearWallet = class {
996
997
  }
997
998
  getAddress() {
998
999
  try {
1000
+ const wallet = this.config.user?.wallets?.[this.chain.name];
1001
+ if (wallet && typeof wallet === "object" && "address" in wallet) {
1002
+ return wallet.address;
1003
+ }
1004
+ if (wallet && typeof wallet === "string") {
1005
+ return wallet;
1006
+ }
999
1007
  const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name);
1000
1008
  if (privateKey) {
1001
1009
  try {
1002
1010
  const keyPair = KeyPair.fromString(privateKey);
1003
1011
  const publicKey = keyPair.getPublicKey();
1004
- return publicKey.toString().split(":")[1] || publicKey.toString();
1012
+ return keyToImplicitAddress(publicKey.toString());
1005
1013
  } catch {
1006
1014
  return null;
1007
1015
  }
@@ -1011,14 +1019,7 @@ var WarpNearWallet = class {
1011
1019
  const seed = bip39.mnemonicToSeedSync(mnemonic);
1012
1020
  const keyPair = KeyPair.fromRandom("ed25519");
1013
1021
  const publicKey = keyPair.getPublicKey();
1014
- return publicKey.toString().split(":")[1] || publicKey.toString();
1015
- }
1016
- const wallet = this.config.user?.wallets?.[this.chain.name];
1017
- if (wallet && typeof wallet === "object" && "address" in wallet) {
1018
- return wallet.address;
1019
- }
1020
- if (wallet && typeof wallet === "string") {
1021
- return wallet;
1022
+ return keyToImplicitAddress(publicKey.toString());
1022
1023
  }
1023
1024
  return null;
1024
1025
  } catch {
@@ -1088,7 +1089,7 @@ var NativeTokenNear = {
1088
1089
  symbol: "NEAR",
1089
1090
  name: "NEAR",
1090
1091
  decimals: 24,
1091
- logoUrl: "https://vleap.ai/images/tokens/near.svg"
1092
+ logoUrl: "https://joai.ai/images/tokens/near-black.svg"
1092
1093
  };
1093
1094
  var getNearAdapter = createNearAdapter("near", {
1094
1095
  mainnet: {
@@ -1098,7 +1099,7 @@ var getNearAdapter = createNearAdapter("near", {
1098
1099
  blockTime: 1200,
1099
1100
  addressHrp: "",
1100
1101
  defaultApiUrl: "https://rpc.mainnet.near.org",
1101
- logoUrl: "https://vleap.ai/images/chains/near.svg",
1102
+ logoUrl: "https://joai.ai/images/chains/near-black.svg",
1102
1103
  nativeToken: NativeTokenNear
1103
1104
  },
1104
1105
  testnet: {
@@ -1108,7 +1109,7 @@ var getNearAdapter = createNearAdapter("near", {
1108
1109
  blockTime: 1200,
1109
1110
  addressHrp: "",
1110
1111
  defaultApiUrl: "https://rpc.testnet.near.org",
1111
- logoUrl: "https://vleap.ai/images/chains/near.svg",
1112
+ logoUrl: "https://joai.ai/images/chains/near-black.svg",
1112
1113
  nativeToken: NativeTokenNear
1113
1114
  },
1114
1115
  devnet: {
@@ -1118,7 +1119,7 @@ var getNearAdapter = createNearAdapter("near", {
1118
1119
  blockTime: 1200,
1119
1120
  addressHrp: "",
1120
1121
  defaultApiUrl: "https://rpc.testnet.near.org",
1121
- logoUrl: "https://vleap.ai/images/chains/near.svg",
1122
+ logoUrl: "https://joai.ai/images/chains/near-black.svg",
1122
1123
  nativeToken: NativeTokenNear
1123
1124
  }
1124
1125
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/WarpNearDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/WarpNearExecutor.ts","../src/WarpNearOutput.ts","../src/WarpNearSerializer.ts","../src/WarpNearExplorer.ts","../src/WarpNearWallet.ts","../src/chains/common.ts","../src/chains/near.ts"],"sourcesContent":["import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\nexport class WarpNearDataLoader implements AdapterWarpDataLoader {\n private cache: WarpCache\n private nearConfig: any\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.cache = new WarpCache(config.cache?.type)\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(address)\n const balance = await account.getAccountBalance()\n const balanceBigInt = BigInt(balance.total)\n\n return {\n chain: this.chain.name,\n address,\n balance: balanceBigInt,\n }\n } catch (error) {\n throw new Error(`Failed to get account: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const account = await this.getAccount(address)\n const assets: WarpChainAsset[] = account.balance > 0n ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownTokens = getKnownTokensForChain(this.chain.name, env)\n\n for (const token of knownTokens) {\n try {\n const near = await connect(this.nearConfig)\n const accountObj = await near.account(address)\n const balance = await accountObj.viewFunction({\n contractId: token.identifier,\n methodName: 'ft_balance_of',\n args: { account_id: address },\n })\n if (balance && BigInt(balance) > 0n) {\n assets.push({\n ...token,\n amount: BigInt(balance),\n })\n }\n } catch {\n // Token contract might not exist or method might not be available\n }\n }\n\n return assets\n } catch (error) {\n return []\n }\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier || identifier === WarpNearConstants.NativeToken.Identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownToken = findKnownTokenById(this.chain.name, env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(identifier)\n const metadata = await account.viewFunction({\n contractId: identifier,\n methodName: 'ft_metadata',\n args: {},\n })\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name || 'Unknown Token',\n symbol: metadata.symbol || 'UNKNOWN',\n amount: 0n,\n decimals: metadata.decimals || WarpNearConstants.NativeToken.Decimals,\n logoUrl: metadata.icon || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch {\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n amount: 0n,\n decimals: WarpNearConstants.NativeToken.Decimals,\n logoUrl: '',\n }\n\n return asset\n }\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(identifier, this.nearConfig.networkId)\n\n if (!txStatus) return null\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const status = isSuccess ? 'success' : 'failed'\n const transaction = txStatus.transaction\n const receipt = txStatus.receipts?.[0]\n\n const sender = transaction.signer_id\n const receiver = transaction.receiver_id\n const value = transaction.actions?.[0]?.Transfer?.deposit ? BigInt(transaction.actions[0].Transfer.deposit) : 0n\n\n return {\n chain: this.chain.name,\n id: identifier,\n receiver,\n sender,\n value,\n function: transaction.actions?.[0]?.FunctionCall?.method_name || 'transfer',\n status,\n createdAt: new Date().toISOString(),\n error: status === 'failed' ? JSON.stringify(txStatus.status) : null,\n tx: txStatus as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n}\n","export const WarpNearConstants = {\n NativeToken: {\n Identifier: 'NEAR',\n Decimals: 24,\n },\n Gas: {\n Default: '300000000000000',\n Transfer: '100000000000000',\n FunctionCall: '300000000000000',\n },\n}\n\nexport enum NearExplorers {\n NearExplorer = 'near_explorer',\n NearBlocks = 'near_blocks',\n NearScan = 'nearscan',\n}\n\nexport type ExplorerName = NearExplorers\n\nexport const NearExplorerMap = {\n near: {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [NearExplorers.NearExplorer]: 'https://explorer.near.org',\n [NearExplorers.NearBlocks]: 'https://nearblocks.io',\n [NearExplorers.NearScan]: 'https://nearscan.io',\n}\n\nexport const NearExplorerNames = {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n} as const\n\nexport const NearExplorerUrls: Record<ExplorerName, string> = ExplorerUrls\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\n\nexport const NearTokens: WarpChainAsset[] = []\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n near: {\n mainnet: NearTokens,\n testnet: NearTokens,\n devnet: NearTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyOutputToMessages,\n extractResolvedInputValues,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecutionResult,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { WarpNearOutput } from './WarpNearOutput'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly output: WarpNearOutput\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.output = new WarpNearOutput(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<any> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: any | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpNearExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createTransfer - user address not set')\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const amount = executable.value > 0n ? executable.value : 0n\n const amountInYoctoNear = amount.toString()\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: amountInYoctoNear,\n },\n },\n ],\n }\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpNearExecutor: Contract action must have a function name')\n if (!executable.destination) throw new Error('WarpNearExecutor: Contract address is required')\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const gas = WarpNearConstants.Gas.FunctionCall\n const deposit = executable.value > 0n ? executable.value.toString() : '0'\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: action.func,\n args,\n gas,\n deposit,\n },\n },\n ],\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpNearExecutor: Failed to create contract call: ${errorMessage}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<any> {\n if (executable.transfers.length === 0) throw new Error('WarpNearExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpNearExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier === this.chain.nativeToken!.identifier || transfer.identifier === WarpNearConstants.NativeToken.Identifier\n )\n const ftTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier !== this.chain.nativeToken!.identifier && transfer.identifier !== WarpNearConstants.NativeToken.Identifier\n )\n\n if (nativeTokenTransfers.length === 1 && ftTokenTransfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n if (transfer.amount <= 0n) throw new Error('WarpNearExecutor: Native token transfer amount must be positive')\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: transfer.amount.toString(),\n },\n },\n ],\n }\n }\n\n if (nativeTokenTransfers.length === 0 && ftTokenTransfers.length === 1) {\n return this.createSingleTokenTransfer(executable, ftTokenTransfers[0])\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpNearExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpNearExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(executable: WarpExecutable, transfer: WarpChainAssetValue): Promise<any> {\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: User wallet not set')\n\n const args = {\n receiver_id: executable.destination,\n amount: transfer.amount.toString(),\n }\n\n return {\n receiverId: transfer.identifier,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer',\n args,\n gas: WarpNearConstants.Gas.FunctionCall,\n deposit: '1',\n },\n },\n ],\n }\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecutionResult> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpNearExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpNearExecutor: Query action must have a function name')\n\n let queryAddress: string\n try {\n if (!executable.destination) throw new Error('WarpNearExecutor: Query address is required')\n queryAddress = executable.destination\n } catch {\n throw new Error(`WarpNearExecutor: Invalid address for query: ${executable.destination}`)\n }\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const near = await connect(this.nearConfig)\n const account = await near.account(queryAddress)\n const result = await account.viewFunction({\n contractId: queryAddress,\n methodName: action.func,\n args,\n })\n\n const { values, output } = await this.output.extractQueryOutput(\n executable.warp,\n Array.isArray(result) ? result : [result],\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, output)\n\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'success',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n output: { ...output, _DATA: result },\n messages: applyOutputToMessages(executable.warp, output, this.config),\n destination,\n resolvedInputs,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'error',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: { _DATA: errorMessage, _ERROR: errorMessage },\n messages: {},\n destination,\n resolvedInputs,\n }\n }\n }\n}\n","import {\n AdapterWarpOutput,\n evaluateOutputCommon,\n extractResolvedInputValues,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseOutputOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecutionResult,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpCache,\n WarpCacheKey,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionOutput,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearOutput implements AdapterWarpOutput {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.cache = new WarpCache(config.cache?.type)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecutionResult> {\n const inputs: ResolvedInput[] = this.cache.get(WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || '', actionIndex)) ?? []\n const resolvedInputs = extractResolvedInputValues(inputs)\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction, resolvedInputs)\n }\n\n if (typeof tx === 'string') {\n return this.handleTransactionHash(warp, actionIndex, tx, resolvedInputs)\n }\n\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex, resolvedInputs: string[] = []): WarpActionExecutionResult {\n return {\n status: 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private handleWarpChainAction(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpChainAction,\n resolvedInputs: string[] = []\n ): WarpActionExecutionResult {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n\n const rawValues = [transactionHash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleTransactionHash(\n warp: Warp,\n actionIndex: WarpActionIndex,\n hash: string,\n resolvedInputs: string[] = []\n ): Promise<WarpActionExecutionResult> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(hash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n const statusObj = txStatus.status as any\n const success = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const transaction = txStatus.transaction\n\n const rawValues = [hash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: hash,\n tx: {\n hash,\n transaction,\n status: txStatus.status,\n } as any,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n } catch (error) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n }\n\n async extractQueryOutput(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[]; mapped: Record<string, any> }; output: WarpExecutionOutput }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues, mapped: {} }\n let output: WarpExecutionOutput = {}\n\n if (!warp.output) return { values, output }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.output)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseOutputOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n output[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n output[key] = getNestedValue(path) || null\n } else {\n output[key] = path\n }\n }\n\n return { values, output: await evaluateOutputCommon(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return { status: 'pending' }\n }\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n return {\n status: isSuccess ? 'confirmed' : 'failed',\n blockNumber: (txStatus.transaction_outcome as any)?.block_hash ? 0 : undefined,\n gasUsed: BigInt(0),\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<any> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return null\n }\n\n return {\n hash: txHash,\n transaction: txStatus.transaction,\n status: txStatus.status as any,\n }\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\n\nexport class WarpNearSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (value.endsWith('.near') || (value.length > 2 && value.length < 65 && /^[a-z0-9._-]+$/.test(value) && !value.includes(' '))) {\n return `address:${value}`\n }\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (value instanceof Uint8Array) {\n return `hex:${Buffer.from(value).toString('hex')}`\n }\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n const asset = value as { identifier: string; amount: bigint; decimals?: number }\n if (asset.decimals !== undefined) {\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${WarpConstants.ArgCompositeSeparator}${asset.decimals}`\n }\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n case 'asset':\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n return value\n }\n return value\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n case 'asset':\n const assetParts = stringValue.split(WarpConstants.ArgCompositeSeparator)\n const identifier = assetParts[0] || ''\n const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n\n const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : undefined\n return { identifier, amount, decimals }\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ExplorerName, NearExplorerNames, NearExplorers, NearExplorerUrls } from './constants'\n\nexport class WarpNearExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const explorers = NearExplorerNames[this.config.env]\n if (!explorers) {\n return [NearExplorers.NearExplorer as ExplorerName]\n }\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = NearExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = NearExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = NearExplorerUrls[primaryExplorer]\n return url || NearExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/transactions/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/blocks/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/tokens/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/transactions/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/tokens/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/blocks/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { connect, KeyPair, keyStores } from 'near-api-js'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.signature) {\n return tx\n }\n\n const signedTx = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return {\n ...tx,\n signature: signedTx.transaction.hash,\n transactionHash: signedTx.transaction.hash,\n }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const keyPair = this.getKeyPair()\n const messageBytes = new TextEncoder().encode(message)\n const signature = keyPair.sign(messageBytes)\n return bs58.encode(signature.signature)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = publicKey.toString().split(':')[1] || publicKey.toString()\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = publicKey.toString().split(':')[1] || publicKey.toString()\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n getAddress(): string | null {\n try {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n const keyPair = KeyPair.fromString(privateKey as any)\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString().split(':')[1] || publicKey.toString()\n } catch {\n return null\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString().split(':')[1] || publicKey.toString()\n }\n\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (wallet && typeof wallet === 'object' && 'address' in wallet) {\n return wallet.address\n }\n if (wallet && typeof wallet === 'string') {\n return wallet\n }\n\n return null\n } catch {\n return null\n }\n }\n\n getPublicKey(): string | null {\n try {\n const keyPair = this.getKeyPair()\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString()\n } catch {\n return null\n }\n }\n\n private getKeyPair(): KeyPair {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n try {\n return KeyPair.fromString(privateKey as any)\n } catch {\n // If fromString fails, generate a new keypair\n }\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid private key format: ${error.message}`)\n }\n throw new Error('Invalid private key format')\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n }\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpNearDataLoader } from '../WarpNearDataLoader'\nimport { WarpNearExecutor } from '../WarpNearExecutor'\nimport { WarpNearExplorer } from '../WarpNearExplorer'\nimport { WarpNearOutput } from '../WarpNearOutput'\nimport { WarpNearSerializer } from '../WarpNearSerializer'\nimport { WarpNearWallet } from '../WarpNearWallet'\n\nexport const createNearAdapter = (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpNearExecutor(config, chainInfos[config.env]),\n output: new WarpNearOutput(config, chainInfos[config.env]),\n serializer: new WarpNearSerializer(),\n registry: fallback.registry,\n explorer: new WarpNearExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpNearDataLoader(config, chainInfos[config.env]),\n wallet: new WarpNearWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createNearAdapter } from './common'\n\nexport const NativeTokenNear: WarpChainAsset = {\n chain: 'near' as WarpChainName,\n identifier: 'NEAR',\n symbol: 'NEAR',\n name: 'NEAR',\n decimals: 24,\n logoUrl: 'https://vleap.ai/images/tokens/near.svg',\n}\n\nexport const getNearAdapter: AdapterFactory = createNearAdapter('near' as WarpChain, {\n mainnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Mainnet',\n chainId: 'mainnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.mainnet.near.org',\n logoUrl: 'https://vleap.ai/images/chains/near.svg',\n nativeToken: NativeTokenNear,\n },\n testnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Testnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://vleap.ai/images/chains/near.svg',\n nativeToken: NativeTokenNear,\n },\n devnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Devnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://vleap.ai/images/chains/near.svg',\n nativeToken: NativeTokenNear,\n },\n})\n"],"mappings":"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","names":["NearExplorers","extractResolvedInputValues","getProviderConfig","getWarpWalletAddressFromConfig","connect","keyStores","getProviderConfig","WarpCache","WarpCacheKey","WarpConstants","connect","keyStores","getProviderConfig","keyStores","WarpCache","WarpCacheKey","connect","WarpConstants","getProviderConfig","keyStores","getWarpWalletAddressFromConfig","connect","extractResolvedInputValues","url","getProviderConfig","connect","keyStores"]}
1
+ {"version":3,"sources":["../src/WarpNearDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/WarpNearExecutor.ts","../src/WarpNearOutput.ts","../src/WarpNearSerializer.ts","../src/WarpNearExplorer.ts","../src/WarpNearWallet.ts","../src/chains/common.ts","../src/chains/near.ts"],"sourcesContent":["import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\nexport class WarpNearDataLoader implements AdapterWarpDataLoader {\n private cache: WarpCache\n private nearConfig: any\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.cache = new WarpCache(config.cache?.type)\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(address)\n const balance = await account.getAccountBalance()\n const balanceBigInt = BigInt(balance.total)\n\n return {\n chain: this.chain.name,\n address,\n balance: balanceBigInt,\n }\n } catch (error) {\n throw new Error(`Failed to get account: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const account = await this.getAccount(address)\n const assets: WarpChainAsset[] = account.balance > 0n ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownTokens = getKnownTokensForChain(this.chain.name, env)\n\n for (const token of knownTokens) {\n try {\n const near = await connect(this.nearConfig)\n const accountObj = await near.account(address)\n const balance = await accountObj.viewFunction({\n contractId: token.identifier,\n methodName: 'ft_balance_of',\n args: { account_id: address },\n })\n if (balance && BigInt(balance) > 0n) {\n assets.push({\n ...token,\n amount: BigInt(balance),\n })\n }\n } catch {\n // Token contract might not exist or method might not be available\n }\n }\n\n return assets\n } catch (error) {\n return []\n }\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier || identifier === WarpNearConstants.NativeToken.Identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const env = this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'devnet' ? 'devnet' : 'testnet'\n const knownToken = findKnownTokenById(this.chain.name, env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n try {\n const near = await connect(this.nearConfig)\n const account = await near.account(identifier)\n const metadata = await account.viewFunction({\n contractId: identifier,\n methodName: 'ft_metadata',\n args: {},\n })\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name || 'Unknown Token',\n symbol: metadata.symbol || 'UNKNOWN',\n amount: 0n,\n decimals: metadata.decimals || WarpNearConstants.NativeToken.Decimals,\n logoUrl: metadata.icon || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch {\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: 'Unknown Token',\n symbol: 'UNKNOWN',\n amount: 0n,\n decimals: WarpNearConstants.NativeToken.Decimals,\n logoUrl: '',\n }\n\n return asset\n }\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(identifier, this.nearConfig.networkId)\n\n if (!txStatus) return null\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const status = isSuccess ? 'success' : 'failed'\n const transaction = txStatus.transaction\n const receipt = txStatus.receipts?.[0]\n\n const sender = transaction.signer_id\n const receiver = transaction.receiver_id\n const value = transaction.actions?.[0]?.Transfer?.deposit ? BigInt(transaction.actions[0].Transfer.deposit) : 0n\n\n return {\n chain: this.chain.name,\n id: identifier,\n receiver,\n sender,\n value,\n function: transaction.actions?.[0]?.FunctionCall?.method_name || 'transfer',\n status,\n createdAt: new Date().toISOString(),\n error: status === 'failed' ? JSON.stringify(txStatus.status) : null,\n tx: txStatus as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n}\n","export const WarpNearConstants = {\n NativeToken: {\n Identifier: 'NEAR',\n Decimals: 24,\n },\n Gas: {\n Default: '300000000000000',\n Transfer: '100000000000000',\n FunctionCall: '300000000000000',\n },\n}\n\nexport enum NearExplorers {\n NearExplorer = 'near_explorer',\n NearBlocks = 'near_blocks',\n NearScan = 'nearscan',\n}\n\nexport type ExplorerName = NearExplorers\n\nexport const NearExplorerMap = {\n near: {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [NearExplorers.NearExplorer]: 'https://explorer.near.org',\n [NearExplorers.NearBlocks]: 'https://nearblocks.io',\n [NearExplorers.NearScan]: 'https://nearscan.io',\n}\n\nexport const NearExplorerNames = {\n mainnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n testnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n devnet: [NearExplorers.NearExplorer, NearExplorers.NearBlocks, NearExplorers.NearScan] as const,\n} as const\n\nexport const NearExplorerUrls: Record<ExplorerName, string> = ExplorerUrls\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\n\nexport const NearTokens: WarpChainAsset[] = []\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n near: {\n mainnet: NearTokens,\n testnet: NearTokens,\n devnet: NearTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyOutputToMessages,\n extractResolvedInputValues,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecutionResult,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearConstants } from './constants'\nimport { WarpNearOutput } from './WarpNearOutput'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly output: WarpNearOutput\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.output = new WarpNearOutput(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<any> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: any | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpNearExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpNearExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createTransfer - user address not set')\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const amount = executable.value > 0n ? executable.value : 0n\n const amountInYoctoNear = amount.toString()\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: amountInYoctoNear,\n },\n },\n ],\n }\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<any> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpNearExecutor: Contract action must have a function name')\n if (!executable.destination) throw new Error('WarpNearExecutor: Contract address is required')\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const gas = WarpNearConstants.Gas.FunctionCall\n const deposit = executable.value > 0n ? executable.value.toString() : '0'\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: action.func,\n args,\n gas,\n deposit,\n },\n },\n ],\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n throw new Error(`WarpNearExecutor: Failed to create contract call: ${errorMessage}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<any> {\n if (executable.transfers.length === 0) throw new Error('WarpNearExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpNearExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier === this.chain.nativeToken!.identifier || transfer.identifier === WarpNearConstants.NativeToken.Identifier\n )\n const ftTokenTransfers = executable.transfers.filter(\n (transfer) =>\n transfer.identifier !== this.chain.nativeToken!.identifier && transfer.identifier !== WarpNearConstants.NativeToken.Identifier\n )\n\n if (nativeTokenTransfers.length === 1 && ftTokenTransfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n if (transfer.amount <= 0n) throw new Error('WarpNearExecutor: Native token transfer amount must be positive')\n\n return {\n receiverId: executable.destination,\n actions: [\n {\n type: 'Transfer',\n params: {\n deposit: transfer.amount.toString(),\n },\n },\n ],\n }\n }\n\n if (nativeTokenTransfers.length === 0 && ftTokenTransfers.length === 1) {\n return this.createSingleTokenTransfer(executable, ftTokenTransfers[0])\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpNearExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpNearExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(executable: WarpExecutable, transfer: WarpChainAssetValue): Promise<any> {\n if (!executable.destination) throw new Error('WarpNearExecutor: Destination address is required')\n\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpNearExecutor: User wallet not set')\n\n const args = {\n receiver_id: executable.destination,\n amount: transfer.amount.toString(),\n }\n\n return {\n receiverId: transfer.identifier,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer',\n args,\n gas: WarpNearConstants.Gas.FunctionCall,\n deposit: '1',\n },\n },\n ],\n }\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecutionResult> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpNearExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpNearExecutor: Query action must have a function name')\n\n let queryAddress: string\n try {\n if (!executable.destination) throw new Error('WarpNearExecutor: Query address is required')\n queryAddress = executable.destination\n } catch {\n throw new Error(`WarpNearExecutor: Invalid address for query: ${executable.destination}`)\n }\n\n try {\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const args = nativeArgs.length > 0 ? nativeArgs : {}\n\n const near = await connect(this.nearConfig)\n const account = await near.account(queryAddress)\n const result = await account.viewFunction({\n contractId: queryAddress,\n methodName: action.func,\n args,\n })\n\n const { values, output } = await this.output.extractQueryOutput(\n executable.warp,\n Array.isArray(result) ? result : [result],\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, output)\n\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'success',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n output: { ...output, _DATA: result },\n messages: applyOutputToMessages(executable.warp, output, this.config),\n destination,\n resolvedInputs,\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n const destinationInput = executable.resolvedInputs.find((i) => i.input.position === 'receiver' || i.input.position === 'destination')\n const destination = destinationInput?.value || executable.destination\n\n const resolvedInputs = extractResolvedInputValues(executable.resolvedInputs)\n return {\n status: 'error',\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: { _DATA: errorMessage, _ERROR: errorMessage },\n messages: {},\n destination,\n resolvedInputs,\n }\n }\n }\n}\n","import {\n AdapterWarpOutput,\n evaluateOutputCommon,\n extractResolvedInputValues,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseOutputOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecutionResult,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpCache,\n WarpCacheKey,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionOutput,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { WarpNearSerializer } from './WarpNearSerializer'\n\nexport class WarpNearOutput implements AdapterWarpOutput {\n private readonly serializer: WarpNearSerializer\n private readonly nearConfig: any\n private readonly cache: WarpCache\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpNearSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n this.cache = new WarpCache(config.cache?.type)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecutionResult> {\n const inputs: ResolvedInput[] = this.cache.get(WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || '', actionIndex)) ?? []\n const resolvedInputs = extractResolvedInputValues(inputs)\n\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction, resolvedInputs)\n }\n\n if (typeof tx === 'string') {\n return this.handleTransactionHash(warp, actionIndex, tx, resolvedInputs)\n }\n\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex, resolvedInputs: string[] = []): WarpActionExecutionResult {\n return {\n status: 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [], mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private handleWarpChainAction(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpChainAction,\n resolvedInputs: string[] = []\n ): WarpActionExecutionResult {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n\n const rawValues = [transactionHash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n }\n\n private async handleTransactionHash(\n warp: Warp,\n actionIndex: WarpActionIndex,\n hash: string,\n resolvedInputs: string[] = []\n ): Promise<WarpActionExecutionResult> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(hash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n\n const statusObj = txStatus.status as any\n const success = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n const transaction = txStatus.transaction\n\n const rawValues = [hash]\n const stringValues = rawValues.map(String)\n\n return {\n status: success ? 'success' : 'error',\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: hash,\n tx: {\n hash,\n transaction,\n status: txStatus.status,\n } as any,\n next: null,\n values: { string: stringValues, native: rawValues, mapped: {} },\n output: {},\n messages: {},\n destination: null,\n resolvedInputs,\n }\n } catch (error) {\n return this.createFailedExecution(warp, actionIndex, resolvedInputs)\n }\n }\n\n async extractQueryOutput(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[]; mapped: Record<string, any> }; output: WarpExecutionOutput }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues, mapped: {} }\n let output: WarpExecutionOutput = {}\n\n if (!warp.output) return { values, output }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.output)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseOutputOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n output[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n output[key] = getNestedValue(path) || null\n } else {\n output[key] = path\n }\n }\n\n return { values, output: await evaluateOutputCommon(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return { status: 'pending' }\n }\n\n const statusObj = txStatus.status as any\n const isSuccess = statusObj && ('SuccessValue' in statusObj || 'SuccessReceiptId' in statusObj)\n return {\n status: isSuccess ? 'confirmed' : 'failed',\n blockNumber: (txStatus.transaction_outcome as any)?.block_hash ? 0 : undefined,\n gasUsed: BigInt(0),\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<any> {\n try {\n const near = await connect(this.nearConfig)\n const txStatus = await (near.connection.provider as any).txStatus(txHash, this.nearConfig.networkId)\n\n if (!txStatus) {\n return null\n }\n\n return {\n hash: txHash,\n transaction: txStatus.transaction,\n status: txStatus.status as any,\n }\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\n\nexport class WarpNearSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (value.endsWith('.near') || (value.length > 2 && value.length < 65 && /^[a-z0-9._-]+$/.test(value) && !value.includes(' '))) {\n return `address:${value}`\n }\n if (value.startsWith('0x') || /^[0-9a-fA-F]+$/.test(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (value instanceof Uint8Array) {\n return `hex:${Buffer.from(value).toString('hex')}`\n }\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n const asset = value as { identifier: string; amount: bigint; decimals?: number }\n if (asset.decimals !== undefined) {\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${WarpConstants.ArgCompositeSeparator}${asset.decimals}`\n }\n return `asset:${asset.identifier}${WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n case 'asset':\n if (typeof value === 'object' && value !== null && 'identifier' in value && 'amount' in value) {\n return value\n }\n return value\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n case 'asset':\n const assetParts = stringValue.split(WarpConstants.ArgCompositeSeparator)\n const identifier = assetParts[0] || ''\n const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n\n const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : undefined\n return { identifier, amount, decimals }\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ExplorerName, NearExplorerNames, NearExplorers, NearExplorerUrls } from './constants'\n\nexport class WarpNearExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const explorers = NearExplorerNames[this.config.env]\n if (!explorers) {\n return [NearExplorers.NearExplorer as ExplorerName]\n }\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = NearExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = NearExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = NearExplorerUrls[primaryExplorer]\n return url || NearExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/transactions/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/blocks/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/tokens/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n return `${baseUrl}${network}/accounts/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/transactions/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/tokens/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/accounts/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n const network = this.config.env === 'mainnet' ? '' : `/${this.config.env}`\n\n explorers.forEach((explorer) => {\n const url = NearExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}${network}/blocks/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { connect, KeyPair, keyStores } from 'near-api-js'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n\n this.nearConfig = {\n networkId: this.config.env === 'mainnet' ? 'mainnet' : this.config.env === 'testnet' ? 'testnet' : 'testnet',\n nodeUrl: providerConfig.url,\n keyStore: new keyStores.InMemoryKeyStore(),\n }\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.signature) {\n return tx\n }\n\n const signedTx = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return {\n ...tx,\n signature: signedTx.transaction.hash,\n transactionHash: signedTx.transaction.hash,\n }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const keyPair = this.getKeyPair()\n const messageBytes = new TextEncoder().encode(message)\n const signature = keyPair.sign(messageBytes)\n return bs58.encode(signature.signature)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const keyPair = this.getKeyPair()\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n await this.nearConfig.keyStore.setKey(this.nearConfig.networkId, accountId, keyPair)\n const near = await connect(this.nearConfig)\n const account = await near.account(accountId)\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n\n return {\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n getAddress(): string | null {\n try {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (wallet && typeof wallet === 'object' && 'address' in wallet) {\n return wallet.address\n }\n if (wallet && typeof wallet === 'string') {\n return wallet\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n const keyPair = KeyPair.fromString(privateKey as any)\n const publicKey = keyPair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n }\n\n return null\n } catch {\n return null\n }\n }\n\n getPublicKey(): string | null {\n try {\n const keyPair = this.getKeyPair()\n const publicKey = keyPair.getPublicKey()\n return publicKey.toString()\n } catch {\n return null\n }\n }\n\n private getKeyPair(): KeyPair {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) {\n try {\n try {\n return KeyPair.fromString(privateKey as any)\n } catch {\n // If fromString fails, generate a new keypair\n }\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Invalid private key format: ${error.message}`)\n }\n throw new Error('Invalid private key format')\n }\n }\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n return keyPair\n }\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpNearDataLoader } from '../WarpNearDataLoader'\nimport { WarpNearExecutor } from '../WarpNearExecutor'\nimport { WarpNearExplorer } from '../WarpNearExplorer'\nimport { WarpNearOutput } from '../WarpNearOutput'\nimport { WarpNearSerializer } from '../WarpNearSerializer'\nimport { WarpNearWallet } from '../WarpNearWallet'\n\nexport const createNearAdapter = (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpNearExecutor(config, chainInfos[config.env]),\n output: new WarpNearOutput(config, chainInfos[config.env]),\n serializer: new WarpNearSerializer(),\n registry: fallback.registry,\n explorer: new WarpNearExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpNearDataLoader(config, chainInfos[config.env]),\n wallet: new WarpNearWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createNearAdapter } from './common'\n\nexport const NativeTokenNear: WarpChainAsset = {\n chain: 'near' as WarpChainName,\n identifier: 'NEAR',\n symbol: 'NEAR',\n name: 'NEAR',\n decimals: 24,\n logoUrl: 'https://joai.ai/images/tokens/near-black.svg',\n}\n\nexport const getNearAdapter: AdapterFactory = createNearAdapter('near' as WarpChain, {\n mainnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Mainnet',\n chainId: 'mainnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.mainnet.near.org',\n logoUrl: 'https://joai.ai/images/chains/near-black.svg',\n nativeToken: NativeTokenNear,\n },\n testnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Testnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://joai.ai/images/chains/near-black.svg',\n nativeToken: NativeTokenNear,\n },\n devnet: {\n name: 'near' as WarpChainName,\n displayName: 'NEAR Devnet',\n chainId: 'testnet',\n blockTime: 1200,\n addressHrp: '',\n defaultApiUrl: 'https://rpc.testnet.near.org',\n logoUrl: 'https://joai.ai/images/chains/near-black.svg',\n nativeToken: NativeTokenNear,\n },\n})\n"],"mappings":"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","names":["NearExplorers","extractResolvedInputValues","getProviderConfig","getWarpWalletAddressFromConfig","connect","keyStores","getProviderConfig","WarpCache","WarpCacheKey","WarpConstants","connect","keyStores","getProviderConfig","keyStores","WarpCache","WarpCacheKey","connect","WarpConstants","getProviderConfig","keyStores","getWarpWalletAddressFromConfig","connect","extractResolvedInputValues","url","getProviderConfig","connect","keyStores"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-near",
3
- "version": "0.1.0-beta.2",
3
+ "version": "0.1.0-beta.4",
4
4
  "description": "NEAR adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",