@joai/warps-adapter-multiversx 1.1.5 → 1.1.7

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.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _joai_warps from '@joai/warps';
2
- import { WarpChainName, WarpChainEnv, WarpChainInfo, ChainAdapterFactory, WarpChainAsset, WarpClientConfig, WarpRegistryInfo, WarpRegistryConfigInfo, WarpNativeValue, AdapterWarpAbiBuilder, WarpAbiContents, WarpAdapterGenericTransaction, WarpAbi, WarpCacheConfig, WarpContractAction, WarpQueryAction, WarpBrand, WarpBuilder, AdapterWarpBuilder, Warp, WarpContract, WarpContractVerification, AdapterWarpDataLoader, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpRegistry, AdapterWarpOutput, AdapterTypeRegistry as AdapterTypeRegistry$1, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WarpWalletDetails, WarpWalletProvider } from '@joai/warps';
2
+ import { WarpChainName, WarpChainEnv, WarpChainInfo, ChainAdapterFactory, WarpChainAsset, WarpClientConfig, WarpRegistryInfo, WarpRegistryConfigInfo, WarpNativeValue, AdapterWarpAbiBuilder, WarpAbiContents, WarpAdapterGenericTransaction, WarpAbi, WarpCacheConfig, WarpContractAction, WarpQueryAction, Warp, WarpBrand, WarpBuilder, AdapterWarpBuilder, WarpContract, WarpContractVerification, AdapterWarpDataLoader, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpRegistry, AdapterWarpOutput, AdapterTypeRegistry as AdapterTypeRegistry$1, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WarpWalletDetails, WarpWalletProvider } from '@joai/warps';
3
3
  import { NetworkEntrypoint, TypedValue, Type, OptionValue, OptionalValue, List, VariadicValue, CompositeValue, StringValue, U8Value, U16Value, U32Value, U64Value, BigUIntValue, BooleanValue, AddressValue, TokenIdentifierValue, BytesValue, TokenTransfer, Struct, CodeMetadataValue, NothingValue, TransactionOnNetwork, AbiRegistry, Transaction } from '@multiversx/sdk-core';
4
4
  import { WarpAdapterGenericTransaction as WarpAdapterGenericTransaction$1, AdapterTypeRegistry } from '@joai/warps/src/types';
5
5
 
@@ -104,6 +104,7 @@ declare class WarpMultiversxAbiBuilder implements AdapterWarpAbiBuilder {
104
104
  createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<WarpAbi | null>;
105
105
  getAbiForAction(action: WarpContractAction | WarpQueryAction): Promise<AbiRegistry>;
106
106
  fetchAbi(action: WarpContractAction | WarpQueryAction): Promise<AbiRegistry>;
107
+ endpointsToWarps(abi: AbiRegistry, contractAddress: string, rawAbiJson?: object): Warp[];
107
108
  }
108
109
 
109
110
  declare class WarpMultiversxBrandBuilder {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _joai_warps from '@joai/warps';
2
- import { WarpChainName, WarpChainEnv, WarpChainInfo, ChainAdapterFactory, WarpChainAsset, WarpClientConfig, WarpRegistryInfo, WarpRegistryConfigInfo, WarpNativeValue, AdapterWarpAbiBuilder, WarpAbiContents, WarpAdapterGenericTransaction, WarpAbi, WarpCacheConfig, WarpContractAction, WarpQueryAction, WarpBrand, WarpBuilder, AdapterWarpBuilder, Warp, WarpContract, WarpContractVerification, AdapterWarpDataLoader, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpRegistry, AdapterWarpOutput, AdapterTypeRegistry as AdapterTypeRegistry$1, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WarpWalletDetails, WarpWalletProvider } from '@joai/warps';
2
+ import { WarpChainName, WarpChainEnv, WarpChainInfo, ChainAdapterFactory, WarpChainAsset, WarpClientConfig, WarpRegistryInfo, WarpRegistryConfigInfo, WarpNativeValue, AdapterWarpAbiBuilder, WarpAbiContents, WarpAdapterGenericTransaction, WarpAbi, WarpCacheConfig, WarpContractAction, WarpQueryAction, Warp, WarpBrand, WarpBuilder, AdapterWarpBuilder, WarpContract, WarpContractVerification, AdapterWarpDataLoader, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpRegistry, AdapterWarpOutput, AdapterTypeRegistry as AdapterTypeRegistry$1, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WarpWalletDetails, WarpWalletProvider } from '@joai/warps';
3
3
  import { NetworkEntrypoint, TypedValue, Type, OptionValue, OptionalValue, List, VariadicValue, CompositeValue, StringValue, U8Value, U16Value, U32Value, U64Value, BigUIntValue, BooleanValue, AddressValue, TokenIdentifierValue, BytesValue, TokenTransfer, Struct, CodeMetadataValue, NothingValue, TransactionOnNetwork, AbiRegistry, Transaction } from '@multiversx/sdk-core';
4
4
  import { WarpAdapterGenericTransaction as WarpAdapterGenericTransaction$1, AdapterTypeRegistry } from '@joai/warps/src/types';
5
5
 
@@ -104,6 +104,7 @@ declare class WarpMultiversxAbiBuilder implements AdapterWarpAbiBuilder {
104
104
  createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<WarpAbi | null>;
105
105
  getAbiForAction(action: WarpContractAction | WarpQueryAction): Promise<AbiRegistry>;
106
106
  fetchAbi(action: WarpContractAction | WarpQueryAction): Promise<AbiRegistry>;
107
+ endpointsToWarps(abi: AbiRegistry, contractAddress: string, rawAbiJson?: object): Warp[];
107
108
  }
108
109
 
109
110
  declare class WarpMultiversxBrandBuilder {
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var st=Object.create;var Ce=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,lt=Object.prototype.hasOwnProperty;var pt=(i,e)=>{for(var t in e)Ce(i,t,{get:e[t],enumerable:!0})},Oe=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ot(e))!lt.call(i,n)&&n!==t&&Ce(i,n,{get:()=>e[n],enumerable:!(r=it(e,n))||r.enumerable});return i};var ut=(i,e,t)=>(t=i!=null?st(ct(i)):{},Oe(e||!i||!i.__esModule?Ce(t,"default",{value:i,enumerable:!0}):t,i)),mt=i=>Oe(Ce({},"__esModule",{value:!0}),i);var _t={};pt(_t,{ClawsAdapter:()=>Me,ClawsExplorers:()=>Ye,ExplorerUrls:()=>G,KnownTokens:()=>Se,MultiversxAdapter:()=>ke,MultiversxExplorers:()=>Xe,MultiversxExplorersConfig:()=>Be,NativeTokenClaw:()=>at,NativeTokenEgld:()=>xe,WarpMultiversxAbiBuilder:()=>D,WarpMultiversxBrandBuilder:()=>pe,WarpMultiversxBuilder:()=>ue,WarpMultiversxConstants:()=>ft,WarpMultiversxContractLoader:()=>le,WarpMultiversxDataLoader:()=>me,WarpMultiversxExecutor:()=>de,WarpMultiversxExplorer:()=>he,WarpMultiversxInputTypes:()=>w,WarpMultiversxOutput:()=>X,WarpMultiversxRegistry:()=>fe,WarpMultiversxSerializer:()=>L,WarpMultiversxWallet:()=>we,address_value:()=>Ot,asset_value:()=>Lt,biguint_value:()=>Vt,boolean_value:()=>Mt,codemeta:()=>Tt,codemeta_value:()=>Kt,composite_value:()=>St,createMultiversxAdapter:()=>ve,findKnownTokenById:()=>Ne,getAllMultiversxAdapters:()=>vt,getAllMultiversxChainNames:()=>dt,getKnownTokensForChain:()=>ht,getMultiversxEntrypoint:()=>T,getMultiversxRegistryAddress:()=>S,getNormalizedTokenIdentifier:()=>ce,hex_value:()=>Dt,isNativeToken:()=>Q,list:()=>At,list_value:()=>Pt,nothing_value:()=>Ht,option_value:()=>Et,optional:()=>xt,optional_value:()=>bt,string_value:()=>Nt,toTypedConfigInfo:()=>Fe,toTypedRegistryInfo:()=>ge,token:()=>Ct,token_value:()=>Rt,u16_value:()=>Ut,u32_value:()=>Ft,u64_value:()=>kt,u8_value:()=>Bt,variadic_value:()=>It});module.exports=mt(_t);var be=require("@joai/warps"),dt=()=>[be.WarpChainName.Multiversx,be.WarpChainName.Claws];var nt=require("@joai/warps");var M=require("@multiversx/sdk-core"),E=require("@joai/warps");var te=require("@multiversx/sdk-core"),Re=require("@joai/warps"),Q=i=>!i.includes("-"),ce=i=>Q(i)?`${i}-000000`:i,T=(i,e,t)=>{let r="warp-sdk",s=t?(0,Re.getProviderConfig)(t,i.name,e,i.defaultApiUrl):{url:i.defaultApiUrl},o=s.url,c={headers:s.headers};return e==="devnet"?new te.DevnetEntrypoint({url:o,kind:"api",clientName:r,networkProviderConfig:c}):e==="testnet"?new te.TestnetEntrypoint({url:o,kind:"api",clientName:r,networkProviderConfig:c}):new te.MainnetEntrypoint({url:o,kind:"api",clientName:r,networkProviderConfig:c})};var Pe=require("@joai/warps");var le=class{constructor(e){this.config=e}async getContract(e,t){try{let s=await T(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}`);return{address:e,owner:s.ownerAddress,verified:s.isVerified||!1}}catch(r){return Pe.WarpLogger.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(e,t){try{let s=await T(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}/verification`);return{codeHash:s.codeHash,abi:s.source.abi}}catch(r){return Pe.WarpLogger.error("WarpContractLoader: getVerificationInfo error",r),null}}};var D=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new le(this.config),this.cache=new E.WarpCache(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=(0,E.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new M.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new M.TransferTransactionsFactory({config:r}),s=M.Address.newFromBech32(t),o={protocol:(0,E.getLatestProtocolIdentifier)("abi"),content:e},c=JSON.stringify(o),l=await n.createTransactionForTransfer(s,{receiver:s,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(c))});return l.gasLimit=l.gasLimit+BigInt(2e6),l}async createFromRaw(e){return JSON.parse(e)}async createFromTransaction(e){let t=await this.createFromRaw(e.data.toString());return t.meta={chain:this.chain.name,identifier:(0,E.createWarpIdentifier)(this.chain.name,"hash",e.hash),query:null,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},t}async createFromTransactionHash(e,t){let r=E.WarpCacheKey.WarpAbi(this.config.env,e);if(t){let o=this.cache.get(r);if(o)return E.WarpLogger.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${e}`),o}let s=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let o=await s.getTransaction(e),c=await this.createFromTransaction(o);return t&&t.ttl&&c&&this.cache.set(r,c,t.ttl),c}catch(o){return E.WarpLogger.error("WarpAbiBuilder: Error creating from transaction hash",o),null}}async getAbiForAction(e){if(e.abi)return await this.fetchAbi(e);if(!e.address)throw new Error("WarpActionExecutor: Address not found");let t=await this.contractLoader.getVerificationInfo(e.address,this.chain);if(!t)throw new Error("WarpActionExecutor: Verification info not found");return M.AbiRegistry.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(E.WarpConstants.IdentifierType.Hash)){let t=e.abi.split(E.WarpConstants.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return M.AbiRegistry.create(r.content)}else{let r=await(await fetch(e.abi)).json();return M.AbiRegistry.create(r)}}};var j=require("@multiversx/sdk-core"),_=require("@joai/warps"),De=require("buffer");var pe=class{constructor(e,t){this.config=e;this.chain=t;this.core=new _.WarpBrandBuilder(e)}async createInscriptionTransaction(e){let t=(0,_.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new j.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new j.TransferTransactionsFactory({config:r}),s=j.Address.newFromBech32(t),o=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(s,{receiver:j.Address.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(De.Buffer.from(o))})}async createFromTransaction(e,t=!1){let r=await this.core.createFromRaw(e.data.toString(),t);return r.meta={query:null,chain:this.chain.name,identifier:(0,_.createWarpIdentifier)(this.chain.name,"hash",e.hash),hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},r}async createFromTransactionHash(e){let r=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let n=await r.getTransaction(e);return this.createFromTransaction(n)}catch(n){return _.WarpLogger.error("BrandBuilder: Error creating from transaction hash",n),null}}};var J=require("@multiversx/sdk-core"),B=require("@joai/warps");var ue=class extends B.WarpBuilder{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new B.WarpCache(t.env,t.cache),this.core=new B.WarpBuilder(t)}async createInscriptionTransaction(t){let r=(0,B.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new J.TransactionsFactoryConfig({chainID:this.chain.chainId}),s=new J.TransferTransactionsFactory({config:n}),o=J.Address.newFromBech32(r),c=JSON.stringify(t),l=await s.createTransactionForTransfer(o,{receiver:J.Address.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(c))});return l.gasLimit=l.gasLimit+BigInt(2e6),l}async createFromTransaction(t,r=!1){let n=await this.core.createFromRaw(t.data.toString(),r);return n.meta={chain:this.chain.name,identifier:(0,B.createWarpIdentifier)(this.chain.name,"hash",t.hash),query:null,hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},n}async createFromTransactionHash(t,r){let n=B.WarpCacheKey.Warp(this.config.env,t);if(r){let c=this.cache.get(n);if(c)return B.WarpLogger.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),c}let o=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await o.getTransaction(t),l=await this.createFromTransaction(c);return r&&r.ttl&&l&&this.cache.set(n,l,r.ttl),l}catch(c){return B.WarpLogger.error("WarpBuilder: Error creating from transaction hash",c),null}}};var $=require("@multiversx/sdk-core"),re=require("@joai/warps");var Ie=require("@joai/warps");var Ke=require("@joai/warps"),Le=Ke.WarpChainName.Multiversx,He=[{chain:Le,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:Le,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];var _e=require("@joai/warps"),I=_e.WarpChainName.Multiversx,$e=[{chain:I,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:I,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:I,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:I,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:I,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:I,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:I,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:I,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:I,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:I,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:I,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:I,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:I,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:I,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:I,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];var ze=require("@joai/warps"),Ge=ze.WarpChainName.Multiversx,qe=[{chain:Ge,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:Ge,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];var je=require("@joai/warps"),Qe=je.WarpChainName.Claws,Te=[{chain:Qe,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:Qe,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Se={[Ie.WarpChainName.Multiversx]:{mainnet:$e,testnet:qe,devnet:He},[Ie.WarpChainName.Claws]:{mainnet:Te,testnet:Te,devnet:Te}},Ne=(i,e,t)=>(Se[i]?.[e]||[]).find(n=>n.identifier===t)||null,ht=(i,e)=>Se[i]?.[e]||[];var me=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new re.WarpCache(e.env,e.cache)}async getAccount(e){let r=await T(this.chain,this.config.env,this.config).createNetworkProvider().getAccount($.Address.newFromBech32(e));return{chain:this.chain.name,address:r.address.toBech32(),balance:r.balance}}async getAccountAssets(e){let t=T(this.chain,this.config.env,this.config).createNetworkProvider(),r=t.getAccount($.Address.newFromBech32(e)),n=t.getFungibleTokensOfAccount($.Address.newFromBech32(e)),[s,o]=await Promise.all([r,n]),c=s.balance>0?[{...this.chain.nativeToken,amount:s.balance}]:[];return c.push(...o.map(l=>({chain:this.chain.name,identifier:l.token.identifier,name:l.raw.name,symbol:l.raw.ticker,amount:l.amount,decimals:l.raw.decimals,logoUrl:l.raw.assets?.pngUrl||"",price:l.raw.price?Number(l.raw.price):void 0,supply:l.raw.supply?BigInt(l.raw.supply):void 0}))),c}async getAsset(e){let t=re.WarpCacheKey.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=Ne(this.chain.name,this.config.env,e);if(n)return{chain:this.chain.name,identifier:e,name:n.name,symbol:n.symbol,amount:0n,decimals:n.decimals,logoUrl:n.logoUrl};let s=new $.TokenComputer,o=Q(e)?0n:s.extractNonceFromExtendedIdentifier(e),c=new $.Token({identifier:e,nonce:BigInt(o||0)}),l=s.isFungible(c),f=T(this.chain,this.config.env,this.config).createNetworkProvider(),g=ce(e),d=await f.doGetGeneric(`tokens/${g}`),C={chain:this.chain.name,identifier:c.identifier,name:d.name,symbol:d.ticker,amount:0n,decimals:d.decimals,logoUrl:d.assets?.pngUrl||null,price:d.price?Number(d.price):void 0,supply:d.supply?BigInt(d.supply):void 0};return this.cache.set(t,C,re.CacheTtl.OneHour),C}async getAction(e,t=!1){let r=T(this.chain,this.config.env,this.config),n=t?await r.awaitCompletedTransaction(e):await r.getTransaction(e);return{chain:this.chain.name,id:n.hash,receiver:n.receiver.toBech32(),sender:n.sender.toBech32(),value:n.value,function:n.function,status:this.toActionStatus(n),createdAt:this.toActionCreatedAt(n),error:n?.smartContractResults.map(s=>s.raw.returnMessage)[0]||null,tx:n}}async getAccountActions(e,t){let r=T(this.chain,this.config.env,this.config).createNetworkProvider(),n=`accounts/${e}/transactions`,s=new URLSearchParams,o=t?.size||25,c=t?.page||0;if(c>0){let f=c*o;s.append("from",f.toString())}return o!==25&&s.append("size",o.toString()),s.toString()&&(n+=`?${s.toString()}`),(await r.doGetGeneric(n)).map(f=>({chain:this.chain.name,id:f.txHash,receiver:f.receiver,sender:f.sender,value:f.value,function:f.function,status:this.toActionStatus(f),createdAt:this.toActionCreatedAt(f)}))}toActionStatus(e){return e.status?.isSuccessful?.()?"success":e.status?.isFailed?.()?"failed":"pending"}toActionCreatedAt(e){return new Date(e.timestamp||e.timestamp*1e3).toISOString()}};var x=require("@multiversx/sdk-core"),U=require("@joai/warps");var v=require("@joai/warps"),ne=require("@multiversx/sdk-core");var a=require("@multiversx/sdk-core"),Ze=require("@joai/warps");var gt=i=>i?typeof i=="string"?i:i.address:null,Je=(i,e)=>gt(i.user?.wallets?.[e]||null);var h={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>Je(i.config,i.adapter.chainInfo.name)},UserWalletPublicKey:{Placeholder:"USER_WALLET_PUBLICKEY",Accessor:i=>{if(!i.adapter.wallet)return null;try{return i.adapter.wallet.getPublicKey()||null}catch{return null}}},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:i=>i.adapter.chainInfo.defaultApiUrl},ChainAddressHrp:{Placeholder:"CHAIN_ADDRESS_HRP",Accessor:i=>i.adapter.chainInfo.addressHrp}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",ArgListSeparator:",",ArgStructSeparator:";",Transform:{Prefix:"transform:"},Source:{UserWallet:"user:wallet"},Position:{Payload:"payload:"},Alerts:{TriggerEventPrefix:"event"}},u={Option:"option",Vector:"vector",Tuple:"tuple",Struct:"struct",String:"string",Uint8:"uint8",Uint16:"uint16",Uint32:"uint32",Uint64:"uint64",Uint128:"uint128",Uint256:"uint256",Biguint:"biguint",Bool:"bool",Address:"address",Asset:"asset",Hex:"hex"};var ft={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},w={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},Xe=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(Xe||{}),Ye=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(Ye||{}),Be={multiversx:{mainnet:["multiversx_explorer"],testnet:["multiversx_explorer_testnet"],devnet:["multiversx_explorer_devnet"]},claws:{mainnet:["claws_explorer"],testnet:["claws_explorer_testnet"],devnet:["claws_explorer_devnet"]}},G={multiversx_explorer:"https://explorer.multiversx.com",multiversx_explorer_devnet:"https://devnet-explorer.multiversx.com",multiversx_explorer_testnet:"https://testnet-explorer.multiversx.com",claws_explorer:"https://explorer.claws.network",claws_explorer_devnet:"https://explorer.claws.network",claws_explorer_testnet:"https://explorer.claws.network"};var yt=new RegExp(`${h.ArgParamsSeparator}(.*)`),L=class{constructor(e){this.coreSerializer=new Ze.WarpSerializer(e)}typedToString(e){let t=e.getType();if(t.hasExactClass(a.OptionType.ClassName)||e.hasClassOrSuperclass(a.OptionValue.ClassName)){if(!e.isSet())return u.Option+h.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return u.Option+h.ArgParamsSeparator+r}if(t.hasExactClass(a.VariadicType.ClassName)||e.hasClassOrSuperclass(a.VariadicValue.ClassName)){let r=e.getItems();if(r.length===0){let g=this.typeToString(t.getFirstTypeParameter());return u.Vector+h.ArgParamsSeparator+g+h.ArgParamsSeparator}let n=r.map(g=>this.typedToString(g));if(n.every(g=>g.startsWith(u.Tuple)))return u.Vector+h.ArgParamsSeparator+n.join(",");let s=n[0],o=s.indexOf(h.ArgParamsSeparator),c=s.substring(0,o),l=n.map(g=>{let d=g.indexOf(h.ArgParamsSeparator);return g.substring(d+1)}),f=c.startsWith(u.Struct)?h.ArgStructSeparator:h.ArgListSeparator;return u.Vector+h.ArgParamsSeparator+c+h.ArgParamsSeparator+l.join(f)}if(t.hasExactClass(a.OptionalType.ClassName)||e.hasClassOrSuperclass(a.OptionalValue.ClassName)){if(!e.isSet())return w.Optional+h.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return w.Optional+h.ArgParamsSeparator+r}if(t.hasExactClass(a.ListType.ClassName)||e.hasClassOrSuperclass(a.List.ClassName)){let n=e.getItems().map(l=>this.typedToString(l));if(n.every(l=>l.startsWith(u.Tuple)))return w.List+h.ArgParamsSeparator+n.join(",");let o=n.map(l=>l.split(h.ArgParamsSeparator)[0])[0],c=n.map(l=>l.split(h.ArgParamsSeparator)[1]);return w.List+h.ArgParamsSeparator+o+h.ArgParamsSeparator+c.join(h.ArgListSeparator)}if(t.hasExactClass(a.CompositeType.ClassName)||e.hasClassOrSuperclass(a.CompositeValue.ClassName)){let n=e.getItems().map(s=>{let o=this.typedToString(s),c=o.indexOf(h.ArgParamsSeparator),l=o.substring(0,c),f=o.substring(c+1);return`${l},${f}`});return`${u.Tuple}(${n.join(",")})`}if(t.hasExactClass(a.BigUIntType.ClassName)||e.hasClassOrSuperclass(a.BigUIntValue.ClassName)||t.getName()==="BigUint")return u.Biguint+h.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.U8Type.ClassName)||e.hasClassOrSuperclass(a.U8Value.ClassName))return u.Uint8+h.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U16Type.ClassName)||e.hasClassOrSuperclass(a.U16Value.ClassName))return u.Uint16+h.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U32Type.ClassName)||e.hasClassOrSuperclass(a.U32Value.ClassName))return u.Uint32+h.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U64Type.ClassName)||e.hasClassOrSuperclass(a.U64Value.ClassName))return u.Uint64+h.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.StringType.ClassName)||e.hasClassOrSuperclass(a.StringValue.ClassName))return u.String+h.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.BooleanType.ClassName)||e.hasClassOrSuperclass(a.BooleanValue.ClassName))return u.Bool+h.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.AddressType.ClassName)||e.hasClassOrSuperclass(a.AddressValue.ClassName))return u.Address+h.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(a.BytesType.ClassName)||e.hasClassOrSuperclass(a.BytesValue.ClassName))return u.Hex+h.ArgParamsSeparator+e.valueOf().toString("hex");if(t.getName()==="EsdtTokenPayment"){let r=e.getFieldValue("token_identifier").valueOf(),n=e.getFieldValue("token_nonce").valueOf(),s=e.getFieldValue("amount").valueOf(),c=new a.TokenComputer().computeExtendedIdentifier(new a.Token({identifier:r,nonce:BigInt(n)}));return u.Asset+h.ArgParamsSeparator+c+h.ArgCompositeSeparator+s}if(t.hasExactClass(a.StructType.ClassName)||e.hasClassOrSuperclass(a.Struct.ClassName)){let r=e,s=r.getType().getName(),o=r.getFields();if(o.length===0)return`${u.Struct}(${s})${h.ArgParamsSeparator}`;let c=o.map(l=>{let f=l.value.getType(),d=this.typedToString(l.value).split(h.ArgParamsSeparator),C=d.length>2?d.slice(2).join(h.ArgParamsSeparator):d[1]||"";return`(${l.name}${h.ArgParamsSeparator}${this.typeToString(f)})${C}`});return`${u.Struct}(${s})${h.ArgParamsSeparator}${c.join(h.ArgListSeparator)}`}if(t.hasExactClass(a.TokenIdentifierType.ClassName)||e.hasClassOrSuperclass(a.TokenIdentifierValue.ClassName))return w.Token+h.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.CodeMetadataType.ClassName)||e.hasClassOrSuperclass(a.CodeMetadataValue.ClassName))return w.CodeMeta+h.ArgParamsSeparator+e.valueOf().toString();throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${e.getClassName()}`)}typedToNative(e){let t=this.typedToString(e);return this.coreSerializer.stringToNative(t)}nativeToTyped(e,t){if(e.startsWith(u.Tuple))return this.stringToTyped(e+":");let r=this.coreSerializer.nativeToString(e,t);return this.stringToTyped(r)}nativeToType(e){if(e.startsWith(u.Tuple)){let t=e.match(/\(([^)]+)\)/)?.[1];if(!t)throw new Error(`Invalid tuple type format: ${e}`);let r=t.split(","),n=[];for(let s=0;s<r.length;s+=2)n.push(r[s]);return new a.CompositeType(...n.map(s=>this.nativeToType(s)))}if(e.startsWith(u.Struct)){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Struct type must include a name in the format struct(Name)");let r=t[1];return new a.StructType(r,[])}if(e===u.String)return new a.StringType;if(e===u.Uint8)return new a.U8Type;if(e===u.Uint16)return new a.U16Type;if(e===u.Uint32)return new a.U32Type;if(e===u.Uint64)return new a.U64Type;if(e===u.Biguint)return new a.BigUIntType;if(e===u.Bool)return new a.BooleanType;if(e===u.Address)return new a.AddressType;if(e===u.Hex)return new a.BytesType;if(e===u.Asset)return new a.StructType("EsdtTokenPayment",[new a.FieldDefinition("token_identifier","",new a.TokenIdentifierType),new a.FieldDefinition("token_nonce","",new a.U64Type),new a.FieldDefinition("amount","",new a.BigUIntType)]);if(e===w.Token)return new a.TokenIdentifierType;if(e===w.CodeMeta)return new a.CodeMetadataType;throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${e}`)}stringToTyped(e){let[t,r]=e.split(/:(.*)/,2);if(t===u.Option){let n=this.stringToTyped(r);return n instanceof a.NothingValue?a.OptionValue.newMissingTyped(n.getType()):a.OptionValue.newProvided(n)}if(t===u.Vector){let n=r.indexOf(h.ArgParamsSeparator),s=r.substring(0,n),o=r.substring(n+1);if(s.startsWith(u.Tuple)){let d=o.split(",").map(C=>this.stringToTyped(C));return new a.VariadicValue(new a.VariadicType(this.nativeToType(s)),d)}if(o.includes("tuple(")){let g=this.splitTupleStrings(o),d=g.map(A=>this.stringToTyped(A)),P=g[0].match(/^(tuple\([^)]+\))/),y=P?P[1]:"tuple";return new a.VariadicValue(new a.VariadicType(this.nativeToType(y)),d)}let c=s.startsWith(u.Struct)?h.ArgStructSeparator:h.ArgListSeparator,f=o.split(c).map(g=>this.stringToTyped(`${s}:${g}`));return new a.VariadicValue(new a.VariadicType(this.nativeToType(s)),f)}if(t.startsWith(u.Tuple)){let n=t.match(/\(([^)]+)\)/)?.[1];if(!n)throw new Error(`Invalid tuple format: ${t}`);let s=n.split(","),o=[];for(let l=0;l<s.length;l+=2){let f=s[l],g=s[l+1];o.push(this.stringToTyped(`${f}:${g}`))}let c=o.map(l=>l.getType());return new a.CompositeValue(new a.CompositeType(...c),o)}if(t.startsWith(u.Struct)){let n=t.match(/\(([^)]+)\)/),s=n?n[1]:"CustomStruct";if(!r)return new a.Struct(new a.StructType(s,[]),[]);let o=r.split(h.ArgListSeparator),c=[],l=[];return o.forEach(f=>{let g=f.match(new RegExp(`^\\(([^${h.ArgParamsSeparator}]+)${h.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(g){let[,d,C,P]=g,y=this.stringToTyped(`${C}${h.ArgParamsSeparator}${P}`);c.push(new a.FieldDefinition(d,"",y.getType())),l.push(new a.Field(y,d))}}),new a.Struct(new a.StructType(s,c),l)}if(t===u.String)return r?a.StringValue.fromUTF8(r):new a.NothingValue;if(t===u.Uint8)return r?new a.U8Value(Number(r)):new a.NothingValue;if(t===u.Uint16)return r?new a.U16Value(Number(r)):new a.NothingValue;if(t===u.Uint32)return r?new a.U32Value(Number(r)):new a.NothingValue;if(t===u.Uint64)return r?new a.U64Value(BigInt(r)):new a.NothingValue;if(t===u.Biguint)return r?new a.BigUIntValue(BigInt(r)):new a.NothingValue;if(t===u.Bool)return r?new a.BooleanValue(typeof r=="boolean"?r:r==="true"):new a.NothingValue;if(t===u.Address)return r?new a.AddressValue(a.Address.newFromBech32(r)):new a.NothingValue;if(t===u.Hex)return r?a.BytesValue.fromHex(r):new a.NothingValue;if(t===u.Asset){let[n,s]=r.split(h.ArgCompositeSeparator),o=new a.TokenComputer,c=Q(n)?ce(n):o.extractIdentifierFromExtendedIdentifier(n),l=Q(n)?0n:o.extractNonceFromExtendedIdentifier(n);return new a.Struct(this.nativeToType("asset"),[new a.Field(new a.TokenIdentifierValue(c),"token_identifier"),new a.Field(new a.U64Value(BigInt(l)),"token_nonce"),new a.Field(new a.BigUIntValue(BigInt(s)),"amount")])}if(t===w.Null)return new a.NothingValue;if(t===w.Optional){let n=this.stringToTyped(r);return n instanceof a.NothingValue?a.OptionalValue.newMissing():new a.OptionalValue(n.getType(),n)}if(t===w.List){let[n,s]=r.split(yt,2),c=s.split(h.ArgListSeparator).map(l=>this.stringToTyped(n+h.ArgParamsSeparator+l));return new a.List(this.nativeToType(n),c)}if(t===w.Token)return r?new a.TokenIdentifierValue(r):new a.NothingValue;if(t===w.CodeMeta)return new a.CodeMetadataValue(a.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${t}`)}splitTupleStrings(e){let t=[],r="",n=0;for(let s=0;s<e.length;s++){let o=e[s];if(o==="(")n++;else if(o===")")n--;else if(o===","&&n===0){t.push(r.trim()),r="";continue}r+=o}return r.trim()&&t.push(r.trim()),t}typeToString(e){if(e.hasExactClass(a.OptionType.ClassName))return u.Option+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.VariadicType.ClassName))return u.Vector+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.StringType.ClassName))return u.String;if(e.hasExactClass(a.U8Type.ClassName))return u.Uint8;if(e.hasExactClass(a.U16Type.ClassName))return u.Uint16;if(e.hasExactClass(a.U32Type.ClassName))return u.Uint32;if(e.hasExactClass(a.U64Type.ClassName))return u.Uint64;if(e.hasExactClass(a.BigUIntType.ClassName))return u.Biguint;if(e.hasExactClass(a.BooleanType.ClassName))return u.Bool;if(e.hasExactClass(a.AddressType.ClassName))return u.Address;if(e.hasExactClass(a.BytesType.ClassName))return u.Hex;if(e.hasExactClass(a.TokenIdentifierType.ClassName))return w.Token;if(e.hasExactClass(a.OptionalType.ClassName))return w.Optional+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.ListType.ClassName))return w.List+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.CodeMetadataType.ClassName))return w.CodeMeta;if(e.hasExactClass(a.StructType.ClassName)&&e.getClassName()==="EsdtTokenPayment")return u.Asset;if(e.hasExactClass(a.StructType.ClassName))return`${u.Struct}(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var X=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new D(e,t),this.serializer=new L({typeRegistry:this.typeRegistry}),this.cache=new v.WarpCache(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(v.WarpCacheKey.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],s=await this.extractContractOutput(e,t,r,n),o=(0,v.getNextInfo)(this.config,[],e,t,s.output),c=(0,v.applyOutputToMessages)(e,s.output,this.config),l=(0,v.extractResolvedInputValues)(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:(0,v.getWarpWalletAddressFromConfig)(this.config,this.chain.name),txHash:r.hash,tx:r,next:o,values:s.values,output:s.output,messages:c,destination:null,resolvedInputs:l}}async extractContractOutput(e,t,r,n){let s=(0,v.getWarpActionByIndex)(e,t),o=[],c=[],l={};if(!e.output||s.type!=="contract")return{values:{string:o,native:c,mapped:{}},output:l};if(!Object.values(e.output).some(y=>y.includes("out")||y.includes("event"))){for(let[y,A]of Object.entries(e.output))l[y]=A;return{values:{string:o,native:c,mapped:{}},output:await(0,v.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}let g=await this.abi.getAbiForAction(s),d=new ne.TransactionEventsParser({abi:g}),P=new ne.SmartContractTransactionsOutcomeParser({abi:g}).parseExecute({transactionOnNetwork:r,function:s.func||void 0});for(let[y,A]of Object.entries(e.output)){if(A.startsWith(v.WarpConstants.Transform.Prefix))continue;if(A.startsWith("input.")){l[y]=A;continue}let N=(0,v.parseOutputOutIndex)(A);if(N!==null&&N!==t){l[y]=null;continue}let[V,z,q]=A.split(".");if(V==="event"){if(!z||isNaN(Number(q)))continue;let H=Number(q),W=(0,ne.findEventsByFirstTopic)(r,z),Ee=d.parseEvents({events:W})[0];if(!Ee||typeof Ee!="object"){l[y]=null;continue}let oe=Object.values(Ee)[H]||null;o.push(String(oe)),c.push(oe),l[y]=oe&&oe.valueOf()}else if(V==="out"||V.startsWith("out[")){if(!z)continue;let H=Number(z),W=P.values[H-1]||null;q&&(W=W[q]||null),W&&typeof W=="object"&&(W="toFixed"in W?W.toFixed():W.valueOf()),o.push(String(W)),c.push(W),l[y]=W&&W.valueOf()}else l[y]=A}return{values:{string:o,native:c,mapped:{}},output:await(0,v.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let s=t.map(g=>this.serializer.typedToString(g)),o=t.map(g=>this.serializer.typedToNative(g)[1]),c={string:s,native:o,mapped:{}},l={};if(!e.output)return{values:c,output:l};let f=g=>{let d=g.split(".").slice(1).map(P=>parseInt(P)-1);if(d.length===0)return;let C=o[d[0]];for(let P=1;P<d.length;P++){if(C==null)return;C=C[d[P]]}return C};for(let[g,d]of Object.entries(e.output)){if(d.startsWith(v.WarpConstants.Transform.Prefix))continue;let C=(0,v.parseOutputOutIndex)(d);if(C!==null&&C!==r){l[g]=null;continue}d.startsWith("out.")||d==="out"||d.startsWith("out[")?l[g]=f(d)||null:l[g]=d}return l=await(0,v.evaluateOutputCommon)(e,l,o,r,n,this.serializer.coreSerializer,this.config),{values:c,output:l}}async resolveWarpOutputRecursively(e){let t=e.warp,r=e.entryActionIndex,n=e.executor,s=e.inputs,o=e.meta,c=new Map,l=new Set,f=this;async function g(y,A=[]){if(c.has(y))return c.get(y);if(l.has(y))throw new Error(`Circular dependency detected at action ${y}`);l.add(y);let N=t.actions[y-1];if(!N)throw new Error(`Action ${y} not found`);let V;if(N.type==="query")V=await n.executeQuery(t,y,A);else if(N.type==="collect")V=await n.executeCollect(t,y,A,o);else throw new Error(`Unsupported or interactive action type: ${N.type}`);if(c.set(y,V),t.output)for(let z of Object.values(t.output)){let H=String(z).match(/^out\[(\d+)\]/);if(H){let W=parseInt(H[1],10);W!==y&&!c.has(W)&&await g(W)}}return l.delete(y),V}await g(r,s);let d={};for(let y of c.values())for(let[A,N]of Object.entries(y.output))N!==null?d[A]=N:A in d||(d[A]=null);let C=await(0,v.evaluateOutputCommon)(t,d,d,r,s,this.serializer.coreSerializer,this.config);return{...c.get(r),action:r,output:C}}};var Wt="EGLD-000000",de=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new L({typeRegistry:this.typeRegistry}),this.abi=new D(this.config,this.chain),this.output=new X(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=(0,U.getWarpActionByIndex)(e.warp,e.action),r=null;if(t.type==="transfer")r=await this.createTransferTransaction(e);else if(t.type==="contract")r=await this.createContractCallTransaction(e);else{if(t.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(t.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${t.type})`);return this.chain.minGasPrice&&(r.gasPrice=this.chain.minGasPrice),r}async createTransferTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createTransfer - destination not set");let t=(0,U.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=x.Address.newFromBech32(t),n=new x.TransactionsFactoryConfig({chainID:e.chain.chainId}),s=e.data?Buffer.from(this.serializer.stringToTyped(e.data).valueOf()):null,o=e.transfers.length===1&&e.transfers[0].identifier===this.chain.nativeToken?.identifier,l=(o?e.transfers[0].amount:0n)+e.value;return await new x.TransferTransactionsFactory({config:n}).createTransactionForTransfer(r,{receiver:x.Address.newFromBech32(e.destination),nativeAmount:l,tokenTransfers:o?[]:this.toTokenTransfers(e.transfers),data:s?new Uint8Array(s):void 0})}async createContractCallTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createContractCall - destination not set");let t=(0,U.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=(0,U.getWarpActionByIndex)(e.warp,e.action),n=x.Address.newFromBech32(t),s=e.args.map(c=>this.serializer.stringToTyped(c)),o=new x.TransactionsFactoryConfig({chainID:e.chain.chainId});return new x.SmartContractTransactionsFactory({config:o}).createTransactionForExecute(n,{contract:x.Address.newFromBech32(e.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:s,tokenTransfers:this.toTokenTransfers(e.transfers),nativeTransferAmount:e.value})}async executeQuery(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: executeQuery - destination not set");let t=(0,U.getWarpActionByIndex)(e.warp,e.action);if(t.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${t.type}`);let r=await this.abi.getAbiForAction(t),n=e.args.map(W=>this.serializer.stringToTyped(W)),s=T(e.chain,this.config.env,this.config),o=x.Address.newFromBech32(e.destination),c=s.createSmartContractController(r),l=c.createQuery({contract:o,function:t.func||"",arguments:n}),f=await c.runQuery(l),g=f.returnCode==="ok",d=new x.ArgSerializer,C=r.getEndpoint(f.function||t.func||""),P=(f.returnDataParts||[]).map(W=>Buffer.from(W)),y=d.buffersToValues(P,C.output),{values:A,output:N}=await this.output.extractQueryOutput(e.warp,y,e.action,e.resolvedInputs),V=(0,U.getNextInfo)(this.config,[],e.warp,e.action,N),q=e.resolvedInputs.find(W=>W.input.position==="receiver"||W.input.position==="destination")?.value||e.destination,H=(0,U.extractResolvedInputValues)(e.resolvedInputs);return{status:g?"success":"error",warp:e.warp,action:e.action,user:(0,U.getWarpWalletAddressFromConfig)(this.config,e.chain.name),txHash:null,tx:null,next:V,values:A,output:{...N,_DATA:y},messages:(0,U.applyOutputToMessages)(e.warp,N,this.config),destination:q,resolvedInputs:H}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:Wt}:t).map(t=>{let n=new x.TokenComputer().extractNonceFromExtendedIdentifier(t.identifier);return new x.TokenTransfer({token:new x.Token({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var he=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=Be[this.chain];if(!e)return["multiversx_explorer"];let t=e[this.config.env];return t||["multiversx_explorer"]}getPrimaryExplorer(){return this.getExplorers()[0]}getExplorerUrlByName(e){let t=this.config.preferences?.explorers?.[this.chain];if(t&&!e){let s=G[t];if(s)return s}if(e){let s=G[e];if(s)return s}let r=this.getPrimaryExplorer();return G[r]||G[r]}getAccountUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getTransactionUrl(e,t){return`${this.getExplorerUrlByName(t)}/transactions/${e}`}getBlockUrl(e,t){return`${this.getExplorerUrlByName(t)}/blocks/${e}`}getAssetUrl(e,t){return`${this.getExplorerUrlByName(t)}/tokens/${e}`}getContractUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getAllExplorers(){return this.getExplorers()}getExplorerByName(e){return this.getExplorers().find(r=>r.toLowerCase()===e.toLowerCase())}getAccountUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let s=G[n];s&&(r[n]=`${s}/accounts/${e}`)}),r}getTransactionUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let s=G[n];s&&(r[n]=`${s}/transactions/${e}`)}),r}};var m=require("@multiversx/sdk-core"),F=require("@joai/warps");var Ue={buildInfo:{rustc:{version:"1.86.0",commitHash:"05f9846f893b09a1be1fc8560e33fc3c815cfecb",commitDate:"2025-03-31",channel:"Stable",short:"rustc 1.86.0 (05f9846f8 2025-03-31)"},contractCrate:{name:"registry",version:"0.0.1"},framework:{name:"multiversx-sc",version:"0.51.1"}},name:"RegistryContract",constructor:{inputs:[{name:"unit_price",type:"BigUint"},{name:"vault",type:"Address"}],outputs:[]},upgradeConstructor:{inputs:[],outputs:[]},endpoints:[{name:"registerWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias_opt",type:"optional<bytes>",multi_arg:!0},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[],allow_multiple_var_args:!0},{name:"unregisterWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"upgradeWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"alias",type:"bytes"},{name:"new_warp",type:"bytes"},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[]},{name:"setWarpAlias",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias",type:"bytes"}],outputs:[]},{name:"forceRemoveAlias",mutability:"mutable",inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"verifyWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"transferOwnership",mutability:"mutable",inputs:[{name:"warp",type:"bytes"},{name:"new_owner",type:"Address"}],outputs:[]},{name:"getUserWarps",mutability:"readonly",inputs:[{name:"address",type:"Address"}],outputs:[{type:"variadic<InfoView>",multi_result:!0}]},{name:"getInfoByAlias",mutability:"readonly",inputs:[{name:"alias",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"getInfoByHash",mutability:"readonly",inputs:[{name:"hash",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"setVault",onlyOwner:!0,mutability:"mutable",inputs:[{name:"vault",type:"Address"}],outputs:[]},{name:"setUnitPrice",onlyOwner:!0,mutability:"mutable",inputs:[{name:"amount",type:"BigUint"}],outputs:[]},{name:"addAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"removeAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"getConfig",mutability:"readonly",inputs:[],outputs:[{type:"ConfigView"}]},{name:"registerBrand",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"brandWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"warp",type:"bytes"},{name:"brand",type:"bytes"}],outputs:[]},{name:"getUserBrands",mutability:"readonly",inputs:[{name:"user",type:"Address"}],outputs:[{type:"variadic<bytes>",multi_result:!0}]}],events:[{identifier:"warpRegistered",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpUnregistered",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"warpUpgraded",inputs:[{name:"alias",type:"bytes",indexed:!0},{name:"new_warp",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpVerified",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"aliasUpdated",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0}]},{identifier:"ownershipTransferred",inputs:[{name:"warp",type:"bytes",indexed:!0},{name:"old_owner",type:"Address",indexed:!0},{name:"new_owner",type:"Address",indexed:!0}]}],esdtAttributes:[],hasCallback:!1,types:{ConfigView:{type:"struct",fields:[{name:"unit_price",type:"BigUint"},{name:"admins",type:"List<Address>"}]},InfoView:{type:"struct",fields:[{name:"hash",type:"bytes"},{name:"alias",type:"Option<bytes>"},{name:"trust",type:"bytes"},{name:"owner",type:"Address"},{name:"created_at",type:"u64"},{name:"upgraded_at",type:"u64"},{name:"brand",type:"Option<bytes>"},{name:"upgrade",type:"Option<bytes>"}]}}};var S=i=>{if(i==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(i==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var ge=i=>({hash:i.hash.toString("hex"),alias:i.alias?.toString()||null,trust:i.trust.toString(),owner:i.owner.toString(),createdAt:i.created_at.toNumber(),upgradedAt:i.upgraded_at?.toNumber(),brand:i.brand?.toString("hex")||null,upgrade:i.upgrade?.toString("hex")||null}),Fe=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(e=>e.toBech32())});var fe=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new F.WarpCache(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=(0,F.getWarpWalletAddressFromConfig)(this.config,this.chain.name)}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}async createWarpRegisterTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=m.Address.newFromBech32(this.userWallet),s=()=>this.isCurrentUserAdmin()?BigInt(0):t&&r?this.registryConfig.unitPrice*BigInt(3):t?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,o=()=>t&&r?[m.BytesValue.fromHex(e),m.BytesValue.fromUTF8(t),m.BytesValue.fromHex(r)]:t?[m.BytesValue.fromHex(e),m.BytesValue.fromUTF8(t)]:[m.BytesValue.fromHex(e)];return await this.getFactory().createTransactionForExecute(n,{contract:m.Address.newFromBech32(S(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:s(),arguments:o()})}async createWarpUnregisterTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:m.Address.newFromBech32(S(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[m.BytesValue.fromHex(e)]})}async createWarpUpgradeTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(n,{contract:m.Address.newFromBech32(S(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:r?[m.BytesValue.fromUTF8(e),m.BytesValue.fromHex(t),m.BytesValue.fromHex(r)]:[m.BytesValue.fromUTF8(e),m.BytesValue.fromHex(t)]})}async createWarpAliasSetTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:m.Address.newFromBech32(S(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[m.BytesValue.fromHex(e),m.BytesValue.fromUTF8(t)]})}async createWarpVerifyTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:m.Address.newFromBech32(S(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[m.BytesValue.fromHex(e)]})}async createWarpTransferOwnershipTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:m.Address.newFromBech32(S(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[m.BytesValue.fromHex(e),new m.AddressValue(new m.Address(t))]})}async createBrandRegisterTransaction(e){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:m.Address.newFromBech32(S(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[m.BytesValue.fromHex(e)]})}async createWarpBrandingTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=m.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:m.Address.newFromBech32(S(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[m.BytesValue.fromHex(e),m.BytesValue.fromHex(t)]})}async getInfoByAlias(e,t){try{let r=F.WarpCacheKey.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return F.WarpLogger.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let s=m.Address.newFromBech32(S(this.config.env)),o=this.getController(),c=o.createQuery({contract:s,function:"getInfoByAlias",arguments:[m.BytesValue.fromUTF8(e)]}),l=await o.runQuery(c),[f]=o.parseQueryResponse(l),g=f?ge(f):null,d=g?.brand?await this.fetchBrand(g.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:g,brand:d},t.ttl),{registryInfo:g,brand:d}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=F.WarpCacheKey.RegistryInfo(this.config.env,e);if(t){let d=this.cache.get(r);if(d)return F.WarpLogger.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),d}let n=m.Address.newFromBech32(S(this.config.env)),s=this.getController(),o=s.createQuery({contract:n,function:"getInfoByHash",arguments:[m.BytesValue.fromHex(e)]}),c=await s.runQuery(o),[l]=s.parseQueryResponse(c),f=l?ge(l):null,g=f?.brand?await this.fetchBrand(f.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:f,brand:g},t.ttl),{registryInfo:f,brand:g}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=m.Address.newFromBech32(S(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserWarps",arguments:[new m.AddressValue(new m.Address(t))]}),o=await n.runQuery(s),[c]=n.parseQueryResponse(o);return c.map(ge)}catch{return[]}}async getUserBrands(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=m.Address.newFromBech32(S(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserBrands",arguments:[new m.AddressValue(new m.Address(t))]}),o=await n.runQuery(s),[c]=n.parseQueryResponse(o),l=c.map(d=>d.toString("hex")),f={ttl:365*24*60*60};return(await Promise.all(l.map(d=>this.fetchBrand(d,f)))).filter(d=>d!==null)}catch{return[]}}async fetchBrand(e,t){let r=F.WarpCacheKey.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return F.WarpLogger.info(`WarpRegistry (fetchBrand): Brand found in cache: ${e}`),n;let o=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await o.getTransaction(e),l=JSON.parse(c.data.toString());return l.meta={query:null,chain:this.chain.name,identifier:(0,F.createWarpIdentifier)(this.chain.name,"hash",e),hash:c.hash,creator:c.sender.toBech32(),createdAt:new Date(c.timestamp*1e3).toISOString()},t&&t.ttl&&this.cache.set(r,l,t.ttl),l}catch{return null}}async loadRegistryConfigs(){let e=m.Address.newFromBech32(S(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Fe(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new m.TransactionsFactoryConfig({chainID:this.chain.chainId}),t=m.AbiRegistry.create(Ue);return new m.SmartContractTransactionsFactory({config:e,abi:t})}getController(){let e=T(this.chain,this.config.env,this.config),t=m.AbiRegistry.create(Ue);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var se=require("@joai/warps"),rt=require("@multiversx/sdk-core");var O=require("@multiversx/sdk-core"),et=ut(require("@scure/bip39"),1),tt=require("@scure/bip39/wordlists/english.js"),b=require("@joai/warps"),Y=class Y{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,b.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new O.Message({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let t=(0,b.normalizeAndValidateMnemonic)(e),n=O.Mnemonic.fromString(t).deriveKey(0),s=n.hex(),c=n.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),l={provider:Y.PROVIDER_NAME,address:c,privateKey:s,mnemonic:t};return(0,b.setWarpWalletInConfig)(this.config,this.chain.name,l),l}async importFromPrivateKey(e){let t=O.UserSecretKey.fromString(e),r=t.hex(),s=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:Y.PROVIDER_NAME,address:s,privateKey:r,mnemonic:null};return(0,b.setWarpWalletInConfig)(this.config,this.chain.name,o),o}async export(){let e=this.getAccount(),t=(0,b.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name),r=(0,b.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);return{provider:Y.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=et.generateMnemonic(tt.wordlist,256),t=(0,b.normalizeMnemonic)(e);(0,b.validateMnemonicLength)(t);let o=O.Mnemonic.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:Y.PROVIDER_NAME,address:o,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=(0,b.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=O.Mnemonic.fromString(e).deriveKey(0);return this.account=new O.Account(r,this.chain.addressHrp),this.account}};Y.PROVIDER_NAME="mnemonic";var ye=Y;var k=require("@multiversx/sdk-core"),R=require("@joai/warps"),Z=class Z{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,R.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new k.Message({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=k.Mnemonic.fromString(e).deriveKey(0),n=r.hex(),o=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:Z.PROVIDER_NAME,address:o,privateKey:n,mnemonic:e};return(0,R.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let r=e.startsWith("-----")?k.UserSecretKey.fromPem(e):k.UserSecretKey.fromString(e),n=r.hex(),o=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:Z.PROVIDER_NAME,address:o,privateKey:n,mnemonic:null};return(0,R.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async export(){let e=this.getAccount(),t=(0,R.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name),r=(0,R.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);return{provider:Z.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=k.UserSecretKey.generate(),t=e.hex(),n=e.generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:Z.PROVIDER_NAME,address:n,privateKey:t,mnemonic:null}}getAccount(){if(this.account)return this.account;let e=(0,R.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?k.UserSecretKey.fromPem(e):k.UserSecretKey.fromString(e);return this.account=new k.Account(r,this.chain.addressHrp),this.account}};Z.PROVIDER_NAME="privateKey";var We=Z;var ae=require("@joai/warps"),ee=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name)}async getPublicKey(){return null}async signTransaction(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async signMessage(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromMnemonic(e){let t=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var we=class{constructor(e,t){this.config=e;this.chain=t;this.cachedAddress=null;this.cachedPublicKey=null;this.entry=T(t,e.env,e),this.cache=new se.WarpCache(e.env,e.cache),this.walletProvider=this.createProvider(),this.initializeCache()}async signTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof ee)throw new Error(`Wallet (${this.chain.name}) is read-only`);if(this.walletProvider instanceof We||this.walletProvider instanceof ye){let n=this.walletProvider.getAccountInstance();if(t.nonce===0n){let s=await this.entry.recallAccountNonce(n.address),o=this.cache.get(`nonce:${n.address.toBech32()}`)||0,c=BigInt(Math.max(o,Number(s)));t.nonce=c}}else if(t.nonce===0n&&this.cachedAddress){let n=rt.Address.newFromBech32(this.cachedAddress),s=await this.entry.recallAccountNonce(n),o=this.cache.get(`nonce:${this.cachedAddress}`)||0,c=BigInt(Math.max(o,Number(s)));t.nonce=c}return await this.walletProvider.signTransaction(t)}async signTransactions(e){let t=[];for(let r of e)t.push(await this.signTransaction(r));return t}async signMessage(e){if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof ee)throw new Error(`Wallet (${this.chain.name}) is read-only`);return await this.walletProvider.signMessage(e)}async sendTransactions(e){return Promise.all(e.map(async t=>this.sendTransaction(t)))}async sendTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!t.signature||t.signature.length===0)throw new Error("Transaction must be signed before sending");let r=await this.entry.sendTransaction(t),n=t.sender,s=Number(t.nonce)+1;return this.cache.set(`nonce:${n}`,s,se.CacheTtl.OneMinute),r}async importFromMnemonic(e){return await this.createProviderForOperation("mnemonic").importFromMnemonic(e)}async importFromPrivateKey(e){return await this.createProviderForOperation("privateKey").importFromPrivateKey(e)}async export(e){return await this.createProviderForOperation(e).export()}async generate(e){return await this.createProviderForOperation(e).generate()}getAddress(){return this.cachedAddress}getPublicKey(){return this.cachedPublicKey}createProvider(){let e=this.config.user?.wallets?.[this.chain.name];return e?typeof e=="string"?new ee(this.config,this.chain):e.provider?this.createProviderForOperation(e.provider):new ee(this.config,this.chain):null}initializeCache(){(0,se.initializeWalletCache)(this.walletProvider).then(e=>{this.cachedAddress=e.address,this.cachedPublicKey=e.publicKey})}createProviderForOperation(e){let r=this.config.walletProviders?.[this.chain.name]?.[e];if(r){let n=r(this.config,this.chain);if(!n)throw new Error(`Custom wallet provider factory returned null for ${e}`);return n}if(e==="privateKey")return new We(this.config,this.chain);if(e==="mnemonic")return new ye(this.config,this.chain);throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${e}`)}};var ve=(i,e)=>(t,r)=>{let n=e[t.env],s=new nt.WarpTypeRegistry;return s.registerType("token",{stringToNative:o=>o,nativeToString:o=>`token:${o}`}),s.registerType("codemeta",{stringToNative:o=>o,nativeToString:o=>`codemeta:${o}`}),s.registerTypeAlias("list","vector"),{chainInfo:n,builder:()=>new ue(t,n),executor:new de(t,n,s),output:new X(t,n,s),serializer:new L({typeRegistry:s}),registry:new fe(t,n),explorer:new he(i,t),abiBuilder:()=>new D(t,n),brandBuilder:()=>new pe(t,n),dataLoader:new me(t,n),wallet:new we(t,n)}};var ie=require("@joai/warps");var xe={chain:ie.WarpChainName.Multiversx,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/egld.svg"},ke=ve(ie.WarpChainName.Multiversx,{mainnet:{name:ie.WarpChainName.Multiversx,displayName:"MultiversX",chainId:"1",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:xe},testnet:{name:ie.WarpChainName.Multiversx,displayName:"MultiversX Testnet",chainId:"T",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://testnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:xe},devnet:{name:ie.WarpChainName.Multiversx,displayName:"MultiversX Devnet",chainId:"D",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://devnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:xe}});var Ae=require("@joai/warps");var at={chain:Ae.WarpChainName.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},Ve={name:Ae.WarpChainName.Claws,displayName:"Claws Network",chainId:"C",blockTime:600,addressHrp:"claw",defaultApiUrl:"https://api.claws.network",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/claws.png",nativeToken:at,minGasPrice:20000000000000n},Me=ve(Ae.WarpChainName.Claws,{mainnet:Ve,testnet:Ve,devnet:Ve});var vt=()=>[ke,Me];var K=require("@joai/warps");var Ct=i=>new K.WarpSerializer().nativeToString(w.Token,i),Tt=i=>new K.WarpSerializer().nativeToString(w.CodeMeta,i),xt=(i,e)=>{if(e===null)return w.Optional+K.WarpConstants.ArgParamsSeparator;let t=i(e),r=t.indexOf(K.WarpConstants.ArgParamsSeparator),n=t.substring(0,r),s=t.substring(r+1);return w.Optional+K.WarpConstants.ArgParamsSeparator+n+K.WarpConstants.ArgParamsSeparator+s},At=i=>new K.WarpSerializer().nativeToString(w.List,i);var p=require("@multiversx/sdk-core"),Et=(i,e)=>i?p.OptionValue.newProvided(i):e?p.OptionValue.newMissingTyped(e):p.OptionValue.newMissing(),bt=(i,e)=>i?new p.OptionalValue(i.getType(),i):e?new p.OptionalValue(e):p.OptionalValue.newMissing(),Pt=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let e=i[0].getType();return new p.List(e,i)},It=i=>p.VariadicValue.fromItems(...i),St=i=>{let e=i.map(t=>t.getType());return new p.CompositeValue(new p.CompositeType(...e),i)},Nt=i=>p.StringValue.fromUTF8(i),Bt=i=>new p.U8Value(i),Ut=i=>new p.U16Value(i),Ft=i=>new p.U32Value(i),kt=i=>new p.U64Value(i),Vt=i=>new p.BigUIntValue(BigInt(i)),Mt=i=>new p.BooleanValue(i),Ot=i=>new p.AddressValue(p.Address.newFromBech32(i)),Rt=i=>new p.TokenIdentifierValue(i),Dt=i=>p.BytesValue.fromHex(i),Lt=i=>new p.Struct(new p.StructType("EsdtTokenPayment",[new p.FieldDefinition("token_identifier","",new p.TokenIdentifierType),new p.FieldDefinition("token_nonce","",new p.U64Type),new p.FieldDefinition("amount","",new p.BigUIntType)]),[new p.Field(new p.TokenIdentifierValue(i.token.identifier),"token_identifier"),new p.Field(new p.U64Value(BigInt(i.token.nonce)),"token_nonce"),new p.Field(new p.BigUIntValue(BigInt(i.amount)),"amount")]),Kt=i=>new p.CodeMetadataValue(p.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),Ht=()=>new p.NothingValue;0&&(module.exports={ClawsAdapter,ClawsExplorers,ExplorerUrls,KnownTokens,MultiversxAdapter,MultiversxExplorers,MultiversxExplorersConfig,NativeTokenClaw,NativeTokenEgld,WarpMultiversxAbiBuilder,WarpMultiversxBrandBuilder,WarpMultiversxBuilder,WarpMultiversxConstants,WarpMultiversxContractLoader,WarpMultiversxDataLoader,WarpMultiversxExecutor,WarpMultiversxExplorer,WarpMultiversxInputTypes,WarpMultiversxOutput,WarpMultiversxRegistry,WarpMultiversxSerializer,WarpMultiversxWallet,address_value,asset_value,biguint_value,boolean_value,codemeta,codemeta_value,composite_value,createMultiversxAdapter,findKnownTokenById,getAllMultiversxAdapters,getAllMultiversxChainNames,getKnownTokensForChain,getMultiversxEntrypoint,getMultiversxRegistryAddress,getNormalizedTokenIdentifier,hex_value,isNativeToken,list,list_value,nothing_value,option_value,optional,optional_value,string_value,toTypedConfigInfo,toTypedRegistryInfo,token,token_value,u16_value,u32_value,u64_value,u8_value,variadic_value});
1
+ "use strict";var st=Object.create;var ve=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var ct=Object.getPrototypeOf,lt=Object.prototype.hasOwnProperty;var pt=(i,e)=>{for(var t in e)ve(i,t,{get:e[t],enumerable:!0})},Me=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ot(e))!lt.call(i,n)&&n!==t&&ve(i,n,{get:()=>e[n],enumerable:!(r=it(e,n))||r.enumerable});return i};var ut=(i,e,t)=>(t=i!=null?st(ct(i)):{},Me(e||!i||!i.__esModule?ve(t,"default",{value:i,enumerable:!0}):t,i)),mt=i=>Me(ve({},"__esModule",{value:!0}),i);var Ht={};pt(Ht,{ClawsAdapter:()=>Ve,ClawsExplorers:()=>Ke,ExplorerUrls:()=>H,KnownTokens:()=>Ne,MultiversxAdapter:()=>ke,MultiversxExplorers:()=>Le,MultiversxExplorersConfig:()=>Se,NativeTokenClaw:()=>at,NativeTokenEgld:()=>xe,WarpMultiversxAbiBuilder:()=>L,WarpMultiversxBrandBuilder:()=>pe,WarpMultiversxBuilder:()=>ue,WarpMultiversxConstants:()=>gt,WarpMultiversxContractLoader:()=>le,WarpMultiversxDataLoader:()=>me,WarpMultiversxExecutor:()=>de,WarpMultiversxExplorer:()=>he,WarpMultiversxInputTypes:()=>w,WarpMultiversxOutput:()=>X,WarpMultiversxRegistry:()=>fe,WarpMultiversxSerializer:()=>V,WarpMultiversxWallet:()=>we,address_value:()=>Mt,asset_value:()=>Lt,biguint_value:()=>Ot,boolean_value:()=>Vt,codemeta:()=>Tt,codemeta_value:()=>Kt,composite_value:()=>It,createMultiversxAdapter:()=>Ce,findKnownTokenById:()=>Be,getAllMultiversxAdapters:()=>Ct,getAllMultiversxChainNames:()=>dt,getKnownTokensForChain:()=>yt,getMultiversxEntrypoint:()=>T,getMultiversxRegistryAddress:()=>I,getNormalizedTokenIdentifier:()=>ce,hex_value:()=>Dt,isNativeToken:()=>Q,list:()=>At,list_value:()=>Pt,nothing_value:()=>_t,option_value:()=>Et,optional:()=>xt,optional_value:()=>bt,string_value:()=>Nt,toTypedConfigInfo:()=>Fe,toTypedRegistryInfo:()=>ge,token:()=>vt,token_value:()=>Rt,u16_value:()=>Ut,u32_value:()=>Ft,u64_value:()=>kt,u8_value:()=>Bt,variadic_value:()=>St});module.exports=mt(Ht);var be=require("@joai/warps"),dt=()=>[be.WarpChainName.Multiversx,be.WarpChainName.Claws];var nt=require("@joai/warps");var B=require("@multiversx/sdk-core"),E=require("@joai/warps");var te=require("@multiversx/sdk-core"),Re=require("@joai/warps"),Q=i=>!i.includes("-"),ce=i=>Q(i)?`${i}-000000`:i,T=(i,e,t)=>{let r="warp-sdk",s=t?(0,Re.getProviderConfig)(t,i.name,e,i.defaultApiUrl):{url:i.defaultApiUrl},o=s.url,c={headers:s.headers};return e==="devnet"?new te.DevnetEntrypoint({url:o,kind:"api",clientName:r,networkProviderConfig:c}):e==="testnet"?new te.TestnetEntrypoint({url:o,kind:"api",clientName:r,networkProviderConfig:c}):new te.MainnetEntrypoint({url:o,kind:"api",clientName:r,networkProviderConfig:c})};var Pe=require("@joai/warps");var le=class{constructor(e){this.config=e}async getContract(e,t){try{let s=await T(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}`);return{address:e,owner:s.ownerAddress,verified:s.isVerified||!1}}catch(r){return Pe.WarpLogger.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(e,t){try{let s=await T(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}/verification`);return{codeHash:s.codeHash,abi:s.source.abi}}catch(r){return Pe.WarpLogger.error("WarpContractLoader: getVerificationInfo error",r),null}}};var a=require("@multiversx/sdk-core"),_e=require("@joai/warps");var ht=i=>i?typeof i=="string"?i:i.address:null,De=(i,e)=>ht(i.user?.wallets?.[e]||null);var h={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>De(i.config,i.adapter.chainInfo.name)},UserWalletPublicKey:{Placeholder:"USER_WALLET_PUBLICKEY",Accessor:i=>{if(!i.adapter.wallet)return null;try{return i.adapter.wallet.getPublicKey()||null}catch{return null}}},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:i=>i.adapter.chainInfo.defaultApiUrl},ChainAddressHrp:{Placeholder:"CHAIN_ADDRESS_HRP",Accessor:i=>i.adapter.chainInfo.addressHrp}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",ArgListSeparator:",",ArgStructSeparator:";",Transform:{Prefix:"transform:"},Source:{UserWallet:"user:wallet"},Position:{Payload:"payload:"},Alerts:{TriggerEventPrefix:"event"}},u={Option:"option",Vector:"vector",Tuple:"tuple",Struct:"struct",String:"string",Uint8:"uint8",Uint16:"uint16",Uint32:"uint32",Uint64:"uint64",Uint128:"uint128",Uint256:"uint256",Biguint:"biguint",Bool:"bool",Address:"address",Asset:"asset",Hex:"hex"};var gt={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},w={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},Le=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(Le||{}),Ke=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(Ke||{}),Se={multiversx:{mainnet:["multiversx_explorer"],testnet:["multiversx_explorer_testnet"],devnet:["multiversx_explorer_devnet"]},claws:{mainnet:["claws_explorer"],testnet:["claws_explorer_testnet"],devnet:["claws_explorer_devnet"]}},H={multiversx_explorer:"https://explorer.multiversx.com",multiversx_explorer_devnet:"https://devnet-explorer.multiversx.com",multiversx_explorer_testnet:"https://testnet-explorer.multiversx.com",claws_explorer:"https://explorer.claws.network",claws_explorer_devnet:"https://explorer.claws.network",claws_explorer_testnet:"https://explorer.claws.network"};var ft=new RegExp(`${h.ArgParamsSeparator}(.*)`),V=class{constructor(e){this.coreSerializer=new _e.WarpSerializer(e)}typedToString(e){let t=e.getType();if(t.hasExactClass(a.OptionType.ClassName)||e.hasClassOrSuperclass(a.OptionValue.ClassName)){if(!e.isSet())return u.Option+h.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return u.Option+h.ArgParamsSeparator+r}if(t.hasExactClass(a.VariadicType.ClassName)||e.hasClassOrSuperclass(a.VariadicValue.ClassName)){let r=e.getItems();if(r.length===0){let g=this.typeToString(t.getFirstTypeParameter());return u.Vector+h.ArgParamsSeparator+g+h.ArgParamsSeparator}let n=r.map(g=>this.typedToString(g));if(n.every(g=>g.startsWith(u.Tuple)))return u.Vector+h.ArgParamsSeparator+n.join(",");let s=n[0],o=s.indexOf(h.ArgParamsSeparator),c=s.substring(0,o),l=n.map(g=>{let m=g.indexOf(h.ArgParamsSeparator);return g.substring(m+1)}),f=c.startsWith(u.Struct)?h.ArgStructSeparator:h.ArgListSeparator;return u.Vector+h.ArgParamsSeparator+c+h.ArgParamsSeparator+l.join(f)}if(t.hasExactClass(a.OptionalType.ClassName)||e.hasClassOrSuperclass(a.OptionalValue.ClassName)){if(!e.isSet())return w.Optional+h.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return w.Optional+h.ArgParamsSeparator+r}if(t.hasExactClass(a.ListType.ClassName)||e.hasClassOrSuperclass(a.List.ClassName)){let n=e.getItems().map(l=>this.typedToString(l));if(n.every(l=>l.startsWith(u.Tuple)))return w.List+h.ArgParamsSeparator+n.join(",");let o=n.map(l=>l.split(h.ArgParamsSeparator)[0])[0],c=n.map(l=>l.split(h.ArgParamsSeparator)[1]);return w.List+h.ArgParamsSeparator+o+h.ArgParamsSeparator+c.join(h.ArgListSeparator)}if(t.hasExactClass(a.CompositeType.ClassName)||e.hasClassOrSuperclass(a.CompositeValue.ClassName)){let n=e.getItems().map(s=>{let o=this.typedToString(s),c=o.indexOf(h.ArgParamsSeparator),l=o.substring(0,c),f=o.substring(c+1);return`${l},${f}`});return`${u.Tuple}(${n.join(",")})`}if(t.hasExactClass(a.BigUIntType.ClassName)||e.hasClassOrSuperclass(a.BigUIntValue.ClassName)||t.getName()==="BigUint")return u.Biguint+h.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.U8Type.ClassName)||e.hasClassOrSuperclass(a.U8Value.ClassName))return u.Uint8+h.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U16Type.ClassName)||e.hasClassOrSuperclass(a.U16Value.ClassName))return u.Uint16+h.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U32Type.ClassName)||e.hasClassOrSuperclass(a.U32Value.ClassName))return u.Uint32+h.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U64Type.ClassName)||e.hasClassOrSuperclass(a.U64Value.ClassName))return u.Uint64+h.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.StringType.ClassName)||e.hasClassOrSuperclass(a.StringValue.ClassName))return u.String+h.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.BooleanType.ClassName)||e.hasClassOrSuperclass(a.BooleanValue.ClassName))return u.Bool+h.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.AddressType.ClassName)||e.hasClassOrSuperclass(a.AddressValue.ClassName))return u.Address+h.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(a.BytesType.ClassName)||e.hasClassOrSuperclass(a.BytesValue.ClassName))return u.Hex+h.ArgParamsSeparator+e.valueOf().toString("hex");if(t.getName()==="EsdtTokenPayment"){let r=e.getFieldValue("token_identifier").valueOf(),n=e.getFieldValue("token_nonce").valueOf(),s=e.getFieldValue("amount").valueOf(),c=new a.TokenComputer().computeExtendedIdentifier(new a.Token({identifier:r,nonce:BigInt(n)}));return u.Asset+h.ArgParamsSeparator+c+h.ArgCompositeSeparator+s}if(t.hasExactClass(a.StructType.ClassName)||e.hasClassOrSuperclass(a.Struct.ClassName)){let r=e,s=r.getType().getName(),o=r.getFields();if(o.length===0)return`${u.Struct}(${s})${h.ArgParamsSeparator}`;let c=o.map(l=>{let f=l.value.getType(),m=this.typedToString(l.value).split(h.ArgParamsSeparator),v=m.length>2?m.slice(2).join(h.ArgParamsSeparator):m[1]||"";return`(${l.name}${h.ArgParamsSeparator}${this.typeToString(f)})${v}`});return`${u.Struct}(${s})${h.ArgParamsSeparator}${c.join(h.ArgListSeparator)}`}if(t.hasExactClass(a.TokenIdentifierType.ClassName)||e.hasClassOrSuperclass(a.TokenIdentifierValue.ClassName))return w.Token+h.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.CodeMetadataType.ClassName)||e.hasClassOrSuperclass(a.CodeMetadataValue.ClassName))return w.CodeMeta+h.ArgParamsSeparator+e.valueOf().toString();throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${e.getClassName()}`)}typedToNative(e){let t=this.typedToString(e);return this.coreSerializer.stringToNative(t)}nativeToTyped(e,t){if(e.startsWith(u.Tuple))return this.stringToTyped(e+":");let r=this.coreSerializer.nativeToString(e,t);return this.stringToTyped(r)}nativeToType(e){if(e.startsWith(u.Tuple)){let t=e.match(/\(([^)]+)\)/)?.[1];if(!t)throw new Error(`Invalid tuple type format: ${e}`);let r=t.split(","),n=[];for(let s=0;s<r.length;s+=2)n.push(r[s]);return new a.CompositeType(...n.map(s=>this.nativeToType(s)))}if(e.startsWith(u.Struct)){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Struct type must include a name in the format struct(Name)");let r=t[1];return new a.StructType(r,[])}if(e===u.String)return new a.StringType;if(e===u.Uint8)return new a.U8Type;if(e===u.Uint16)return new a.U16Type;if(e===u.Uint32)return new a.U32Type;if(e===u.Uint64)return new a.U64Type;if(e===u.Biguint)return new a.BigUIntType;if(e===u.Bool)return new a.BooleanType;if(e===u.Address)return new a.AddressType;if(e===u.Hex)return new a.BytesType;if(e===u.Asset)return new a.StructType("EsdtTokenPayment",[new a.FieldDefinition("token_identifier","",new a.TokenIdentifierType),new a.FieldDefinition("token_nonce","",new a.U64Type),new a.FieldDefinition("amount","",new a.BigUIntType)]);if(e===w.Token)return new a.TokenIdentifierType;if(e===w.CodeMeta)return new a.CodeMetadataType;throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${e}`)}stringToTyped(e){let[t,r]=e.split(/:(.*)/,2);if(t===u.Option){let n=this.stringToTyped(r);return n instanceof a.NothingValue?a.OptionValue.newMissingTyped(n.getType()):a.OptionValue.newProvided(n)}if(t===u.Vector){let n=r.indexOf(h.ArgParamsSeparator),s=r.substring(0,n),o=r.substring(n+1);if(s.startsWith(u.Tuple)){let m=o.split(",").map(v=>this.stringToTyped(v));return new a.VariadicValue(new a.VariadicType(this.nativeToType(s)),m)}if(o.includes("tuple(")){let g=this.splitTupleStrings(o),m=g.map(A=>this.stringToTyped(A)),P=g[0].match(/^(tuple\([^)]+\))/),y=P?P[1]:"tuple";return new a.VariadicValue(new a.VariadicType(this.nativeToType(y)),m)}let c=s.startsWith(u.Struct)?h.ArgStructSeparator:h.ArgListSeparator,f=o.split(c).map(g=>this.stringToTyped(`${s}:${g}`));return new a.VariadicValue(new a.VariadicType(this.nativeToType(s)),f)}if(t.startsWith(u.Tuple)){let n=t.match(/\(([^)]+)\)/)?.[1];if(!n)throw new Error(`Invalid tuple format: ${t}`);let s=n.split(","),o=[];for(let l=0;l<s.length;l+=2){let f=s[l],g=s[l+1];o.push(this.stringToTyped(`${f}:${g}`))}let c=o.map(l=>l.getType());return new a.CompositeValue(new a.CompositeType(...c),o)}if(t.startsWith(u.Struct)){let n=t.match(/\(([^)]+)\)/),s=n?n[1]:"CustomStruct";if(!r)return new a.Struct(new a.StructType(s,[]),[]);let o=r.split(h.ArgListSeparator),c=[],l=[];return o.forEach(f=>{let g=f.match(new RegExp(`^\\(([^${h.ArgParamsSeparator}]+)${h.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(g){let[,m,v,P]=g,y=this.stringToTyped(`${v}${h.ArgParamsSeparator}${P}`);c.push(new a.FieldDefinition(m,"",y.getType())),l.push(new a.Field(y,m))}}),new a.Struct(new a.StructType(s,c),l)}if(t===u.String)return r?a.StringValue.fromUTF8(r):new a.NothingValue;if(t===u.Uint8)return r?new a.U8Value(Number(r)):new a.NothingValue;if(t===u.Uint16)return r?new a.U16Value(Number(r)):new a.NothingValue;if(t===u.Uint32)return r?new a.U32Value(Number(r)):new a.NothingValue;if(t===u.Uint64)return r?new a.U64Value(BigInt(r)):new a.NothingValue;if(t===u.Biguint)return r?new a.BigUIntValue(BigInt(r)):new a.NothingValue;if(t===u.Bool)return r?new a.BooleanValue(typeof r=="boolean"?r:r==="true"):new a.NothingValue;if(t===u.Address)return r?new a.AddressValue(a.Address.newFromBech32(r)):new a.NothingValue;if(t===u.Hex)return r?a.BytesValue.fromHex(r):new a.NothingValue;if(t===u.Asset){let[n,s]=r.split(h.ArgCompositeSeparator),o=new a.TokenComputer,c=Q(n)?ce(n):o.extractIdentifierFromExtendedIdentifier(n),l=Q(n)?0n:o.extractNonceFromExtendedIdentifier(n);return new a.Struct(this.nativeToType("asset"),[new a.Field(new a.TokenIdentifierValue(c),"token_identifier"),new a.Field(new a.U64Value(BigInt(l)),"token_nonce"),new a.Field(new a.BigUIntValue(BigInt(s)),"amount")])}if(t===w.Null)return new a.NothingValue;if(t===w.Optional){let n=this.stringToTyped(r);return n instanceof a.NothingValue?a.OptionalValue.newMissing():new a.OptionalValue(n.getType(),n)}if(t===w.List){let[n,s]=r.split(ft,2),c=s.split(h.ArgListSeparator).map(l=>this.stringToTyped(n+h.ArgParamsSeparator+l));return new a.List(this.nativeToType(n),c)}if(t===w.Token)return r?new a.TokenIdentifierValue(r):new a.NothingValue;if(t===w.CodeMeta)return new a.CodeMetadataValue(a.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${t}`)}splitTupleStrings(e){let t=[],r="",n=0;for(let s=0;s<e.length;s++){let o=e[s];if(o==="(")n++;else if(o===")")n--;else if(o===","&&n===0){t.push(r.trim()),r="";continue}r+=o}return r.trim()&&t.push(r.trim()),t}typeToString(e){if(e.hasExactClass(a.OptionType.ClassName))return u.Option+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.VariadicType.ClassName))return u.Vector+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.StringType.ClassName))return u.String;if(e.hasExactClass(a.U8Type.ClassName))return u.Uint8;if(e.hasExactClass(a.U16Type.ClassName))return u.Uint16;if(e.hasExactClass(a.U32Type.ClassName))return u.Uint32;if(e.hasExactClass(a.U64Type.ClassName))return u.Uint64;if(e.hasExactClass(a.BigUIntType.ClassName))return u.Biguint;if(e.hasExactClass(a.BooleanType.ClassName))return u.Bool;if(e.hasExactClass(a.AddressType.ClassName))return u.Address;if(e.hasExactClass(a.BytesType.ClassName))return u.Hex;if(e.hasExactClass(a.TokenIdentifierType.ClassName))return w.Token;if(e.hasExactClass(a.OptionalType.ClassName))return w.Optional+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.ListType.ClassName))return w.List+h.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.CodeMetadataType.ClassName))return w.CodeMeta;if(e.hasExactClass(a.StructType.ClassName)&&e.getClassName()==="EsdtTokenPayment")return u.Asset;if(e.hasExactClass(a.StructType.ClassName))return`${u.Struct}(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var L=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new le(this.config),this.cache=new E.WarpCache(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=(0,E.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new B.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new B.TransferTransactionsFactory({config:r}),s=B.Address.newFromBech32(t),o={protocol:(0,E.getLatestProtocolIdentifier)("abi"),content:e},c=JSON.stringify(o),l=await n.createTransactionForTransfer(s,{receiver:s,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(c))});return l.gasLimit=l.gasLimit+BigInt(2e6),l}async createFromRaw(e){return JSON.parse(e)}async createFromTransaction(e){let t=await this.createFromRaw(e.data.toString());return t.meta={chain:this.chain.name,identifier:(0,E.createWarpIdentifier)(this.chain.name,"hash",e.hash),query:null,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},t}async createFromTransactionHash(e,t){let r=E.WarpCacheKey.WarpAbi(this.config.env,e);if(t){let o=this.cache.get(r);if(o)return E.WarpLogger.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${e}`),o}let s=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let o=await s.getTransaction(e),c=await this.createFromTransaction(o);return t&&t.ttl&&c&&this.cache.set(r,c,t.ttl),c}catch(o){return E.WarpLogger.error("WarpAbiBuilder: Error creating from transaction hash",o),null}}async getAbiForAction(e){if(e.abi)return await this.fetchAbi(e);if(!e.address)throw new Error("WarpActionExecutor: Address not found");let t=await this.contractLoader.getVerificationInfo(e.address,this.chain);if(!t)throw new Error("WarpActionExecutor: Verification info not found");return B.AbiRegistry.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(E.WarpConstants.IdentifierType.Hash)){let t=e.abi.split(E.WarpConstants.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return B.AbiRegistry.create(r.content)}else{let r=await(await fetch(e.abi)).json();return B.AbiRegistry.create(r)}}endpointsToWarps(e,t,r){let n=new V,s=r?btoa(JSON.stringify(r)):void 0;return e.getEndpoints().map(o=>{let c=o.modifiers.isReadonly(),l=o.input.map((g,m)=>({name:g.name,type:n.typeToString(g.type),position:`arg:${m+1}`,source:"field",required:!g.type.hasClassOrSuperclass(B.OptionalType.ClassName)&&!g.type.hasClassOrSuperclass(B.OptionType.ClassName)})),f=c?{type:"query",label:o.name,address:t,func:o.name,args:[],abi:s,inputs:l}:{type:"contract",label:o.name,address:t,func:o.name,args:[],gasLimit:1e7,abi:s,inputs:l};return{protocol:(0,E.getLatestProtocolIdentifier)("warp"),name:o.name,title:o.name,description:null,chain:this.chain.name,actions:[f]}})}};var j=require("@multiversx/sdk-core"),$=require("@joai/warps"),He=require("buffer");var pe=class{constructor(e,t){this.config=e;this.chain=t;this.core=new $.WarpBrandBuilder(e)}async createInscriptionTransaction(e){let t=(0,$.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new j.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new j.TransferTransactionsFactory({config:r}),s=j.Address.newFromBech32(t),o=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(s,{receiver:j.Address.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(He.Buffer.from(o))})}async createFromTransaction(e,t=!1){let r=await this.core.createFromRaw(e.data.toString(),t);return r.meta={query:null,chain:this.chain.name,identifier:(0,$.createWarpIdentifier)(this.chain.name,"hash",e.hash),hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},r}async createFromTransactionHash(e){let r=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let n=await r.getTransaction(e);return this.createFromTransaction(n)}catch(n){return $.WarpLogger.error("BrandBuilder: Error creating from transaction hash",n),null}}};var J=require("@multiversx/sdk-core"),U=require("@joai/warps");var ue=class extends U.WarpBuilder{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new U.WarpCache(t.env,t.cache),this.core=new U.WarpBuilder(t)}async createInscriptionTransaction(t){let r=(0,U.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new J.TransactionsFactoryConfig({chainID:this.chain.chainId}),s=new J.TransferTransactionsFactory({config:n}),o=J.Address.newFromBech32(r),c=JSON.stringify(t),l=await s.createTransactionForTransfer(o,{receiver:J.Address.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(c))});return l.gasLimit=l.gasLimit+BigInt(2e6),l}async createFromTransaction(t,r=!1){let n=await this.core.createFromRaw(t.data.toString(),r);return n.meta={chain:this.chain.name,identifier:(0,U.createWarpIdentifier)(this.chain.name,"hash",t.hash),query:null,hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},n}async createFromTransactionHash(t,r){let n=U.WarpCacheKey.Warp(this.config.env,t);if(r){let c=this.cache.get(n);if(c)return U.WarpLogger.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),c}let o=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await o.getTransaction(t),l=await this.createFromTransaction(c);return r&&r.ttl&&l&&this.cache.set(n,l,r.ttl),l}catch(c){return U.WarpLogger.error("WarpBuilder: Error creating from transaction hash",c),null}}};var G=require("@multiversx/sdk-core"),re=require("@joai/warps");var Ie=require("@joai/warps");var Ge=require("@joai/warps"),$e=Ge.WarpChainName.Multiversx,ze=[{chain:$e,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:$e,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];var qe=require("@joai/warps"),S=qe.WarpChainName.Multiversx,Qe=[{chain:S,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:S,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:S,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:S,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:S,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:S,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:S,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:S,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:S,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:S,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:S,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:S,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:S,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:S,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:S,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];var Je=require("@joai/warps"),je=Je.WarpChainName.Multiversx,Xe=[{chain:je,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:je,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];var Ze=require("@joai/warps"),Ye=Ze.WarpChainName.Claws,Te=[{chain:Ye,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:Ye,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Ne={[Ie.WarpChainName.Multiversx]:{mainnet:Qe,testnet:Xe,devnet:ze},[Ie.WarpChainName.Claws]:{mainnet:Te,testnet:Te,devnet:Te}},Be=(i,e,t)=>(Ne[i]?.[e]||[]).find(n=>n.identifier===t)||null,yt=(i,e)=>Ne[i]?.[e]||[];var me=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new re.WarpCache(e.env,e.cache)}async getAccount(e){let r=await T(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(G.Address.newFromBech32(e));return{chain:this.chain.name,address:r.address.toBech32(),balance:r.balance}}async getAccountAssets(e){let t=T(this.chain,this.config.env,this.config).createNetworkProvider(),r=t.getAccount(G.Address.newFromBech32(e)),n=t.getFungibleTokensOfAccount(G.Address.newFromBech32(e)),[s,o]=await Promise.all([r,n]),c=s.balance>0?[{...this.chain.nativeToken,amount:s.balance}]:[];return c.push(...o.map(l=>({chain:this.chain.name,identifier:l.token.identifier,name:l.raw.name,symbol:l.raw.ticker,amount:l.amount,decimals:l.raw.decimals,logoUrl:l.raw.assets?.pngUrl||"",price:l.raw.price?Number(l.raw.price):void 0,supply:l.raw.supply?BigInt(l.raw.supply):void 0}))),c}async getAsset(e){let t=re.WarpCacheKey.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=Be(this.chain.name,this.config.env,e);if(n)return{chain:this.chain.name,identifier:e,name:n.name,symbol:n.symbol,amount:0n,decimals:n.decimals,logoUrl:n.logoUrl};let s=new G.TokenComputer,o=Q(e)?0n:s.extractNonceFromExtendedIdentifier(e),c=new G.Token({identifier:e,nonce:BigInt(o||0)}),l=s.isFungible(c),f=T(this.chain,this.config.env,this.config).createNetworkProvider(),g=ce(e),m=await f.doGetGeneric(`tokens/${g}`),v={chain:this.chain.name,identifier:c.identifier,name:m.name,symbol:m.ticker,amount:0n,decimals:m.decimals,logoUrl:m.assets?.pngUrl||null,price:m.price?Number(m.price):void 0,supply:m.supply?BigInt(m.supply):void 0};return this.cache.set(t,v,re.CacheTtl.OneHour),v}async getAction(e,t=!1){let r=T(this.chain,this.config.env,this.config),n=t?await r.awaitCompletedTransaction(e):await r.getTransaction(e);return{chain:this.chain.name,id:n.hash,receiver:n.receiver.toBech32(),sender:n.sender.toBech32(),value:n.value,function:n.function,status:this.toActionStatus(n),createdAt:this.toActionCreatedAt(n),error:n?.smartContractResults.map(s=>s.raw.returnMessage)[0]||null,tx:n}}async getAccountActions(e,t){let r=T(this.chain,this.config.env,this.config).createNetworkProvider(),n=`accounts/${e}/transactions`,s=new URLSearchParams,o=t?.size||25,c=t?.page||0;if(c>0){let f=c*o;s.append("from",f.toString())}return o!==25&&s.append("size",o.toString()),s.toString()&&(n+=`?${s.toString()}`),(await r.doGetGeneric(n)).map(f=>({chain:this.chain.name,id:f.txHash,receiver:f.receiver,sender:f.sender,value:f.value,function:f.function,status:this.toActionStatus(f),createdAt:this.toActionCreatedAt(f)}))}toActionStatus(e){return e.status?.isSuccessful?.()?"success":e.status?.isFailed?.()?"failed":"pending"}toActionCreatedAt(e){return new Date(e.timestamp||e.timestamp*1e3).toISOString()}};var x=require("@multiversx/sdk-core"),F=require("@joai/warps");var C=require("@joai/warps"),ne=require("@multiversx/sdk-core");var X=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new L(e,t),this.serializer=new V({typeRegistry:this.typeRegistry}),this.cache=new C.WarpCache(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(C.WarpCacheKey.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],s=await this.extractContractOutput(e,t,r,n),o=(0,C.getNextInfo)(this.config,[],e,t,s.output),c=(0,C.applyOutputToMessages)(e,s.output,this.config),l=(0,C.extractResolvedInputValues)(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:(0,C.getWarpWalletAddressFromConfig)(this.config,this.chain.name),txHash:r.hash,tx:r,next:o,values:s.values,output:s.output,messages:c,destination:null,resolvedInputs:l}}async extractContractOutput(e,t,r,n){let s=(0,C.getWarpActionByIndex)(e,t),o=[],c=[],l={};if(!e.output||s.type!=="contract")return{values:{string:o,native:c,mapped:{}},output:l};if(!Object.values(e.output).some(y=>y.includes("out")||y.includes("event"))){for(let[y,A]of Object.entries(e.output))l[y]=A;return{values:{string:o,native:c,mapped:{}},output:await(0,C.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}let g=await this.abi.getAbiForAction(s),m=new ne.TransactionEventsParser({abi:g}),P=new ne.SmartContractTransactionsOutcomeParser({abi:g}).parseExecute({transactionOnNetwork:r,function:s.func||void 0});for(let[y,A]of Object.entries(e.output)){if(A.startsWith(C.WarpConstants.Transform.Prefix))continue;if(A.startsWith("input.")){l[y]=A;continue}let N=(0,C.parseOutputOutIndex)(A);if(N!==null&&N!==t){l[y]=null;continue}let[M,z,q]=A.split(".");if(M==="event"){if(!z||isNaN(Number(q)))continue;let _=Number(q),W=(0,ne.findEventsByFirstTopic)(r,z),Ee=m.parseEvents({events:W})[0];if(!Ee||typeof Ee!="object"){l[y]=null;continue}let oe=Object.values(Ee)[_]||null;o.push(String(oe)),c.push(oe),l[y]=oe&&oe.valueOf()}else if(M==="out"||M.startsWith("out[")){if(!z)continue;let _=Number(z),W=P.values[_-1]||null;q&&(W=W[q]||null),W&&typeof W=="object"&&(W="toFixed"in W?W.toFixed():W.valueOf()),o.push(String(W)),c.push(W),l[y]=W&&W.valueOf()}else l[y]=A}return{values:{string:o,native:c,mapped:{}},output:await(0,C.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let s=t.map(g=>this.serializer.typedToString(g)),o=t.map(g=>this.serializer.typedToNative(g)[1]),c={string:s,native:o,mapped:{}},l={};if(!e.output)return{values:c,output:l};let f=g=>{let m=g.split(".").slice(1).map(P=>parseInt(P)-1);if(m.length===0)return;let v=o[m[0]];for(let P=1;P<m.length;P++){if(v==null)return;v=v[m[P]]}return v};for(let[g,m]of Object.entries(e.output)){if(m.startsWith(C.WarpConstants.Transform.Prefix))continue;let v=(0,C.parseOutputOutIndex)(m);if(v!==null&&v!==r){l[g]=null;continue}m.startsWith("out.")||m==="out"||m.startsWith("out[")?l[g]=f(m)||null:l[g]=m}return l=await(0,C.evaluateOutputCommon)(e,l,o,r,n,this.serializer.coreSerializer,this.config),{values:c,output:l}}async resolveWarpOutputRecursively(e){let t=e.warp,r=e.entryActionIndex,n=e.executor,s=e.inputs,o=e.meta,c=new Map,l=new Set,f=this;async function g(y,A=[]){if(c.has(y))return c.get(y);if(l.has(y))throw new Error(`Circular dependency detected at action ${y}`);l.add(y);let N=t.actions[y-1];if(!N)throw new Error(`Action ${y} not found`);let M;if(N.type==="query")M=await n.executeQuery(t,y,A);else if(N.type==="collect")M=await n.executeCollect(t,y,A,o);else throw new Error(`Unsupported or interactive action type: ${N.type}`);if(c.set(y,M),t.output)for(let z of Object.values(t.output)){let _=String(z).match(/^out\[(\d+)\]/);if(_){let W=parseInt(_[1],10);W!==y&&!c.has(W)&&await g(W)}}return l.delete(y),M}await g(r,s);let m={};for(let y of c.values())for(let[A,N]of Object.entries(y.output))N!==null?m[A]=N:A in m||(m[A]=null);let v=await(0,C.evaluateOutputCommon)(t,m,m,r,s,this.serializer.coreSerializer,this.config);return{...c.get(r),action:r,output:v}}};var Wt="EGLD-000000",de=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new V({typeRegistry:this.typeRegistry}),this.abi=new L(this.config,this.chain),this.output=new X(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=(0,F.getWarpActionByIndex)(e.warp,e.action),r=null;if(t.type==="transfer")r=await this.createTransferTransaction(e);else if(t.type==="contract")r=await this.createContractCallTransaction(e);else{if(t.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(t.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${t.type})`);return this.chain.minGasPrice&&(r.gasPrice=this.chain.minGasPrice),r}async createTransferTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createTransfer - destination not set");let t=(0,F.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=x.Address.newFromBech32(t),n=new x.TransactionsFactoryConfig({chainID:e.chain.chainId}),s=e.data?Buffer.from(this.serializer.stringToTyped(e.data).valueOf()):null,o=e.transfers.length===1&&e.transfers[0].identifier===this.chain.nativeToken?.identifier,l=(o?e.transfers[0].amount:0n)+e.value;return await new x.TransferTransactionsFactory({config:n}).createTransactionForTransfer(r,{receiver:x.Address.newFromBech32(e.destination),nativeAmount:l,tokenTransfers:o?[]:this.toTokenTransfers(e.transfers),data:s?new Uint8Array(s):void 0})}async createContractCallTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createContractCall - destination not set");let t=(0,F.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=(0,F.getWarpActionByIndex)(e.warp,e.action),n=x.Address.newFromBech32(t),s=e.args.map(c=>this.serializer.stringToTyped(c)),o=new x.TransactionsFactoryConfig({chainID:e.chain.chainId});return new x.SmartContractTransactionsFactory({config:o}).createTransactionForExecute(n,{contract:x.Address.newFromBech32(e.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:s,tokenTransfers:this.toTokenTransfers(e.transfers),nativeTransferAmount:e.value})}async executeQuery(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: executeQuery - destination not set");let t=(0,F.getWarpActionByIndex)(e.warp,e.action);if(t.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${t.type}`);let r=await this.abi.getAbiForAction(t),n=e.args.map(W=>this.serializer.stringToTyped(W)),s=T(e.chain,this.config.env,this.config),o=x.Address.newFromBech32(e.destination),c=s.createSmartContractController(r),l=c.createQuery({contract:o,function:t.func||"",arguments:n}),f=await c.runQuery(l),g=f.returnCode==="ok",m=new x.ArgSerializer,v=r.getEndpoint(f.function||t.func||""),P=(f.returnDataParts||[]).map(W=>Buffer.from(W)),y=m.buffersToValues(P,v.output),{values:A,output:N}=await this.output.extractQueryOutput(e.warp,y,e.action,e.resolvedInputs),M=(0,F.getNextInfo)(this.config,[],e.warp,e.action,N),q=e.resolvedInputs.find(W=>W.input.position==="receiver"||W.input.position==="destination")?.value||e.destination,_=(0,F.extractResolvedInputValues)(e.resolvedInputs);return{status:g?"success":"error",warp:e.warp,action:e.action,user:(0,F.getWarpWalletAddressFromConfig)(this.config,e.chain.name),txHash:null,tx:null,next:M,values:A,output:{...N,_DATA:y},messages:(0,F.applyOutputToMessages)(e.warp,N,this.config),destination:q,resolvedInputs:_}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:Wt}:t).map(t=>{let n=new x.TokenComputer().extractNonceFromExtendedIdentifier(t.identifier);return new x.TokenTransfer({token:new x.Token({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var he=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=Se[this.chain];if(!e)return["multiversx_explorer"];let t=e[this.config.env];return t||["multiversx_explorer"]}getPrimaryExplorer(){return this.getExplorers()[0]}getExplorerUrlByName(e){let t=this.config.preferences?.explorers?.[this.chain];if(t&&!e){let s=H[t];if(s)return s}if(e){let s=H[e];if(s)return s}let r=this.getPrimaryExplorer();return H[r]||H[r]}getAccountUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getTransactionUrl(e,t){return`${this.getExplorerUrlByName(t)}/transactions/${e}`}getBlockUrl(e,t){return`${this.getExplorerUrlByName(t)}/blocks/${e}`}getAssetUrl(e,t){return`${this.getExplorerUrlByName(t)}/tokens/${e}`}getContractUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getAllExplorers(){return this.getExplorers()}getExplorerByName(e){return this.getExplorers().find(r=>r.toLowerCase()===e.toLowerCase())}getAccountUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let s=H[n];s&&(r[n]=`${s}/accounts/${e}`)}),r}getTransactionUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let s=H[n];s&&(r[n]=`${s}/transactions/${e}`)}),r}};var d=require("@multiversx/sdk-core"),k=require("@joai/warps");var Ue={buildInfo:{rustc:{version:"1.86.0",commitHash:"05f9846f893b09a1be1fc8560e33fc3c815cfecb",commitDate:"2025-03-31",channel:"Stable",short:"rustc 1.86.0 (05f9846f8 2025-03-31)"},contractCrate:{name:"registry",version:"0.0.1"},framework:{name:"multiversx-sc",version:"0.51.1"}},name:"RegistryContract",constructor:{inputs:[{name:"unit_price",type:"BigUint"},{name:"vault",type:"Address"}],outputs:[]},upgradeConstructor:{inputs:[],outputs:[]},endpoints:[{name:"registerWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias_opt",type:"optional<bytes>",multi_arg:!0},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[],allow_multiple_var_args:!0},{name:"unregisterWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"upgradeWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"alias",type:"bytes"},{name:"new_warp",type:"bytes"},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[]},{name:"setWarpAlias",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias",type:"bytes"}],outputs:[]},{name:"forceRemoveAlias",mutability:"mutable",inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"verifyWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"transferOwnership",mutability:"mutable",inputs:[{name:"warp",type:"bytes"},{name:"new_owner",type:"Address"}],outputs:[]},{name:"getUserWarps",mutability:"readonly",inputs:[{name:"address",type:"Address"}],outputs:[{type:"variadic<InfoView>",multi_result:!0}]},{name:"getInfoByAlias",mutability:"readonly",inputs:[{name:"alias",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"getInfoByHash",mutability:"readonly",inputs:[{name:"hash",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"setVault",onlyOwner:!0,mutability:"mutable",inputs:[{name:"vault",type:"Address"}],outputs:[]},{name:"setUnitPrice",onlyOwner:!0,mutability:"mutable",inputs:[{name:"amount",type:"BigUint"}],outputs:[]},{name:"addAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"removeAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"getConfig",mutability:"readonly",inputs:[],outputs:[{type:"ConfigView"}]},{name:"registerBrand",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"brandWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"warp",type:"bytes"},{name:"brand",type:"bytes"}],outputs:[]},{name:"getUserBrands",mutability:"readonly",inputs:[{name:"user",type:"Address"}],outputs:[{type:"variadic<bytes>",multi_result:!0}]}],events:[{identifier:"warpRegistered",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpUnregistered",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"warpUpgraded",inputs:[{name:"alias",type:"bytes",indexed:!0},{name:"new_warp",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpVerified",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"aliasUpdated",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0}]},{identifier:"ownershipTransferred",inputs:[{name:"warp",type:"bytes",indexed:!0},{name:"old_owner",type:"Address",indexed:!0},{name:"new_owner",type:"Address",indexed:!0}]}],esdtAttributes:[],hasCallback:!1,types:{ConfigView:{type:"struct",fields:[{name:"unit_price",type:"BigUint"},{name:"admins",type:"List<Address>"}]},InfoView:{type:"struct",fields:[{name:"hash",type:"bytes"},{name:"alias",type:"Option<bytes>"},{name:"trust",type:"bytes"},{name:"owner",type:"Address"},{name:"created_at",type:"u64"},{name:"upgraded_at",type:"u64"},{name:"brand",type:"Option<bytes>"},{name:"upgrade",type:"Option<bytes>"}]}}};var I=i=>{if(i==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(i==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var ge=i=>({hash:i.hash.toString("hex"),alias:i.alias?.toString()||null,trust:i.trust.toString(),owner:i.owner.toString(),createdAt:i.created_at.toNumber(),upgradedAt:i.upgraded_at?.toNumber(),brand:i.brand?.toString("hex")||null,upgrade:i.upgrade?.toString("hex")||null}),Fe=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(e=>e.toBech32())});var fe=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new k.WarpCache(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=(0,k.getWarpWalletAddressFromConfig)(this.config,this.chain.name)}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}async createWarpRegisterTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=d.Address.newFromBech32(this.userWallet),s=()=>this.isCurrentUserAdmin()?BigInt(0):t&&r?this.registryConfig.unitPrice*BigInt(3):t?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,o=()=>t&&r?[d.BytesValue.fromHex(e),d.BytesValue.fromUTF8(t),d.BytesValue.fromHex(r)]:t?[d.BytesValue.fromHex(e),d.BytesValue.fromUTF8(t)]:[d.BytesValue.fromHex(e)];return await this.getFactory().createTransactionForExecute(n,{contract:d.Address.newFromBech32(I(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:s(),arguments:o()})}async createWarpUnregisterTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:d.Address.newFromBech32(I(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[d.BytesValue.fromHex(e)]})}async createWarpUpgradeTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(n,{contract:d.Address.newFromBech32(I(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:r?[d.BytesValue.fromUTF8(e),d.BytesValue.fromHex(t),d.BytesValue.fromHex(r)]:[d.BytesValue.fromUTF8(e),d.BytesValue.fromHex(t)]})}async createWarpAliasSetTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:d.Address.newFromBech32(I(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.BytesValue.fromHex(e),d.BytesValue.fromUTF8(t)]})}async createWarpVerifyTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:d.Address.newFromBech32(I(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[d.BytesValue.fromHex(e)]})}async createWarpTransferOwnershipTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:d.Address.newFromBech32(I(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[d.BytesValue.fromHex(e),new d.AddressValue(new d.Address(t))]})}async createBrandRegisterTransaction(e){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:d.Address.newFromBech32(I(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.BytesValue.fromHex(e)]})}async createWarpBrandingTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=d.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:d.Address.newFromBech32(I(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.BytesValue.fromHex(e),d.BytesValue.fromHex(t)]})}async getInfoByAlias(e,t){try{let r=k.WarpCacheKey.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return k.WarpLogger.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let s=d.Address.newFromBech32(I(this.config.env)),o=this.getController(),c=o.createQuery({contract:s,function:"getInfoByAlias",arguments:[d.BytesValue.fromUTF8(e)]}),l=await o.runQuery(c),[f]=o.parseQueryResponse(l),g=f?ge(f):null,m=g?.brand?await this.fetchBrand(g.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:g,brand:m},t.ttl),{registryInfo:g,brand:m}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=k.WarpCacheKey.RegistryInfo(this.config.env,e);if(t){let m=this.cache.get(r);if(m)return k.WarpLogger.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),m}let n=d.Address.newFromBech32(I(this.config.env)),s=this.getController(),o=s.createQuery({contract:n,function:"getInfoByHash",arguments:[d.BytesValue.fromHex(e)]}),c=await s.runQuery(o),[l]=s.parseQueryResponse(c),f=l?ge(l):null,g=f?.brand?await this.fetchBrand(f.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:f,brand:g},t.ttl),{registryInfo:f,brand:g}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=d.Address.newFromBech32(I(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserWarps",arguments:[new d.AddressValue(new d.Address(t))]}),o=await n.runQuery(s),[c]=n.parseQueryResponse(o);return c.map(ge)}catch{return[]}}async getUserBrands(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=d.Address.newFromBech32(I(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserBrands",arguments:[new d.AddressValue(new d.Address(t))]}),o=await n.runQuery(s),[c]=n.parseQueryResponse(o),l=c.map(m=>m.toString("hex")),f={ttl:365*24*60*60};return(await Promise.all(l.map(m=>this.fetchBrand(m,f)))).filter(m=>m!==null)}catch{return[]}}async fetchBrand(e,t){let r=k.WarpCacheKey.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return k.WarpLogger.info(`WarpRegistry (fetchBrand): Brand found in cache: ${e}`),n;let o=T(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await o.getTransaction(e),l=JSON.parse(c.data.toString());return l.meta={query:null,chain:this.chain.name,identifier:(0,k.createWarpIdentifier)(this.chain.name,"hash",e),hash:c.hash,creator:c.sender.toBech32(),createdAt:new Date(c.timestamp*1e3).toISOString()},t&&t.ttl&&this.cache.set(r,l,t.ttl),l}catch{return null}}async loadRegistryConfigs(){let e=d.Address.newFromBech32(I(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Fe(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new d.TransactionsFactoryConfig({chainID:this.chain.chainId}),t=d.AbiRegistry.create(Ue);return new d.SmartContractTransactionsFactory({config:e,abi:t})}getController(){let e=T(this.chain,this.config.env,this.config),t=d.AbiRegistry.create(Ue);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var se=require("@joai/warps"),rt=require("@multiversx/sdk-core");var R=require("@multiversx/sdk-core"),et=ut(require("@scure/bip39"),1),tt=require("@scure/bip39/wordlists/english.js"),b=require("@joai/warps"),Y=class Y{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,b.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new R.Message({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let t=(0,b.normalizeAndValidateMnemonic)(e),n=R.Mnemonic.fromString(t).deriveKey(0),s=n.hex(),c=n.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),l={provider:Y.PROVIDER_NAME,address:c,privateKey:s,mnemonic:t};return(0,b.setWarpWalletInConfig)(this.config,this.chain.name,l),l}async importFromPrivateKey(e){let t=R.UserSecretKey.fromString(e),r=t.hex(),s=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:Y.PROVIDER_NAME,address:s,privateKey:r,mnemonic:null};return(0,b.setWarpWalletInConfig)(this.config,this.chain.name,o),o}async export(){let e=this.getAccount(),t=(0,b.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name),r=(0,b.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);return{provider:Y.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=et.generateMnemonic(tt.wordlist,256),t=(0,b.normalizeMnemonic)(e);(0,b.validateMnemonicLength)(t);let o=R.Mnemonic.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:Y.PROVIDER_NAME,address:o,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=(0,b.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=R.Mnemonic.fromString(e).deriveKey(0);return this.account=new R.Account(r,this.chain.addressHrp),this.account}};Y.PROVIDER_NAME="mnemonic";var ye=Y;var O=require("@multiversx/sdk-core"),D=require("@joai/warps"),Z=class Z{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,D.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new O.Message({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=O.Mnemonic.fromString(e).deriveKey(0),n=r.hex(),o=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:Z.PROVIDER_NAME,address:o,privateKey:n,mnemonic:e};return(0,D.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let r=e.startsWith("-----")?O.UserSecretKey.fromPem(e):O.UserSecretKey.fromString(e),n=r.hex(),o=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:Z.PROVIDER_NAME,address:o,privateKey:n,mnemonic:null};return(0,D.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async export(){let e=this.getAccount(),t=(0,D.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name),r=(0,D.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);return{provider:Z.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=O.UserSecretKey.generate(),t=e.hex(),n=e.generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:Z.PROVIDER_NAME,address:n,privateKey:t,mnemonic:null}}getAccount(){if(this.account)return this.account;let e=(0,D.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?O.UserSecretKey.fromPem(e):O.UserSecretKey.fromString(e);return this.account=new O.Account(r,this.chain.addressHrp),this.account}};Z.PROVIDER_NAME="privateKey";var We=Z;var ae=require("@joai/warps"),ee=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name)}async getPublicKey(){return null}async signTransaction(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async signMessage(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromMnemonic(e){let t=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=(0,ae.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var we=class{constructor(e,t){this.config=e;this.chain=t;this.cachedAddress=null;this.cachedPublicKey=null;this.entry=T(t,e.env,e),this.cache=new se.WarpCache(e.env,e.cache),this.walletProvider=this.createProvider(),this.initializeCache()}async signTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof ee)throw new Error(`Wallet (${this.chain.name}) is read-only`);if(this.walletProvider instanceof We||this.walletProvider instanceof ye){let n=this.walletProvider.getAccountInstance();if(t.nonce===0n){let s=await this.entry.recallAccountNonce(n.address),o=this.cache.get(`nonce:${n.address.toBech32()}`)||0,c=BigInt(Math.max(o,Number(s)));t.nonce=c}}else if(t.nonce===0n&&this.cachedAddress){let n=rt.Address.newFromBech32(this.cachedAddress),s=await this.entry.recallAccountNonce(n),o=this.cache.get(`nonce:${this.cachedAddress}`)||0,c=BigInt(Math.max(o,Number(s)));t.nonce=c}return await this.walletProvider.signTransaction(t)}async signTransactions(e){let t=[];for(let r of e)t.push(await this.signTransaction(r));return t}async signMessage(e){if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof ee)throw new Error(`Wallet (${this.chain.name}) is read-only`);return await this.walletProvider.signMessage(e)}async sendTransactions(e){return Promise.all(e.map(async t=>this.sendTransaction(t)))}async sendTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!t.signature||t.signature.length===0)throw new Error("Transaction must be signed before sending");let r=await this.entry.sendTransaction(t),n=t.sender,s=Number(t.nonce)+1;return this.cache.set(`nonce:${n}`,s,se.CacheTtl.OneMinute),r}async importFromMnemonic(e){return await this.createProviderForOperation("mnemonic").importFromMnemonic(e)}async importFromPrivateKey(e){return await this.createProviderForOperation("privateKey").importFromPrivateKey(e)}async export(e){return await this.createProviderForOperation(e).export()}async generate(e){return await this.createProviderForOperation(e).generate()}getAddress(){return this.cachedAddress}getPublicKey(){return this.cachedPublicKey}createProvider(){let e=this.config.user?.wallets?.[this.chain.name];return e?typeof e=="string"?new ee(this.config,this.chain):e.provider?this.createProviderForOperation(e.provider):new ee(this.config,this.chain):null}initializeCache(){(0,se.initializeWalletCache)(this.walletProvider).then(e=>{this.cachedAddress=e.address,this.cachedPublicKey=e.publicKey})}createProviderForOperation(e){let r=this.config.walletProviders?.[this.chain.name]?.[e];if(r){let n=r(this.config,this.chain);if(!n)throw new Error(`Custom wallet provider factory returned null for ${e}`);return n}if(e==="privateKey")return new We(this.config,this.chain);if(e==="mnemonic")return new ye(this.config,this.chain);throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${e}`)}};var Ce=(i,e)=>(t,r)=>{let n=e[t.env],s=new nt.WarpTypeRegistry;return s.registerType("token",{stringToNative:o=>o,nativeToString:o=>`token:${o}`}),s.registerType("codemeta",{stringToNative:o=>o,nativeToString:o=>`codemeta:${o}`}),s.registerTypeAlias("list","vector"),{chainInfo:n,builder:()=>new ue(t,n),executor:new de(t,n,s),output:new X(t,n,s),serializer:new V({typeRegistry:s}),registry:new fe(t,n),explorer:new he(i,t),abiBuilder:()=>new L(t,n),brandBuilder:()=>new pe(t,n),dataLoader:new me(t,n),wallet:new we(t,n)}};var ie=require("@joai/warps");var xe={chain:ie.WarpChainName.Multiversx,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/egld.svg"},ke=Ce(ie.WarpChainName.Multiversx,{mainnet:{name:ie.WarpChainName.Multiversx,displayName:"MultiversX",chainId:"1",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:xe},testnet:{name:ie.WarpChainName.Multiversx,displayName:"MultiversX Testnet",chainId:"T",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://testnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:xe},devnet:{name:ie.WarpChainName.Multiversx,displayName:"MultiversX Devnet",chainId:"D",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://devnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:xe}});var Ae=require("@joai/warps");var at={chain:Ae.WarpChainName.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},Oe={name:Ae.WarpChainName.Claws,displayName:"Claws Network",chainId:"C",blockTime:600,addressHrp:"claw",defaultApiUrl:"https://api.claws.network",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/claws.png",nativeToken:at,minGasPrice:20000000000000n},Ve=Ce(Ae.WarpChainName.Claws,{mainnet:Oe,testnet:Oe,devnet:Oe});var Ct=()=>[ke,Ve];var K=require("@joai/warps");var vt=i=>new K.WarpSerializer().nativeToString(w.Token,i),Tt=i=>new K.WarpSerializer().nativeToString(w.CodeMeta,i),xt=(i,e)=>{if(e===null)return w.Optional+K.WarpConstants.ArgParamsSeparator;let t=i(e),r=t.indexOf(K.WarpConstants.ArgParamsSeparator),n=t.substring(0,r),s=t.substring(r+1);return w.Optional+K.WarpConstants.ArgParamsSeparator+n+K.WarpConstants.ArgParamsSeparator+s},At=i=>new K.WarpSerializer().nativeToString(w.List,i);var p=require("@multiversx/sdk-core"),Et=(i,e)=>i?p.OptionValue.newProvided(i):e?p.OptionValue.newMissingTyped(e):p.OptionValue.newMissing(),bt=(i,e)=>i?new p.OptionalValue(i.getType(),i):e?new p.OptionalValue(e):p.OptionalValue.newMissing(),Pt=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let e=i[0].getType();return new p.List(e,i)},St=i=>p.VariadicValue.fromItems(...i),It=i=>{let e=i.map(t=>t.getType());return new p.CompositeValue(new p.CompositeType(...e),i)},Nt=i=>p.StringValue.fromUTF8(i),Bt=i=>new p.U8Value(i),Ut=i=>new p.U16Value(i),Ft=i=>new p.U32Value(i),kt=i=>new p.U64Value(i),Ot=i=>new p.BigUIntValue(BigInt(i)),Vt=i=>new p.BooleanValue(i),Mt=i=>new p.AddressValue(p.Address.newFromBech32(i)),Rt=i=>new p.TokenIdentifierValue(i),Dt=i=>p.BytesValue.fromHex(i),Lt=i=>new p.Struct(new p.StructType("EsdtTokenPayment",[new p.FieldDefinition("token_identifier","",new p.TokenIdentifierType),new p.FieldDefinition("token_nonce","",new p.U64Type),new p.FieldDefinition("amount","",new p.BigUIntType)]),[new p.Field(new p.TokenIdentifierValue(i.token.identifier),"token_identifier"),new p.Field(new p.U64Value(BigInt(i.token.nonce)),"token_nonce"),new p.Field(new p.BigUIntValue(BigInt(i.amount)),"amount")]),Kt=i=>new p.CodeMetadataValue(p.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),_t=()=>new p.NothingValue;0&&(module.exports={ClawsAdapter,ClawsExplorers,ExplorerUrls,KnownTokens,MultiversxAdapter,MultiversxExplorers,MultiversxExplorersConfig,NativeTokenClaw,NativeTokenEgld,WarpMultiversxAbiBuilder,WarpMultiversxBrandBuilder,WarpMultiversxBuilder,WarpMultiversxConstants,WarpMultiversxContractLoader,WarpMultiversxDataLoader,WarpMultiversxExecutor,WarpMultiversxExplorer,WarpMultiversxInputTypes,WarpMultiversxOutput,WarpMultiversxRegistry,WarpMultiversxSerializer,WarpMultiversxWallet,address_value,asset_value,biguint_value,boolean_value,codemeta,codemeta_value,composite_value,createMultiversxAdapter,findKnownTokenById,getAllMultiversxAdapters,getAllMultiversxChainNames,getKnownTokensForChain,getMultiversxEntrypoint,getMultiversxRegistryAddress,getNormalizedTokenIdentifier,hex_value,isNativeToken,list,list_value,nothing_value,option_value,optional,optional_value,string_value,toTypedConfigInfo,toTypedRegistryInfo,token,token_value,u16_value,u32_value,u64_value,u8_value,variadic_value});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{WarpChainName as qe}from"@joai/warps";var _n=()=>[qe.Multiversx,qe.Claws];import{WarpTypeRegistry as vn}from"@joai/warps";import{AbiRegistry as fe,Address as Gt,TransactionsFactoryConfig as zt,TransferTransactionsFactory as qt}from"@multiversx/sdk-core";import{createWarpIdentifier as Qt,getLatestProtocolIdentifier as jt,getWarpWalletAddressFromConfig as Jt,WarpCache as Xt,WarpCacheKey as Yt,WarpConstants as je,WarpLogger as Je}from"@joai/warps";import{DevnetEntrypoint as Kt,MainnetEntrypoint as Ht,TestnetEntrypoint as _t}from"@multiversx/sdk-core";import{getProviderConfig as $t}from"@joai/warps";var R=i=>!i.includes("-"),Q=i=>R(i)?`${i}-000000`:i,w=(i,e,t)=>{let r="warp-sdk",a=t?$t(t,i.name,e,i.defaultApiUrl):{url:i.defaultApiUrl},s=a.url,o={headers:a.headers};return e==="devnet"?new Kt({url:s,kind:"api",clientName:r,networkProviderConfig:o}):e==="testnet"?new _t({url:s,kind:"api",clientName:r,networkProviderConfig:o}):new Ht({url:s,kind:"api",clientName:r,networkProviderConfig:o})};import{WarpLogger as Qe}from"@joai/warps";var j=class{constructor(e){this.config=e}async getContract(e,t){try{let a=await w(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}`);return{address:e,owner:a.ownerAddress,verified:a.isVerified||!1}}catch(r){return Qe.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(e,t){try{let a=await w(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}/verification`);return{codeHash:a.codeHash,abi:a.source.abi}}catch(r){return Qe.error("WarpContractLoader: getVerificationInfo error",r),null}}};var S=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new j(this.config),this.cache=new Xt(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=Jt(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new zt({chainID:this.chain.chainId}),n=new qt({config:r}),a=Gt.newFromBech32(t),s={protocol:jt("abi"),content:e},o=JSON.stringify(s),c=await n.createTransactionForTransfer(a,{receiver:a,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return c.gasLimit=c.gasLimit+BigInt(2e6),c}async createFromRaw(e){return JSON.parse(e)}async createFromTransaction(e){let t=await this.createFromRaw(e.data.toString());return t.meta={chain:this.chain.name,identifier:Qt(this.chain.name,"hash",e.hash),query:null,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},t}async createFromTransactionHash(e,t){let r=Yt.WarpAbi(this.config.env,e);if(t){let s=this.cache.get(r);if(s)return Je.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${e}`),s}let a=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let s=await a.getTransaction(e),o=await this.createFromTransaction(s);return t&&t.ttl&&o&&this.cache.set(r,o,t.ttl),o}catch(s){return Je.error("WarpAbiBuilder: Error creating from transaction hash",s),null}}async getAbiForAction(e){if(e.abi)return await this.fetchAbi(e);if(!e.address)throw new Error("WarpActionExecutor: Address not found");let t=await this.contractLoader.getVerificationInfo(e.address,this.chain);if(!t)throw new Error("WarpActionExecutor: Verification info not found");return fe.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(je.IdentifierType.Hash)){let t=e.abi.split(je.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return fe.create(r.content)}else{let r=await(await fetch(e.abi)).json();return fe.create(r)}}};import{Address as Xe,TransactionsFactoryConfig as Zt,TransferTransactionsFactory as er}from"@multiversx/sdk-core";import{createWarpIdentifier as tr,getWarpWalletAddressFromConfig as rr,WarpBrandBuilder as nr,WarpLogger as ar}from"@joai/warps";import{Buffer as sr}from"buffer";var J=class{constructor(e,t){this.config=e;this.chain=t;this.core=new nr(e)}async createInscriptionTransaction(e){let t=rr(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new Zt({chainID:this.chain.chainId}),n=new er({config:r}),a=Xe.newFromBech32(t),s=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(a,{receiver:Xe.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(sr.from(s))})}async createFromTransaction(e,t=!1){let r=await this.core.createFromRaw(e.data.toString(),t);return r.meta={query:null,chain:this.chain.name,identifier:tr(this.chain.name,"hash",e.hash),hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},r}async createFromTransactionHash(e){let r=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let n=await r.getTransaction(e);return this.createFromTransaction(n)}catch(n){return ar.error("BrandBuilder: Error creating from transaction hash",n),null}}};import{Address as Ye,TransactionsFactoryConfig as ir,TransferTransactionsFactory as or}from"@multiversx/sdk-core";import{createWarpIdentifier as cr,getWarpWalletAddressFromConfig as lr,WarpBuilder as Ze,WarpCache as pr,WarpCacheKey as ur,WarpLogger as et}from"@joai/warps";var X=class extends Ze{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new pr(t.env,t.cache),this.core=new Ze(t)}async createInscriptionTransaction(t){let r=lr(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new ir({chainID:this.chain.chainId}),a=new or({config:n}),s=Ye.newFromBech32(r),o=JSON.stringify(t),c=await a.createTransactionForTransfer(s,{receiver:Ye.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return c.gasLimit=c.gasLimit+BigInt(2e6),c}async createFromTransaction(t,r=!1){let n=await this.core.createFromRaw(t.data.toString(),r);return n.meta={chain:this.chain.name,identifier:cr(this.chain.name,"hash",t.hash),query:null,hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},n}async createFromTransactionHash(t,r){let n=ur.Warp(this.config.env,t);if(r){let o=this.cache.get(n);if(o)return et.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),o}let s=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let o=await s.getTransaction(t),c=await this.createFromTransaction(o);return r&&r.ttl&&c&&this.cache.set(n,c,r.ttl),c}catch(o){return et.error("WarpBuilder: Error creating from transaction hash",o),null}}};import{Address as ye,Token as fr,TokenComputer as yr}from"@multiversx/sdk-core";import{CacheTtl as Wr,WarpCache as wr,WarpCacheKey as vr}from"@joai/warps";import{WarpChainName as ot}from"@joai/warps";import{WarpChainName as mr}from"@joai/warps";var tt=mr.Multiversx,rt=[{chain:tt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:tt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as dr}from"@joai/warps";var x=dr.Multiversx,nt=[{chain:x,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:x,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:x,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:x,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:x,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:x,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:x,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:x,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:x,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:x,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:x,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:x,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:x,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:x,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:x,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];import{WarpChainName as hr}from"@joai/warps";var at=hr.Multiversx,st=[{chain:at,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:at,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as gr}from"@joai/warps";var it=gr.Claws,Y=[{chain:it,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:it,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var ct={[ot.Multiversx]:{mainnet:nt,testnet:st,devnet:rt},[ot.Claws]:{mainnet:Y,testnet:Y,devnet:Y}},lt=(i,e,t)=>(ct[i]?.[e]||[]).find(n=>n.identifier===t)||null,ss=(i,e)=>ct[i]?.[e]||[];var Z=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new wr(e.env,e.cache)}async getAccount(e){let r=await w(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(ye.newFromBech32(e));return{chain:this.chain.name,address:r.address.toBech32(),balance:r.balance}}async getAccountAssets(e){let t=w(this.chain,this.config.env,this.config).createNetworkProvider(),r=t.getAccount(ye.newFromBech32(e)),n=t.getFungibleTokensOfAccount(ye.newFromBech32(e)),[a,s]=await Promise.all([r,n]),o=a.balance>0?[{...this.chain.nativeToken,amount:a.balance}]:[];return o.push(...s.map(c=>({chain:this.chain.name,identifier:c.token.identifier,name:c.raw.name,symbol:c.raw.ticker,amount:c.amount,decimals:c.raw.decimals,logoUrl:c.raw.assets?.pngUrl||"",price:c.raw.price?Number(c.raw.price):void 0,supply:c.raw.supply?BigInt(c.raw.supply):void 0}))),o}async getAsset(e){let t=vr.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=lt(this.chain.name,this.config.env,e);if(n)return{chain:this.chain.name,identifier:e,name:n.name,symbol:n.symbol,amount:0n,decimals:n.decimals,logoUrl:n.logoUrl};let a=new yr,s=R(e)?0n:a.extractNonceFromExtendedIdentifier(e),o=new fr({identifier:e,nonce:BigInt(s||0)}),c=a.isFungible(o),d=w(this.chain,this.config.env,this.config).createNetworkProvider(),m=Q(e),p=await d.doGetGeneric(`tokens/${m}`),W={chain:this.chain.name,identifier:o.identifier,name:p.name,symbol:p.ticker,amount:0n,decimals:p.decimals,logoUrl:p.assets?.pngUrl||null,price:p.price?Number(p.price):void 0,supply:p.supply?BigInt(p.supply):void 0};return this.cache.set(t,W,Wr.OneHour),W}async getAction(e,t=!1){let r=w(this.chain,this.config.env,this.config),n=t?await r.awaitCompletedTransaction(e):await r.getTransaction(e);return{chain:this.chain.name,id:n.hash,receiver:n.receiver.toBech32(),sender:n.sender.toBech32(),value:n.value,function:n.function,status:this.toActionStatus(n),createdAt:this.toActionCreatedAt(n),error:n?.smartContractResults.map(a=>a.raw.returnMessage)[0]||null,tx:n}}async getAccountActions(e,t){let r=w(this.chain,this.config.env,this.config).createNetworkProvider(),n=`accounts/${e}/transactions`,a=new URLSearchParams,s=t?.size||25,o=t?.page||0;if(o>0){let d=o*s;a.append("from",d.toString())}return s!==25&&a.append("size",s.toString()),a.toString()&&(n+=`?${a.toString()}`),(await r.doGetGeneric(n)).map(d=>({chain:this.chain.name,id:d.txHash,receiver:d.receiver,sender:d.sender,value:d.value,function:d.function,status:this.toActionStatus(d),createdAt:this.toActionCreatedAt(d)}))}toActionStatus(e){return e.status?.isSuccessful?.()?"success":e.status?.isFailed?.()?"failed":"pending"}toActionCreatedAt(e){return new Date(e.timestamp||e.timestamp*1e3).toISOString()}};import{Address as H,ArgSerializer as Dr,SmartContractTransactionsFactory as Lr,Token as Kr,TokenComputer as Hr,TokenTransfer as _r,TransactionsFactoryConfig as It,TransferTransactionsFactory as $r}from"@multiversx/sdk-core";import{applyOutputToMessages as Gr,extractResolvedInputValues as zr,getNextInfo as qr,getWarpActionByIndex as Ue,getWarpWalletAddressFromConfig as Fe}from"@joai/warps";import{applyOutputToMessages as Sr,evaluateOutputCommon as oe,extractResolvedInputValues as Nr,getNextInfo as Br,getWarpActionByIndex as Ur,getWarpWalletAddressFromConfig as Fr,parseOutputOutIndex as bt,WarpCache as kr,WarpCacheKey as Vr,WarpConstants as Pt}from"@joai/warps";import{findEventsByFirstTopic as Mr,SmartContractTransactionsOutcomeParser as Or,TransactionEventsParser as Rr}from"@multiversx/sdk-core";import{Address as Ar,AddressType as We,AddressValue as mt,BigUIntType as ee,BigUIntValue as we,BooleanType as ve,BooleanValue as dt,BytesType as Ce,BytesValue as ht,CodeMetadata as Er,CodeMetadataType as Te,CodeMetadataValue as gt,CompositeType as xe,CompositeValue as ft,Field as te,FieldDefinition as re,List as yt,ListType as Wt,NothingValue as b,OptionalType as wt,OptionalValue as Ae,OptionType as vt,OptionValue as Ee,StringType as be,StringValue as Ct,Struct as ne,StructType as k,Token as br,TokenComputer as Tt,TokenIdentifierType as ae,TokenIdentifierValue as Pe,U16Type as Ie,U16Value as xt,U32Type as Se,U32Value as At,U64Type as se,U64Value as Ne,U8Type as Be,U8Value as Et,VariadicType as K,VariadicValue as ie}from"@multiversx/sdk-core";import{WarpSerializer as Pr}from"@joai/warps";var Cr=i=>i?typeof i=="string"?i:i.address:null,pt=(i,e)=>Cr(i.user?.wallets?.[e]||null);var u={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>pt(i.config,i.adapter.chainInfo.name)},UserWalletPublicKey:{Placeholder:"USER_WALLET_PUBLICKEY",Accessor:i=>{if(!i.adapter.wallet)return null;try{return i.adapter.wallet.getPublicKey()||null}catch{return null}}},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:i=>i.adapter.chainInfo.defaultApiUrl},ChainAddressHrp:{Placeholder:"CHAIN_ADDRESS_HRP",Accessor:i=>i.adapter.chainInfo.addressHrp}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",ArgListSeparator:",",ArgStructSeparator:";",Transform:{Prefix:"transform:"},Source:{UserWallet:"user:wallet"},Position:{Payload:"payload:"},Alerts:{TriggerEventPrefix:"event"}},l={Option:"option",Vector:"vector",Tuple:"tuple",Struct:"struct",String:"string",Uint8:"uint8",Uint16:"uint16",Uint32:"uint32",Uint64:"uint64",Uint128:"uint128",Uint256:"uint256",Biguint:"biguint",Bool:"bool",Address:"address",Asset:"asset",Hex:"hex"};var As={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},f={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},Tr=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(Tr||{}),xr=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(xr||{}),ut={multiversx:{mainnet:["multiversx_explorer"],testnet:["multiversx_explorer_testnet"],devnet:["multiversx_explorer_devnet"]},claws:{mainnet:["claws_explorer"],testnet:["claws_explorer_testnet"],devnet:["claws_explorer_devnet"]}},F={multiversx_explorer:"https://explorer.multiversx.com",multiversx_explorer_devnet:"https://devnet-explorer.multiversx.com",multiversx_explorer_testnet:"https://testnet-explorer.multiversx.com",claws_explorer:"https://explorer.claws.network",claws_explorer_devnet:"https://explorer.claws.network",claws_explorer_testnet:"https://explorer.claws.network"};var Ir=new RegExp(`${u.ArgParamsSeparator}(.*)`),N=class{constructor(e){this.coreSerializer=new Pr(e)}typedToString(e){let t=e.getType();if(t.hasExactClass(vt.ClassName)||e.hasClassOrSuperclass(Ee.ClassName)){if(!e.isSet())return l.Option+u.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return l.Option+u.ArgParamsSeparator+r}if(t.hasExactClass(K.ClassName)||e.hasClassOrSuperclass(ie.ClassName)){let r=e.getItems();if(r.length===0){let m=this.typeToString(t.getFirstTypeParameter());return l.Vector+u.ArgParamsSeparator+m+u.ArgParamsSeparator}let n=r.map(m=>this.typedToString(m));if(n.every(m=>m.startsWith(l.Tuple)))return l.Vector+u.ArgParamsSeparator+n.join(",");let a=n[0],s=a.indexOf(u.ArgParamsSeparator),o=a.substring(0,s),c=n.map(m=>{let p=m.indexOf(u.ArgParamsSeparator);return m.substring(p+1)}),d=o.startsWith(l.Struct)?u.ArgStructSeparator:u.ArgListSeparator;return l.Vector+u.ArgParamsSeparator+o+u.ArgParamsSeparator+c.join(d)}if(t.hasExactClass(wt.ClassName)||e.hasClassOrSuperclass(Ae.ClassName)){if(!e.isSet())return f.Optional+u.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return f.Optional+u.ArgParamsSeparator+r}if(t.hasExactClass(Wt.ClassName)||e.hasClassOrSuperclass(yt.ClassName)){let n=e.getItems().map(c=>this.typedToString(c));if(n.every(c=>c.startsWith(l.Tuple)))return f.List+u.ArgParamsSeparator+n.join(",");let s=n.map(c=>c.split(u.ArgParamsSeparator)[0])[0],o=n.map(c=>c.split(u.ArgParamsSeparator)[1]);return f.List+u.ArgParamsSeparator+s+u.ArgParamsSeparator+o.join(u.ArgListSeparator)}if(t.hasExactClass(xe.ClassName)||e.hasClassOrSuperclass(ft.ClassName)){let n=e.getItems().map(a=>{let s=this.typedToString(a),o=s.indexOf(u.ArgParamsSeparator),c=s.substring(0,o),d=s.substring(o+1);return`${c},${d}`});return`${l.Tuple}(${n.join(",")})`}if(t.hasExactClass(ee.ClassName)||e.hasClassOrSuperclass(we.ClassName)||t.getName()==="BigUint")return l.Biguint+u.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Be.ClassName)||e.hasClassOrSuperclass(Et.ClassName))return l.Uint8+u.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Ie.ClassName)||e.hasClassOrSuperclass(xt.ClassName))return l.Uint16+u.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Se.ClassName)||e.hasClassOrSuperclass(At.ClassName))return l.Uint32+u.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(se.ClassName)||e.hasClassOrSuperclass(Ne.ClassName))return l.Uint64+u.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(be.ClassName)||e.hasClassOrSuperclass(Ct.ClassName))return l.String+u.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(ve.ClassName)||e.hasClassOrSuperclass(dt.ClassName))return l.Bool+u.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(We.ClassName)||e.hasClassOrSuperclass(mt.ClassName))return l.Address+u.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(Ce.ClassName)||e.hasClassOrSuperclass(ht.ClassName))return l.Hex+u.ArgParamsSeparator+e.valueOf().toString("hex");if(t.getName()==="EsdtTokenPayment"){let r=e.getFieldValue("token_identifier").valueOf(),n=e.getFieldValue("token_nonce").valueOf(),a=e.getFieldValue("amount").valueOf(),o=new Tt().computeExtendedIdentifier(new br({identifier:r,nonce:BigInt(n)}));return l.Asset+u.ArgParamsSeparator+o+u.ArgCompositeSeparator+a}if(t.hasExactClass(k.ClassName)||e.hasClassOrSuperclass(ne.ClassName)){let r=e,a=r.getType().getName(),s=r.getFields();if(s.length===0)return`${l.Struct}(${a})${u.ArgParamsSeparator}`;let o=s.map(c=>{let d=c.value.getType(),p=this.typedToString(c.value).split(u.ArgParamsSeparator),W=p.length>2?p.slice(2).join(u.ArgParamsSeparator):p[1]||"";return`(${c.name}${u.ArgParamsSeparator}${this.typeToString(d)})${W}`});return`${l.Struct}(${a})${u.ArgParamsSeparator}${o.join(u.ArgListSeparator)}`}if(t.hasExactClass(ae.ClassName)||e.hasClassOrSuperclass(Pe.ClassName))return f.Token+u.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(Te.ClassName)||e.hasClassOrSuperclass(gt.ClassName))return f.CodeMeta+u.ArgParamsSeparator+e.valueOf().toString();throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${e.getClassName()}`)}typedToNative(e){let t=this.typedToString(e);return this.coreSerializer.stringToNative(t)}nativeToTyped(e,t){if(e.startsWith(l.Tuple))return this.stringToTyped(e+":");let r=this.coreSerializer.nativeToString(e,t);return this.stringToTyped(r)}nativeToType(e){if(e.startsWith(l.Tuple)){let t=e.match(/\(([^)]+)\)/)?.[1];if(!t)throw new Error(`Invalid tuple type format: ${e}`);let r=t.split(","),n=[];for(let a=0;a<r.length;a+=2)n.push(r[a]);return new xe(...n.map(a=>this.nativeToType(a)))}if(e.startsWith(l.Struct)){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Struct type must include a name in the format struct(Name)");let r=t[1];return new k(r,[])}if(e===l.String)return new be;if(e===l.Uint8)return new Be;if(e===l.Uint16)return new Ie;if(e===l.Uint32)return new Se;if(e===l.Uint64)return new se;if(e===l.Biguint)return new ee;if(e===l.Bool)return new ve;if(e===l.Address)return new We;if(e===l.Hex)return new Ce;if(e===l.Asset)return new k("EsdtTokenPayment",[new re("token_identifier","",new ae),new re("token_nonce","",new se),new re("amount","",new ee)]);if(e===f.Token)return new ae;if(e===f.CodeMeta)return new Te;throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${e}`)}stringToTyped(e){let[t,r]=e.split(/:(.*)/,2);if(t===l.Option){let n=this.stringToTyped(r);return n instanceof b?Ee.newMissingTyped(n.getType()):Ee.newProvided(n)}if(t===l.Vector){let n=r.indexOf(u.ArgParamsSeparator),a=r.substring(0,n),s=r.substring(n+1);if(a.startsWith(l.Tuple)){let p=s.split(",").map(W=>this.stringToTyped(W));return new ie(new K(this.nativeToType(a)),p)}if(s.includes("tuple(")){let m=this.splitTupleStrings(s),p=m.map(C=>this.stringToTyped(C)),T=m[0].match(/^(tuple\([^)]+\))/),h=T?T[1]:"tuple";return new ie(new K(this.nativeToType(h)),p)}let o=a.startsWith(l.Struct)?u.ArgStructSeparator:u.ArgListSeparator,d=s.split(o).map(m=>this.stringToTyped(`${a}:${m}`));return new ie(new K(this.nativeToType(a)),d)}if(t.startsWith(l.Tuple)){let n=t.match(/\(([^)]+)\)/)?.[1];if(!n)throw new Error(`Invalid tuple format: ${t}`);let a=n.split(","),s=[];for(let c=0;c<a.length;c+=2){let d=a[c],m=a[c+1];s.push(this.stringToTyped(`${d}:${m}`))}let o=s.map(c=>c.getType());return new ft(new xe(...o),s)}if(t.startsWith(l.Struct)){let n=t.match(/\(([^)]+)\)/),a=n?n[1]:"CustomStruct";if(!r)return new ne(new k(a,[]),[]);let s=r.split(u.ArgListSeparator),o=[],c=[];return s.forEach(d=>{let m=d.match(new RegExp(`^\\(([^${u.ArgParamsSeparator}]+)${u.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(m){let[,p,W,T]=m,h=this.stringToTyped(`${W}${u.ArgParamsSeparator}${T}`);o.push(new re(p,"",h.getType())),c.push(new te(h,p))}}),new ne(new k(a,o),c)}if(t===l.String)return r?Ct.fromUTF8(r):new b;if(t===l.Uint8)return r?new Et(Number(r)):new b;if(t===l.Uint16)return r?new xt(Number(r)):new b;if(t===l.Uint32)return r?new At(Number(r)):new b;if(t===l.Uint64)return r?new Ne(BigInt(r)):new b;if(t===l.Biguint)return r?new we(BigInt(r)):new b;if(t===l.Bool)return r?new dt(typeof r=="boolean"?r:r==="true"):new b;if(t===l.Address)return r?new mt(Ar.newFromBech32(r)):new b;if(t===l.Hex)return r?ht.fromHex(r):new b;if(t===l.Asset){let[n,a]=r.split(u.ArgCompositeSeparator),s=new Tt,o=R(n)?Q(n):s.extractIdentifierFromExtendedIdentifier(n),c=R(n)?0n:s.extractNonceFromExtendedIdentifier(n);return new ne(this.nativeToType("asset"),[new te(new Pe(o),"token_identifier"),new te(new Ne(BigInt(c)),"token_nonce"),new te(new we(BigInt(a)),"amount")])}if(t===f.Null)return new b;if(t===f.Optional){let n=this.stringToTyped(r);return n instanceof b?Ae.newMissing():new Ae(n.getType(),n)}if(t===f.List){let[n,a]=r.split(Ir,2),o=a.split(u.ArgListSeparator).map(c=>this.stringToTyped(n+u.ArgParamsSeparator+c));return new yt(this.nativeToType(n),o)}if(t===f.Token)return r?new Pe(r):new b;if(t===f.CodeMeta)return new gt(Er.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${t}`)}splitTupleStrings(e){let t=[],r="",n=0;for(let a=0;a<e.length;a++){let s=e[a];if(s==="(")n++;else if(s===")")n--;else if(s===","&&n===0){t.push(r.trim()),r="";continue}r+=s}return r.trim()&&t.push(r.trim()),t}typeToString(e){if(e.hasExactClass(vt.ClassName))return l.Option+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(K.ClassName))return l.Vector+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(be.ClassName))return l.String;if(e.hasExactClass(Be.ClassName))return l.Uint8;if(e.hasExactClass(Ie.ClassName))return l.Uint16;if(e.hasExactClass(Se.ClassName))return l.Uint32;if(e.hasExactClass(se.ClassName))return l.Uint64;if(e.hasExactClass(ee.ClassName))return l.Biguint;if(e.hasExactClass(ve.ClassName))return l.Bool;if(e.hasExactClass(We.ClassName))return l.Address;if(e.hasExactClass(Ce.ClassName))return l.Hex;if(e.hasExactClass(ae.ClassName))return f.Token;if(e.hasExactClass(wt.ClassName))return f.Optional+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Wt.ClassName))return f.List+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Te.ClassName))return f.CodeMeta;if(e.hasExactClass(k.ClassName)&&e.getClassName()==="EsdtTokenPayment")return l.Asset;if(e.hasExactClass(k.ClassName))return`${l.Struct}(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var D=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new S(e,t),this.serializer=new N({typeRegistry:this.typeRegistry}),this.cache=new kr(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(Vr.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],a=await this.extractContractOutput(e,t,r,n),s=Br(this.config,[],e,t,a.output),o=Sr(e,a.output,this.config),c=Nr(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:Fr(this.config,this.chain.name),txHash:r.hash,tx:r,next:s,values:a.values,output:a.output,messages:o,destination:null,resolvedInputs:c}}async extractContractOutput(e,t,r,n){let a=Ur(e,t),s=[],o=[],c={};if(!e.output||a.type!=="contract")return{values:{string:s,native:o,mapped:{}},output:c};if(!Object.values(e.output).some(h=>h.includes("out")||h.includes("event"))){for(let[h,C]of Object.entries(e.output))c[h]=C;return{values:{string:s,native:o,mapped:{}},output:await oe(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}let m=await this.abi.getAbiForAction(a),p=new Rr({abi:m}),T=new Or({abi:m}).parseExecute({transactionOnNetwork:r,function:a.func||void 0});for(let[h,C]of Object.entries(e.output)){if(C.startsWith(Pt.Transform.Prefix))continue;if(C.startsWith("input.")){c[h]=C;continue}let A=bt(C);if(A!==null&&A!==t){c[h]=null;continue}let[P,B,U]=C.split(".");if(P==="event"){if(!B||isNaN(Number(U)))continue;let I=Number(U),g=Mr(r,B),ge=p.parseEvents({events:g})[0];if(!ge||typeof ge!="object"){c[h]=null;continue}let L=Object.values(ge)[I]||null;s.push(String(L)),o.push(L),c[h]=L&&L.valueOf()}else if(P==="out"||P.startsWith("out[")){if(!B)continue;let I=Number(B),g=T.values[I-1]||null;U&&(g=g[U]||null),g&&typeof g=="object"&&(g="toFixed"in g?g.toFixed():g.valueOf()),s.push(String(g)),o.push(g),c[h]=g&&g.valueOf()}else c[h]=C}return{values:{string:s,native:o,mapped:{}},output:await oe(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let a=t.map(m=>this.serializer.typedToString(m)),s=t.map(m=>this.serializer.typedToNative(m)[1]),o={string:a,native:s,mapped:{}},c={};if(!e.output)return{values:o,output:c};let d=m=>{let p=m.split(".").slice(1).map(T=>parseInt(T)-1);if(p.length===0)return;let W=s[p[0]];for(let T=1;T<p.length;T++){if(W==null)return;W=W[p[T]]}return W};for(let[m,p]of Object.entries(e.output)){if(p.startsWith(Pt.Transform.Prefix))continue;let W=bt(p);if(W!==null&&W!==r){c[m]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?c[m]=d(p)||null:c[m]=p}return c=await oe(e,c,s,r,n,this.serializer.coreSerializer,this.config),{values:o,output:c}}async resolveWarpOutputRecursively(e){let t=e.warp,r=e.entryActionIndex,n=e.executor,a=e.inputs,s=e.meta,o=new Map,c=new Set,d=this;async function m(h,C=[]){if(o.has(h))return o.get(h);if(c.has(h))throw new Error(`Circular dependency detected at action ${h}`);c.add(h);let A=t.actions[h-1];if(!A)throw new Error(`Action ${h} not found`);let P;if(A.type==="query")P=await n.executeQuery(t,h,C);else if(A.type==="collect")P=await n.executeCollect(t,h,C,s);else throw new Error(`Unsupported or interactive action type: ${A.type}`);if(o.set(h,P),t.output)for(let B of Object.values(t.output)){let I=String(B).match(/^out\[(\d+)\]/);if(I){let g=parseInt(I[1],10);g!==h&&!o.has(g)&&await m(g)}}return c.delete(h),P}await m(r,a);let p={};for(let h of o.values())for(let[C,A]of Object.entries(h.output))A!==null?p[C]=A:C in p||(p[C]=null);let W=await oe(t,p,p,r,a,this.serializer.coreSerializer,this.config);return{...o.get(r),action:r,output:W}}};var Qr="EGLD-000000",ce=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new N({typeRegistry:this.typeRegistry}),this.abi=new S(this.config,this.chain),this.output=new D(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=Ue(e.warp,e.action),r=null;if(t.type==="transfer")r=await this.createTransferTransaction(e);else if(t.type==="contract")r=await this.createContractCallTransaction(e);else{if(t.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(t.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${t.type})`);return this.chain.minGasPrice&&(r.gasPrice=this.chain.minGasPrice),r}async createTransferTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createTransfer - destination not set");let t=Fe(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=H.newFromBech32(t),n=new It({chainID:e.chain.chainId}),a=e.data?Buffer.from(this.serializer.stringToTyped(e.data).valueOf()):null,s=e.transfers.length===1&&e.transfers[0].identifier===this.chain.nativeToken?.identifier,c=(s?e.transfers[0].amount:0n)+e.value;return await new $r({config:n}).createTransactionForTransfer(r,{receiver:H.newFromBech32(e.destination),nativeAmount:c,tokenTransfers:s?[]:this.toTokenTransfers(e.transfers),data:a?new Uint8Array(a):void 0})}async createContractCallTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createContractCall - destination not set");let t=Fe(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=Ue(e.warp,e.action),n=H.newFromBech32(t),a=e.args.map(o=>this.serializer.stringToTyped(o)),s=new It({chainID:e.chain.chainId});return new Lr({config:s}).createTransactionForExecute(n,{contract:H.newFromBech32(e.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:a,tokenTransfers:this.toTokenTransfers(e.transfers),nativeTransferAmount:e.value})}async executeQuery(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: executeQuery - destination not set");let t=Ue(e.warp,e.action);if(t.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${t.type}`);let r=await this.abi.getAbiForAction(t),n=e.args.map(g=>this.serializer.stringToTyped(g)),a=w(e.chain,this.config.env,this.config),s=H.newFromBech32(e.destination),o=a.createSmartContractController(r),c=o.createQuery({contract:s,function:t.func||"",arguments:n}),d=await o.runQuery(c),m=d.returnCode==="ok",p=new Dr,W=r.getEndpoint(d.function||t.func||""),T=(d.returnDataParts||[]).map(g=>Buffer.from(g)),h=p.buffersToValues(T,W.output),{values:C,output:A}=await this.output.extractQueryOutput(e.warp,h,e.action,e.resolvedInputs),P=qr(this.config,[],e.warp,e.action,A),U=e.resolvedInputs.find(g=>g.input.position==="receiver"||g.input.position==="destination")?.value||e.destination,I=zr(e.resolvedInputs);return{status:m?"success":"error",warp:e.warp,action:e.action,user:Fe(this.config,e.chain.name),txHash:null,tx:null,next:P,values:C,output:{...A,_DATA:h},messages:Gr(e.warp,A,this.config),destination:U,resolvedInputs:I}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:Qr}:t).map(t=>{let n=new Hr().extractNonceFromExtendedIdentifier(t.identifier);return new _r({token:new Kr({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var le=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=ut[this.chain];if(!e)return["multiversx_explorer"];let t=e[this.config.env];return t||["multiversx_explorer"]}getPrimaryExplorer(){return this.getExplorers()[0]}getExplorerUrlByName(e){let t=this.config.preferences?.explorers?.[this.chain];if(t&&!e){let a=F[t];if(a)return a}if(e){let a=F[e];if(a)return a}let r=this.getPrimaryExplorer();return F[r]||F[r]}getAccountUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getTransactionUrl(e,t){return`${this.getExplorerUrlByName(t)}/transactions/${e}`}getBlockUrl(e,t){return`${this.getExplorerUrlByName(t)}/blocks/${e}`}getAssetUrl(e,t){return`${this.getExplorerUrlByName(t)}/tokens/${e}`}getContractUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getAllExplorers(){return this.getExplorers()}getExplorerByName(e){return this.getExplorers().find(r=>r.toLowerCase()===e.toLowerCase())}getAccountUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let a=F[n];a&&(r[n]=`${a}/accounts/${e}`)}),r}getTransactionUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let a=F[n];a&&(r[n]=`${a}/transactions/${e}`)}),r}};import{AbiRegistry as Nt,Address as y,AddressValue as Ve,BytesValue as v,SmartContractTransactionsFactory as Jr,TransactionsFactoryConfig as Xr}from"@multiversx/sdk-core";import{createWarpIdentifier as Yr,getWarpWalletAddressFromConfig as Zr,WarpCache as en,WarpCacheKey as Me,WarpLogger as Oe}from"@joai/warps";var ke={buildInfo:{rustc:{version:"1.86.0",commitHash:"05f9846f893b09a1be1fc8560e33fc3c815cfecb",commitDate:"2025-03-31",channel:"Stable",short:"rustc 1.86.0 (05f9846f8 2025-03-31)"},contractCrate:{name:"registry",version:"0.0.1"},framework:{name:"multiversx-sc",version:"0.51.1"}},name:"RegistryContract",constructor:{inputs:[{name:"unit_price",type:"BigUint"},{name:"vault",type:"Address"}],outputs:[]},upgradeConstructor:{inputs:[],outputs:[]},endpoints:[{name:"registerWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias_opt",type:"optional<bytes>",multi_arg:!0},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[],allow_multiple_var_args:!0},{name:"unregisterWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"upgradeWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"alias",type:"bytes"},{name:"new_warp",type:"bytes"},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[]},{name:"setWarpAlias",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias",type:"bytes"}],outputs:[]},{name:"forceRemoveAlias",mutability:"mutable",inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"verifyWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"transferOwnership",mutability:"mutable",inputs:[{name:"warp",type:"bytes"},{name:"new_owner",type:"Address"}],outputs:[]},{name:"getUserWarps",mutability:"readonly",inputs:[{name:"address",type:"Address"}],outputs:[{type:"variadic<InfoView>",multi_result:!0}]},{name:"getInfoByAlias",mutability:"readonly",inputs:[{name:"alias",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"getInfoByHash",mutability:"readonly",inputs:[{name:"hash",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"setVault",onlyOwner:!0,mutability:"mutable",inputs:[{name:"vault",type:"Address"}],outputs:[]},{name:"setUnitPrice",onlyOwner:!0,mutability:"mutable",inputs:[{name:"amount",type:"BigUint"}],outputs:[]},{name:"addAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"removeAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"getConfig",mutability:"readonly",inputs:[],outputs:[{type:"ConfigView"}]},{name:"registerBrand",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"brandWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"warp",type:"bytes"},{name:"brand",type:"bytes"}],outputs:[]},{name:"getUserBrands",mutability:"readonly",inputs:[{name:"user",type:"Address"}],outputs:[{type:"variadic<bytes>",multi_result:!0}]}],events:[{identifier:"warpRegistered",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpUnregistered",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"warpUpgraded",inputs:[{name:"alias",type:"bytes",indexed:!0},{name:"new_warp",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpVerified",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"aliasUpdated",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0}]},{identifier:"ownershipTransferred",inputs:[{name:"warp",type:"bytes",indexed:!0},{name:"old_owner",type:"Address",indexed:!0},{name:"new_owner",type:"Address",indexed:!0}]}],esdtAttributes:[],hasCallback:!1,types:{ConfigView:{type:"struct",fields:[{name:"unit_price",type:"BigUint"},{name:"admins",type:"List<Address>"}]},InfoView:{type:"struct",fields:[{name:"hash",type:"bytes"},{name:"alias",type:"Option<bytes>"},{name:"trust",type:"bytes"},{name:"owner",type:"Address"},{name:"created_at",type:"u64"},{name:"upgraded_at",type:"u64"},{name:"brand",type:"Option<bytes>"},{name:"upgrade",type:"Option<bytes>"}]}}};var E=i=>{if(i==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(i==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var pe=i=>({hash:i.hash.toString("hex"),alias:i.alias?.toString()||null,trust:i.trust.toString(),owner:i.owner.toString(),createdAt:i.created_at.toNumber(),upgradedAt:i.upgraded_at?.toNumber(),brand:i.brand?.toString("hex")||null,upgrade:i.upgrade?.toString("hex")||null}),St=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(e=>e.toBech32())});var ue=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new en(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=Zr(this.config,this.chain.name)}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}async createWarpRegisterTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=y.newFromBech32(this.userWallet),a=()=>this.isCurrentUserAdmin()?BigInt(0):t&&r?this.registryConfig.unitPrice*BigInt(3):t?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,s=()=>t&&r?[v.fromHex(e),v.fromUTF8(t),v.fromHex(r)]:t?[v.fromHex(e),v.fromUTF8(t)]:[v.fromHex(e)];return await this.getFactory().createTransactionForExecute(n,{contract:y.newFromBech32(E(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:a(),arguments:s()})}async createWarpUnregisterTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:y.newFromBech32(E(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[v.fromHex(e)]})}async createWarpUpgradeTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(n,{contract:y.newFromBech32(E(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:r?[v.fromUTF8(e),v.fromHex(t),v.fromHex(r)]:[v.fromUTF8(e),v.fromHex(t)]})}async createWarpAliasSetTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:y.newFromBech32(E(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[v.fromHex(e),v.fromUTF8(t)]})}async createWarpVerifyTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:y.newFromBech32(E(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[v.fromHex(e)]})}async createWarpTransferOwnershipTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:y.newFromBech32(E(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[v.fromHex(e),new Ve(new y(t))]})}async createBrandRegisterTransaction(e){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:y.newFromBech32(E(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[v.fromHex(e)]})}async createWarpBrandingTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:y.newFromBech32(E(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[v.fromHex(e),v.fromHex(t)]})}async getInfoByAlias(e,t){try{let r=Me.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return Oe.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let a=y.newFromBech32(E(this.config.env)),s=this.getController(),o=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[v.fromUTF8(e)]}),c=await s.runQuery(o),[d]=s.parseQueryResponse(c),m=d?pe(d):null,p=m?.brand?await this.fetchBrand(m.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:m,brand:p},t.ttl),{registryInfo:m,brand:p}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=Me.RegistryInfo(this.config.env,e);if(t){let p=this.cache.get(r);if(p)return Oe.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),p}let n=y.newFromBech32(E(this.config.env)),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[v.fromHex(e)]}),o=await a.runQuery(s),[c]=a.parseQueryResponse(o),d=c?pe(c):null,m=d?.brand?await this.fetchBrand(d.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:d,brand:m},t.ttl),{registryInfo:d,brand:m}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(E(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new Ve(new y(t))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s);return o.map(pe)}catch{return[]}}async getUserBrands(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(E(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new Ve(new y(t))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s),c=o.map(p=>p.toString("hex")),d={ttl:365*24*60*60};return(await Promise.all(c.map(p=>this.fetchBrand(p,d)))).filter(p=>p!==null)}catch{return[]}}async fetchBrand(e,t){let r=Me.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return Oe.info(`WarpRegistry (fetchBrand): Brand found in cache: ${e}`),n;let s=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let o=await s.getTransaction(e),c=JSON.parse(o.data.toString());return c.meta={query:null,chain:this.chain.name,identifier:Yr(this.chain.name,"hash",e),hash:o.hash,creator:o.sender.toBech32(),createdAt:new Date(o.timestamp*1e3).toISOString()},t&&t.ttl&&this.cache.set(r,c,t.ttl),c}catch{return null}}async loadRegistryConfigs(){let e=y.newFromBech32(E(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?St(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new Xr({chainID:this.chain.chainId}),t=Nt.create(ke);return new Jr({config:e,abi:t})}getController(){let e=w(this.chain,this.config.env,this.config),t=Nt.create(ke);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};import{CacheTtl as fn,initializeWalletCache as yn,WarpCache as Wn}from"@joai/warps";import{Address as wn}from"@multiversx/sdk-core";import{Account as tn,Message as rn,Mnemonic as Re,UserSecretKey as nn}from"@multiversx/sdk-core";import*as Ft from"@scure/bip39";import{wordlist as an}from"@scure/bip39/wordlists/english.js";import{getWarpWalletAddressFromConfig as sn,getWarpWalletMnemonicFromConfig as Bt,getWarpWalletPrivateKeyFromConfig as on,normalizeAndValidateMnemonic as cn,normalizeMnemonic as ln,setWarpWalletInConfig as Ut,validateMnemonicLength as pn}from"@joai/warps";var V=class V{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=sn(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new rn({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let t=cn(e),n=Re.fromString(t).deriveKey(0),a=n.hex(),o=n.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:V.PROVIDER_NAME,address:o,privateKey:a,mnemonic:t};return Ut(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let t=nn.fromString(e),r=t.hex(),a=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),s={provider:V.PROVIDER_NAME,address:a,privateKey:r,mnemonic:null};return Ut(this.config,this.chain.name,s),s}async export(){let e=this.getAccount(),t=Bt(this.config,this.chain.name),r=on(this.config,this.chain.name);return{provider:V.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=Ft.generateMnemonic(an,256),t=ln(e);pn(t);let s=Re.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:V.PROVIDER_NAME,address:s,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=Bt(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=Re.fromString(e).deriveKey(0);return this.account=new tn(r,this.chain.addressHrp),this.account}};V.PROVIDER_NAME="mnemonic";var _=V;import{Account as un,Message as mn,Mnemonic as dn,UserSecretKey as $}from"@multiversx/sdk-core";import{getWarpWalletAddressFromConfig as hn,getWarpWalletMnemonicFromConfig as gn,getWarpWalletPrivateKeyFromConfig as kt,setWarpWalletInConfig as Vt}from"@joai/warps";var M=class M{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=hn(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new mn({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=dn.fromString(e).deriveKey(0),n=r.hex(),s=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:M.PROVIDER_NAME,address:s,privateKey:n,mnemonic:e};return Vt(this.config,this.chain.name,o),o}async importFromPrivateKey(e){let r=e.startsWith("-----")?$.fromPem(e):$.fromString(e),n=r.hex(),s=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:M.PROVIDER_NAME,address:s,privateKey:n,mnemonic:null};return Vt(this.config,this.chain.name,o),o}async export(){let e=this.getAccount(),t=kt(this.config,this.chain.name),r=gn(this.config,this.chain.name);return{provider:M.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=$.generate(),t=e.hex(),n=e.generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:M.PROVIDER_NAME,address:n,privateKey:t,mnemonic:null}}getAccount(){if(this.account)return this.account;let e=kt(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?$.fromPem(e):$.fromString(e);return this.account=new un(r,this.chain.addressHrp),this.account}};M.PROVIDER_NAME="privateKey";var G=M;import{getWarpWalletAddressFromConfig as z}from"@joai/warps";var O=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return z(this.config,this.chain.name)}async getPublicKey(){return null}async signTransaction(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async signMessage(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromMnemonic(e){let t=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var me=class{constructor(e,t){this.config=e;this.chain=t;this.cachedAddress=null;this.cachedPublicKey=null;this.entry=w(t,e.env,e),this.cache=new Wn(e.env,e.cache),this.walletProvider=this.createProvider(),this.initializeCache()}async signTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof O)throw new Error(`Wallet (${this.chain.name}) is read-only`);if(this.walletProvider instanceof G||this.walletProvider instanceof _){let n=this.walletProvider.getAccountInstance();if(t.nonce===0n){let a=await this.entry.recallAccountNonce(n.address),s=this.cache.get(`nonce:${n.address.toBech32()}`)||0,o=BigInt(Math.max(s,Number(a)));t.nonce=o}}else if(t.nonce===0n&&this.cachedAddress){let n=wn.newFromBech32(this.cachedAddress),a=await this.entry.recallAccountNonce(n),s=this.cache.get(`nonce:${this.cachedAddress}`)||0,o=BigInt(Math.max(s,Number(a)));t.nonce=o}return await this.walletProvider.signTransaction(t)}async signTransactions(e){let t=[];for(let r of e)t.push(await this.signTransaction(r));return t}async signMessage(e){if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof O)throw new Error(`Wallet (${this.chain.name}) is read-only`);return await this.walletProvider.signMessage(e)}async sendTransactions(e){return Promise.all(e.map(async t=>this.sendTransaction(t)))}async sendTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!t.signature||t.signature.length===0)throw new Error("Transaction must be signed before sending");let r=await this.entry.sendTransaction(t),n=t.sender,a=Number(t.nonce)+1;return this.cache.set(`nonce:${n}`,a,fn.OneMinute),r}async importFromMnemonic(e){return await this.createProviderForOperation("mnemonic").importFromMnemonic(e)}async importFromPrivateKey(e){return await this.createProviderForOperation("privateKey").importFromPrivateKey(e)}async export(e){return await this.createProviderForOperation(e).export()}async generate(e){return await this.createProviderForOperation(e).generate()}getAddress(){return this.cachedAddress}getPublicKey(){return this.cachedPublicKey}createProvider(){let e=this.config.user?.wallets?.[this.chain.name];return e?typeof e=="string"?new O(this.config,this.chain):e.provider?this.createProviderForOperation(e.provider):new O(this.config,this.chain):null}initializeCache(){yn(this.walletProvider).then(e=>{this.cachedAddress=e.address,this.cachedPublicKey=e.publicKey})}createProviderForOperation(e){let r=this.config.walletProviders?.[this.chain.name]?.[e];if(r){let n=r(this.config,this.chain);if(!n)throw new Error(`Custom wallet provider factory returned null for ${e}`);return n}if(e==="privateKey")return new G(this.config,this.chain);if(e==="mnemonic")return new _(this.config,this.chain);throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${e}`)}};var de=(i,e)=>(t,r)=>{let n=e[t.env],a=new vn;return a.registerType("token",{stringToNative:s=>s,nativeToString:s=>`token:${s}`}),a.registerType("codemeta",{stringToNative:s=>s,nativeToString:s=>`codemeta:${s}`}),a.registerTypeAlias("list","vector"),{chainInfo:n,builder:()=>new X(t,n),executor:new ce(t,n,a),output:new D(t,n,a),serializer:new N({typeRegistry:a}),registry:new ue(t,n),explorer:new le(i,t),abiBuilder:()=>new S(t,n),brandBuilder:()=>new J(t,n),dataLoader:new Z(t,n),wallet:new me(t,n)}};import{WarpChainName as q}from"@joai/warps";var De={chain:q.Multiversx,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/egld.svg"},Mt=de(q.Multiversx,{mainnet:{name:q.Multiversx,displayName:"MultiversX",chainId:"1",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:De},testnet:{name:q.Multiversx,displayName:"MultiversX Testnet",chainId:"T",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://testnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:De},devnet:{name:q.Multiversx,displayName:"MultiversX Devnet",chainId:"D",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://devnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:De}});import{WarpChainName as Ke}from"@joai/warps";var Cn={chain:Ke.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},Le={name:Ke.Claws,displayName:"Claws Network",chainId:"C",blockTime:600,addressHrp:"claw",defaultApiUrl:"https://api.claws.network",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/claws.png",nativeToken:Cn,minGasPrice:20000000000000n},Ot=de(Ke.Claws,{mainnet:Le,testnet:Le,devnet:Le});var ic=()=>[Mt,Ot];import{WarpConstants as he,WarpSerializer as He}from"@joai/warps";var uc=i=>new He().nativeToString(f.Token,i),mc=i=>new He().nativeToString(f.CodeMeta,i),dc=(i,e)=>{if(e===null)return f.Optional+he.ArgParamsSeparator;let t=i(e),r=t.indexOf(he.ArgParamsSeparator),n=t.substring(0,r),a=t.substring(r+1);return f.Optional+he.ArgParamsSeparator+n+he.ArgParamsSeparator+a},hc=i=>new He().nativeToString(f.List,i);import{Address as Tn,AddressValue as xn,BigUIntType as An,BigUIntValue as Rt,BooleanValue as En,BytesValue as bn,CodeMetadata as Pn,CodeMetadataValue as In,CompositeType as Sn,CompositeValue as Nn,Field as _e,FieldDefinition as $e,List as Bn,NothingValue as Un,OptionalValue as Ge,OptionValue as ze,StringValue as Fn,Struct as kn,StructType as Vn,TokenIdentifierType as Mn,TokenIdentifierValue as Dt,U16Value as On,U32Value as Rn,U64Type as Dn,U64Value as Lt,U8Value as Ln,VariadicValue as Kn}from"@multiversx/sdk-core";var vc=(i,e)=>i?ze.newProvided(i):e?ze.newMissingTyped(e):ze.newMissing(),Cc=(i,e)=>i?new Ge(i.getType(),i):e?new Ge(e):Ge.newMissing(),Tc=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let e=i[0].getType();return new Bn(e,i)},xc=i=>Kn.fromItems(...i),Ac=i=>{let e=i.map(t=>t.getType());return new Nn(new Sn(...e),i)},Ec=i=>Fn.fromUTF8(i),bc=i=>new Ln(i),Pc=i=>new On(i),Ic=i=>new Rn(i),Sc=i=>new Lt(i),Nc=i=>new Rt(BigInt(i)),Bc=i=>new En(i),Uc=i=>new xn(Tn.newFromBech32(i)),Fc=i=>new Dt(i),kc=i=>bn.fromHex(i),Vc=i=>new kn(new Vn("EsdtTokenPayment",[new $e("token_identifier","",new Mn),new $e("token_nonce","",new Dn),new $e("amount","",new An)]),[new _e(new Dt(i.token.identifier),"token_identifier"),new _e(new Lt(BigInt(i.token.nonce)),"token_nonce"),new _e(new Rt(BigInt(i.amount)),"amount")]),Mc=i=>new In(Pn.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),Oc=()=>new Un;export{Ot as ClawsAdapter,xr as ClawsExplorers,F as ExplorerUrls,ct as KnownTokens,Mt as MultiversxAdapter,Tr as MultiversxExplorers,ut as MultiversxExplorersConfig,Cn as NativeTokenClaw,De as NativeTokenEgld,S as WarpMultiversxAbiBuilder,J as WarpMultiversxBrandBuilder,X as WarpMultiversxBuilder,As as WarpMultiversxConstants,j as WarpMultiversxContractLoader,Z as WarpMultiversxDataLoader,ce as WarpMultiversxExecutor,le as WarpMultiversxExplorer,f as WarpMultiversxInputTypes,D as WarpMultiversxOutput,ue as WarpMultiversxRegistry,N as WarpMultiversxSerializer,me as WarpMultiversxWallet,Uc as address_value,Vc as asset_value,Nc as biguint_value,Bc as boolean_value,mc as codemeta,Mc as codemeta_value,Ac as composite_value,de as createMultiversxAdapter,lt as findKnownTokenById,ic as getAllMultiversxAdapters,_n as getAllMultiversxChainNames,ss as getKnownTokensForChain,w as getMultiversxEntrypoint,E as getMultiversxRegistryAddress,Q as getNormalizedTokenIdentifier,kc as hex_value,R as isNativeToken,hc as list,Tc as list_value,Oc as nothing_value,vc as option_value,dc as optional,Cc as optional_value,Ec as string_value,St as toTypedConfigInfo,pe as toTypedRegistryInfo,uc as token,Fc as token_value,Pc as u16_value,Ic as u32_value,Sc as u64_value,bc as u8_value,xc as variadic_value};
1
+ import{WarpChainName as qe}from"@joai/warps";var Gn=()=>[qe.Multiversx,qe.Claws];import{WarpTypeRegistry as Tn}from"@joai/warps";import{AbiRegistry as Ne,Address as er,OptionalType as tr,OptionType as rr,TransactionsFactoryConfig as nr,TransferTransactionsFactory as ar}from"@multiversx/sdk-core";import{createWarpIdentifier as sr,getLatestProtocolIdentifier as ut,getWarpWalletAddressFromConfig as ir,WarpCache as or,WarpCacheKey as cr,WarpConstants as mt,WarpLogger as dt}from"@joai/warps";import{DevnetEntrypoint as _t,MainnetEntrypoint as Ht,TestnetEntrypoint as $t}from"@multiversx/sdk-core";import{getProviderConfig as Gt}from"@joai/warps";var R=i=>!i.includes("-"),Q=i=>R(i)?`${i}-000000`:i,w=(i,e,t)=>{let r="warp-sdk",a=t?Gt(t,i.name,e,i.defaultApiUrl):{url:i.defaultApiUrl},s=a.url,o={headers:a.headers};return e==="devnet"?new _t({url:s,kind:"api",clientName:r,networkProviderConfig:o}):e==="testnet"?new $t({url:s,kind:"api",clientName:r,networkProviderConfig:o}):new Ht({url:s,kind:"api",clientName:r,networkProviderConfig:o})};import{WarpLogger as Qe}from"@joai/warps";var j=class{constructor(e){this.config=e}async getContract(e,t){try{let a=await w(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}`);return{address:e,owner:a.ownerAddress,verified:a.isVerified||!1}}catch(r){return Qe.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(e,t){try{let a=await w(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}/verification`);return{codeHash:a.codeHash,abi:a.source.abi}}catch(r){return Qe.error("WarpContractLoader: getVerificationInfo error",r),null}}};import{Address as jt,AddressType as fe,AddressValue as Xe,BigUIntType as J,BigUIntValue as ye,BooleanType as We,BooleanValue as Ye,BytesType as we,BytesValue as Ze,CodeMetadata as Jt,CodeMetadataType as Ce,CodeMetadataValue as et,CompositeType as ve,CompositeValue as tt,Field as X,FieldDefinition as Y,List as rt,ListType as nt,NothingValue as b,OptionalType as at,OptionalValue as Te,OptionType as st,OptionValue as xe,StringType as Ae,StringValue as it,Struct as Z,StructType as k,Token as Xt,TokenComputer as ot,TokenIdentifierType as ee,TokenIdentifierValue as Ee,U16Type as be,U16Value as ct,U32Type as Pe,U32Value as lt,U64Type as te,U64Value as Se,U8Type as Ie,U8Value as pt,VariadicType as K,VariadicValue as re}from"@multiversx/sdk-core";import{WarpSerializer as Yt}from"@joai/warps";var zt=i=>i?typeof i=="string"?i:i.address:null,je=(i,e)=>zt(i.user?.wallets?.[e]||null);var u={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>je(i.config,i.adapter.chainInfo.name)},UserWalletPublicKey:{Placeholder:"USER_WALLET_PUBLICKEY",Accessor:i=>{if(!i.adapter.wallet)return null;try{return i.adapter.wallet.getPublicKey()||null}catch{return null}}},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:i=>i.adapter.chainInfo.defaultApiUrl},ChainAddressHrp:{Placeholder:"CHAIN_ADDRESS_HRP",Accessor:i=>i.adapter.chainInfo.addressHrp}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",ArgListSeparator:",",ArgStructSeparator:";",Transform:{Prefix:"transform:"},Source:{UserWallet:"user:wallet"},Position:{Payload:"payload:"},Alerts:{TriggerEventPrefix:"event"}},l={Option:"option",Vector:"vector",Tuple:"tuple",Struct:"struct",String:"string",Uint8:"uint8",Uint16:"uint16",Uint32:"uint32",Uint64:"uint64",Uint128:"uint128",Uint256:"uint256",Biguint:"biguint",Bool:"bool",Address:"address",Asset:"asset",Hex:"hex"};var pa={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},f={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},qt=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(qt||{}),Qt=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(Qt||{}),Je={multiversx:{mainnet:["multiversx_explorer"],testnet:["multiversx_explorer_testnet"],devnet:["multiversx_explorer_devnet"]},claws:{mainnet:["claws_explorer"],testnet:["claws_explorer_testnet"],devnet:["claws_explorer_devnet"]}},F={multiversx_explorer:"https://explorer.multiversx.com",multiversx_explorer_devnet:"https://devnet-explorer.multiversx.com",multiversx_explorer_testnet:"https://testnet-explorer.multiversx.com",claws_explorer:"https://explorer.claws.network",claws_explorer_devnet:"https://explorer.claws.network",claws_explorer_testnet:"https://explorer.claws.network"};var Zt=new RegExp(`${u.ArgParamsSeparator}(.*)`),S=class{constructor(e){this.coreSerializer=new Yt(e)}typedToString(e){let t=e.getType();if(t.hasExactClass(st.ClassName)||e.hasClassOrSuperclass(xe.ClassName)){if(!e.isSet())return l.Option+u.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return l.Option+u.ArgParamsSeparator+r}if(t.hasExactClass(K.ClassName)||e.hasClassOrSuperclass(re.ClassName)){let r=e.getItems();if(r.length===0){let m=this.typeToString(t.getFirstTypeParameter());return l.Vector+u.ArgParamsSeparator+m+u.ArgParamsSeparator}let n=r.map(m=>this.typedToString(m));if(n.every(m=>m.startsWith(l.Tuple)))return l.Vector+u.ArgParamsSeparator+n.join(",");let a=n[0],s=a.indexOf(u.ArgParamsSeparator),o=a.substring(0,s),c=n.map(m=>{let p=m.indexOf(u.ArgParamsSeparator);return m.substring(p+1)}),d=o.startsWith(l.Struct)?u.ArgStructSeparator:u.ArgListSeparator;return l.Vector+u.ArgParamsSeparator+o+u.ArgParamsSeparator+c.join(d)}if(t.hasExactClass(at.ClassName)||e.hasClassOrSuperclass(Te.ClassName)){if(!e.isSet())return f.Optional+u.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return f.Optional+u.ArgParamsSeparator+r}if(t.hasExactClass(nt.ClassName)||e.hasClassOrSuperclass(rt.ClassName)){let n=e.getItems().map(c=>this.typedToString(c));if(n.every(c=>c.startsWith(l.Tuple)))return f.List+u.ArgParamsSeparator+n.join(",");let s=n.map(c=>c.split(u.ArgParamsSeparator)[0])[0],o=n.map(c=>c.split(u.ArgParamsSeparator)[1]);return f.List+u.ArgParamsSeparator+s+u.ArgParamsSeparator+o.join(u.ArgListSeparator)}if(t.hasExactClass(ve.ClassName)||e.hasClassOrSuperclass(tt.ClassName)){let n=e.getItems().map(a=>{let s=this.typedToString(a),o=s.indexOf(u.ArgParamsSeparator),c=s.substring(0,o),d=s.substring(o+1);return`${c},${d}`});return`${l.Tuple}(${n.join(",")})`}if(t.hasExactClass(J.ClassName)||e.hasClassOrSuperclass(ye.ClassName)||t.getName()==="BigUint")return l.Biguint+u.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Ie.ClassName)||e.hasClassOrSuperclass(pt.ClassName))return l.Uint8+u.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(be.ClassName)||e.hasClassOrSuperclass(ct.ClassName))return l.Uint16+u.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Pe.ClassName)||e.hasClassOrSuperclass(lt.ClassName))return l.Uint32+u.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(te.ClassName)||e.hasClassOrSuperclass(Se.ClassName))return l.Uint64+u.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Ae.ClassName)||e.hasClassOrSuperclass(it.ClassName))return l.String+u.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(We.ClassName)||e.hasClassOrSuperclass(Ye.ClassName))return l.Bool+u.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(fe.ClassName)||e.hasClassOrSuperclass(Xe.ClassName))return l.Address+u.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(we.ClassName)||e.hasClassOrSuperclass(Ze.ClassName))return l.Hex+u.ArgParamsSeparator+e.valueOf().toString("hex");if(t.getName()==="EsdtTokenPayment"){let r=e.getFieldValue("token_identifier").valueOf(),n=e.getFieldValue("token_nonce").valueOf(),a=e.getFieldValue("amount").valueOf(),o=new ot().computeExtendedIdentifier(new Xt({identifier:r,nonce:BigInt(n)}));return l.Asset+u.ArgParamsSeparator+o+u.ArgCompositeSeparator+a}if(t.hasExactClass(k.ClassName)||e.hasClassOrSuperclass(Z.ClassName)){let r=e,a=r.getType().getName(),s=r.getFields();if(s.length===0)return`${l.Struct}(${a})${u.ArgParamsSeparator}`;let o=s.map(c=>{let d=c.value.getType(),p=this.typedToString(c.value).split(u.ArgParamsSeparator),W=p.length>2?p.slice(2).join(u.ArgParamsSeparator):p[1]||"";return`(${c.name}${u.ArgParamsSeparator}${this.typeToString(d)})${W}`});return`${l.Struct}(${a})${u.ArgParamsSeparator}${o.join(u.ArgListSeparator)}`}if(t.hasExactClass(ee.ClassName)||e.hasClassOrSuperclass(Ee.ClassName))return f.Token+u.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(Ce.ClassName)||e.hasClassOrSuperclass(et.ClassName))return f.CodeMeta+u.ArgParamsSeparator+e.valueOf().toString();throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${e.getClassName()}`)}typedToNative(e){let t=this.typedToString(e);return this.coreSerializer.stringToNative(t)}nativeToTyped(e,t){if(e.startsWith(l.Tuple))return this.stringToTyped(e+":");let r=this.coreSerializer.nativeToString(e,t);return this.stringToTyped(r)}nativeToType(e){if(e.startsWith(l.Tuple)){let t=e.match(/\(([^)]+)\)/)?.[1];if(!t)throw new Error(`Invalid tuple type format: ${e}`);let r=t.split(","),n=[];for(let a=0;a<r.length;a+=2)n.push(r[a]);return new ve(...n.map(a=>this.nativeToType(a)))}if(e.startsWith(l.Struct)){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Struct type must include a name in the format struct(Name)");let r=t[1];return new k(r,[])}if(e===l.String)return new Ae;if(e===l.Uint8)return new Ie;if(e===l.Uint16)return new be;if(e===l.Uint32)return new Pe;if(e===l.Uint64)return new te;if(e===l.Biguint)return new J;if(e===l.Bool)return new We;if(e===l.Address)return new fe;if(e===l.Hex)return new we;if(e===l.Asset)return new k("EsdtTokenPayment",[new Y("token_identifier","",new ee),new Y("token_nonce","",new te),new Y("amount","",new J)]);if(e===f.Token)return new ee;if(e===f.CodeMeta)return new Ce;throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${e}`)}stringToTyped(e){let[t,r]=e.split(/:(.*)/,2);if(t===l.Option){let n=this.stringToTyped(r);return n instanceof b?xe.newMissingTyped(n.getType()):xe.newProvided(n)}if(t===l.Vector){let n=r.indexOf(u.ArgParamsSeparator),a=r.substring(0,n),s=r.substring(n+1);if(a.startsWith(l.Tuple)){let p=s.split(",").map(W=>this.stringToTyped(W));return new re(new K(this.nativeToType(a)),p)}if(s.includes("tuple(")){let m=this.splitTupleStrings(s),p=m.map(v=>this.stringToTyped(v)),T=m[0].match(/^(tuple\([^)]+\))/),h=T?T[1]:"tuple";return new re(new K(this.nativeToType(h)),p)}let o=a.startsWith(l.Struct)?u.ArgStructSeparator:u.ArgListSeparator,d=s.split(o).map(m=>this.stringToTyped(`${a}:${m}`));return new re(new K(this.nativeToType(a)),d)}if(t.startsWith(l.Tuple)){let n=t.match(/\(([^)]+)\)/)?.[1];if(!n)throw new Error(`Invalid tuple format: ${t}`);let a=n.split(","),s=[];for(let c=0;c<a.length;c+=2){let d=a[c],m=a[c+1];s.push(this.stringToTyped(`${d}:${m}`))}let o=s.map(c=>c.getType());return new tt(new ve(...o),s)}if(t.startsWith(l.Struct)){let n=t.match(/\(([^)]+)\)/),a=n?n[1]:"CustomStruct";if(!r)return new Z(new k(a,[]),[]);let s=r.split(u.ArgListSeparator),o=[],c=[];return s.forEach(d=>{let m=d.match(new RegExp(`^\\(([^${u.ArgParamsSeparator}]+)${u.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(m){let[,p,W,T]=m,h=this.stringToTyped(`${W}${u.ArgParamsSeparator}${T}`);o.push(new Y(p,"",h.getType())),c.push(new X(h,p))}}),new Z(new k(a,o),c)}if(t===l.String)return r?it.fromUTF8(r):new b;if(t===l.Uint8)return r?new pt(Number(r)):new b;if(t===l.Uint16)return r?new ct(Number(r)):new b;if(t===l.Uint32)return r?new lt(Number(r)):new b;if(t===l.Uint64)return r?new Se(BigInt(r)):new b;if(t===l.Biguint)return r?new ye(BigInt(r)):new b;if(t===l.Bool)return r?new Ye(typeof r=="boolean"?r:r==="true"):new b;if(t===l.Address)return r?new Xe(jt.newFromBech32(r)):new b;if(t===l.Hex)return r?Ze.fromHex(r):new b;if(t===l.Asset){let[n,a]=r.split(u.ArgCompositeSeparator),s=new ot,o=R(n)?Q(n):s.extractIdentifierFromExtendedIdentifier(n),c=R(n)?0n:s.extractNonceFromExtendedIdentifier(n);return new Z(this.nativeToType("asset"),[new X(new Ee(o),"token_identifier"),new X(new Se(BigInt(c)),"token_nonce"),new X(new ye(BigInt(a)),"amount")])}if(t===f.Null)return new b;if(t===f.Optional){let n=this.stringToTyped(r);return n instanceof b?Te.newMissing():new Te(n.getType(),n)}if(t===f.List){let[n,a]=r.split(Zt,2),o=a.split(u.ArgListSeparator).map(c=>this.stringToTyped(n+u.ArgParamsSeparator+c));return new rt(this.nativeToType(n),o)}if(t===f.Token)return r?new Ee(r):new b;if(t===f.CodeMeta)return new et(Jt.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${t}`)}splitTupleStrings(e){let t=[],r="",n=0;for(let a=0;a<e.length;a++){let s=e[a];if(s==="(")n++;else if(s===")")n--;else if(s===","&&n===0){t.push(r.trim()),r="";continue}r+=s}return r.trim()&&t.push(r.trim()),t}typeToString(e){if(e.hasExactClass(st.ClassName))return l.Option+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(K.ClassName))return l.Vector+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Ae.ClassName))return l.String;if(e.hasExactClass(Ie.ClassName))return l.Uint8;if(e.hasExactClass(be.ClassName))return l.Uint16;if(e.hasExactClass(Pe.ClassName))return l.Uint32;if(e.hasExactClass(te.ClassName))return l.Uint64;if(e.hasExactClass(J.ClassName))return l.Biguint;if(e.hasExactClass(We.ClassName))return l.Bool;if(e.hasExactClass(fe.ClassName))return l.Address;if(e.hasExactClass(we.ClassName))return l.Hex;if(e.hasExactClass(ee.ClassName))return f.Token;if(e.hasExactClass(at.ClassName))return f.Optional+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(nt.ClassName))return f.List+u.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Ce.ClassName))return f.CodeMeta;if(e.hasExactClass(k.ClassName)&&e.getClassName()==="EsdtTokenPayment")return l.Asset;if(e.hasExactClass(k.ClassName))return`${l.Struct}(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var N=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new j(this.config),this.cache=new or(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=ir(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new nr({chainID:this.chain.chainId}),n=new ar({config:r}),a=er.newFromBech32(t),s={protocol:ut("abi"),content:e},o=JSON.stringify(s),c=await n.createTransactionForTransfer(a,{receiver:a,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return c.gasLimit=c.gasLimit+BigInt(2e6),c}async createFromRaw(e){return JSON.parse(e)}async createFromTransaction(e){let t=await this.createFromRaw(e.data.toString());return t.meta={chain:this.chain.name,identifier:sr(this.chain.name,"hash",e.hash),query:null,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},t}async createFromTransactionHash(e,t){let r=cr.WarpAbi(this.config.env,e);if(t){let s=this.cache.get(r);if(s)return dt.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${e}`),s}let a=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let s=await a.getTransaction(e),o=await this.createFromTransaction(s);return t&&t.ttl&&o&&this.cache.set(r,o,t.ttl),o}catch(s){return dt.error("WarpAbiBuilder: Error creating from transaction hash",s),null}}async getAbiForAction(e){if(e.abi)return await this.fetchAbi(e);if(!e.address)throw new Error("WarpActionExecutor: Address not found");let t=await this.contractLoader.getVerificationInfo(e.address,this.chain);if(!t)throw new Error("WarpActionExecutor: Verification info not found");return Ne.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(mt.IdentifierType.Hash)){let t=e.abi.split(mt.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return Ne.create(r.content)}else{let r=await(await fetch(e.abi)).json();return Ne.create(r)}}endpointsToWarps(e,t,r){let n=new S,a=r?btoa(JSON.stringify(r)):void 0;return e.getEndpoints().map(s=>{let o=s.modifiers.isReadonly(),c=s.input.map((m,p)=>({name:m.name,type:n.typeToString(m.type),position:`arg:${p+1}`,source:"field",required:!m.type.hasClassOrSuperclass(tr.ClassName)&&!m.type.hasClassOrSuperclass(rr.ClassName)})),d=o?{type:"query",label:s.name,address:t,func:s.name,args:[],abi:a,inputs:c}:{type:"contract",label:s.name,address:t,func:s.name,args:[],gasLimit:1e7,abi:a,inputs:c};return{protocol:ut("warp"),name:s.name,title:s.name,description:null,chain:this.chain.name,actions:[d]}})}};import{Address as ht,TransactionsFactoryConfig as lr,TransferTransactionsFactory as pr}from"@multiversx/sdk-core";import{createWarpIdentifier as ur,getWarpWalletAddressFromConfig as mr,WarpBrandBuilder as dr,WarpLogger as hr}from"@joai/warps";import{Buffer as gr}from"buffer";var ne=class{constructor(e,t){this.config=e;this.chain=t;this.core=new dr(e)}async createInscriptionTransaction(e){let t=mr(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new lr({chainID:this.chain.chainId}),n=new pr({config:r}),a=ht.newFromBech32(t),s=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(a,{receiver:ht.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(gr.from(s))})}async createFromTransaction(e,t=!1){let r=await this.core.createFromRaw(e.data.toString(),t);return r.meta={query:null,chain:this.chain.name,identifier:ur(this.chain.name,"hash",e.hash),hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},r}async createFromTransactionHash(e){let r=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let n=await r.getTransaction(e);return this.createFromTransaction(n)}catch(n){return hr.error("BrandBuilder: Error creating from transaction hash",n),null}}};import{Address as gt,TransactionsFactoryConfig as fr,TransferTransactionsFactory as yr}from"@multiversx/sdk-core";import{createWarpIdentifier as Wr,getWarpWalletAddressFromConfig as wr,WarpBuilder as ft,WarpCache as Cr,WarpCacheKey as vr,WarpLogger as yt}from"@joai/warps";var ae=class extends ft{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new Cr(t.env,t.cache),this.core=new ft(t)}async createInscriptionTransaction(t){let r=wr(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new fr({chainID:this.chain.chainId}),a=new yr({config:n}),s=gt.newFromBech32(r),o=JSON.stringify(t),c=await a.createTransactionForTransfer(s,{receiver:gt.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return c.gasLimit=c.gasLimit+BigInt(2e6),c}async createFromTransaction(t,r=!1){let n=await this.core.createFromRaw(t.data.toString(),r);return n.meta={chain:this.chain.name,identifier:Wr(this.chain.name,"hash",t.hash),query:null,hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},n}async createFromTransactionHash(t,r){let n=vr.Warp(this.config.env,t);if(r){let o=this.cache.get(n);if(o)return yt.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),o}let s=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let o=await s.getTransaction(t),c=await this.createFromTransaction(o);return r&&r.ttl&&c&&this.cache.set(n,c,r.ttl),c}catch(o){return yt.error("WarpBuilder: Error creating from transaction hash",o),null}}};import{Address as Be,Token as br,TokenComputer as Pr}from"@multiversx/sdk-core";import{CacheTtl as Sr,WarpCache as Ir,WarpCacheKey as Nr}from"@joai/warps";import{WarpChainName as At}from"@joai/warps";import{WarpChainName as Tr}from"@joai/warps";var Wt=Tr.Multiversx,wt=[{chain:Wt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:Wt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as xr}from"@joai/warps";var x=xr.Multiversx,Ct=[{chain:x,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:x,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:x,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:x,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:x,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:x,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:x,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:x,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:x,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:x,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:x,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:x,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:x,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:x,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:x,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];import{WarpChainName as Ar}from"@joai/warps";var vt=Ar.Multiversx,Tt=[{chain:vt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:vt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as Er}from"@joai/warps";var xt=Er.Claws,se=[{chain:xt,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:xt,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Et={[At.Multiversx]:{mainnet:Ct,testnet:Tt,devnet:wt},[At.Claws]:{mainnet:se,testnet:se,devnet:se}},bt=(i,e,t)=>(Et[i]?.[e]||[]).find(n=>n.identifier===t)||null,Is=(i,e)=>Et[i]?.[e]||[];var ie=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new Ir(e.env,e.cache)}async getAccount(e){let r=await w(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(Be.newFromBech32(e));return{chain:this.chain.name,address:r.address.toBech32(),balance:r.balance}}async getAccountAssets(e){let t=w(this.chain,this.config.env,this.config).createNetworkProvider(),r=t.getAccount(Be.newFromBech32(e)),n=t.getFungibleTokensOfAccount(Be.newFromBech32(e)),[a,s]=await Promise.all([r,n]),o=a.balance>0?[{...this.chain.nativeToken,amount:a.balance}]:[];return o.push(...s.map(c=>({chain:this.chain.name,identifier:c.token.identifier,name:c.raw.name,symbol:c.raw.ticker,amount:c.amount,decimals:c.raw.decimals,logoUrl:c.raw.assets?.pngUrl||"",price:c.raw.price?Number(c.raw.price):void 0,supply:c.raw.supply?BigInt(c.raw.supply):void 0}))),o}async getAsset(e){let t=Nr.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=bt(this.chain.name,this.config.env,e);if(n)return{chain:this.chain.name,identifier:e,name:n.name,symbol:n.symbol,amount:0n,decimals:n.decimals,logoUrl:n.logoUrl};let a=new Pr,s=R(e)?0n:a.extractNonceFromExtendedIdentifier(e),o=new br({identifier:e,nonce:BigInt(s||0)}),c=a.isFungible(o),d=w(this.chain,this.config.env,this.config).createNetworkProvider(),m=Q(e),p=await d.doGetGeneric(`tokens/${m}`),W={chain:this.chain.name,identifier:o.identifier,name:p.name,symbol:p.ticker,amount:0n,decimals:p.decimals,logoUrl:p.assets?.pngUrl||null,price:p.price?Number(p.price):void 0,supply:p.supply?BigInt(p.supply):void 0};return this.cache.set(t,W,Sr.OneHour),W}async getAction(e,t=!1){let r=w(this.chain,this.config.env,this.config),n=t?await r.awaitCompletedTransaction(e):await r.getTransaction(e);return{chain:this.chain.name,id:n.hash,receiver:n.receiver.toBech32(),sender:n.sender.toBech32(),value:n.value,function:n.function,status:this.toActionStatus(n),createdAt:this.toActionCreatedAt(n),error:n?.smartContractResults.map(a=>a.raw.returnMessage)[0]||null,tx:n}}async getAccountActions(e,t){let r=w(this.chain,this.config.env,this.config).createNetworkProvider(),n=`accounts/${e}/transactions`,a=new URLSearchParams,s=t?.size||25,o=t?.page||0;if(o>0){let d=o*s;a.append("from",d.toString())}return s!==25&&a.append("size",s.toString()),a.toString()&&(n+=`?${a.toString()}`),(await r.doGetGeneric(n)).map(d=>({chain:this.chain.name,id:d.txHash,receiver:d.receiver,sender:d.sender,value:d.value,function:d.function,status:this.toActionStatus(d),createdAt:this.toActionCreatedAt(d)}))}toActionStatus(e){return e.status?.isSuccessful?.()?"success":e.status?.isFailed?.()?"failed":"pending"}toActionCreatedAt(e){return new Date(e.timestamp||e.timestamp*1e3).toISOString()}};import{Address as _,ArgSerializer as Kr,SmartContractTransactionsFactory as _r,Token as Hr,TokenComputer as $r,TokenTransfer as Gr,TransactionsFactoryConfig as It,TransferTransactionsFactory as zr}from"@multiversx/sdk-core";import{applyOutputToMessages as qr,extractResolvedInputValues as Qr,getNextInfo as jr,getWarpActionByIndex as Ue,getWarpWalletAddressFromConfig as Fe}from"@joai/warps";import{applyOutputToMessages as Br,evaluateOutputCommon as oe,extractResolvedInputValues as Ur,getNextInfo as Fr,getWarpActionByIndex as kr,getWarpWalletAddressFromConfig as Or,parseOutputOutIndex as Pt,WarpCache as Vr,WarpCacheKey as Mr,WarpConstants as St}from"@joai/warps";import{findEventsByFirstTopic as Rr,SmartContractTransactionsOutcomeParser as Dr,TransactionEventsParser as Lr}from"@multiversx/sdk-core";var D=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new N(e,t),this.serializer=new S({typeRegistry:this.typeRegistry}),this.cache=new Vr(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(Mr.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],a=await this.extractContractOutput(e,t,r,n),s=Fr(this.config,[],e,t,a.output),o=Br(e,a.output,this.config),c=Ur(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:Or(this.config,this.chain.name),txHash:r.hash,tx:r,next:s,values:a.values,output:a.output,messages:o,destination:null,resolvedInputs:c}}async extractContractOutput(e,t,r,n){let a=kr(e,t),s=[],o=[],c={};if(!e.output||a.type!=="contract")return{values:{string:s,native:o,mapped:{}},output:c};if(!Object.values(e.output).some(h=>h.includes("out")||h.includes("event"))){for(let[h,v]of Object.entries(e.output))c[h]=v;return{values:{string:s,native:o,mapped:{}},output:await oe(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}let m=await this.abi.getAbiForAction(a),p=new Lr({abi:m}),T=new Dr({abi:m}).parseExecute({transactionOnNetwork:r,function:a.func||void 0});for(let[h,v]of Object.entries(e.output)){if(v.startsWith(St.Transform.Prefix))continue;if(v.startsWith("input.")){c[h]=v;continue}let A=Pt(v);if(A!==null&&A!==t){c[h]=null;continue}let[P,B,U]=v.split(".");if(P==="event"){if(!B||isNaN(Number(U)))continue;let I=Number(U),g=Rr(r,B),ge=p.parseEvents({events:g})[0];if(!ge||typeof ge!="object"){c[h]=null;continue}let L=Object.values(ge)[I]||null;s.push(String(L)),o.push(L),c[h]=L&&L.valueOf()}else if(P==="out"||P.startsWith("out[")){if(!B)continue;let I=Number(B),g=T.values[I-1]||null;U&&(g=g[U]||null),g&&typeof g=="object"&&(g="toFixed"in g?g.toFixed():g.valueOf()),s.push(String(g)),o.push(g),c[h]=g&&g.valueOf()}else c[h]=v}return{values:{string:s,native:o,mapped:{}},output:await oe(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let a=t.map(m=>this.serializer.typedToString(m)),s=t.map(m=>this.serializer.typedToNative(m)[1]),o={string:a,native:s,mapped:{}},c={};if(!e.output)return{values:o,output:c};let d=m=>{let p=m.split(".").slice(1).map(T=>parseInt(T)-1);if(p.length===0)return;let W=s[p[0]];for(let T=1;T<p.length;T++){if(W==null)return;W=W[p[T]]}return W};for(let[m,p]of Object.entries(e.output)){if(p.startsWith(St.Transform.Prefix))continue;let W=Pt(p);if(W!==null&&W!==r){c[m]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?c[m]=d(p)||null:c[m]=p}return c=await oe(e,c,s,r,n,this.serializer.coreSerializer,this.config),{values:o,output:c}}async resolveWarpOutputRecursively(e){let t=e.warp,r=e.entryActionIndex,n=e.executor,a=e.inputs,s=e.meta,o=new Map,c=new Set,d=this;async function m(h,v=[]){if(o.has(h))return o.get(h);if(c.has(h))throw new Error(`Circular dependency detected at action ${h}`);c.add(h);let A=t.actions[h-1];if(!A)throw new Error(`Action ${h} not found`);let P;if(A.type==="query")P=await n.executeQuery(t,h,v);else if(A.type==="collect")P=await n.executeCollect(t,h,v,s);else throw new Error(`Unsupported or interactive action type: ${A.type}`);if(o.set(h,P),t.output)for(let B of Object.values(t.output)){let I=String(B).match(/^out\[(\d+)\]/);if(I){let g=parseInt(I[1],10);g!==h&&!o.has(g)&&await m(g)}}return c.delete(h),P}await m(r,a);let p={};for(let h of o.values())for(let[v,A]of Object.entries(h.output))A!==null?p[v]=A:v in p||(p[v]=null);let W=await oe(t,p,p,r,a,this.serializer.coreSerializer,this.config);return{...o.get(r),action:r,output:W}}};var Jr="EGLD-000000",ce=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new S({typeRegistry:this.typeRegistry}),this.abi=new N(this.config,this.chain),this.output=new D(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=Ue(e.warp,e.action),r=null;if(t.type==="transfer")r=await this.createTransferTransaction(e);else if(t.type==="contract")r=await this.createContractCallTransaction(e);else{if(t.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(t.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${t.type})`);return this.chain.minGasPrice&&(r.gasPrice=this.chain.minGasPrice),r}async createTransferTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createTransfer - destination not set");let t=Fe(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=_.newFromBech32(t),n=new It({chainID:e.chain.chainId}),a=e.data?Buffer.from(this.serializer.stringToTyped(e.data).valueOf()):null,s=e.transfers.length===1&&e.transfers[0].identifier===this.chain.nativeToken?.identifier,c=(s?e.transfers[0].amount:0n)+e.value;return await new zr({config:n}).createTransactionForTransfer(r,{receiver:_.newFromBech32(e.destination),nativeAmount:c,tokenTransfers:s?[]:this.toTokenTransfers(e.transfers),data:a?new Uint8Array(a):void 0})}async createContractCallTransaction(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: createContractCall - destination not set");let t=Fe(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=Ue(e.warp,e.action),n=_.newFromBech32(t),a=e.args.map(o=>this.serializer.stringToTyped(o)),s=new It({chainID:e.chain.chainId});return new _r({config:s}).createTransactionForExecute(n,{contract:_.newFromBech32(e.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:a,tokenTransfers:this.toTokenTransfers(e.transfers),nativeTransferAmount:e.value})}async executeQuery(e){if(!e.destination)throw new Error("WarpMultiversxExecutor: executeQuery - destination not set");let t=Ue(e.warp,e.action);if(t.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${t.type}`);let r=await this.abi.getAbiForAction(t),n=e.args.map(g=>this.serializer.stringToTyped(g)),a=w(e.chain,this.config.env,this.config),s=_.newFromBech32(e.destination),o=a.createSmartContractController(r),c=o.createQuery({contract:s,function:t.func||"",arguments:n}),d=await o.runQuery(c),m=d.returnCode==="ok",p=new Kr,W=r.getEndpoint(d.function||t.func||""),T=(d.returnDataParts||[]).map(g=>Buffer.from(g)),h=p.buffersToValues(T,W.output),{values:v,output:A}=await this.output.extractQueryOutput(e.warp,h,e.action,e.resolvedInputs),P=jr(this.config,[],e.warp,e.action,A),U=e.resolvedInputs.find(g=>g.input.position==="receiver"||g.input.position==="destination")?.value||e.destination,I=Qr(e.resolvedInputs);return{status:m?"success":"error",warp:e.warp,action:e.action,user:Fe(this.config,e.chain.name),txHash:null,tx:null,next:P,values:v,output:{...A,_DATA:h},messages:qr(e.warp,A,this.config),destination:U,resolvedInputs:I}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:Jr}:t).map(t=>{let n=new $r().extractNonceFromExtendedIdentifier(t.identifier);return new Gr({token:new Hr({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var le=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=Je[this.chain];if(!e)return["multiversx_explorer"];let t=e[this.config.env];return t||["multiversx_explorer"]}getPrimaryExplorer(){return this.getExplorers()[0]}getExplorerUrlByName(e){let t=this.config.preferences?.explorers?.[this.chain];if(t&&!e){let a=F[t];if(a)return a}if(e){let a=F[e];if(a)return a}let r=this.getPrimaryExplorer();return F[r]||F[r]}getAccountUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getTransactionUrl(e,t){return`${this.getExplorerUrlByName(t)}/transactions/${e}`}getBlockUrl(e,t){return`${this.getExplorerUrlByName(t)}/blocks/${e}`}getAssetUrl(e,t){return`${this.getExplorerUrlByName(t)}/tokens/${e}`}getContractUrl(e,t){return`${this.getExplorerUrlByName(t)}/accounts/${e}`}getAllExplorers(){return this.getExplorers()}getExplorerByName(e){return this.getExplorers().find(r=>r.toLowerCase()===e.toLowerCase())}getAccountUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let a=F[n];a&&(r[n]=`${a}/accounts/${e}`)}),r}getTransactionUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let a=F[n];a&&(r[n]=`${a}/transactions/${e}`)}),r}};import{AbiRegistry as Bt,Address as y,AddressValue as Oe,BytesValue as C,SmartContractTransactionsFactory as Yr,TransactionsFactoryConfig as Zr}from"@multiversx/sdk-core";import{createWarpIdentifier as en,getWarpWalletAddressFromConfig as tn,WarpCache as rn,WarpCacheKey as Ve,WarpLogger as Me}from"@joai/warps";var ke={buildInfo:{rustc:{version:"1.86.0",commitHash:"05f9846f893b09a1be1fc8560e33fc3c815cfecb",commitDate:"2025-03-31",channel:"Stable",short:"rustc 1.86.0 (05f9846f8 2025-03-31)"},contractCrate:{name:"registry",version:"0.0.1"},framework:{name:"multiversx-sc",version:"0.51.1"}},name:"RegistryContract",constructor:{inputs:[{name:"unit_price",type:"BigUint"},{name:"vault",type:"Address"}],outputs:[]},upgradeConstructor:{inputs:[],outputs:[]},endpoints:[{name:"registerWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias_opt",type:"optional<bytes>",multi_arg:!0},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[],allow_multiple_var_args:!0},{name:"unregisterWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"upgradeWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"alias",type:"bytes"},{name:"new_warp",type:"bytes"},{name:"brand_opt",type:"optional<bytes>",multi_arg:!0}],outputs:[]},{name:"setWarpAlias",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"},{name:"alias",type:"bytes"}],outputs:[]},{name:"forceRemoveAlias",mutability:"mutable",inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"verifyWarp",mutability:"mutable",inputs:[{name:"warp",type:"bytes"}],outputs:[]},{name:"transferOwnership",mutability:"mutable",inputs:[{name:"warp",type:"bytes"},{name:"new_owner",type:"Address"}],outputs:[]},{name:"getUserWarps",mutability:"readonly",inputs:[{name:"address",type:"Address"}],outputs:[{type:"variadic<InfoView>",multi_result:!0}]},{name:"getInfoByAlias",mutability:"readonly",inputs:[{name:"alias",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"getInfoByHash",mutability:"readonly",inputs:[{name:"hash",type:"bytes"}],outputs:[{type:"InfoView"}]},{name:"setVault",onlyOwner:!0,mutability:"mutable",inputs:[{name:"vault",type:"Address"}],outputs:[]},{name:"setUnitPrice",onlyOwner:!0,mutability:"mutable",inputs:[{name:"amount",type:"BigUint"}],outputs:[]},{name:"addAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"removeAdmin",onlyOwner:!0,mutability:"mutable",inputs:[{name:"address",type:"Address"}],outputs:[]},{name:"getConfig",mutability:"readonly",inputs:[],outputs:[{type:"ConfigView"}]},{name:"registerBrand",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"hash",type:"bytes"}],outputs:[]},{name:"brandWarp",mutability:"mutable",payableInTokens:["EGLD"],inputs:[{name:"warp",type:"bytes"},{name:"brand",type:"bytes"}],outputs:[]},{name:"getUserBrands",mutability:"readonly",inputs:[{name:"user",type:"Address"}],outputs:[{type:"variadic<bytes>",multi_result:!0}]}],events:[{identifier:"warpRegistered",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpUnregistered",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"warpUpgraded",inputs:[{name:"alias",type:"bytes",indexed:!0},{name:"new_warp",type:"bytes",indexed:!0},{name:"trust",type:"bytes",indexed:!0}]},{identifier:"warpVerified",inputs:[{name:"hash",type:"bytes",indexed:!0}]},{identifier:"aliasUpdated",inputs:[{name:"hash",type:"bytes",indexed:!0},{name:"alias",type:"bytes",indexed:!0}]},{identifier:"ownershipTransferred",inputs:[{name:"warp",type:"bytes",indexed:!0},{name:"old_owner",type:"Address",indexed:!0},{name:"new_owner",type:"Address",indexed:!0}]}],esdtAttributes:[],hasCallback:!1,types:{ConfigView:{type:"struct",fields:[{name:"unit_price",type:"BigUint"},{name:"admins",type:"List<Address>"}]},InfoView:{type:"struct",fields:[{name:"hash",type:"bytes"},{name:"alias",type:"Option<bytes>"},{name:"trust",type:"bytes"},{name:"owner",type:"Address"},{name:"created_at",type:"u64"},{name:"upgraded_at",type:"u64"},{name:"brand",type:"Option<bytes>"},{name:"upgrade",type:"Option<bytes>"}]}}};var E=i=>{if(i==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(i==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var pe=i=>({hash:i.hash.toString("hex"),alias:i.alias?.toString()||null,trust:i.trust.toString(),owner:i.owner.toString(),createdAt:i.created_at.toNumber(),upgradedAt:i.upgraded_at?.toNumber(),brand:i.brand?.toString("hex")||null,upgrade:i.upgrade?.toString("hex")||null}),Nt=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(e=>e.toBech32())});var ue=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new rn(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=tn(this.config,this.chain.name)}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}async createWarpRegisterTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=y.newFromBech32(this.userWallet),a=()=>this.isCurrentUserAdmin()?BigInt(0):t&&r?this.registryConfig.unitPrice*BigInt(3):t?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,s=()=>t&&r?[C.fromHex(e),C.fromUTF8(t),C.fromHex(r)]:t?[C.fromHex(e),C.fromUTF8(t)]:[C.fromHex(e)];return await this.getFactory().createTransactionForExecute(n,{contract:y.newFromBech32(E(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:a(),arguments:s()})}async createWarpUnregisterTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:y.newFromBech32(E(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[C.fromHex(e)]})}async createWarpUpgradeTransaction(e,t,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let n=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(n,{contract:y.newFromBech32(E(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:r?[C.fromUTF8(e),C.fromHex(t),C.fromHex(r)]:[C.fromUTF8(e),C.fromHex(t)]})}async createWarpAliasSetTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:y.newFromBech32(E(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[C.fromHex(e),C.fromUTF8(t)]})}async createWarpVerifyTransaction(e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:y.newFromBech32(E(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[C.fromHex(e)]})}async createWarpTransferOwnershipTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:y.newFromBech32(E(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[C.fromHex(e),new Oe(new y(t))]})}async createBrandRegisterTransaction(e){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let t=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(t,{contract:y.newFromBech32(E(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[C.fromHex(e)]})}async createWarpBrandingTransaction(e,t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:y.newFromBech32(E(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[C.fromHex(e),C.fromHex(t)]})}async getInfoByAlias(e,t){try{let r=Ve.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return Me.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let a=y.newFromBech32(E(this.config.env)),s=this.getController(),o=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[C.fromUTF8(e)]}),c=await s.runQuery(o),[d]=s.parseQueryResponse(c),m=d?pe(d):null,p=m?.brand?await this.fetchBrand(m.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:m,brand:p},t.ttl),{registryInfo:m,brand:p}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=Ve.RegistryInfo(this.config.env,e);if(t){let p=this.cache.get(r);if(p)return Me.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),p}let n=y.newFromBech32(E(this.config.env)),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[C.fromHex(e)]}),o=await a.runQuery(s),[c]=a.parseQueryResponse(o),d=c?pe(c):null,m=d?.brand?await this.fetchBrand(d.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:d,brand:m},t.ttl),{registryInfo:d,brand:m}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(E(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new Oe(new y(t))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s);return o.map(pe)}catch{return[]}}async getUserBrands(e){try{let t=e||this.userWallet;if(!t)throw new Error("WarpRegistry: user address not set");let r=y.newFromBech32(E(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new Oe(new y(t))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s),c=o.map(p=>p.toString("hex")),d={ttl:365*24*60*60};return(await Promise.all(c.map(p=>this.fetchBrand(p,d)))).filter(p=>p!==null)}catch{return[]}}async fetchBrand(e,t){let r=Ve.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return Me.info(`WarpRegistry (fetchBrand): Brand found in cache: ${e}`),n;let s=w(this.chain,this.config.env,this.config).createNetworkProvider();try{let o=await s.getTransaction(e),c=JSON.parse(o.data.toString());return c.meta={query:null,chain:this.chain.name,identifier:en(this.chain.name,"hash",e),hash:o.hash,creator:o.sender.toBech32(),createdAt:new Date(o.timestamp*1e3).toISOString()},t&&t.ttl&&this.cache.set(r,c,t.ttl),c}catch{return null}}async loadRegistryConfigs(){let e=y.newFromBech32(E(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Nt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new Zr({chainID:this.chain.chainId}),t=Bt.create(ke);return new Yr({config:e,abi:t})}getController(){let e=w(this.chain,this.config.env,this.config),t=Bt.create(ke);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};import{CacheTtl as Wn,initializeWalletCache as wn,WarpCache as Cn}from"@joai/warps";import{Address as vn}from"@multiversx/sdk-core";import{Account as nn,Message as an,Mnemonic as Re,UserSecretKey as sn}from"@multiversx/sdk-core";import*as kt from"@scure/bip39";import{wordlist as on}from"@scure/bip39/wordlists/english.js";import{getWarpWalletAddressFromConfig as cn,getWarpWalletMnemonicFromConfig as Ut,getWarpWalletPrivateKeyFromConfig as ln,normalizeAndValidateMnemonic as pn,normalizeMnemonic as un,setWarpWalletInConfig as Ft,validateMnemonicLength as mn}from"@joai/warps";var O=class O{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=cn(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new an({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let t=pn(e),n=Re.fromString(t).deriveKey(0),a=n.hex(),o=n.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:O.PROVIDER_NAME,address:o,privateKey:a,mnemonic:t};return Ft(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let t=sn.fromString(e),r=t.hex(),a=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),s={provider:O.PROVIDER_NAME,address:a,privateKey:r,mnemonic:null};return Ft(this.config,this.chain.name,s),s}async export(){let e=this.getAccount(),t=Ut(this.config,this.chain.name),r=ln(this.config,this.chain.name);return{provider:O.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=kt.generateMnemonic(on,256),t=un(e);mn(t);let s=Re.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:O.PROVIDER_NAME,address:s,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=Ut(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=Re.fromString(e).deriveKey(0);return this.account=new nn(r,this.chain.addressHrp),this.account}};O.PROVIDER_NAME="mnemonic";var H=O;import{Account as dn,Message as hn,Mnemonic as gn,UserSecretKey as $}from"@multiversx/sdk-core";import{getWarpWalletAddressFromConfig as fn,getWarpWalletMnemonicFromConfig as yn,getWarpWalletPrivateKeyFromConfig as Ot,setWarpWalletInConfig as Vt}from"@joai/warps";var V=class V{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=fn(this.config,this.chain.name);if(e)return e;try{return this.getAccount().address.toBech32()}catch{return null}}async getPublicKey(){try{return this.getAccount().publicKey.hex()}catch{return null}}async signTransaction(e){let r=await this.getAccount().signTransaction(e);return e.signature=r,e}async signMessage(e){let t=this.getAccount(),r=new TextEncoder().encode(e),n=await t.signMessage(new hn({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=gn.fromString(e).deriveKey(0),n=r.hex(),s=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:V.PROVIDER_NAME,address:s,privateKey:n,mnemonic:e};return Vt(this.config,this.chain.name,o),o}async importFromPrivateKey(e){let r=e.startsWith("-----")?$.fromPem(e):$.fromString(e),n=r.hex(),s=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:V.PROVIDER_NAME,address:s,privateKey:n,mnemonic:null};return Vt(this.config,this.chain.name,o),o}async export(){let e=this.getAccount(),t=Ot(this.config,this.chain.name),r=yn(this.config,this.chain.name);return{provider:V.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=$.generate(),t=e.hex(),n=e.generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:V.PROVIDER_NAME,address:n,privateKey:t,mnemonic:null}}getAccount(){if(this.account)return this.account;let e=Ot(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?$.fromPem(e):$.fromString(e);return this.account=new dn(r,this.chain.addressHrp),this.account}};V.PROVIDER_NAME="privateKey";var G=V;import{getWarpWalletAddressFromConfig as z}from"@joai/warps";var M=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return z(this.config,this.chain.name)}async getPublicKey(){return null}async signTransaction(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async signMessage(e){let t=await this.getAddress();throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromMnemonic(e){let t=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=z(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var me=class{constructor(e,t){this.config=e;this.chain=t;this.cachedAddress=null;this.cachedPublicKey=null;this.entry=w(t,e.env,e),this.cache=new Cn(e.env,e.cache),this.walletProvider=this.createProvider(),this.initializeCache()}async signTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof M)throw new Error(`Wallet (${this.chain.name}) is read-only`);if(this.walletProvider instanceof G||this.walletProvider instanceof H){let n=this.walletProvider.getAccountInstance();if(t.nonce===0n){let a=await this.entry.recallAccountNonce(n.address),s=this.cache.get(`nonce:${n.address.toBech32()}`)||0,o=BigInt(Math.max(s,Number(a)));t.nonce=o}}else if(t.nonce===0n&&this.cachedAddress){let n=vn.newFromBech32(this.cachedAddress),a=await this.entry.recallAccountNonce(n),s=this.cache.get(`nonce:${this.cachedAddress}`)||0,o=BigInt(Math.max(s,Number(a)));t.nonce=o}return await this.walletProvider.signTransaction(t)}async signTransactions(e){let t=[];for(let r of e)t.push(await this.signTransaction(r));return t}async signMessage(e){if(!this.walletProvider)throw new Error("No wallet provider available");if(this.walletProvider instanceof M)throw new Error(`Wallet (${this.chain.name}) is read-only`);return await this.walletProvider.signMessage(e)}async sendTransactions(e){return Promise.all(e.map(async t=>this.sendTransaction(t)))}async sendTransaction(e){let t=e;if(!t||typeof t!="object")throw new Error("Invalid transaction object");if(!t.signature||t.signature.length===0)throw new Error("Transaction must be signed before sending");let r=await this.entry.sendTransaction(t),n=t.sender,a=Number(t.nonce)+1;return this.cache.set(`nonce:${n}`,a,Wn.OneMinute),r}async importFromMnemonic(e){return await this.createProviderForOperation("mnemonic").importFromMnemonic(e)}async importFromPrivateKey(e){return await this.createProviderForOperation("privateKey").importFromPrivateKey(e)}async export(e){return await this.createProviderForOperation(e).export()}async generate(e){return await this.createProviderForOperation(e).generate()}getAddress(){return this.cachedAddress}getPublicKey(){return this.cachedPublicKey}createProvider(){let e=this.config.user?.wallets?.[this.chain.name];return e?typeof e=="string"?new M(this.config,this.chain):e.provider?this.createProviderForOperation(e.provider):new M(this.config,this.chain):null}initializeCache(){wn(this.walletProvider).then(e=>{this.cachedAddress=e.address,this.cachedPublicKey=e.publicKey})}createProviderForOperation(e){let r=this.config.walletProviders?.[this.chain.name]?.[e];if(r){let n=r(this.config,this.chain);if(!n)throw new Error(`Custom wallet provider factory returned null for ${e}`);return n}if(e==="privateKey")return new G(this.config,this.chain);if(e==="mnemonic")return new H(this.config,this.chain);throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${e}`)}};var de=(i,e)=>(t,r)=>{let n=e[t.env],a=new Tn;return a.registerType("token",{stringToNative:s=>s,nativeToString:s=>`token:${s}`}),a.registerType("codemeta",{stringToNative:s=>s,nativeToString:s=>`codemeta:${s}`}),a.registerTypeAlias("list","vector"),{chainInfo:n,builder:()=>new ae(t,n),executor:new ce(t,n,a),output:new D(t,n,a),serializer:new S({typeRegistry:a}),registry:new ue(t,n),explorer:new le(i,t),abiBuilder:()=>new N(t,n),brandBuilder:()=>new ne(t,n),dataLoader:new ie(t,n),wallet:new me(t,n)}};import{WarpChainName as q}from"@joai/warps";var De={chain:q.Multiversx,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/egld.svg"},Mt=de(q.Multiversx,{mainnet:{name:q.Multiversx,displayName:"MultiversX",chainId:"1",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:De},testnet:{name:q.Multiversx,displayName:"MultiversX Testnet",chainId:"T",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://testnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:De},devnet:{name:q.Multiversx,displayName:"MultiversX Devnet",chainId:"D",blockTime:6e3,addressHrp:"erd",defaultApiUrl:"https://devnet-api.multiversx.com",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/multiversx.svg",nativeToken:De}});import{WarpChainName as Ke}from"@joai/warps";var xn={chain:Ke.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},Le={name:Ke.Claws,displayName:"Claws Network",chainId:"C",blockTime:600,addressHrp:"claw",defaultApiUrl:"https://api.claws.network",logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/chains/logos/claws.png",nativeToken:xn,minGasPrice:20000000000000n},Rt=de(Ke.Claws,{mainnet:Le,testnet:Le,devnet:Le});var mc=()=>[Mt,Rt];import{WarpConstants as he,WarpSerializer as _e}from"@joai/warps";var yc=i=>new _e().nativeToString(f.Token,i),Wc=i=>new _e().nativeToString(f.CodeMeta,i),wc=(i,e)=>{if(e===null)return f.Optional+he.ArgParamsSeparator;let t=i(e),r=t.indexOf(he.ArgParamsSeparator),n=t.substring(0,r),a=t.substring(r+1);return f.Optional+he.ArgParamsSeparator+n+he.ArgParamsSeparator+a},Cc=i=>new _e().nativeToString(f.List,i);import{Address as An,AddressValue as En,BigUIntType as bn,BigUIntValue as Dt,BooleanValue as Pn,BytesValue as Sn,CodeMetadata as In,CodeMetadataValue as Nn,CompositeType as Bn,CompositeValue as Un,Field as He,FieldDefinition as $e,List as Fn,NothingValue as kn,OptionalValue as Ge,OptionValue as ze,StringValue as On,Struct as Vn,StructType as Mn,TokenIdentifierType as Rn,TokenIdentifierValue as Lt,U16Value as Dn,U32Value as Ln,U64Type as Kn,U64Value as Kt,U8Value as _n,VariadicValue as Hn}from"@multiversx/sdk-core";var bc=(i,e)=>i?ze.newProvided(i):e?ze.newMissingTyped(e):ze.newMissing(),Pc=(i,e)=>i?new Ge(i.getType(),i):e?new Ge(e):Ge.newMissing(),Sc=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let e=i[0].getType();return new Fn(e,i)},Ic=i=>Hn.fromItems(...i),Nc=i=>{let e=i.map(t=>t.getType());return new Un(new Bn(...e),i)},Bc=i=>On.fromUTF8(i),Uc=i=>new _n(i),Fc=i=>new Dn(i),kc=i=>new Ln(i),Oc=i=>new Kt(i),Vc=i=>new Dt(BigInt(i)),Mc=i=>new Pn(i),Rc=i=>new En(An.newFromBech32(i)),Dc=i=>new Lt(i),Lc=i=>Sn.fromHex(i),Kc=i=>new Vn(new Mn("EsdtTokenPayment",[new $e("token_identifier","",new Rn),new $e("token_nonce","",new Kn),new $e("amount","",new bn)]),[new He(new Lt(i.token.identifier),"token_identifier"),new He(new Kt(BigInt(i.token.nonce)),"token_nonce"),new He(new Dt(BigInt(i.amount)),"amount")]),_c=i=>new Nn(In.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),Hc=()=>new kn;export{Rt as ClawsAdapter,Qt as ClawsExplorers,F as ExplorerUrls,Et as KnownTokens,Mt as MultiversxAdapter,qt as MultiversxExplorers,Je as MultiversxExplorersConfig,xn as NativeTokenClaw,De as NativeTokenEgld,N as WarpMultiversxAbiBuilder,ne as WarpMultiversxBrandBuilder,ae as WarpMultiversxBuilder,pa as WarpMultiversxConstants,j as WarpMultiversxContractLoader,ie as WarpMultiversxDataLoader,ce as WarpMultiversxExecutor,le as WarpMultiversxExplorer,f as WarpMultiversxInputTypes,D as WarpMultiversxOutput,ue as WarpMultiversxRegistry,S as WarpMultiversxSerializer,me as WarpMultiversxWallet,Rc as address_value,Kc as asset_value,Vc as biguint_value,Mc as boolean_value,Wc as codemeta,_c as codemeta_value,Nc as composite_value,de as createMultiversxAdapter,bt as findKnownTokenById,mc as getAllMultiversxAdapters,Gn as getAllMultiversxChainNames,Is as getKnownTokensForChain,w as getMultiversxEntrypoint,E as getMultiversxRegistryAddress,Q as getNormalizedTokenIdentifier,Lc as hex_value,R as isNativeToken,Cc as list,Sc as list_value,Hc as nothing_value,bc as option_value,wc as optional,Pc as optional_value,Bc as string_value,Nt as toTypedConfigInfo,pe as toTypedRegistryInfo,yc as token,Dc as token_value,Fc as u16_value,kc as u32_value,Oc as u64_value,Uc as u8_value,Ic as variadic_value};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joai/warps-adapter-multiversx",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -38,6 +38,6 @@
38
38
  "dependencies": {
39
39
  "@multiversx/sdk-core": "^15.3.1",
40
40
  "@scure/bip39": "^2.0.1",
41
- "@joai/warps": "^3.1.1"
41
+ "@joai/warps": "^3.2.2"
42
42
  }
43
43
  }