@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 +44 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +41 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -929,7 +929,7 @@ var WarpNearExplorer = class {
|
|
|
929
929
|
};
|
|
930
930
|
|
|
931
931
|
// src/WarpNearWallet.ts
|
|
932
|
-
var
|
|
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,
|
|
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")
|
|
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,
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAYO;AACP,yBAAmC;;;ACb5B,IAAM,oBAAoB;AAAA,EAC/B,aAAa;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,KAAK;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AACF;AAEO,IAAK,gBAAL,kBAAKA,mBAAL;AACL,EAAAA,eAAA,kBAAe;AACf,EAAAA,eAAA,gBAAa;AACb,EAAAA,eAAA,cAAW;AAHD,SAAAA;AAAA,GAAA;AAQL,IAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,IACJ,SAAS,CAAC,oCAA4B,gCAA0B,yBAAsB;AAAA,IACtF,SAAS,CAAC,oCAA4B,gCAA0B,yBAAsB;AAAA,IACtF,QAAQ,CAAC,oCAA4B,gCAA0B,yBAAsB;AAAA,EACvF;AACF;AAEO,IAAM,eAA6C;AAAA,EACxD,CAAC,kCAA0B,GAAG;AAAA,EAC9B,CAAC,8BAAwB,GAAG;AAAA,EAC5B,CAAC,yBAAsB,GAAG;AAC5B;AAEO,IAAM,oBAAoB;AAAA,EAC/B,SAAS,CAAC,oCAA4B,gCAA0B,yBAAsB;AAAA,EACtF,SAAS,CAAC,oCAA4B,gCAA0B,yBAAsB;AAAA,EACtF,QAAQ,CAAC,oCAA4B,gCAA0B,yBAAsB;AACvF;AAEO,IAAM,mBAAiD;;;ACtCvD,IAAM,aAA+B,CAAC;AAEtC,IAAM,cAAmE;AAAA,EAC9E,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AACF;AAEO,IAAM,qBAAqB,CAAC,OAAkB,KAAmB,OAAsC;AAC5G,QAAM,cAAc,YAAY,KAAK,IAAI,GAAG,KAAK,CAAC;AAClD,SAAO,YAAY,KAAK,CAAC,UAAU,MAAM,eAAe,EAAE,KAAK;AACjE;AAEO,IAAM,yBAAyB,CAAC,WAAmB,MAAc,cAAgC;AACtG,SAAO,YAAY,SAAS,IAAI,GAAG,KAAK,CAAC;AAC3C;;;AFFO,IAAM,qBAAN,MAA0D;AAAA,EAI/D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,QAAQ,IAAI,uBAAU,OAAO,OAAO,IAAI;AAC7C,UAAM,qBAAiB,gCAAkB,KAAK,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAEhH,SAAK,aAAa;AAAA,MAChB,WAAW,KAAK,OAAO,QAAQ,YAAY,YAAY,KAAK,OAAO,QAAQ,YAAY,YAAY;AAAA,MACnG,SAAS,eAAe;AAAA,MACxB,UAAU,IAAI,6BAAU,iBAAiB;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,SAA4C;AAC3D,QAAI;AACF,YAAM,OAAO,UAAM,4BAAQ,KAAK,UAAU;AAC1C,YAAM,UAAU,MAAM,KAAK,QAAQ,OAAO;AAC1C,YAAM,UAAU,MAAM,QAAQ,kBAAkB;AAChD,YAAM,gBAAgB,OAAO,QAAQ,KAAK;AAE1C,aAAO;AAAA,QACL,OAAO,KAAK,MAAM;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,0BAA0B,KAAK,EAAE;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAA4C;AACjE,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,WAAW,OAAO;AAC7C,YAAM,SAA2B,QAAQ,UAAU,KAAK,CAAC,EAAE,GAAG,KAAK,MAAM,aAAa,QAAQ,QAAQ,QAAQ,CAAC,IAAI,CAAC;AAEpH,YAAM,MAAM,KAAK,OAAO,QAAQ,YAAY,YAAY,KAAK,OAAO,QAAQ,WAAW,WAAW;AAClG,YAAM,cAAc,uBAAuB,KAAK,MAAM,MAAM,GAAG;AAE/D,iBAAW,SAAS,aAAa;AAC/B,YAAI;AACF,gBAAM,OAAO,UAAM,4BAAQ,KAAK,UAAU;AAC1C,gBAAM,aAAa,MAAM,KAAK,QAAQ,OAAO;AAC7C,gBAAM,UAAU,MAAM,WAAW,aAAa;AAAA,YAC5C,YAAY,MAAM;AAAA,YAClB,YAAY;AAAA,YACZ,MAAM,EAAE,YAAY,QAAQ;AAAA,UAC9B,CAAC;AACD,cAAI,WAAW,OAAO,OAAO,IAAI,IAAI;AACnC,mBAAO,KAAK;AAAA,cACV,GAAG;AAAA,cACH,QAAQ,OAAO,OAAO;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,YAAoD;AACjE,QAAI;AACF,UAAI,eAAe,KAAK,MAAM,YAAY,cAAc,eAAe,kBAAkB,YAAY,YAAY;AAC/G,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,YAAM,WAAW,0BAAa,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,MAAM,UAAU;AAChF,YAAM,cAAc,KAAK,MAAM,IAAoB,QAAQ;AAC3D,UAAI,aAAa;AACf,eAAO;AAAA,MACT;AAEA,YAAM,MAAM,KAAK,OAAO,QAAQ,YAAY,YAAY,KAAK,OAAO,QAAQ,WAAW,WAAW;AAClG,YAAM,aAAa,mBAAmB,KAAK,MAAM,MAAM,KAAK,UAAU;AAEtE,UAAI,YAAY;AACd,eAAO;AAAA,UACL,OAAO,KAAK,MAAM;AAAA,UAClB;AAAA,UACA,MAAM,WAAW;AAAA,UACjB,QAAQ,WAAW;AAAA,UACnB,QAAQ;AAAA,UACR,UAAU,WAAW;AAAA,UACrB,SAAS,WAAW;AAAA,QACtB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,OAAO,UAAM,4BAAQ,KAAK,UAAU;AAC1C,cAAM,UAAU,MAAM,KAAK,QAAQ,UAAU;AAC7C,cAAM,WAAW,MAAM,QAAQ,aAAa;AAAA,UAC1C,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,MAAM,CAAC;AAAA,QACT,CAAC;AAED,cAAM,QAAwB;AAAA,UAC5B,OAAO,KAAK,MAAM;AAAA,UAClB;AAAA,UACA,MAAM,SAAS,QAAQ;AAAA,UACvB,QAAQ,SAAS,UAAU;AAAA,UAC3B,QAAQ;AAAA,UACR,UAAU,SAAS,YAAY,kBAAkB,YAAY;AAAA,UAC7D,SAAS,SAAS,QAAQ;AAAA,QAC5B;AAEA,aAAK,MAAM,IAAI,UAAU,OAAO,sBAAS,OAAO;AAEhD,eAAO;AAAA,MACT,QAAQ;AACN,cAAM,QAAwB;AAAA,UAC5B,OAAO,KAAK,MAAM;AAAA,UAClB;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,UAAU,kBAAkB,YAAY;AAAA,UACxC,SAAS;AAAA,QACX;AAEA,eAAO;AAAA,MACT;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,YAAoB,iBAAiB,OAAwC;AAC3F,QAAI;AACF,YAAM,OAAO,UAAM,4BAAQ,KAAK,UAAU;AAC1C,YAAM,WAAW,MAAO,KAAK,WAAW,SAAiB,SAAS,YAAY,KAAK,WAAW,SAAS;AAEvG,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,YAAY,SAAS;AAC3B,YAAM,YAAY,cAAc,kBAAkB,aAAa,sBAAsB;AACrF,YAAM,SAAS,YAAY,YAAY;AACvC,YAAM,cAAc,SAAS;AAC7B,YAAM,UAAU,SAAS,WAAW,CAAC;AAErC,YAAM,SAAS,YAAY;AAC3B,YAAM,WAAW,YAAY;AAC7B,YAAM,QAAQ,YAAY,UAAU,CAAC,GAAG,UAAU,UAAU,OAAO,YAAY,QAAQ,CAAC,EAAE,SAAS,OAAO,IAAI;AAE9G,aAAO;AAAA,QACL,OAAO,KAAK,MAAM;AAAA,QAClB,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,YAAY,UAAU,CAAC,GAAG,cAAc,eAAe;AAAA,QACjE;AAAA,QACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,OAAO,WAAW,WAAW,KAAK,UAAU,SAAS,MAAM,IAAI;AAAA,QAC/D,IAAI;AAAA,MACN;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,SAAiB,SAA6D;AACpG,WAAO,CAAC;AAAA,EACV;AACF;;;AG9LA,IAAAC,gBAcO;AACP,IAAAC,sBAAmC;;;ACfnC,IAAAC,gBAoBO;AACP,IAAAC,sBAAmC;;;ACrBnC,IAAAC,gBAQO;AAEA,IAAM,qBAAN,MAA0D;AAAA,EAG/D,cAAc;AACZ,SAAK,iBAAiB,IAAI,6BAAe;AAAA,EAC3C;AAAA,EAEA,cAAc,OAAoB;AAChC,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,MAAM,SAAS,OAAO,KAAM,MAAM,SAAS,KAAK,MAAM,SAAS,MAAM,iBAAiB,KAAK,KAAK,KAAK,CAAC,MAAM,SAAS,GAAG,GAAI;AAC9H,eAAO,WAAW,KAAK;AAAA,MACzB;AACA,UAAI,MAAM,WAAW,IAAI,KAAK,iBAAiB,KAAK,KAAK,GAAG;AAC1D,eAAO,OAAO,KAAK;AAAA,MACrB;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,OAAO,UAAU,KAAK,GAAG;AAC3B,YAAI,SAAS,KAAK,SAAS,IAAK,QAAO,SAAS,KAAK;AACrD,YAAI,SAAS,KAAK,SAAS,MAAO,QAAO,UAAU,KAAK;AACxD,YAAI,SAAS,KAAK,SAAS,WAAY,QAAO,UAAU,KAAK;AAC7D,eAAO,UAAU,KAAK;AAAA,MACxB;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,WAAW,MAAM,SAAS,CAAC;AAAA,IACpC;AACA,QAAI,OAAO,UAAU,WAAW;AAC9B,aAAO,WAAW,KAAK;AAAA,IACzB;AACA,QAAI,iBAAiB,YAAY;AAC/B,aAAO,OAAO,OAAO,KAAK,KAAK,EAAE,SAAS,KAAK,CAAC;AAAA,IAClD;AACA,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,gBAAgB,SAAS,YAAY,OAAO;AAC7F,YAAM,QAAQ;AACd,UAAI,MAAM,aAAa,QAAW;AAChC,eAAO,SAAS,MAAM,UAAU,GAAG,4BAAc,qBAAqB,GAAG,MAAM,OAAO,SAAS,CAAC,GAAG,4BAAc,qBAAqB,GAAG,MAAM,QAAQ;AAAA,MACzJ;AACA,aAAO,SAAS,MAAM,UAAU,GAAG,4BAAc,qBAAqB,GAAG,MAAM,OAAO,SAAS,CAAC;AAAA,IAClG;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,YAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,EAAE,MAAM,4BAAc,kBAAkB,EAAE,CAAC,CAAC;AACrG,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,EAAE,MAAM,4BAAc,kBAAkB,EAAE,CAAC,CAAC;AACtG,aAAO,QAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAAA,IACzC;AACA,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO;AAAA,IACT;AACA,WAAO,UAAU,OAAO,KAAK,CAAC;AAAA,EAChC;AAAA,EAEA,cAAc,OAAoD;AAChE,UAAM,cAAc,KAAK,cAAc,KAAK;AAC5C,UAAM,CAAC,MAAM,GAAG,UAAU,IAAI,YAAY,MAAM,4BAAc,kBAAkB;AAChF,UAAM,cAAc,WAAW,KAAK,4BAAc,kBAAkB;AACpE,WAAO,CAAC,MAAM,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAAA,EACxD;AAAA,EAEA,cAAc,MAA2B,OAA6B;AACpE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,KAAwB;AAAA,MACxC,KAAK;AACH,eAAO,OAAO,KAAwB;AAAA,MACxC,KAAK;AACH,eAAO,QAAQ,KAAK;AAAA,MACtB,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,YAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,gBAAgB,SAAS,YAAY,OAAO;AAC7F,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACE,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7C,cAAI,CAAC,SAAU,QAAO,CAAC;AACvB,gBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,iBAAO,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,UAAU,IAAI,CAAC;AAAA,QAC/D;AACA,eAAO,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,aAAa,MAAuD;AAClE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEA,cAAc,OAAoB;AAChC,UAAM,QAAQ,MAAM,MAAM,4BAAc,oBAAoB,CAAC;AAC7D,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO;AAAA,IACT;AAEA,UAAM,CAAC,MAAM,WAAW,IAAI;AAE5B,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,WAAW;AAAA,MAC3B,KAAK;AACH,eAAO,OAAO,WAAW;AAAA,MAC3B,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,cAAM,aAAa,YAAY,MAAM,4BAAc,qBAAqB;AACxE,cAAM,aAAa,WAAW,CAAC,KAAK;AACpC,cAAM,SAAS,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC,IAAI;AACvD,cAAM,WAAW,WAAW,CAAC,IAAI,SAAS,WAAW,CAAC,GAAG,EAAE,IAAI;AAC/D,eAAO,EAAE,YAAY,QAAQ,SAAS;AAAA,MACxC;AACE,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7C,cAAI,CAAC,SAAU,QAAO,CAAC;AACvB,gBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,iBAAO,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;AAAA,QACtE;AACA,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAc,OAAgC;AACrE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,eAAO,UAAU;AAAA,MACnB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AACF;;;ADnKO,IAAM,iBAAN,MAAkD;AAAA,EAKvD,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,aAAa,IAAI,mBAAmB;AACzC,UAAM,qBAAiB,iCAAkB,KAAK,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAEhH,SAAK,aAAa;AAAA,MAChB,WAAW,KAAK,OAAO,QAAQ,YAAY,YAAY,KAAK,OAAO,QAAQ,YAAY,YAAY;AAAA,MACnG,SAAS,eAAe;AAAA,MACxB,UAAU,IAAI,8BAAU,iBAAiB;AAAA,IAC3C;AACA,SAAK,QAAQ,IAAI,wBAAU,OAAO,OAAO,IAAI;AAAA,EAC/C;AAAA,EAEA,MAAM,mBACJ,MACA,aACA,IACoC;AACpC,UAAM,SAA0B,KAAK,MAAM,IAAI,2BAAa,eAAe,KAAK,OAAO,KAAK,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC;AACrI,UAAM,qBAAiB,0CAA2B,MAAM;AAExD,QAAI,CAAC,IAAI;AACP,aAAO,KAAK,sBAAsB,MAAM,aAAa,cAAc;AAAA,IACrE;AAEA,QAAI,YAAY,MAAM,OAAO,GAAG,WAAW,UAAU;AACnD,aAAO,KAAK,sBAAsB,MAAM,aAAa,IAAuB,cAAc;AAAA,IAC5F;AAEA,QAAI,OAAO,OAAO,UAAU;AAC1B,aAAO,KAAK,sBAAsB,MAAM,aAAa,IAAI,cAAc;AAAA,IACzE;AAEA,WAAO,KAAK,sBAAsB,MAAM,aAAa,cAAc;AAAA,EACrE;AAAA,EAEQ,sBAAsB,MAAY,aAA8B,iBAA2B,CAAC,GAA8B;AAChI,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR,UAAM,8CAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAAA,MACjE,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MAC7C,QAAQ,CAAC;AAAA,MACT,UAAU,CAAC;AAAA,MACX,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBACN,MACA,aACA,IACA,iBAA2B,CAAC,GACD;AAC3B,UAAM,UAAU,GAAG,WAAW;AAC9B,UAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,QAAQ;AAEhD,UAAM,YAAY,CAAC,eAAe;AAClC,UAAM,eAAe,UAAU,IAAI,MAAM;AAEzC,WAAO;AAAA,MACL,QAAQ,UAAU,YAAY;AAAA,MAC9B;AAAA,MACA,QAAQ;AAAA,MACR,UAAM,8CAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAAA,MACjE,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,cAAc,QAAQ,WAAW,QAAQ,CAAC,EAAE;AAAA,MAC9D,QAAQ,CAAC;AAAA,MACT,UAAU,CAAC;AAAA,MACX,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,sBACZ,MACA,aACA,MACA,iBAA2B,CAAC,GACQ;AACpC,QAAI;AACF,YAAM,OAAO,UAAM,6BAAQ,KAAK,UAAU;AAC1C,YAAM,WAAW,MAAO,KAAK,WAAW,SAAiB,SAAS,MAAM,KAAK,WAAW,SAAS;AAEjG,UAAI,CAAC,UAAU;AACb,eAAO,KAAK,sBAAsB,MAAM,aAAa,cAAc;AAAA,MACrE;AAEA,YAAM,YAAY,SAAS;AAC3B,YAAM,UAAU,cAAc,kBAAkB,aAAa,sBAAsB;AACnF,YAAM,cAAc,SAAS;AAE7B,YAAM,YAAY,CAAC,IAAI;AACvB,YAAM,eAAe,UAAU,IAAI,MAAM;AAEzC,aAAO;AAAA,QACL,QAAQ,UAAU,YAAY;AAAA,QAC9B;AAAA,QACA,QAAQ;AAAA,QACR,UAAM,8CAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAAA,QACjE,QAAQ;AAAA,QACR,IAAI;AAAA,UACF;AAAA,UACA;AAAA,UACA,QAAQ,SAAS;AAAA,QACnB;AAAA,QACA,MAAM;AAAA,QACN,QAAQ,EAAE,QAAQ,cAAc,QAAQ,WAAW,QAAQ,CAAC,EAAE;AAAA,QAC9D,QAAQ,CAAC;AAAA,QACT,UAAU,CAAC;AAAA,QACX,aAAa;AAAA,QACb;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,KAAK,sBAAsB,MAAM,aAAa,cAAc;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,MACA,aACA,aACA,QACgI;AAChI,UAAM,eAAe,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,cAAc,CAAC,CAAC;AAC5E,UAAM,eAAe,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC;AAC/E,UAAM,SAAS,EAAE,QAAQ,cAAc,QAAQ,cAAc,QAAQ,CAAC,EAAE;AACxE,QAAI,SAA8B,CAAC;AAEnC,QAAI,CAAC,KAAK,OAAQ,QAAO,EAAE,QAAQ,OAAO;AAE1C,UAAM,iBAAiB,CAAC,SAA0B;AAChD,YAAM,UAAU,KACb,MAAM,GAAG,EACT,MAAM,CAAC,EACP,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC;AAC7B,UAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,UAAI,QAAiB,aAAa,QAAQ,CAAC,CAAC;AAC5C,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,gBAAS,MAAkC,QAAQ,CAAC,CAAC;AAAA,MACvD;AACA,aAAO;AAAA,IACT;AAEA,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,MAAM,GAAG;AACrD,UAAI,KAAK,WAAW,4BAAc,UAAU,MAAM,EAAG;AACrD,YAAM,yBAAqB,mCAAoB,IAAI;AACnD,UAAI,uBAAuB,QAAQ,uBAAuB,aAAa;AACrE,eAAO,GAAG,IAAI;AACd;AAAA,MACF;AACA,UAAI,KAAK,WAAW,MAAM,KAAK,SAAS,SAAS,KAAK,WAAW,MAAM,GAAG;AACxE,eAAO,GAAG,IAAI,eAAe,IAAI,KAAK;AAAA,MACxC,OAAO;AACL,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,QAAQ,UAAM,oCAAqB,MAAM,QAAQ,aAAa,QAAQ,KAAK,WAAW,gBAAgB,KAAK,MAAM,EAAE;AAAA,EACtI;AAAA,EAEA,MAAM,qBACJ,QACiG;AACjG,QAAI;AACF,YAAM,OAAO,UAAM,6BAAQ,KAAK,UAAU;AAC1C,YAAM,WAAW,MAAO,KAAK,WAAW,SAAiB,SAAS,QAAQ,KAAK,WAAW,SAAS;AAEnG,UAAI,CAAC,UAAU;AACb,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B;AAEA,YAAM,YAAY,SAAS;AAC3B,YAAM,YAAY,cAAc,kBAAkB,aAAa,sBAAsB;AACrF,aAAO;AAAA,QACL,QAAQ,YAAY,cAAc;AAAA,QAClC,aAAc,SAAS,qBAA6B,aAAa,IAAI;AAAA,QACrE,SAAS,OAAO,CAAC;AAAA,MACnB;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,QAA8B;AACxD,QAAI;AACF,YAAM,OAAO,UAAM,6BAAQ,KAAK,UAAU;AAC1C,YAAM,WAAW,MAAO,KAAK,WAAW,SAAiB,SAAS,QAAQ,KAAK,WAAW,SAAS;AAEnG,UAAI,CAAC,UAAU;AACb,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa,SAAS;AAAA,QACtB,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AD7NO,IAAM,mBAAN,MAAsD;AAAA,EAK3D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,aAAa,IAAI,mBAAmB;AACzC,UAAM,qBAAiB,iCAAkB,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAE3G,SAAK,aAAa;AAAA,MAChB,WAAW,KAAK,OAAO,QAAQ,YAAY,YAAY,KAAK,OAAO,QAAQ,YAAY,YAAY;AAAA,MACnG,SAAS,eAAe;AAAA,MACxB,UAAU,IAAI,8BAAU,iBAAiB;AAAA,IAC3C;AACA,SAAK,SAAS,IAAI,eAAe,QAAQ,KAAK,KAAK;AAAA,EACrD;AAAA,EAEA,MAAM,kBAAkB,YAA0C;AAChE,UAAM,aAAS,oCAAqB,WAAW,MAAM,WAAW,MAAM;AAEtE,QAAI,KAAiB;AACrB,QAAI,OAAO,SAAS,YAAY;AAC9B,WAAK,MAAM,KAAK,0BAA0B,UAAU;AAAA,IACtD,WAAW,OAAO,SAAS,YAAY;AACrC,WAAK,MAAM,KAAK,8BAA8B,UAAU;AAAA,IAC1D,WAAW,OAAO,SAAS,SAAS;AAClC,YAAM,IAAI,MAAM,uFAAuF;AAAA,IACzG,WAAW,OAAO,SAAS,WAAW;AACpC,YAAM,IAAI,MAAM,yFAAyF;AAAA,IAC3G;AAEA,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,0CAA0C,OAAO,IAAI,GAAG;AAEjF,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,0BAA0B,YAA0C;AACxE,UAAM,iBAAa,8CAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AACpF,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,yDAAyD;AAC1F,QAAI,CAAC,WAAW,YAAa,OAAM,IAAI,MAAM,mDAAmD;AAEhG,QAAI,WAAW,aAAa,WAAW,UAAU,SAAS,GAAG;AAC3D,aAAO,KAAK,+BAA+B,YAAY,UAAU;AAAA,IACnE;AAEA,UAAM,SAAS,WAAW,QAAQ,KAAK,WAAW,QAAQ;AAC1D,UAAM,oBAAoB,OAAO,SAAS;AAE1C,WAAO;AAAA,MACL,YAAY,WAAW;AAAA,MACvB,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,8BAA8B,YAA0C;AAC5E,UAAM,iBAAa,8CAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AACpF,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,6DAA6D;AAE9F,UAAM,aAAS,oCAAqB,WAAW,MAAM,WAAW,MAAM;AACtE,QAAI,CAAC,UAAU,EAAE,UAAU,WAAW,CAAC,OAAO,KAAM,OAAM,IAAI,MAAM,6DAA6D;AACjI,QAAI,CAAC,WAAW,YAAa,OAAM,IAAI,MAAM,gDAAgD;AAE7F,QAAI;AACF,YAAM,aAAa,WAAW,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,eAAe,eAAe,GAAG,EAAE,CAAC,CAAC;AACrG,YAAM,OAAO,WAAW,SAAS,IAAI,aAAa,CAAC;AAEnD,YAAM,MAAM,kBAAkB,IAAI;AAClC,YAAM,UAAU,WAAW,QAAQ,KAAK,WAAW,MAAM,SAAS,IAAI;AAEtE,aAAO;AAAA,QACL,YAAY,WAAW;AAAA,QACvB,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,YAAY,OAAO;AAAA,cACnB;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,YAAM,IAAI,MAAM,qDAAqD,YAAY,EAAE;AAAA,IACrF;AAAA,EACF;AAAA,EAEA,MAAc,+BAA+B,YAA4B,YAAkC;AACzG,QAAI,WAAW,UAAU,WAAW,EAAG,OAAM,IAAI,MAAM,yCAAyC;AAChG,QAAI,CAAC,KAAK,MAAM,aAAa,WAAY,OAAM,IAAI,MAAM,0DAA0D;AAEnH,UAAM,uBAAuB,WAAW,UAAU;AAAA,MAChD,CAAC,aACC,SAAS,eAAe,KAAK,MAAM,YAAa,cAAc,SAAS,eAAe,kBAAkB,YAAY;AAAA,IACxH;AACA,UAAM,mBAAmB,WAAW,UAAU;AAAA,MAC5C,CAAC,aACC,SAAS,eAAe,KAAK,MAAM,YAAa,cAAc,SAAS,eAAe,kBAAkB,YAAY;AAAA,IACxH;AAEA,QAAI,qBAAqB,WAAW,KAAK,iBAAiB,WAAW,GAAG;AACtE,YAAM,WAAW,qBAAqB,CAAC;AACvC,UAAI,SAAS,UAAU,GAAI,OAAM,IAAI,MAAM,iEAAiE;AAE5G,aAAO;AAAA,QACL,YAAY,WAAW;AAAA,QACvB,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,SAAS,SAAS,OAAO,SAAS;AAAA,YACpC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,qBAAqB,WAAW,KAAK,iBAAiB,WAAW,GAAG;AACtE,aAAO,KAAK,0BAA0B,YAAY,iBAAiB,CAAC,CAAC;AAAA,IACvE;AAEA,QAAI,WAAW,UAAU,SAAS,EAAG,OAAM,IAAI,MAAM,8DAA8D;AAEnH,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAAA,EAEA,MAAc,0BAA0B,YAA4B,UAA6C;AAC/G,QAAI,CAAC,WAAW,YAAa,OAAM,IAAI,MAAM,mDAAmD;AAEhG,UAAM,iBAAa,8CAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AACpF,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,uCAAuC;AAExE,UAAM,OAAO;AAAA,MACX,aAAa,WAAW;AAAA,MACxB,QAAQ,SAAS,OAAO,SAAS;AAAA,IACnC;AAEA,WAAO;AAAA,MACL,YAAY,SAAS;AAAA,MACrB,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,YAAY;AAAA,YACZ;AAAA,YACA,KAAK,kBAAkB,IAAI;AAAA,YAC3B,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,YAAgE;AACjF,UAAM,aAAS,oCAAqB,WAAW,MAAM,WAAW,MAAM;AACtE,QAAI,OAAO,SAAS,QAAS,OAAM,IAAI,MAAM,2DAA2D,OAAO,IAAI,EAAE;AACrH,QAAI,CAAC,OAAO,KAAM,OAAM,IAAI,MAAM,0DAA0D;AAE5F,QAAI;AACJ,QAAI;AACF,UAAI,CAAC,WAAW,YAAa,OAAM,IAAI,MAAM,6CAA6C;AAC1F,qBAAe,WAAW;AAAA,IAC5B,QAAQ;AACN,YAAM,IAAI,MAAM,gDAAgD,WAAW,WAAW,EAAE;AAAA,IAC1F;AAEA,QAAI;AACF,YAAM,aAAa,WAAW,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,eAAe,eAAe,GAAG,EAAE,CAAC,CAAC;AACrG,YAAM,OAAO,WAAW,SAAS,IAAI,aAAa,CAAC;AAEnD,YAAM,OAAO,UAAM,6BAAQ,KAAK,UAAU;AAC1C,YAAM,UAAU,MAAM,KAAK,QAAQ,YAAY;AAC/C,YAAM,SAAS,MAAM,QAAQ,aAAa;AAAA,QACxC,YAAY;AAAA,QACZ,YAAY,OAAO;AAAA,QACnB;AAAA,MACF,CAAC;AAED,YAAM,EAAE,QAAQ,OAAO,IAAI,MAAM,KAAK,OAAO;AAAA,QAC3C,WAAW;AAAA,QACX,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAAA,QACxC,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAEA,YAAM,WAAO,2BAAY,KAAK,QAAQ,CAAC,GAAG,WAAW,MAAM,WAAW,QAAQ,MAAM;AAEpF,YAAM,mBAAmB,WAAW,eAAe,KAAK,CAAC,MAAM,EAAE,MAAM,aAAa,cAAc,EAAE,MAAM,aAAa,aAAa;AACpI,YAAM,cAAc,kBAAkB,SAAS,WAAW;AAE1D,YAAM,qBAAiB,0CAA2B,WAAW,cAAc;AAC3E,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,QACnB,UAAM,8CAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AAAA,QACvE,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA,QAAQ,EAAE,GAAG,QAAQ,OAAO,OAAO;AAAA,QACnC,cAAU,qCAAsB,WAAW,MAAM,QAAQ,KAAK,MAAM;AAAA,QACpE;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,YAAM,mBAAmB,WAAW,eAAe,KAAK,CAAC,MAAM,EAAE,MAAM,aAAa,cAAc,EAAE,MAAM,aAAa,aAAa;AACpI,YAAM,cAAc,kBAAkB,SAAS,WAAW;AAE1D,YAAM,qBAAiB,0CAA2B,WAAW,cAAc;AAC3E,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,QACnB,UAAM,8CAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AAAA,QACvE,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,QAC7C,QAAQ,EAAE,OAAO,cAAc,QAAQ,aAAa;AAAA,QACpD,UAAU,CAAC;AAAA,QACX;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AGhQO,IAAM,mBAAN,MAAsD;AAAA,EAC3D,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEK,eAAwC;AAC9C,UAAM,YAAY,kBAAkB,KAAK,OAAO,GAAG;AACnD,QAAI,CAAC,WAAW;AACd,aAAO,mCAA2C;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,qBAAmC;AACzC,UAAM,YAAY,KAAK,aAAa;AACpC,WAAO,UAAU,CAAC;AAAA,EACpB;AAAA,EAEQ,qBAAqB,UAAiC;AAC5D,UAAM,iBAAiB,KAAK,OAAO,aAAa,YAAY,KAAK,MAAM,IAAI;AAE3E,QAAI,kBAAkB,CAAC,UAAU;AAC/B,YAAMC,OAAM,iBAAiB,cAA8B;AAC3D,UAAIA,KAAK,QAAOA;AAAA,IAClB;AAEA,QAAI,UAAU;AACZ,YAAMA,OAAM,iBAAiB,QAAQ;AACrC,UAAIA,KAAK,QAAOA;AAAA,IAClB;AAEA,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,UAAM,MAAM,iBAAiB,eAAe;AAC5C,WAAO,OAAO,iBAAiB,eAAe;AAAA,EAChD;AAAA,EAEA,cAAc,SAAiB,UAAiC;AAC9D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AACxE,WAAO,GAAG,OAAO,GAAG,OAAO,aAAa,OAAO;AAAA,EACjD;AAAA,EAEA,kBAAkB,MAAc,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AACxE,WAAO,GAAG,OAAO,GAAG,OAAO,iBAAiB,IAAI;AAAA,EAClD;AAAA,EAEA,YAAY,aAA8B,UAAiC;AACzE,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AACxE,WAAO,GAAG,OAAO,GAAG,OAAO,WAAW,WAAW;AAAA,EACnD;AAAA,EAEA,YAAY,YAAoB,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AACxE,WAAO,GAAG,OAAO,GAAG,OAAO,WAAW,UAAU;AAAA,EAClD;AAAA,EAEA,eAAe,SAAiB,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AACxE,WAAO,GAAG,OAAO,GAAG,OAAO,aAAa,OAAO;AAAA,EACjD;AAAA,EAEA,kBAA2C;AACzC,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,kBAAkB,MAAwC;AACxD,UAAM,YAAY,KAAK,aAAa;AACpC,WAAO,UAAU,KAAK,CAAC,aAAa,SAAS,YAAY,MAAM,KAAK,YAAY,CAAC;AAAA,EACnF;AAAA,EAEA,eAAe,SAA+C;AAC5D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAC5C,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AAExE,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,iBAAiB,QAAQ;AACrC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,OAAO,aAAa,OAAO;AAAA,MACvD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,MAA4C;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAC5C,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AAExE,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,iBAAiB,QAAQ;AACrC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,OAAO,iBAAiB,IAAI;AAAA,MACxD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,YAAkD;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAC5C,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AAExE,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,iBAAiB,QAAQ;AACrC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,OAAO,WAAW,UAAU;AAAA,MACxD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,SAA+C;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAC5C,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AAExE,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,iBAAiB,QAAQ;AACrC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,OAAO,aAAa,OAAO;AAAA,MACvD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,aAA4D;AACvE,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAC5C,UAAM,UAAU,KAAK,OAAO,QAAQ,YAAY,KAAK,IAAI,KAAK,OAAO,GAAG;AAExE,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,iBAAiB,QAAQ;AACrC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,OAAO,WAAW,WAAW;AAAA,MACzD;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;ACzJA,IAAAC,gBASO;AACP,IAAAC,sBAAmC;;;ACTnC,oBAAqC;AACrC,YAAuB;AACvB,qBAAyB;AACzB,IAAAC,gBAAiH;AACjH,kBAAiB;AACjB,IAAAC,sBAAwB;AAEjB,IAAM,yBAAN,MAAuD;AAAA,EAG5D,YACU,QACA,OACR;AAFQ;AACA;AAJV,SAAQ,UAA0B;AAAA,EAK/B;AAAA,EAEH,MAAM,aAAqC;AACzC,UAAM,cAAU,8CAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC3E,QAAI,QAAS,QAAO;AAEpB,QAAI;AACF,YAAM,UAAU,KAAK,WAAW;AAChC,YAAM,YAAY,QAAQ,aAAa;AACvC,iBAAO,oCAAqB,UAAU,SAAS,CAAC;AAAA,IAClD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,eAAuC;AAC3C,QAAI;AACF,YAAM,UAAU,KAAK,WAAW;AAChC,YAAM,YAAY,QAAQ,aAAa;AACvC,aAAO,UAAU,SAAS;AAAA,IAC5B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,IAAuB;AAC3C,UAAM,UAAU,KAAK,WAAW;AAEhC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,eAAe,IAAI,YAAY,EAAE,OAAO,OAAO;AACrD,UAAM,YAAY,QAAQ,KAAK,YAAY;AAC3C,WAAO,YAAAC,QAAK,OAAO,UAAU,SAAS;AAAA,EACxC;AAAA,EAEA,qBAA8B;AAC5B,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,OAAO,UAAqC;AAC1C,UAAM,OAAa,yBAAmB,QAAQ;AAC9C,UAAM,UAAU,4BAAQ,WAAW,SAAS;AAC5C,UAAM,YAAY,QAAQ,aAAa;AACvC,UAAM,gBAAY,oCAAqB,UAAU,SAAS,CAAC;AAC3D,WAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY,QAAQ,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAA8B;AAC5B,UAAM,WAAiB,uBAAiB,uBAAQ;AAChD,UAAM,OAAa,yBAAmB,QAAQ;AAC9C,UAAM,UAAU,4BAAQ,WAAW,SAAS;AAC5C,UAAM,YAAY,QAAQ,aAAa;AACvC,UAAM,gBAAY,oCAAqB,UAAU,SAAS,CAAC;AAC3D,WAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY,QAAQ,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAsB;AAC5B,QAAI,KAAK,QAAS,QAAO,KAAK;AAE9B,UAAM,eAAW,+CAAgC,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC7E,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,sBAAsB;AAErD,UAAM,OAAa,yBAAmB,QAAQ;AAC9C,SAAK,UAAU,4BAAQ,WAAW,SAAS;AAC3C,WAAO,KAAK;AAAA,EACd;AACF;;;AC5FA,IAAAC,iBAAqC;AACrC,IAAAC,SAAuB;AACvB,IAAAC,kBAAyB;AACzB,IAAAC,gBAAmH;AACnH,IAAAC,eAAiB;AACjB,IAAAC,sBAAwB;AAEjB,IAAM,2BAAN,MAAyD;AAAA,EAG9D,YACU,QACA,OACR;AAFQ;AACA;AAJV,SAAQ,UAA0B;AAAA,EAK/B;AAAA,EAEH,MAAM,aAAqC;AACzC,UAAM,cAAU,8CAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC3E,QAAI,QAAS,QAAO;AAEpB,QAAI;AACF,YAAM,UAAU,KAAK,WAAW;AAChC,YAAM,YAAY,QAAQ,aAAa;AACvC,iBAAO,qCAAqB,UAAU,SAAS,CAAC;AAAA,IAClD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,eAAuC;AAC3C,QAAI;AACF,YAAM,UAAU,KAAK,WAAW;AAChC,YAAM,YAAY,QAAQ,aAAa;AACvC,aAAO,UAAU,SAAS;AAAA,IAC5B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,IAAuB;AAC3C,UAAM,UAAU,KAAK,WAAW;AAEhC,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,eAAe,IAAI,YAAY,EAAE,OAAO,OAAO;AACrD,UAAM,YAAY,QAAQ,KAAK,YAAY;AAC3C,WAAO,aAAAC,QAAK,OAAO,UAAU,SAAS;AAAA,EACxC;AAAA,EAEA,qBAA8B;AAC5B,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,OAAO,UAAqC;AAC1C,UAAM,OAAa,0BAAmB,QAAQ;AAC9C,UAAM,UAAU,4BAAQ,WAAW,SAAS;AAC5C,UAAM,YAAY,QAAQ,aAAa;AACvC,UAAM,gBAAY,qCAAqB,UAAU,SAAS,CAAC;AAC3D,WAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY,QAAQ,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAA8B;AAC5B,UAAM,WAAiB,wBAAiB,wBAAQ;AAChD,UAAM,OAAa,0BAAmB,QAAQ;AAC9C,UAAM,UAAU,4BAAQ,WAAW,SAAS;AAC5C,UAAM,YAAY,QAAQ,aAAa;AACvC,UAAM,gBAAY,qCAAqB,UAAU,SAAS,CAAC;AAC3D,WAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY,QAAQ,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAsB;AAC5B,QAAI,KAAK,QAAS,QAAO,KAAK;AAE9B,UAAM,iBAAa,iDAAkC,KAAK,QAAQ,KAAK,MAAM,IAAI;AACjF,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,yBAAyB;AAE1D,QAAI;AACF,aAAO,4BAAQ,WAAW,UAAiB;AAAA,IAC7C,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,cAAM,IAAI,MAAM,+BAA+B,MAAM,OAAO,EAAE;AAAA,MAChE;AACA,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF;AACF;;;AFpFO,IAAM,iBAAN,MAAkD;AAAA,EAMvD,YACU,QACA,OACR;AAFQ;AACA;AALV,SAAQ,gBAA+B;AACvC,SAAQ,kBAAiC;AAMvC,UAAM,qBAAiB,iCAAkB,QAAQ,MAAM,MAAM,OAAO,KAAK,MAAM,aAAa;AAE5F,SAAK,aAAa;AAAA,MAChB,WAAW,KAAK,OAAO,QAAQ,YAAY,YAAY,KAAK,OAAO,QAAQ,YAAY,YAAY;AAAA,MACnG,SAAS,eAAe;AAAA,MACxB,UAAU,IAAI,8BAAU,iBAAiB;AAAA,IAC3C;AACA,SAAK,iBAAiB,KAAK,eAAe;AAC1C,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEQ,iBAAwC;AAC9C,UAAM,SAAS,KAAK,OAAO,MAAM,UAAU,KAAK,MAAM,IAAI;AAC1D,QAAI,CAAC,OAAQ,QAAO;AACpB,QAAI,OAAO,WAAW,SAAU,OAAM,IAAI,MAAM,uCAAuC,MAAM,EAAE;AAE/F,UAAM,wBAAwB,KAAK,OAAO,kBAAkB,KAAK,MAAM,IAAI;AAC3E,UAAM,kBAAkB,wBAAwB,OAAO,QAAQ;AAC/D,QAAI,gBAAiB,QAAO,gBAAgB,KAAK,QAAQ,KAAK,KAAK;AAEnE,QAAI,OAAO,aAAa,aAAc,QAAO,IAAI,yBAAyB,KAAK,QAAQ,KAAK,KAAK;AACjG,QAAI,OAAO,aAAa,WAAY,QAAO,IAAI,uBAAuB,KAAK,QAAQ,KAAK,KAAK;AAC7F,UAAM,IAAI,MAAM,mCAAmC,KAAK,MAAM,IAAI,KAAK,OAAO,QAAQ,EAAE;AAAA,EAC1F;AAAA,EAEQ,kBAAkB;AACxB,6CAAsB,KAAK,cAAc,EAAE,KAAK,CAAC,UAAgE;AAC/G,WAAK,gBAAgB,MAAM;AAC3B,WAAK,kBAAkB,MAAM;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,IAA2E;AAC/F,QAAI,CAAC,MAAM,OAAO,OAAO,SAAU,OAAM,IAAI,MAAM,4BAA4B;AAC/E,QAAI,CAAC,KAAK,eAAgB,OAAM,IAAI,MAAM,8BAA8B;AAExE,UAAM,YAAY,KAAK,WAAW;AAClC,QAAI,CAAC,UAAW,OAAM,IAAI,MAAM,yBAAyB;AAEzD,QAAI,KAAK,0BAA0B,4BAA4B,KAAK,0BAA0B,wBAAwB;AACpH,YAAM,UAAU,KAAK,eAAe,mBAAmB;AACvD,YAAM,KAAK,WAAW,SAAS,OAAO,KAAK,WAAW,WAAW,WAAW,OAAO;AACnF,YAAM,OAAO,UAAM,6BAAQ,KAAK,UAAU;AAC1C,YAAM,UAAU,MAAM,KAAK,QAAQ,SAAS;AAE5C,UAAI,GAAG,WAAW;AAChB,eAAO;AAAA,MACT;AAEA,YAAM,WAAW,MAAM,QAAQ,uBAAuB;AAAA,QACpD,YAAY,GAAG;AAAA,QACf,SAAS,GAAG;AAAA,MACd,CAAC;AAED,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW,SAAS,YAAY;AAAA,QAChC,iBAAiB,SAAS,YAAY;AAAA,MACxC;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAAA,EAEA,MAAM,iBAAiB,KAAgF;AACrG,QAAI,IAAI,WAAW,EAAG,QAAO,CAAC;AAE9B,WAAO,QAAQ,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,gBAAgB,EAAE,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,QAAI,CAAC,KAAK,eAAgB,OAAM,IAAI,MAAM,8BAA8B;AACxE,WAAO,MAAM,KAAK,eAAe,YAAY,OAAO;AAAA,EACtD;AAAA,EAEA,MAAM,gBAAgB,IAAoD;AACxE,QAAI,CAAC,MAAM,OAAO,OAAO,SAAU,OAAM,IAAI,MAAM,4BAA4B;AAC/E,QAAI,CAAC,KAAK,eAAgB,OAAM,IAAI,MAAM,8BAA8B;AAExE,UAAM,YAAY,KAAK,WAAW;AAClC,QAAI,CAAC,UAAW,OAAM,IAAI,MAAM,yBAAyB;AAEzD,QAAI,GAAG,iBAAiB;AACtB,aAAO,GAAG;AAAA,IACZ;AAEA,QAAI,KAAK,0BAA0B,4BAA4B,KAAK,0BAA0B,wBAAwB;AACpH,YAAM,UAAU,KAAK,eAAe,mBAAmB;AACvD,YAAM,KAAK,WAAW,SAAS,OAAO,KAAK,WAAW,WAAW,WAAW,OAAO;AACnF,YAAM,OAAO,UAAM,6BAAQ,KAAK,UAAU;AAC1C,YAAM,UAAU,MAAM,KAAK,QAAQ,SAAS;AAE5C,YAAM,SAAS,MAAM,QAAQ,uBAAuB;AAAA,QAClD,YAAY,GAAG;AAAA,QACf,SAAS,GAAG;AAAA,MACd,CAAC;AAED,aAAO,OAAO,YAAY;AAAA,IAC5B;AAEA,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAAA,EAEA,MAAM,iBAAiB,KAAyD;AAC9E,WAAO,QAAQ,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,gBAAgB,EAAE,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,UAAqC;AAC1C,QAAI,CAAC,KAAK,eAAgB,OAAM,IAAI,MAAM,8BAA8B;AACxE,WAAO,KAAK,eAAe,OAAO,QAAQ;AAAA,EAC5C;AAAA,EAEA,WAA8B;AAC5B,QAAI,CAAC,KAAK,eAAgB,OAAM,IAAI,MAAM,8BAA8B;AACxE,WAAO,KAAK,eAAe,SAAS;AAAA,EACtC;AAAA,EAEA,aAA4B;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAA8B;AAC5B,WAAO,KAAK;AAAA,EACd;AACF;;;AG5IO,IAAM,oBAAoB,CAAC,WAAsB,eAAyE;AAC/H,SAAO,CAAC,QAA0B,aAA4B;AAC5D,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,GAAG,SAAS,sCAAsC;AAEjF,WAAO;AAAA,MACL,WAAW,WAAW,OAAO,GAAG;AAAA,MAChC,SAAS,MAAM,SAAS,QAAQ;AAAA,MAChC,UAAU,IAAI,iBAAiB,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MAC7D,QAAQ,IAAI,eAAe,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MACzD,YAAY,IAAI,mBAAmB;AAAA,MACnC,UAAU,SAAS;AAAA,MACnB,UAAU,IAAI,iBAAiB,WAAW,OAAO,GAAG,GAAG,MAAM;AAAA,MAC7D,YAAY,MAAM,SAAS,WAAW;AAAA,MACtC,cAAc,MAAM,SAAS,aAAa;AAAA,MAC1C,YAAY,IAAI,mBAAmB,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MACjE,QAAQ,IAAI,eAAe,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,IAC3D;AAAA,EACF;AACF;;;ACvBO,IAAM,kBAAkC;AAAA,EAC7C,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,cAAmC,kBAAkB,QAAqB;AAAA,EACrF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;","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")
|
|
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
|
-
|
|
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() {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/WarpNearDataLoader.ts","../src/constants.ts","../src/tokens.ts","../src/WarpNearExecutor.ts","../src/WarpNearOutput.ts","../src/WarpNearSerializer.ts","../src/WarpNearExplorer.ts","../src/WarpNearWallet.ts","../src/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.
|
|
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.
|
|
41
|
+
"@vleap/warps": "^3.0.0-beta.178",
|
|
42
42
|
"bs58": "^6.0.0",
|
|
43
43
|
"near-api-js": "^6.5.1"
|
|
44
44
|
}
|