@vleap/warps-adapter-near 0.1.0-beta.2 → 0.1.0-beta.3
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 +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1113,7 +1113,7 @@ var NativeTokenNear = {
|
|
|
1113
1113
|
symbol: "NEAR",
|
|
1114
1114
|
name: "NEAR",
|
|
1115
1115
|
decimals: 24,
|
|
1116
|
-
logoUrl: "https://
|
|
1116
|
+
logoUrl: "https://joai.ai/images/tokens/near-black.svg"
|
|
1117
1117
|
};
|
|
1118
1118
|
var getNearAdapter = createNearAdapter("near", {
|
|
1119
1119
|
mainnet: {
|
|
@@ -1123,7 +1123,7 @@ var getNearAdapter = createNearAdapter("near", {
|
|
|
1123
1123
|
blockTime: 1200,
|
|
1124
1124
|
addressHrp: "",
|
|
1125
1125
|
defaultApiUrl: "https://rpc.mainnet.near.org",
|
|
1126
|
-
logoUrl: "https://
|
|
1126
|
+
logoUrl: "https://joai.ai/images/chains/near-black.svg",
|
|
1127
1127
|
nativeToken: NativeTokenNear
|
|
1128
1128
|
},
|
|
1129
1129
|
testnet: {
|
|
@@ -1133,7 +1133,7 @@ var getNearAdapter = createNearAdapter("near", {
|
|
|
1133
1133
|
blockTime: 1200,
|
|
1134
1134
|
addressHrp: "",
|
|
1135
1135
|
defaultApiUrl: "https://rpc.testnet.near.org",
|
|
1136
|
-
logoUrl: "https://
|
|
1136
|
+
logoUrl: "https://joai.ai/images/chains/near-black.svg",
|
|
1137
1137
|
nativeToken: NativeTokenNear
|
|
1138
1138
|
},
|
|
1139
1139
|
devnet: {
|
|
@@ -1143,7 +1143,7 @@ var getNearAdapter = createNearAdapter("near", {
|
|
|
1143
1143
|
blockTime: 1200,
|
|
1144
1144
|
addressHrp: "",
|
|
1145
1145
|
defaultApiUrl: "https://rpc.testnet.near.org",
|
|
1146
|
-
logoUrl: "https://
|
|
1146
|
+
logoUrl: "https://joai.ai/images/chains/near-black.svg",
|
|
1147
1147
|
nativeToken: NativeTokenNear
|
|
1148
1148
|
}
|
|
1149
1149
|
});
|
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 * 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://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
|
@@ -1088,7 +1088,7 @@ var NativeTokenNear = {
|
|
|
1088
1088
|
symbol: "NEAR",
|
|
1089
1089
|
name: "NEAR",
|
|
1090
1090
|
decimals: 24,
|
|
1091
|
-
logoUrl: "https://
|
|
1091
|
+
logoUrl: "https://joai.ai/images/tokens/near-black.svg"
|
|
1092
1092
|
};
|
|
1093
1093
|
var getNearAdapter = createNearAdapter("near", {
|
|
1094
1094
|
mainnet: {
|
|
@@ -1098,7 +1098,7 @@ var getNearAdapter = createNearAdapter("near", {
|
|
|
1098
1098
|
blockTime: 1200,
|
|
1099
1099
|
addressHrp: "",
|
|
1100
1100
|
defaultApiUrl: "https://rpc.mainnet.near.org",
|
|
1101
|
-
logoUrl: "https://
|
|
1101
|
+
logoUrl: "https://joai.ai/images/chains/near-black.svg",
|
|
1102
1102
|
nativeToken: NativeTokenNear
|
|
1103
1103
|
},
|
|
1104
1104
|
testnet: {
|
|
@@ -1108,7 +1108,7 @@ var getNearAdapter = createNearAdapter("near", {
|
|
|
1108
1108
|
blockTime: 1200,
|
|
1109
1109
|
addressHrp: "",
|
|
1110
1110
|
defaultApiUrl: "https://rpc.testnet.near.org",
|
|
1111
|
-
logoUrl: "https://
|
|
1111
|
+
logoUrl: "https://joai.ai/images/chains/near-black.svg",
|
|
1112
1112
|
nativeToken: NativeTokenNear
|
|
1113
1113
|
},
|
|
1114
1114
|
devnet: {
|
|
@@ -1118,7 +1118,7 @@ var getNearAdapter = createNearAdapter("near", {
|
|
|
1118
1118
|
blockTime: 1200,
|
|
1119
1119
|
addressHrp: "",
|
|
1120
1120
|
defaultApiUrl: "https://rpc.testnet.near.org",
|
|
1121
|
-
logoUrl: "https://
|
|
1121
|
+
logoUrl: "https://joai.ai/images/chains/near-black.svg",
|
|
1122
1122
|
nativeToken: NativeTokenNear
|
|
1123
1123
|
}
|
|
1124
1124
|
});
|
package/dist/index.mjs.map
CHANGED
|
@@ -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 * 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://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"]}
|