@vleap/warps-adapter-near 0.1.0-beta.5 → 0.1.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -929,7 +929,7 @@ var WarpNearExplorer = class {
929
929
  };
930
930
 
931
931
  // src/WarpNearWallet.ts
932
- var import_warps7 = require("@vleap/warps");
932
+ var import_warps8 = require("@vleap/warps");
933
933
  var import_near_api_js6 = require("near-api-js");
934
934
 
935
935
  // src/providers/MnemonicWalletProvider.ts
@@ -1099,6 +1099,37 @@ var PrivateKeyWalletProvider = class {
1099
1099
  }
1100
1100
  };
1101
1101
 
1102
+ // src/providers/ReadOnlyWalletProvider.ts
1103
+ var import_warps7 = require("@vleap/warps");
1104
+ var ReadOnlyWalletProvider = class {
1105
+ constructor(config, chain) {
1106
+ this.config = config;
1107
+ this.chain = chain;
1108
+ }
1109
+ async getAddress() {
1110
+ return (0, import_warps7.getWarpWalletAddressFromConfig)(this.config, this.chain.name);
1111
+ }
1112
+ async getPublicKey() {
1113
+ return null;
1114
+ }
1115
+ async signTransaction(tx) {
1116
+ const address = await this.getAddress();
1117
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1118
+ }
1119
+ async signMessage(message) {
1120
+ const address = await this.getAddress();
1121
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1122
+ }
1123
+ create(mnemonic) {
1124
+ const address = (0, import_warps7.getWarpWalletAddressFromConfig)(this.config, this.chain.name);
1125
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1126
+ }
1127
+ generate() {
1128
+ const address = (0, import_warps7.getWarpWalletAddressFromConfig)(this.config, this.chain.name);
1129
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1130
+ }
1131
+ };
1132
+
1102
1133
  // src/WarpNearWallet.ts
1103
1134
  var WarpNearWallet = class {
1104
1135
  constructor(config, chain) {
@@ -1106,7 +1137,7 @@ var WarpNearWallet = class {
1106
1137
  this.chain = chain;
1107
1138
  this.cachedAddress = null;
1108
1139
  this.cachedPublicKey = null;
1109
- const providerConfig = (0, import_warps7.getProviderConfig)(config, chain.name, config.env, chain.defaultApiUrl);
1140
+ const providerConfig = (0, import_warps8.getProviderConfig)(config, chain.name, config.env, chain.defaultApiUrl);
1110
1141
  this.nearConfig = {
1111
1142
  networkId: this.config.env === "mainnet" ? "mainnet" : this.config.env === "testnet" ? "testnet" : "testnet",
1112
1143
  nodeUrl: providerConfig.url,
@@ -1118,7 +1149,7 @@ var WarpNearWallet = class {
1118
1149
  createProvider() {
1119
1150
  const wallet = this.config.user?.wallets?.[this.chain.name];
1120
1151
  if (!wallet) return null;
1121
- if (typeof wallet === "string") throw new Error(`Wallet can not be used for signing: ${wallet}`);
1152
+ if (typeof wallet === "string") return new ReadOnlyWalletProvider(this.config, this.chain);
1122
1153
  const customWalletProviders = this.config.walletProviders?.[this.chain.name];
1123
1154
  const providerFactory = customWalletProviders?.[wallet.provider];
1124
1155
  if (providerFactory) return providerFactory(this.config, this.chain);
@@ -1127,7 +1158,7 @@ var WarpNearWallet = class {
1127
1158
  throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${wallet.provider}`);
1128
1159
  }
1129
1160
  initializeCache() {
1130
- (0, import_warps7.initializeWalletCache)(this.walletProvider).then((cache) => {
1161
+ (0, import_warps8.initializeWalletCache)(this.walletProvider).then((cache) => {
1131
1162
  this.cachedAddress = cache.address;
1132
1163
  this.cachedPublicKey = cache.publicKey;
1133
1164
  });
@@ -1135,6 +1166,7 @@ var WarpNearWallet = class {
1135
1166
  async signTransaction(tx) {
1136
1167
  if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
1137
1168
  if (!this.walletProvider) throw new Error("No wallet provider available");
1169
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1138
1170
  const accountId = this.getAddress();
1139
1171
  if (!accountId) throw new Error("No account ID available");
1140
1172
  if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {
@@ -1159,10 +1191,15 @@ var WarpNearWallet = class {
1159
1191
  }
1160
1192
  async signTransactions(txs) {
1161
1193
  if (txs.length === 0) return [];
1162
- return Promise.all(txs.map(async (tx) => this.signTransaction(tx)));
1194
+ const signedTxs = [];
1195
+ for (const tx of txs) {
1196
+ signedTxs.push(await this.signTransaction(tx));
1197
+ }
1198
+ return signedTxs;
1163
1199
  }
1164
1200
  async signMessage(message) {
1165
1201
  if (!this.walletProvider) throw new Error("No wallet provider available");
1202
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1166
1203
  return await this.walletProvider.signMessage(message);
1167
1204
  }
1168
1205
  async sendTransaction(tx) {
@@ -1191,10 +1228,12 @@ var WarpNearWallet = class {
1191
1228
  }
1192
1229
  create(mnemonic) {
1193
1230
  if (!this.walletProvider) throw new Error("No wallet provider available");
1231
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1194
1232
  return this.walletProvider.create(mnemonic);
1195
1233
  }
1196
1234
  generate() {
1197
1235
  if (!this.walletProvider) throw new Error("No wallet provider available");
1236
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1198
1237
  return this.walletProvider.generate();
1199
1238
  }
1200
1239
  getAddress() {
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/providers/MnemonicWalletProvider.ts","../src/providers/PrivateKeyWalletProvider.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 {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n private walletProvider: WalletProvider | null\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\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 this.walletProvider = this.createProvider()\n this.initializeCache()\n }\n\n private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') throw new Error(`Wallet can not be used for signing: ${wallet}`)\n\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[wallet.provider]\n if (providerFactory) return providerFactory(this.config, this.chain)\n\n if (wallet.provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain)\n if (wallet.provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${wallet.provider}`)\n }\n\n private initializeCache() {\n initializeWalletCache(this.walletProvider).then((cache: { address: string | null; publicKey: string | null }) => {\n this.cachedAddress = cache.address\n this.cachedPublicKey = cache.publicKey\n })\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 throw new Error('Wallet provider does not support signing transactions')\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 if (!this.walletProvider) throw new Error('No wallet provider available')\n return await this.walletProvider.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n throw new Error('Wallet provider does not support sending transactions')\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): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n return this.walletProvider.create(mnemonic)\n }\n\n generate(): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n return this.walletProvider.generate()\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletMnemonicFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (!mnemonic) throw new Error('No mnemonic provided')\n\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = KeyPair.fromRandom('ed25519')\n return this.keypair\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletPrivateKeyFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('No private key provided')\n\n try {\n return KeyPair.fromString(privateKey as any)\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","import { ChainAdapter, ChainAdapterFactory, 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>): ChainAdapterFactory => {\n return (config: WarpClientConfig, fallback?: ChainAdapter) => {\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 { ChainAdapterFactory, 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 NearAdapter: ChainAdapterFactory = 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","import_warps","import_near_api_js","bs58","import_crypto","bip39","import_english","import_warps","import_bs58","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/providers/MnemonicWalletProvider.ts","../src/providers/PrivateKeyWalletProvider.ts","../src/providers/ReadOnlyWalletProvider.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 {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\nimport { ReadOnlyWalletProvider } from './providers/ReadOnlyWalletProvider'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n private walletProvider: WalletProvider | null\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\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 this.walletProvider = this.createProvider()\n this.initializeCache()\n }\n\n private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') return new ReadOnlyWalletProvider(this.config, this.chain)\n\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[wallet.provider]\n if (providerFactory) return providerFactory(this.config, this.chain)\n\n if (wallet.provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain)\n if (wallet.provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${wallet.provider}`)\n }\n\n private initializeCache() {\n initializeWalletCache(this.walletProvider).then((cache: { address: string | null; publicKey: string | null }) => {\n this.cachedAddress = cache.address\n this.cachedPublicKey = cache.publicKey\n })\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 throw new Error('Wallet provider does not support signing transactions')\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n const signedTxs = []\n for (const tx of txs) {\n signedTxs.push(await this.signTransaction(tx))\n }\n return signedTxs\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return await this.walletProvider.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n throw new Error('Wallet provider does not support sending transactions')\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): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.create(mnemonic)\n }\n\n generate(): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.generate()\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletMnemonicFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (!mnemonic) throw new Error('No mnemonic provided')\n\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = KeyPair.fromRandom('ed25519')\n return this.keypair\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletPrivateKeyFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('No private key provided')\n\n try {\n return KeyPair.fromString(privateKey as any)\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","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { getWarpWalletAddressFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\n\nexport class ReadOnlyWalletProvider implements WalletProvider {\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n return getWarpWalletAddressFromConfig(this.config, this.chain.name)\n }\n\n async getPublicKey(): Promise<string | null> {\n return null\n }\n\n async signTransaction(tx: any): Promise<any> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async signMessage(message: string): Promise<string> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n generate(): WarpWalletDetails {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n}\n","import { ChainAdapter, ChainAdapterFactory, 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>): ChainAdapterFactory => {\n return (config: WarpClientConfig, fallback?: ChainAdapter) => {\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 { ChainAdapterFactory, 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 NearAdapter: ChainAdapterFactory = 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","import_warps","import_near_api_js","bs58","import_crypto","bip39","import_english","import_warps","import_bs58","import_near_api_js","bs58","import_warps"]}
package/dist/index.mjs CHANGED
@@ -1073,6 +1073,37 @@ var PrivateKeyWalletProvider = class {
1073
1073
  }
1074
1074
  };
1075
1075
 
1076
+ // src/providers/ReadOnlyWalletProvider.ts
1077
+ import { getWarpWalletAddressFromConfig as getWarpWalletAddressFromConfig5 } from "@vleap/warps";
1078
+ var ReadOnlyWalletProvider = class {
1079
+ constructor(config, chain) {
1080
+ this.config = config;
1081
+ this.chain = chain;
1082
+ }
1083
+ async getAddress() {
1084
+ return getWarpWalletAddressFromConfig5(this.config, this.chain.name);
1085
+ }
1086
+ async getPublicKey() {
1087
+ return null;
1088
+ }
1089
+ async signTransaction(tx) {
1090
+ const address = await this.getAddress();
1091
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1092
+ }
1093
+ async signMessage(message) {
1094
+ const address = await this.getAddress();
1095
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1096
+ }
1097
+ create(mnemonic) {
1098
+ const address = getWarpWalletAddressFromConfig5(this.config, this.chain.name);
1099
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1100
+ }
1101
+ generate() {
1102
+ const address = getWarpWalletAddressFromConfig5(this.config, this.chain.name);
1103
+ throw new Error(`Wallet can not be used for signing: ${address}`);
1104
+ }
1105
+ };
1106
+
1076
1107
  // src/WarpNearWallet.ts
1077
1108
  var WarpNearWallet = class {
1078
1109
  constructor(config, chain) {
@@ -1092,7 +1123,7 @@ var WarpNearWallet = class {
1092
1123
  createProvider() {
1093
1124
  const wallet = this.config.user?.wallets?.[this.chain.name];
1094
1125
  if (!wallet) return null;
1095
- if (typeof wallet === "string") throw new Error(`Wallet can not be used for signing: ${wallet}`);
1126
+ if (typeof wallet === "string") return new ReadOnlyWalletProvider(this.config, this.chain);
1096
1127
  const customWalletProviders = this.config.walletProviders?.[this.chain.name];
1097
1128
  const providerFactory = customWalletProviders?.[wallet.provider];
1098
1129
  if (providerFactory) return providerFactory(this.config, this.chain);
@@ -1109,6 +1140,7 @@ var WarpNearWallet = class {
1109
1140
  async signTransaction(tx) {
1110
1141
  if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
1111
1142
  if (!this.walletProvider) throw new Error("No wallet provider available");
1143
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1112
1144
  const accountId = this.getAddress();
1113
1145
  if (!accountId) throw new Error("No account ID available");
1114
1146
  if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {
@@ -1133,10 +1165,15 @@ var WarpNearWallet = class {
1133
1165
  }
1134
1166
  async signTransactions(txs) {
1135
1167
  if (txs.length === 0) return [];
1136
- return Promise.all(txs.map(async (tx) => this.signTransaction(tx)));
1168
+ const signedTxs = [];
1169
+ for (const tx of txs) {
1170
+ signedTxs.push(await this.signTransaction(tx));
1171
+ }
1172
+ return signedTxs;
1137
1173
  }
1138
1174
  async signMessage(message) {
1139
1175
  if (!this.walletProvider) throw new Error("No wallet provider available");
1176
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1140
1177
  return await this.walletProvider.signMessage(message);
1141
1178
  }
1142
1179
  async sendTransaction(tx) {
@@ -1165,10 +1202,12 @@ var WarpNearWallet = class {
1165
1202
  }
1166
1203
  create(mnemonic) {
1167
1204
  if (!this.walletProvider) throw new Error("No wallet provider available");
1205
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1168
1206
  return this.walletProvider.create(mnemonic);
1169
1207
  }
1170
1208
  generate() {
1171
1209
  if (!this.walletProvider) throw new Error("No wallet provider available");
1210
+ if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`);
1172
1211
  return this.walletProvider.generate();
1173
1212
  }
1174
1213
  getAddress() {
@@ -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/providers/MnemonicWalletProvider.ts","../src/providers/PrivateKeyWalletProvider.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 {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n private walletProvider: WalletProvider | null\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\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 this.walletProvider = this.createProvider()\n this.initializeCache()\n }\n\n private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') throw new Error(`Wallet can not be used for signing: ${wallet}`)\n\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[wallet.provider]\n if (providerFactory) return providerFactory(this.config, this.chain)\n\n if (wallet.provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain)\n if (wallet.provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${wallet.provider}`)\n }\n\n private initializeCache() {\n initializeWalletCache(this.walletProvider).then((cache: { address: string | null; publicKey: string | null }) => {\n this.cachedAddress = cache.address\n this.cachedPublicKey = cache.publicKey\n })\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 throw new Error('Wallet provider does not support signing transactions')\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 if (!this.walletProvider) throw new Error('No wallet provider available')\n return await this.walletProvider.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n throw new Error('Wallet provider does not support sending transactions')\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): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n return this.walletProvider.create(mnemonic)\n }\n\n generate(): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n return this.walletProvider.generate()\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletMnemonicFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (!mnemonic) throw new Error('No mnemonic provided')\n\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = KeyPair.fromRandom('ed25519')\n return this.keypair\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletPrivateKeyFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('No private key provided')\n\n try {\n return KeyPair.fromString(privateKey as any)\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","import { ChainAdapter, ChainAdapterFactory, 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>): ChainAdapterFactory => {\n return (config: WarpClientConfig, fallback?: ChainAdapter) => {\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 { ChainAdapterFactory, 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 NearAdapter: ChainAdapterFactory = 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","getWarpWalletAddressFromConfig","keyToImplicitAddress","bip39","wordlist","getWarpWalletAddressFromConfig","bs58","KeyPair","getProviderConfig","keyStores","connect"]}
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/providers/MnemonicWalletProvider.ts","../src/providers/PrivateKeyWalletProvider.ts","../src/providers/ReadOnlyWalletProvider.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 {\n AdapterWarpWallet,\n getProviderConfig,\n initializeWalletCache,\n WalletProvider,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n WarpWalletDetails,\n} from '@vleap/warps'\nimport { connect, keyStores } from 'near-api-js'\nimport { MnemonicWalletProvider } from './providers/MnemonicWalletProvider'\nimport { PrivateKeyWalletProvider } from './providers/PrivateKeyWalletProvider'\nimport { ReadOnlyWalletProvider } from './providers/ReadOnlyWalletProvider'\n\nexport class WarpNearWallet implements AdapterWarpWallet {\n private nearConfig: any\n private walletProvider: WalletProvider | null\n private cachedAddress: string | null = null\n private cachedPublicKey: string | null = null\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 this.walletProvider = this.createProvider()\n this.initializeCache()\n }\n\n private createProvider(): WalletProvider | null {\n const wallet = this.config.user?.wallets?.[this.chain.name]\n if (!wallet) return null\n if (typeof wallet === 'string') return new ReadOnlyWalletProvider(this.config, this.chain)\n\n const customWalletProviders = this.config.walletProviders?.[this.chain.name]\n const providerFactory = customWalletProviders?.[wallet.provider]\n if (providerFactory) return providerFactory(this.config, this.chain)\n\n if (wallet.provider === 'privateKey') return new PrivateKeyWalletProvider(this.config, this.chain)\n if (wallet.provider === 'mnemonic') return new MnemonicWalletProvider(this.config, this.chain)\n throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${wallet.provider}`)\n }\n\n private initializeCache() {\n initializeWalletCache(this.walletProvider).then((cache: { address: string | null; publicKey: string | null }) => {\n this.cachedAddress = cache.address\n this.cachedPublicKey = cache.publicKey\n })\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 throw new Error('Wallet provider does not support signing transactions')\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n const signedTxs = []\n for (const tx of txs) {\n signedTxs.push(await this.signTransaction(tx))\n }\n return signedTxs\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return await this.walletProvider.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!this.walletProvider) throw new Error('No wallet provider available')\n\n const accountId = this.getAddress()\n if (!accountId) throw new Error('No account ID available')\n\n if (tx.transactionHash) {\n return tx.transactionHash\n }\n\n if (this.walletProvider instanceof PrivateKeyWalletProvider || this.walletProvider instanceof MnemonicWalletProvider) {\n const keyPair = this.walletProvider.getKeyPairInstance()\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 const result = await account.signAndSendTransaction({\n receiverId: tx.receiverId,\n actions: tx.actions,\n })\n\n return result.transaction.hash\n }\n\n throw new Error('Wallet provider does not support sending transactions')\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): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.create(mnemonic)\n }\n\n generate(): WarpWalletDetails {\n if (!this.walletProvider) throw new Error('No wallet provider available')\n if (this.walletProvider instanceof ReadOnlyWalletProvider) throw new Error(`Wallet (${this.chain.name}) is read-only`)\n return this.walletProvider.generate()\n }\n\n getAddress(): string | null {\n return this.cachedAddress\n }\n\n getPublicKey(): string | null {\n return this.cachedPublicKey\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletMnemonicFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class MnemonicWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'mnemonic',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (!mnemonic) throw new Error('No mnemonic provided')\n\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n this.keypair = KeyPair.fromRandom('ed25519')\n return this.keypair\n }\n}\n","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { keyToImplicitAddress } from '@near-js/crypto'\nimport * as bip39 from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english.js'\nimport { getWarpWalletAddressFromConfig, getWarpWalletPrivateKeyFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport bs58 from 'bs58'\nimport { KeyPair } from 'near-api-js'\n\nexport class PrivateKeyWalletProvider implements WalletProvider {\n private keypair: KeyPair | null = null\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n if (address) return address\n\n try {\n const keypair = this.getKeyPair()\n const publicKey = keypair.getPublicKey()\n return keyToImplicitAddress(publicKey.toString())\n } catch {\n return null\n }\n }\n\n async getPublicKey(): Promise<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 async signTransaction(tx: any): Promise<any> {\n const keypair = this.getKeyPair()\n // Near transactions are signed via the account, not the keypair directly\n return 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 getKeyPairInstance(): KeyPair {\n return this.getKeyPair()\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n generate(): WarpWalletDetails {\n const mnemonic = bip39.generateMnemonic(wordlist)\n const seed = bip39.mnemonicToSeedSync(mnemonic)\n const keyPair = KeyPair.fromRandom('ed25519')\n const publicKey = keyPair.getPublicKey()\n const accountId = keyToImplicitAddress(publicKey.toString())\n return {\n provider: 'privateKey',\n address: accountId,\n privateKey: keyPair.toString(),\n mnemonic,\n }\n }\n\n private getKeyPair(): KeyPair {\n if (this.keypair) return this.keypair\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('No private key provided')\n\n try {\n return KeyPair.fromString(privateKey as any)\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","import { WalletProvider, WarpWalletDetails } from '@vleap/warps'\nimport { getWarpWalletAddressFromConfig, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\n\nexport class ReadOnlyWalletProvider implements WalletProvider {\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {}\n\n async getAddress(): Promise<string | null> {\n return getWarpWalletAddressFromConfig(this.config, this.chain.name)\n }\n\n async getPublicKey(): Promise<string | null> {\n return null\n }\n\n async signTransaction(tx: any): Promise<any> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n async signMessage(message: string): Promise<string> {\n const address = await this.getAddress()\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n create(mnemonic: string): WarpWalletDetails {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n\n generate(): WarpWalletDetails {\n const address = getWarpWalletAddressFromConfig(this.config, this.chain.name)\n throw new Error(`Wallet can not be used for signing: ${address}`)\n }\n}\n","import { ChainAdapter, ChainAdapterFactory, 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>): ChainAdapterFactory => {\n return (config: WarpClientConfig, fallback?: ChainAdapter) => {\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 { ChainAdapterFactory, 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 NearAdapter: ChainAdapterFactory = 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","getWarpWalletAddressFromConfig","keyToImplicitAddress","bip39","wordlist","getWarpWalletAddressFromConfig","bs58","KeyPair","getWarpWalletAddressFromConfig","getProviderConfig","keyStores","connect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-near",
3
- "version": "0.1.0-beta.5",
3
+ "version": "0.1.0-beta.6",
4
4
  "description": "NEAR adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@scure/bip39": "^2.0.1",
41
- "@vleap/warps": "^3.0.0-beta.175",
41
+ "@vleap/warps": "^3.0.0-beta.178",
42
42
  "bs58": "^6.0.0",
43
43
  "near-api-js": "^6.5.1"
44
44
  }