@joai/warps-adapter-multiversx 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var ct=Object.create;var Te=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var pt=Object.getOwnPropertyNames;var ut=Object.getPrototypeOf,mt=Object.prototype.hasOwnProperty;var dt=(o,e)=>{for(var t in e)Te(o,t,{get:e[t],enumerable:!0})},Le=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of pt(e))!mt.call(o,n)&&n!==t&&Te(o,n,{get:()=>e[n],enumerable:!(r=lt(e,n))||r.enumerable});return o};var ht=(o,e,t)=>(t=o!=null?ct(ut(o)):{},Le(e||!o||!o.__esModule?Te(t,"default",{value:o,enumerable:!0}):t,o)),gt=o=>Le(Te({},"__esModule",{value:!0}),o);var zt={};dt(zt,{ClawsAdapter:()=>Re,ClawsExplorers:()=>$e,ExplorerUrls:()=>G,KnownTokens:()=>Ue,MultiversxAdapter:()=>Ve,MultiversxExplorers:()=>He,MultiversxExplorersConfig:()=>Ne,NativeTokenClaw:()=>ot,NativeTokenEgld:()=>Ae,WarpMultiversxAbiBuilder:()=>H,WarpMultiversxBrandBuilder:()=>ue,WarpMultiversxBuilder:()=>me,WarpMultiversxConstants:()=>Wt,WarpMultiversxContractLoader:()=>pe,WarpMultiversxDataLoader:()=>de,WarpMultiversxExecutor:()=>he,WarpMultiversxExplorer:()=>ge,WarpMultiversxInputTypes:()=>w,WarpMultiversxOutput:()=>X,WarpMultiversxRegistry:()=>ye,WarpMultiversxSerializer:()=>D,WarpMultiversxWallet:()=>Ce,address_value:()=>Lt,asset_value:()=>Ht,biguint_value:()=>Rt,boolean_value:()=>Dt,codemeta:()=>Et,codemeta_value:()=>$t,composite_value:()=>Ut,createMultiversxAdapter:()=>ve,findKnownTokenById:()=>Fe,getAllMultiversxAdapters:()=>xt,getAllMultiversxChainNames:()=>ft,getKnownTokensForChain:()=>Ct,getMultiversxEntrypoint:()=>v,getMultiversxRegistryAddress:()=>F,getNormalizedTokenIdentifier:()=>le,hex_value:()=>_t,isNativeToken:()=>Q,list:()=>Pt,list_value:()=>Nt,nothing_value:()=>Gt,option_value:()=>St,optional:()=>bt,optional_value:()=>It,string_value:()=>Ft,toTypedConfigInfo:()=>Oe,toTypedRegistryInfo:()=>fe,token:()=>At,token_value:()=>Kt,u16_value:()=>Ot,u32_value:()=>Vt,u64_value:()=>Mt,u8_value:()=>kt,variadic_value:()=>Bt});module.exports=gt(zt);var Se=require("@joai/warps"),ft=()=>[Se.WarpChainName.Multiversx,Se.WarpChainName.Claws];var it=require("@joai/warps");var S=require("@multiversx/sdk-core"),P=require("@joai/warps");var re=require("@multiversx/sdk-core"),Ke=require("@joai/warps"),Q=o=>!o.includes("-"),le=o=>Q(o)?`${o}-000000`:o,v=(o,e,t)=>{let r="warp-sdk",s=t?(0,Ke.getProviderConfig)(t,o.name,e,o.defaultApiUrl):{url:o.defaultApiUrl},i=s.url,c={headers:s.headers};return e==="devnet"?new re.DevnetEntrypoint({url:i,kind:"api",clientName:r,networkProviderConfig:c}):e==="testnet"?new re.TestnetEntrypoint({url:i,kind:"api",clientName:r,networkProviderConfig:c}):new re.MainnetEntrypoint({url:i,kind:"api",clientName:r,networkProviderConfig:c})};var Ie=require("@joai/warps");var pe=class{constructor(e){this.config=e}async getContract(e,t){try{let s=await v(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}`);return{address:e,owner:s.ownerAddress,verified:s.isVerified||!1}}catch(r){return Ie.WarpLogger.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(e,t){try{let s=await v(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}/verification`);return{codeHash:s.codeHash,abi:s.source.abi}}catch(r){return Ie.WarpLogger.error("WarpContractLoader: getVerificationInfo error",r),null}}};var a=require("@multiversx/sdk-core"),Ge=require("@joai/warps");var yt=o=>o?typeof o=="string"?o:o.address:null,_e=(o,e)=>yt(o.user?.wallets?.[e]||null);var g={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:o=>_e(o.config,o.adapter.chainInfo.name)},UserWalletPublicKey:{Placeholder:"USER_WALLET_PUBLICKEY",Accessor:o=>{if(!o.adapter.wallet)return null;try{return o.adapter.wallet.getPublicKey()||null}catch{return null}}},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:o=>o.adapter.chainInfo.defaultApiUrl},ChainAddressHrp:{Placeholder:"CHAIN_ADDRESS_HRP",Accessor:o=>o.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 Wt={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},w={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},He=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(He||{}),$e=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))($e||{}),Ne={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 wt=new RegExp(`${g.ArgParamsSeparator}(.*)`),D=class{constructor(e){this.coreSerializer=new Ge.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+g.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return u.Option+g.ArgParamsSeparator+r}if(t.hasExactClass(a.VariadicType.ClassName)||e.hasClassOrSuperclass(a.VariadicValue.ClassName)){let r=e.getItems();if(r.length===0){let h=this.typeToString(t.getFirstTypeParameter());return u.Vector+g.ArgParamsSeparator+h+g.ArgParamsSeparator}let n=r.map(h=>this.typedToString(h));if(n.every(h=>h.startsWith(u.Tuple)))return u.Vector+g.ArgParamsSeparator+n.join(",");let s=n[0],i=s.indexOf(g.ArgParamsSeparator),c=s.substring(0,i),l=n.map(h=>{let m=h.indexOf(g.ArgParamsSeparator);return h.substring(m+1)}),f=c.startsWith(u.Struct)?g.ArgStructSeparator:g.ArgListSeparator;return u.Vector+g.ArgParamsSeparator+c+g.ArgParamsSeparator+l.join(f)}if(t.hasExactClass(a.OptionalType.ClassName)||e.hasClassOrSuperclass(a.OptionalValue.ClassName)){if(!e.isSet())return w.Optional+g.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return w.Optional+g.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+g.ArgParamsSeparator+n.join(",");let i=n.map(l=>l.split(g.ArgParamsSeparator)[0])[0],c=n.map(l=>l.split(g.ArgParamsSeparator)[1]);return w.List+g.ArgParamsSeparator+i+g.ArgParamsSeparator+c.join(g.ArgListSeparator)}if(t.hasExactClass(a.CompositeType.ClassName)||e.hasClassOrSuperclass(a.CompositeValue.ClassName)){let n=e.getItems().map(s=>{let i=this.typedToString(s),c=i.indexOf(g.ArgParamsSeparator),l=i.substring(0,c),f=i.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+g.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.U8Type.ClassName)||e.hasClassOrSuperclass(a.U8Value.ClassName))return u.Uint8+g.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U16Type.ClassName)||e.hasClassOrSuperclass(a.U16Value.ClassName))return u.Uint16+g.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U32Type.ClassName)||e.hasClassOrSuperclass(a.U32Value.ClassName))return u.Uint32+g.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U64Type.ClassName)||e.hasClassOrSuperclass(a.U64Value.ClassName))return u.Uint64+g.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.StringType.ClassName)||e.hasClassOrSuperclass(a.StringValue.ClassName))return u.String+g.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.BooleanType.ClassName)||e.hasClassOrSuperclass(a.BooleanValue.ClassName))return u.Bool+g.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.AddressType.ClassName)||e.hasClassOrSuperclass(a.AddressValue.ClassName))return u.Address+g.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(a.BytesType.ClassName)||e.hasClassOrSuperclass(a.BytesValue.ClassName))return u.Hex+g.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+g.ArgParamsSeparator+c+g.ArgCompositeSeparator+s}if(t.hasExactClass(a.StructType.ClassName)||e.hasClassOrSuperclass(a.Struct.ClassName)){let r=e,s=r.getType().getName(),i=r.getFields();if(i.length===0)return`${u.Struct}(${s})${g.ArgParamsSeparator}`;let c=i.map(l=>{let f=l.value.getType(),m=this.typedToString(l.value).split(g.ArgParamsSeparator),W=m.length>2?m.slice(2).join(g.ArgParamsSeparator):m[1]||"";return`(${l.name}${g.ArgParamsSeparator}${this.typeToString(f)})${W}`});return`${u.Struct}(${s})${g.ArgParamsSeparator}${c.join(g.ArgListSeparator)}`}if(t.hasExactClass(a.EnumType.ClassName)||e.hasClassOrSuperclass(a.EnumValue.ClassName)){let r=e;return`enum(${r.getType().getName()})${g.ArgParamsSeparator}${r.discriminant}`}if(t.hasExactClass(a.TokenIdentifierType.ClassName)||e.hasClassOrSuperclass(a.TokenIdentifierValue.ClassName))return w.Token+g.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.CodeMetadataType.ClassName)||e.hasClassOrSuperclass(a.CodeMetadataValue.ClassName))return w.CodeMeta+g.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.startsWith("enum")){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Enum type must include a name in the format enum(Name)");return new a.EnumType(t[1],[])}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(g.ArgParamsSeparator),s=r.substring(0,n),i=r.substring(n+1);if(s.startsWith(u.Tuple)){let m=i.split(",").map(W=>this.stringToTyped(W));return new a.VariadicValue(new a.VariadicType(this.nativeToType(s)),m)}if(i.includes("tuple(")){let h=this.splitTupleStrings(i),m=h.map(M=>this.stringToTyped(M)),A=h[0].match(/^(tuple\([^)]+\))/),y=A?A[1]:"tuple";return new a.VariadicValue(new a.VariadicType(this.nativeToType(y)),m)}let c=s.startsWith(u.Struct)?g.ArgStructSeparator:g.ArgListSeparator,f=i.split(c).map(h=>this.stringToTyped(`${s}:${h}`));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(","),i=[];for(let l=0;l<s.length;l+=2){let f=s[l],h=s[l+1];i.push(this.stringToTyped(`${f}:${h}`))}let c=i.map(l=>l.getType());return new a.CompositeValue(new a.CompositeType(...c),i)}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 i=r.split(g.ArgListSeparator),c=[],l=[];return i.forEach(f=>{let h=f.match(new RegExp(`^\\(([^${g.ArgParamsSeparator}]+)${g.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(h){let[,m,W,A]=h,y=this.stringToTyped(`${W}${g.ArgParamsSeparator}${A}`);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(g.ArgCompositeSeparator),i=new a.TokenComputer,c=Q(n)?le(n):i.extractIdentifierFromExtendedIdentifier(n),l=Q(n)?0n:i.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(wt,2),c=s.split(g.ArgListSeparator).map(l=>this.stringToTyped(n+g.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"))));if(t.startsWith("enum")){let n=t.match(/\(([^)]+)\)/),s=n?n[1]:"CustomEnum",i=Number(r);if(isNaN(i))throw new Error(`WarpArgSerializer (stringToTyped): Invalid enum discriminant: ${r}`);let c=new a.EnumVariantDefinition(r,i,[]),l=new a.EnumType(s,[c]);return new a.EnumValue(l,c,[])}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 i=e[s];if(i==="(")n++;else if(i===")")n--;else if(i===","&&n===0){t.push(r.trim()),r="";continue}r+=i}return r.trim()&&t.push(r.trim()),t}typeToString(e){if(e.hasExactClass(a.OptionType.ClassName))return u.Option+g.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.VariadicType.ClassName))return u.Vector+g.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+g.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.ListType.ClassName))return w.List+g.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()})`;if(e.hasExactClass(a.EnumType.ClassName))return`enum(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var H=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new pe(this.config),this.cache=new P.WarpCache(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=(0,P.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new S.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new S.TransferTransactionsFactory({config:r}),s=S.Address.newFromBech32(t),i={protocol:(0,P.getLatestProtocolIdentifier)("abi"),content:e},c=JSON.stringify(i),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,P.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=P.WarpCacheKey.WarpAbi(this.config.env,e);if(t){let i=this.cache.get(r);if(i)return P.WarpLogger.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${e}`),i}let s=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let i=await s.getTransaction(e),c=await this.createFromTransaction(i);return t&&t.ttl&&c&&this.cache.set(r,c,t.ttl),c}catch(i){return P.WarpLogger.error("WarpAbiBuilder: Error creating from transaction hash",i),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 S.AbiRegistry.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(P.WarpConstants.IdentifierType.Hash)){let t=e.abi.split(P.WarpConstants.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return S.AbiRegistry.create(r.content)}else{let r=await(await fetch(e.abi)).json();return S.AbiRegistry.create(r)}}endpointsToWarps(e,t,r){let n=new D,s=r?btoa(JSON.stringify(r)):void 0;return e.getEndpoints().map(i=>{let c=i.modifiers.isReadonly(),l=i.input.map((h,m)=>{let W={name:h.name,type:n.typeToString(h.type),position:`arg:${m+1}`,source:"field",required:!h.type.hasClassOrSuperclass(S.OptionalType.ClassName)&&!h.type.hasClassOrSuperclass(S.OptionType.ClassName)};if(h.type.hasExactClass(S.EnumType.ClassName)){let A=h.type;W.options=Object.fromEntries(A.variants.map(y=>[String(y.discriminant),y.name]))}return W}),f=c?{type:"query",label:i.name,address:t,func:i.name,args:[],abi:s,inputs:l}:{type:"contract",label:i.name,address:t,func:i.name,args:[],gasLimit:1e7,abi:s,inputs:l};return{protocol:(0,P.getLatestProtocolIdentifier)("warp"),name:i.name,title:i.name,description:null,chain:this.chain.name,actions:[f]}})}};var j=require("@multiversx/sdk-core"),z=require("@joai/warps"),ze=require("buffer");var ue=class{constructor(e,t){this.config=e;this.chain=t;this.core=new z.WarpBrandBuilder(e)}async createInscriptionTransaction(e){let t=(0,z.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),i=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(s,{receiver:j.Address.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(ze.Buffer.from(i))})}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,z.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=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let n=await r.getTransaction(e);return this.createFromTransaction(n)}catch(n){return z.WarpLogger.error("BrandBuilder: Error creating from transaction hash",n),null}}};var J=require("@multiversx/sdk-core"),k=require("@joai/warps");var me=class extends k.WarpBuilder{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new k.WarpCache(t.env,t.cache),this.core=new k.WarpBuilder(t)}async createInscriptionTransaction(t){let r=(0,k.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}),i=J.Address.newFromBech32(r),c=JSON.stringify(t),l=await s.createTransactionForTransfer(i,{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,k.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=k.WarpCacheKey.Warp(this.config.env,t);if(r){let c=this.cache.get(n);if(c)return k.WarpLogger.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),c}let i=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await i.getTransaction(t),l=await this.createFromTransaction(c);return r&&r.ttl&&l&&this.cache.set(n,l,r.ttl),l}catch(c){return k.WarpLogger.error("WarpBuilder: Error creating from transaction hash",c),null}}};var q=require("@multiversx/sdk-core"),ne=require("@joai/warps");var Be=require("@joai/warps");var Qe=require("@joai/warps"),qe=Qe.WarpChainName.Multiversx,je=[{chain:qe,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:qe,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"),U=Je.WarpChainName.Multiversx,Xe=[{chain:U,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:U,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:U,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:U,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:U,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:U,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:U,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:U,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:U,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:U,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:U,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:U,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:U,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:U,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:U,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"),Ye=Ze.WarpChainName.Multiversx,et=[{chain:Ye,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:Ye,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];var rt=require("@joai/warps"),tt=rt.WarpChainName.Claws,xe=[{chain:tt,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:tt,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Ue={[Be.WarpChainName.Multiversx]:{mainnet:Xe,testnet:et,devnet:je},[Be.WarpChainName.Claws]:{mainnet:xe,testnet:xe,devnet:xe}},Fe=(o,e,t)=>(Ue[o]?.[e]||[]).find(n=>n.identifier===t)||null,Ct=(o,e)=>Ue[o]?.[e]||[];var de=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new ne.WarpCache(e.env,e.cache)}async getAccount(e){let r=await v(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(q.Address.newFromBech32(e));return{chain:this.chain.name,address:r.address.toBech32(),balance:r.balance}}async getAccountAssets(e){let t=v(this.chain,this.config.env,this.config).createNetworkProvider(),r=t.getAccount(q.Address.newFromBech32(e)),n=t.getFungibleTokensOfAccount(q.Address.newFromBech32(e)),[s,i]=await Promise.all([r,n]),c=s.balance>0?[{...this.chain.nativeToken,amount:s.balance}]:[];return c.push(...i.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=ne.WarpCacheKey.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=Fe(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 q.TokenComputer,i=Q(e)?0n:s.extractNonceFromExtendedIdentifier(e),c=new q.Token({identifier:e,nonce:BigInt(i||0)}),l=s.isFungible(c),f=v(this.chain,this.config.env,this.config).createNetworkProvider(),h=le(e),m=await f.doGetGeneric(`tokens/${h}`),W={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,W,ne.CacheTtl.OneHour),W}async getAction(e,t=!1){let r=v(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=v(this.chain,this.config.env,this.config).createNetworkProvider(),n=`accounts/${e}/transactions`,s=new URLSearchParams,i=t?.size||25,c=t?.page||0;if(c>0){let f=c*i;s.append("from",f.toString())}return i!==25&&s.append("size",i.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"),O=require("@joai/warps");var T=require("@joai/warps"),ae=require("@multiversx/sdk-core");var X=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new H(e,t),this.serializer=new D({typeRegistry:this.typeRegistry}),this.cache=new T.WarpCache(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(T.WarpCacheKey.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],s=await this.extractContractOutput(e,t,r,n),i=(0,T.applyOutputToMessages)(e,s.output,this.config),c=(0,T.extractResolvedInputValues)(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:(0,T.getWarpWalletAddressFromConfig)(this.config,this.chain.name),txHash:r.hash,tx:r,next:null,values:s.values,output:s.output,messages:i,destination:null,resolvedInputs:c}}async extractContractOutput(e,t,r,n){let s=(0,T.getWarpActionByIndex)(e,t),i=[],c=[],l={};if(!e.output||s.type!=="contract")return{values:{string:i,native:c,mapped:{}},output:l};if(!Object.values(e.output).some(C=>C.includes("out")||C.includes("event"))){for(let[C,N]of Object.entries(e.output))l[C]=N;return{values:{string:i,native:c,mapped:{}},output:await(0,T.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}let h=await this.abi.getAbiForAction(s),m=new ae.TransactionEventsParser({abi:h}),W=new ae.SmartContractTransactionsOutcomeParser({abi:h}),A=null,y=!1,M=()=>(y||(y=!0,A=W.parseExecute({transactionOnNetwork:r,function:s.func||void 0})),A);for(let[C,N]of Object.entries(e.output)){if(N.startsWith(T.WarpConstants.Transform.Prefix))continue;if(N.startsWith("input.")){l[C]=N;continue}let ce=(0,T.parseOutputOutIndex)(N);if(ce!==null&&ce!==t){l[C]=null;continue}let[te,_,E,De]=N.split(".");if(te==="event"){if(!_||isNaN(Number(E)))continue;let be=Number(E),Pe=(0,ae.findEventsByFirstTopic)(r,_),b=m.parseEvents({events:Pe})[0];if(!b||typeof b!="object"){l[C]=null;continue}let B=Object.values(b)[be]||null;B&&De&&typeof B=="object"&&(B=B[De]??null),B&&typeof B=="object"&&(B="toFixed"in B?B.toFixed():B.valueOf()),i.push(String(B)),c.push(B),l[C]=B&&B.valueOf()}else if(te==="out"||te.startsWith("out[")){if(!_)continue;let be=M(),Pe=Number(_),b=be.values[Pe-1]||null;E&&(b=b[E]||null),b&&typeof b=="object"&&(b="toFixed"in b?b.toFixed():b.valueOf()),i.push(String(b)),c.push(b),l[C]=b&&b.valueOf()}else l[C]=N}return{values:{string:i,native:c,mapped:{}},output:await(0,T.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let s=t.map(h=>this.serializer.typedToString(h)),i=t.map(h=>this.serializer.typedToNative(h)[1]),c={string:s,native:i,mapped:{}},l={};if(!e.output)return{values:c,output:l};let f=h=>{let m=h.split(".").slice(1).map(A=>parseInt(A)-1);if(m.length===0)return;let W=i[m[0]];for(let A=1;A<m.length;A++){if(W==null)return;W=W[m[A]]}return W};for(let[h,m]of Object.entries(e.output)){if(m.startsWith(T.WarpConstants.Transform.Prefix))continue;let W=(0,T.parseOutputOutIndex)(m);if(W!==null&&W!==r){l[h]=null;continue}m.startsWith("out.")||m==="out"||m.startsWith("out[")?l[h]=f(m)||null:l[h]=m}return l=await(0,T.evaluateOutputCommon)(e,l,i,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,i=e.meta,c=new Map,l=new Set,f=this;async function h(y,M=[]){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 C=t.actions[y-1];if(!C)throw new Error(`Action ${y} not found`);let N;if(C.type==="query")N=await n.executeQuery(t,y,M);else if(C.type==="collect")N=await n.executeCollect(t,y,M,i);else throw new Error(`Unsupported or interactive action type: ${C.type}`);if(c.set(y,N),t.output)for(let ce of Object.values(t.output)){let _=String(ce).match(/^out\[(\d+)\]/);if(_){let E=parseInt(_[1],10);E!==y&&!c.has(E)&&await h(E)}}return l.delete(y),N}await h(r,s);let m={};for(let y of c.values())for(let[M,C]of Object.entries(y.output))C!==null?m[M]=C:M in m||(m[M]=null);let W=await(0,T.evaluateOutputCommon)(t,m,m,r,s,this.serializer.coreSerializer,this.config);return{...c.get(r),action:r,output:W}}};var vt="EGLD-000000",he=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new D({typeRegistry:this.typeRegistry}),this.abi=new H(this.config,this.chain),this.output=new X(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=(0,O.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,O.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,i=e.transfers.length===1&&e.transfers[0].identifier===this.chain.nativeToken?.identifier,l=(i?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:i?[]: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,O.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=(0,O.getWarpActionByIndex)(e.warp,e.action),n=x.Address.newFromBech32(t),s=e.args.map(c=>this.serializer.stringToTyped(c)),i=new x.TransactionsFactoryConfig({chainID:e.chain.chainId});return new x.SmartContractTransactionsFactory({config:i}).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,O.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(E=>this.serializer.stringToTyped(E)),s=v(e.chain,this.config.env,this.config),i=x.Address.newFromBech32(e.destination),c=s.createSmartContractController(r),l=c.createQuery({contract:i,function:t.func||"",arguments:n}),f=await c.runQuery(l),h=f.returnCode==="ok",m=new x.ArgSerializer,W=r.getEndpoint(f.function||t.func||""),A=(f.returnDataParts||[]).map(E=>Buffer.from(E)),y=m.buffersToValues(A,W.output),{values:M,output:C}=await this.output.extractQueryOutput(e.warp,y,e.action,e.resolvedInputs),N=(0,O.getNextInfo)(this.config,[],e.warp,e.action,C),te=e.resolvedInputs.find(E=>E.input.position==="receiver"||E.input.position==="destination")?.value||e.destination,_=(0,O.extractResolvedInputValues)(e.resolvedInputs);return{status:h?"success":"error",warp:e.warp,action:e.action,user:(0,O.getWarpWalletAddressFromConfig)(this.config,e.chain.name),txHash:null,tx:null,next:N,values:M,output:{...C,_DATA:y},messages:(0,O.applyOutputToMessages)(e.warp,C,this.config),destination:te,resolvedInputs:_}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:vt}: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 ge=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=Ne[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 d=require("@multiversx/sdk-core"),V=require("@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 F=o=>{if(o==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(o==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var fe=o=>({hash:o.hash.toString("hex"),alias:o.alias?.toString()||null,trust:o.trust.toString(),owner:o.owner.toString(),createdAt:o.created_at.toNumber(),upgradedAt:o.upgraded_at?.toNumber(),brand:o.brand?.toString("hex")||null,upgrade:o.upgrade?.toString("hex")||null}),Oe=o=>({unitPrice:BigInt(o.unit_price.toString()),admins:o.admins.map(e=>e.toBech32())});var ye=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new V.WarpCache(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=(0,V.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,i=()=>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(F(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:s(),arguments:i()})}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(F(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(F(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(F(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(F(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(F(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(F(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(F(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=V.WarpCacheKey.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return V.WarpLogger.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let s=d.Address.newFromBech32(F(this.config.env)),i=this.getController(),c=i.createQuery({contract:s,function:"getInfoByAlias",arguments:[d.BytesValue.fromUTF8(e)]}),l=await i.runQuery(c),[f]=i.parseQueryResponse(l),h=f?fe(f):null,m=h?.brand?await this.fetchBrand(h.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:h,brand:m},t.ttl),{registryInfo:h,brand:m}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=V.WarpCacheKey.RegistryInfo(this.config.env,e);if(t){let m=this.cache.get(r);if(m)return V.WarpLogger.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),m}let n=d.Address.newFromBech32(F(this.config.env)),s=this.getController(),i=s.createQuery({contract:n,function:"getInfoByHash",arguments:[d.BytesValue.fromHex(e)]}),c=await s.runQuery(i),[l]=s.parseQueryResponse(c),f=l?fe(l):null,h=f?.brand?await this.fetchBrand(f.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:f,brand:h},t.ttl),{registryInfo:f,brand:h}}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(F(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserWarps",arguments:[new d.AddressValue(new d.Address(t))]}),i=await n.runQuery(s),[c]=n.parseQueryResponse(i);return c.map(fe)}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(F(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserBrands",arguments:[new d.AddressValue(new d.Address(t))]}),i=await n.runQuery(s),[c]=n.parseQueryResponse(i),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=V.WarpCacheKey.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return V.WarpLogger.info(`WarpRegistry (fetchBrand): Brand found in cache: ${e}`),n;let i=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await i.getTransaction(e),l=JSON.parse(c.data.toString());return l.meta={query:null,chain:this.chain.name,identifier:(0,V.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(F(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Oe(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new d.TransactionsFactoryConfig({chainID:this.chain.chainId}),t=d.AbiRegistry.create(ke);return new d.SmartContractTransactionsFactory({config:e,abi:t})}getController(){let e=v(this.chain,this.config.env,this.config),t=d.AbiRegistry.create(ke);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var ie=require("@joai/warps"),st=require("@multiversx/sdk-core");var L=require("@multiversx/sdk-core"),nt=ht(require("@scure/bip39"),1),at=require("@scure/bip39/wordlists/english.js"),I=require("@joai/warps"),Y=class Y{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,I.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 L.Message({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let t=(0,I.normalizeAndValidateMnemonic)(e),n=L.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,I.setWarpWalletInConfig)(this.config,this.chain.name,l),l}async importFromPrivateKey(e){let t=L.UserSecretKey.fromString(e),r=t.hex(),s=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),i={provider:Y.PROVIDER_NAME,address:s,privateKey:r,mnemonic:null};return(0,I.setWarpWalletInConfig)(this.config,this.chain.name,i),i}async export(){let e=this.getAccount(),t=(0,I.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name),r=(0,I.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=nt.generateMnemonic(at.wordlist,256),t=(0,I.normalizeMnemonic)(e);(0,I.validateMnemonicLength)(t);let i=L.Mnemonic.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:Y.PROVIDER_NAME,address:i,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=(0,I.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=L.Mnemonic.fromString(e).deriveKey(0);return this.account=new L.Account(r,this.chain.addressHrp),this.account}};Y.PROVIDER_NAME="mnemonic";var We=Y;var R=require("@multiversx/sdk-core"),K=require("@joai/warps"),Z=class Z{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,K.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 r=R.Mnemonic.fromString(e).deriveKey(0),n=r.hex(),i=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:Z.PROVIDER_NAME,address:i,privateKey:n,mnemonic:e};return(0,K.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let r=e.startsWith("-----")?R.UserSecretKey.fromPem(e):R.UserSecretKey.fromString(e),n=r.hex(),i=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:Z.PROVIDER_NAME,address:i,privateKey:n,mnemonic:null};return(0,K.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async export(){let e=this.getAccount(),t=(0,K.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name),r=(0,K.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=R.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,K.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?R.UserSecretKey.fromPem(e):R.UserSecretKey.fromString(e);return this.account=new R.Account(r,this.chain.addressHrp),this.account}};Z.PROVIDER_NAME="privateKey";var we=Z;var se=require("@joai/warps"),ee=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return(0,se.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,se.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=(0,se.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=(0,se.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=(0,se.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var Ce=class{constructor(e,t){this.config=e;this.chain=t;this.cachedAddress=null;this.cachedPublicKey=null;this.entry=v(t,e.env,e),this.cache=new ie.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 We){let n=this.walletProvider.getAccountInstance();if(t.nonce===0n){let s=await this.entry.recallAccountNonce(n.address),i=this.cache.get(`nonce:${n.address.toBech32()}`)||0,c=BigInt(Math.max(i,Number(s)));t.nonce=c}}else if(t.nonce===0n&&this.cachedAddress){let n=st.Address.newFromBech32(this.cachedAddress),s=await this.entry.recallAccountNonce(n),i=this.cache.get(`nonce:${this.cachedAddress}`)||0,c=BigInt(Math.max(i,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,ie.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,ie.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 We(this.config,this.chain);throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${e}`)}};var ve=(o,e)=>(t,r)=>{let n=e[t.env],s=new it.WarpTypeRegistry;return s.registerType("token",{stringToNative:i=>i,nativeToString:i=>`token:${i}`}),s.registerType("codemeta",{stringToNative:i=>i,nativeToString:i=>`codemeta:${i}`}),s.registerTypeAlias("list","vector"),{chainInfo:n,builder:()=>new me(t,n),executor:new he(t,n,s),output:new X(t,n,s),serializer:new D({typeRegistry:s}),registry:new ye(t,n),explorer:new ge(o,t),abiBuilder:()=>new H(t,n),brandBuilder:()=>new ue(t,n),dataLoader:new de(t,n),wallet:new Ce(t,n)}};var oe=require("@joai/warps");var Ae={chain:oe.WarpChainName.Multiversx,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/egld.svg"},Ve=ve(oe.WarpChainName.Multiversx,{mainnet:{name:oe.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:Ae},testnet:{name:oe.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:Ae},devnet:{name:oe.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:Ae}});var Ee=require("@joai/warps");var ot={chain:Ee.WarpChainName.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},Me={name:Ee.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:ot,minGasPrice:20000000000000n},Re=ve(Ee.WarpChainName.Claws,{mainnet:Me,testnet:Me,devnet:Me});var xt=()=>[Ve,Re];var $=require("@joai/warps");var At=o=>new $.WarpSerializer().nativeToString(w.Token,o),Et=o=>new $.WarpSerializer().nativeToString(w.CodeMeta,o),bt=(o,e)=>{if(e===null)return w.Optional+$.WarpConstants.ArgParamsSeparator;let t=o(e),r=t.indexOf($.WarpConstants.ArgParamsSeparator),n=t.substring(0,r),s=t.substring(r+1);return w.Optional+$.WarpConstants.ArgParamsSeparator+n+$.WarpConstants.ArgParamsSeparator+s},Pt=o=>new $.WarpSerializer().nativeToString(w.List,o);var p=require("@multiversx/sdk-core"),St=(o,e)=>o?p.OptionValue.newProvided(o):e?p.OptionValue.newMissingTyped(e):p.OptionValue.newMissing(),It=(o,e)=>o?new p.OptionalValue(o.getType(),o):e?new p.OptionalValue(e):p.OptionalValue.newMissing(),Nt=o=>{if(o.length===0)throw new Error("Cannot create a list from an empty array");let e=o[0].getType();return new p.List(e,o)},Bt=o=>p.VariadicValue.fromItems(...o),Ut=o=>{let e=o.map(t=>t.getType());return new p.CompositeValue(new p.CompositeType(...e),o)},Ft=o=>p.StringValue.fromUTF8(o),kt=o=>new p.U8Value(o),Ot=o=>new p.U16Value(o),Vt=o=>new p.U32Value(o),Mt=o=>new p.U64Value(o),Rt=o=>new p.BigUIntValue(BigInt(o)),Dt=o=>new p.BooleanValue(o),Lt=o=>new p.AddressValue(p.Address.newFromBech32(o)),Kt=o=>new p.TokenIdentifierValue(o),_t=o=>p.BytesValue.fromHex(o),Ht=o=>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(o.token.identifier),"token_identifier"),new p.Field(new p.U64Value(BigInt(o.token.nonce)),"token_nonce"),new p.Field(new p.BigUIntValue(BigInt(o.amount)),"amount")]),$t=o=>new p.CodeMetadataValue(p.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(o,"hex")))),Gt=()=>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 ut=Object.create;var Ae=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ht=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var ft=(o,e)=>{for(var t in e)Ae(o,t,{get:e[t],enumerable:!0})},_e=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of dt(e))!gt.call(o,n)&&n!==t&&Ae(o,n,{get:()=>e[n],enumerable:!(r=mt(e,n))||r.enumerable});return o};var yt=(o,e,t)=>(t=o!=null?ut(ht(o)):{},_e(e||!o||!o.__esModule?Ae(t,"default",{value:o,enumerable:!0}):t,o)),Wt=o=>_e(Ae({},"__esModule",{value:!0}),o);var jt={};ft(jt,{ClawsAdapter:()=>Le,ClawsExplorers:()=>qe,ExplorerUrls:()=>z,KnownTokens:()=>Oe,MultiversxAdapter:()=>Re,MultiversxExplorers:()=>ze,MultiversxExplorersConfig:()=>Ue,NativeTokenClaw:()=>pt,NativeTokenEgld:()=>be,WarpMultiversxAbiBuilder:()=>H,WarpMultiversxBrandBuilder:()=>ue,WarpMultiversxBuilder:()=>me,WarpMultiversxConstants:()=>vt,WarpMultiversxContractLoader:()=>pe,WarpMultiversxDataLoader:()=>de,WarpMultiversxExecutor:()=>he,WarpMultiversxExplorer:()=>ge,WarpMultiversxInputTypes:()=>w,WarpMultiversxOutput:()=>Z,WarpMultiversxRegistry:()=>ye,WarpMultiversxSerializer:()=>L,WarpMultiversxWallet:()=>Ce,address_value:()=>Ht,asset_value:()=>zt,biguint_value:()=>Kt,boolean_value:()=>_t,codemeta:()=>St,codemeta_value:()=>qt,composite_value:()=>kt,createMultiversxAdapter:()=>ve,findKnownTokenById:()=>ke,getAllMultiversxAdapters:()=>bt,getAllMultiversxChainNames:()=>wt,getKnownTokensForChain:()=>xt,getMultiversxEntrypoint:()=>v,getMultiversxRegistryAddress:()=>U,getNormalizedTokenIdentifier:()=>le,hex_value:()=>Gt,isNativeToken:()=>J,list:()=>Nt,list_value:()=>Ft,nothing_value:()=>Qt,option_value:()=>Bt,optional:()=>It,optional_value:()=>Ut,string_value:()=>Vt,toTypedConfigInfo:()=>Me,toTypedRegistryInfo:()=>fe,token:()=>Pt,token_value:()=>$t,u16_value:()=>Rt,u32_value:()=>Dt,u64_value:()=>Lt,u8_value:()=>Mt,variadic_value:()=>Ot});module.exports=Wt(jt);var Ne=require("@joai/warps"),wt=()=>[Ne.WarpChainName.Multiversx,Ne.WarpChainName.Claws];var lt=require("@joai/warps");var S=require("@multiversx/sdk-core"),b=require("@joai/warps");var ne=require("@multiversx/sdk-core"),He=require("@joai/warps"),J=o=>!o.includes("-"),le=o=>J(o)?`${o}-000000`:o,v=(o,e,t)=>{let r="warp-sdk",s=t?(0,He.getProviderConfig)(t,o.name,e,o.defaultApiUrl):{url:o.defaultApiUrl},i=s.url,c={headers:s.headers};return e==="devnet"?new ne.DevnetEntrypoint({url:i,kind:"api",clientName:r,networkProviderConfig:c}):e==="testnet"?new ne.TestnetEntrypoint({url:i,kind:"api",clientName:r,networkProviderConfig:c}):new ne.MainnetEntrypoint({url:i,kind:"api",clientName:r,networkProviderConfig:c})};var Be=require("@joai/warps");var pe=class{constructor(e){this.config=e}async getContract(e,t){try{let s=await v(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}`);return{address:e,owner:s.ownerAddress,verified:s.isVerified||!1}}catch(r){return Be.WarpLogger.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(e,t){try{let s=await v(t,this.config.env,this.config).createNetworkProvider().doGetGeneric(`accounts/${e}/verification`);return{codeHash:s.codeHash,abi:s.source.abi}}catch(r){return Be.WarpLogger.error("WarpContractLoader: getVerificationInfo error",r),null}}};var a=require("@multiversx/sdk-core"),Qe=require("@joai/warps");var Ct=o=>o?typeof o=="string"?o:o.address:null,$e=(o,e)=>Ct(o.user?.wallets?.[e]||null);var Ge=(r=>(r.Macos="macos",r.Linux="linux",r.Windows="windows",r))(Ge||{}),ur=Object.values(Ge);var g={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:o=>$e(o.config,o.adapter.chainInfo.name)},UserWalletPublicKey:{Placeholder:"USER_WALLET_PUBLICKEY",Accessor:o=>{if(!o.adapter.wallet)return null;try{return o.adapter.wallet.getPublicKey()||null}catch{return null}}},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:o=>o.adapter.chainInfo.defaultApiUrl},ChainAddressHrp:{Placeholder:"CHAIN_ADDRESS_HRP",Accessor:o=>o.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 vt={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},w={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},ze=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(ze||{}),qe=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(qe||{}),Ue={multiversx:{mainnet:["multiversx_explorer"],testnet:["multiversx_explorer_testnet"],devnet:["multiversx_explorer_devnet"]},claws:{mainnet:["claws_explorer"],testnet:["claws_explorer_testnet"],devnet:["claws_explorer_devnet"]}},z={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 Tt=new RegExp(`${g.ArgParamsSeparator}(.*)`),L=class{constructor(e){this.coreSerializer=new Qe.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+g.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return u.Option+g.ArgParamsSeparator+r}if(t.hasExactClass(a.VariadicType.ClassName)||e.hasClassOrSuperclass(a.VariadicValue.ClassName)){let r=e.getItems();if(r.length===0){let h=this.typeToString(t.getFirstTypeParameter());return u.Vector+g.ArgParamsSeparator+h+g.ArgParamsSeparator}let n=r.map(h=>this.typedToString(h));if(n.every(h=>h.startsWith(u.Tuple)))return u.Vector+g.ArgParamsSeparator+n.join(",");let s=n[0],i=s.indexOf(g.ArgParamsSeparator),c=s.substring(0,i),l=n.map(h=>{let d=h.indexOf(g.ArgParamsSeparator);return h.substring(d+1)}),f=c.startsWith(u.Struct)?g.ArgStructSeparator:g.ArgListSeparator;return u.Vector+g.ArgParamsSeparator+c+g.ArgParamsSeparator+l.join(f)}if(t.hasExactClass(a.OptionalType.ClassName)||e.hasClassOrSuperclass(a.OptionalValue.ClassName)){if(!e.isSet())return w.Optional+g.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return w.Optional+g.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+g.ArgParamsSeparator+n.join(",");let i=n.map(l=>l.split(g.ArgParamsSeparator)[0])[0],c=n.map(l=>l.split(g.ArgParamsSeparator)[1]);return w.List+g.ArgParamsSeparator+i+g.ArgParamsSeparator+c.join(g.ArgListSeparator)}if(t.hasExactClass(a.CompositeType.ClassName)||e.hasClassOrSuperclass(a.CompositeValue.ClassName)){let n=e.getItems().map(s=>{let i=this.typedToString(s),c=i.indexOf(g.ArgParamsSeparator),l=i.substring(0,c),f=i.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+g.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.U8Type.ClassName)||e.hasClassOrSuperclass(a.U8Value.ClassName))return u.Uint8+g.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U16Type.ClassName)||e.hasClassOrSuperclass(a.U16Value.ClassName))return u.Uint16+g.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U32Type.ClassName)||e.hasClassOrSuperclass(a.U32Value.ClassName))return u.Uint32+g.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(a.U64Type.ClassName)||e.hasClassOrSuperclass(a.U64Value.ClassName))return u.Uint64+g.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(a.StringType.ClassName)||e.hasClassOrSuperclass(a.StringValue.ClassName))return u.String+g.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.BooleanType.ClassName)||e.hasClassOrSuperclass(a.BooleanValue.ClassName))return u.Bool+g.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.AddressType.ClassName)||e.hasClassOrSuperclass(a.AddressValue.ClassName))return u.Address+g.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(a.BytesType.ClassName)||e.hasClassOrSuperclass(a.BytesValue.ClassName))return u.Hex+g.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+g.ArgParamsSeparator+c+g.ArgCompositeSeparator+s}if(t.hasExactClass(a.StructType.ClassName)||e.hasClassOrSuperclass(a.Struct.ClassName)){let r=e,s=r.getType().getName(),i=r.getFields();if(i.length===0)return`${u.Struct}(${s})${g.ArgParamsSeparator}`;let c=i.map(l=>{let f=l.value.getType(),d=this.typedToString(l.value).split(g.ArgParamsSeparator),y=d.length>2?d.slice(2).join(g.ArgParamsSeparator):d[1]||"";return`(${l.name}${g.ArgParamsSeparator}${this.typeToString(f)})${y}`});return`${u.Struct}(${s})${g.ArgParamsSeparator}${c.join(g.ArgListSeparator)}`}if(t.hasExactClass(a.EnumType.ClassName)||e.hasClassOrSuperclass(a.EnumValue.ClassName)){let r=e;return`enum(${r.getType().getName()})${g.ArgParamsSeparator}${r.discriminant}`}if(t.hasExactClass(a.TokenIdentifierType.ClassName)||e.hasClassOrSuperclass(a.TokenIdentifierValue.ClassName))return w.Token+g.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(a.CodeMetadataType.ClassName)||e.hasClassOrSuperclass(a.CodeMetadataValue.ClassName))return w.CodeMeta+g.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.startsWith("enum")){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Enum type must include a name in the format enum(Name)");return new a.EnumType(t[1],[])}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(g.ArgParamsSeparator),s=r.substring(0,n),i=r.substring(n+1);if(s.startsWith(u.Tuple)){let d=i.split(",").map(y=>this.stringToTyped(y));return new a.VariadicValue(new a.VariadicType(this.nativeToType(s)),d)}if(i.includes("tuple(")){let h=this.splitTupleStrings(i),d=h.map(F=>this.stringToTyped(F)),A=h[0].match(/^(tuple\([^)]+\))/),W=A?A[1]:"tuple";return new a.VariadicValue(new a.VariadicType(this.nativeToType(W)),d)}let c=s.startsWith(u.Struct)?g.ArgStructSeparator:g.ArgListSeparator,f=i.split(c).map(h=>this.stringToTyped(`${s}:${h}`));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(","),i=[];for(let l=0;l<s.length;l+=2){let f=s[l],h=s[l+1];i.push(this.stringToTyped(`${f}:${h}`))}let c=i.map(l=>l.getType());return new a.CompositeValue(new a.CompositeType(...c),i)}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 i=r.split(g.ArgListSeparator),c=[],l=[];return i.forEach(f=>{let h=f.match(new RegExp(`^\\(([^${g.ArgParamsSeparator}]+)${g.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(h){let[,d,y,A]=h,W=this.stringToTyped(`${y}${g.ArgParamsSeparator}${A}`);c.push(new a.FieldDefinition(d,"",W.getType())),l.push(new a.Field(W,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(g.ArgCompositeSeparator),i=new a.TokenComputer,c=J(n)?le(n):i.extractIdentifierFromExtendedIdentifier(n),l=J(n)?0n:i.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(Tt,2),c=s.split(g.ArgListSeparator).map(l=>this.stringToTyped(n+g.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"))));if(t.startsWith("enum")){let n=t.match(/\(([^)]+)\)/),s=n?n[1]:"CustomEnum",i=Number(r);if(isNaN(i))throw new Error(`WarpArgSerializer (stringToTyped): Invalid enum discriminant: ${r}`);let c=new a.EnumVariantDefinition(r,i,[]),l=new a.EnumType(s,[c]);return new a.EnumValue(l,c,[])}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 i=e[s];if(i==="(")n++;else if(i===")")n--;else if(i===","&&n===0){t.push(r.trim()),r="";continue}r+=i}return r.trim()&&t.push(r.trim()),t}typeToString(e){if(e.hasExactClass(a.OptionType.ClassName))return u.Option+g.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.VariadicType.ClassName))return u.Vector+g.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+g.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(a.ListType.ClassName))return w.List+g.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()})`;if(e.hasExactClass(a.EnumType.ClassName))return`enum(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var H=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new pe(this.config),this.cache=new b.WarpCache(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=(0,b.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new S.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new S.TransferTransactionsFactory({config:r}),s=S.Address.newFromBech32(t),i={protocol:(0,b.getLatestProtocolIdentifier)("abi"),content:e},c=JSON.stringify(i),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,b.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=b.WarpCacheKey.WarpAbi(this.config.env,e);if(t){let i=this.cache.get(r);if(i)return b.WarpLogger.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${e}`),i}let s=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let i=await s.getTransaction(e),c=await this.createFromTransaction(i);return t&&t.ttl&&c&&this.cache.set(r,c,t.ttl),c}catch(i){return b.WarpLogger.error("WarpAbiBuilder: Error creating from transaction hash",i),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 S.AbiRegistry.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(b.WarpConstants.IdentifierType.Hash)){let t=e.abi.split(b.WarpConstants.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return S.AbiRegistry.create(r.content)}else{let r=await(await fetch(e.abi)).json();return S.AbiRegistry.create(r)}}endpointsToWarps(e,t,r){let n=new L,s=r?btoa(JSON.stringify(r)):void 0;return e.getEndpoints().map(i=>{let c=i.modifiers.isReadonly(),l=i.input.map((h,d)=>{let y={name:h.name,type:n.typeToString(h.type),position:`arg:${d+1}`,source:"field",required:!h.type.hasClassOrSuperclass(S.OptionalType.ClassName)&&!h.type.hasClassOrSuperclass(S.OptionType.ClassName)};if(h.type.hasExactClass(S.EnumType.ClassName)){let A=h.type;y.options=Object.fromEntries(A.variants.map(W=>[String(W.discriminant),W.name]))}return y}),f=c?{type:"query",label:i.name,address:t,func:i.name,args:[],abi:s,inputs:l}:{type:"contract",label:i.name,address:t,func:i.name,args:[],gasLimit:1e7,abi:s,inputs:l};return{protocol:(0,b.getLatestProtocolIdentifier)("warp"),name:i.name,title:i.name,description:null,chain:this.chain.name,actions:[f]}})}};var X=require("@multiversx/sdk-core"),q=require("@joai/warps"),je=require("buffer");var ue=class{constructor(e,t){this.config=e;this.chain=t;this.core=new q.WarpBrandBuilder(e)}async createInscriptionTransaction(e){let t=(0,q.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new X.TransactionsFactoryConfig({chainID:this.chain.chainId}),n=new X.TransferTransactionsFactory({config:r}),s=X.Address.newFromBech32(t),i=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(s,{receiver:X.Address.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(je.Buffer.from(i))})}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,q.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=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let n=await r.getTransaction(e);return this.createFromTransaction(n)}catch(n){return q.WarpLogger.error("BrandBuilder: Error creating from transaction hash",n),null}}};var Y=require("@multiversx/sdk-core"),V=require("@joai/warps");var me=class extends V.WarpBuilder{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new V.WarpCache(t.env,t.cache),this.core=new V.WarpBuilder(t)}async createInscriptionTransaction(t){let r=(0,V.getWarpWalletAddressFromConfig)(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new Y.TransactionsFactoryConfig({chainID:this.chain.chainId}),s=new Y.TransferTransactionsFactory({config:n}),i=Y.Address.newFromBech32(r),c=JSON.stringify(t),l=await s.createTransactionForTransfer(i,{receiver:Y.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,V.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=V.WarpCacheKey.Warp(this.config.env,t);if(r){let c=this.cache.get(n);if(c)return V.WarpLogger.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),c}let i=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await i.getTransaction(t),l=await this.createFromTransaction(c);return r&&r.ttl&&l&&this.cache.set(n,l,r.ttl),l}catch(c){return V.WarpLogger.error("WarpBuilder: Error creating from transaction hash",c),null}}};var Q=require("@multiversx/sdk-core"),ae=require("@joai/warps");var Fe=require("@joai/warps");var Xe=require("@joai/warps"),Je=Xe.WarpChainName.Multiversx,Ye=[{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"),B=Ze.WarpChainName.Multiversx,et=[{chain:B,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:B,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:B,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:B,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:B,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:B,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:B,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:B,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:B,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:B,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:B,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:B,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:B,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:B,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:B,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];var rt=require("@joai/warps"),tt=rt.WarpChainName.Multiversx,nt=[{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"}];var st=require("@joai/warps"),at=st.WarpChainName.Claws,Ee=[{chain:at,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:at,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Oe={[Fe.WarpChainName.Multiversx]:{mainnet:et,testnet:nt,devnet:Ye},[Fe.WarpChainName.Claws]:{mainnet:Ee,testnet:Ee,devnet:Ee}},ke=(o,e,t)=>(Oe[o]?.[e]||[]).find(n=>n.identifier===t)||null,xt=(o,e)=>Oe[o]?.[e]||[];var de=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new ae.WarpCache(e.env,e.cache)}async getAccount(e){let r=await v(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(Q.Address.newFromBech32(e));return{chain:this.chain.name,address:r.address.toBech32(),balance:r.balance}}async getAccountAssets(e){let t=v(this.chain,this.config.env,this.config).createNetworkProvider(),r=t.getAccount(Q.Address.newFromBech32(e)),n=t.getFungibleTokensOfAccount(Q.Address.newFromBech32(e)),[s,i]=await Promise.all([r,n]),c=s.balance>0?[{...this.chain.nativeToken,amount:s.balance}]:[];return c.push(...i.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=ae.WarpCacheKey.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=ke(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 Q.TokenComputer,i=J(e)?0n:s.extractNonceFromExtendedIdentifier(e),c=new Q.Token({identifier:e,nonce:BigInt(i||0)}),l=s.isFungible(c),f=v(this.chain,this.config.env,this.config).createNetworkProvider(),h=le(e),d=await f.doGetGeneric(`tokens/${h}`),y={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,y,ae.CacheTtl.OneHour),y}async getAction(e,t=!1){let r=v(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=v(this.chain,this.config.env,this.config).createNetworkProvider(),n=`accounts/${e}/transactions`,s=new URLSearchParams,i=t?.size||25,c=t?.page||0;if(c>0){let f=c*i;s.append("from",f.toString())}return i!==25&&s.append("size",i.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 T=require("@multiversx/sdk-core"),M=require("@joai/warps");var C=require("@joai/warps"),se=require("@multiversx/sdk-core");var Z=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new H(e,t),this.serializer=new L({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),i=(0,C.applyOutputToMessages)(e,s.output,this.config),c=(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:null,values:s.values,output:s.output,messages:i,destination:null,resolvedInputs:c}}async extractContractOutput(e,t,r,n){let s=(0,C.getWarpActionByIndex)(e,t),i=[],c=[],l={};if(!e.output||s.type!=="contract")return{values:{string:i,native:c,mapped:{}},output:l};let f=r.hash,h=x=>{l[x]=f,i.push(String(f)),c.push(f)};if(!Object.values(e.output).some(x=>x.startsWith("event.")||x.startsWith("out.")||x.startsWith("out["))){for(let[x,k]of Object.entries(e.output))if(!k.startsWith(C.WarpConstants.Transform.Prefix)){if(k==="out"){h(x);continue}l[x]=k}return{values:{string:i,native:c,mapped:{}},output:await(0,C.evaluateOutputCommon)(e,l,c,t,n,this.serializer.coreSerializer,this.config)}}let y=await this.abi.getAbiForAction(s),A=new se.TransactionEventsParser({abi:y}),W=new se.SmartContractTransactionsOutcomeParser({abi:y}),F=null,O=!1,G=()=>(O||(O=!0,F=W.parseExecute({transactionOnNetwork:r,function:s.func||void 0})),F);for(let[x,k]of Object.entries(e.output)){if(k.startsWith(C.WarpConstants.Transform.Prefix))continue;if(k.startsWith("input.")){l[x]=k;continue}if(k==="out"){h(x);continue}let j=(0,C.parseOutputOutIndex)(k);if(j!==null&&j!==t){l[x]=null;continue}let[P,Te,xe,Ke]=k.split(".");if(P==="event"){if(!Te||isNaN(Number(xe)))continue;let Se=Number(xe),Ie=(0,se.findEventsByFirstTopic)(r,Te),E=A.parseEvents({events:Ie})[0];if(!E||typeof E!="object"){l[x]=null;continue}let N=Object.values(E)[Se]||null;N&&Ke&&typeof N=="object"&&(N=N[Ke]??null),N&&typeof N=="object"&&(N="toFixed"in N?N.toFixed():N.valueOf()),i.push(String(N)),c.push(N),l[x]=N&&N.valueOf()}else if(P==="out"||P.startsWith("out[")){if(!Te)continue;let Se=G(),Ie=Number(Te),E=Se.values[Ie-1]||null;xe&&(E=E[xe]||null),E&&typeof E=="object"&&(E="toFixed"in E?E.toFixed():E.valueOf()),i.push(String(E)),c.push(E),l[x]=E&&E.valueOf()}else l[x]=k}return{values:{string:i,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(h=>this.serializer.typedToString(h)),i=t.map(h=>this.serializer.typedToNative(h)[1]),c={string:s,native:i,mapped:{}},l={};if(!e.output)return{values:c,output:l};let f=h=>{let d=h.split(".").slice(1).map(A=>parseInt(A)-1);if(d.length===0)return;let y=i[d[0]];for(let A=1;A<d.length;A++){if(y==null)return;y=y[d[A]]}return y};for(let[h,d]of Object.entries(e.output)){if(d.startsWith(C.WarpConstants.Transform.Prefix))continue;let y=(0,C.parseOutputOutIndex)(d);if(y!==null&&y!==r){l[h]=null;continue}d.startsWith("out.")||d==="out"||d.startsWith("out[")?l[h]=f(d)||null:l[h]=d}return l=await(0,C.evaluateOutputCommon)(e,l,i,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,i=e.meta,c=new Map,l=new Set,f=this;async function h(W,F=[]){if(c.has(W))return c.get(W);if(l.has(W))throw new Error(`Circular dependency detected at action ${W}`);l.add(W);let O=t.actions[W-1];if(!O)throw new Error(`Action ${W} not found`);let G;if(O.type==="query")G=await n.executeQuery(t,W,F);else if(O.type==="collect")G=await n.executeCollect(t,W,F,i);else throw new Error(`Unsupported or interactive action type: ${O.type}`);if(c.set(W,G),t.output)for(let x of Object.values(t.output)){let j=String(x).match(/^out\[(\d+)\]/);if(j){let P=parseInt(j[1],10);P!==W&&!c.has(P)&&await h(P)}}return l.delete(W),G}await h(r,s);let d={};for(let W of c.values())for(let[F,O]of Object.entries(W.output))O!==null?d[F]=O:F in d||(d[F]=null);let y=await(0,C.evaluateOutputCommon)(t,d,d,r,s,this.serializer.coreSerializer,this.config);return{...c.get(r),action:r,output:y}}};var At="EGLD-000000",he=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new L({typeRegistry:this.typeRegistry}),this.abi=new H(this.config,this.chain),this.output=new Z(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=(0,M.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,M.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=T.Address.newFromBech32(t),n=new T.TransactionsFactoryConfig({chainID:e.chain.chainId}),s=e.data?Buffer.from(this.serializer.stringToTyped(e.data).valueOf()):null,i=e.transfers.length===1&&e.transfers[0].identifier===this.chain.nativeToken?.identifier,l=(i?e.transfers[0].amount:0n)+e.value;return await new T.TransferTransactionsFactory({config:n}).createTransactionForTransfer(r,{receiver:T.Address.newFromBech32(e.destination),nativeAmount:l,tokenTransfers:i?[]: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,M.getWarpWalletAddressFromConfig)(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=(0,M.getWarpActionByIndex)(e.warp,e.action),n=T.Address.newFromBech32(t),s=e.args.map(c=>this.serializer.stringToTyped(c)),i=new T.TransactionsFactoryConfig({chainID:e.chain.chainId});return new T.SmartContractTransactionsFactory({config:i}).createTransactionForExecute(n,{contract:T.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,M.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(P=>this.serializer.stringToTyped(P)),s=v(e.chain,this.config.env,this.config),i=T.Address.newFromBech32(e.destination),c=s.createSmartContractController(r),l=c.createQuery({contract:i,function:t.func||"",arguments:n}),f=await c.runQuery(l),h=f.returnCode==="ok",d=new T.ArgSerializer,y=r.getEndpoint(f.function||t.func||""),A=(f.returnDataParts||[]).map(P=>Buffer.from(P)),W=d.buffersToValues(A,y.output),{values:F,output:O}=await this.output.extractQueryOutput(e.warp,W,e.action,e.resolvedInputs),G=(0,M.getNextInfo)(this.config,[],e.warp,e.action,O),k=e.resolvedInputs.find(P=>P.input.position==="receiver"||P.input.position==="destination")?.value||e.destination,j=(0,M.extractResolvedInputValues)(e.resolvedInputs);return{status:h?"success":"error",warp:e.warp,action:e.action,user:(0,M.getWarpWalletAddressFromConfig)(this.config,e.chain.name),txHash:null,tx:null,next:G,values:F,output:{...O,_DATA:W},messages:(0,M.applyOutputToMessages)(e.warp,O,this.config),destination:k,resolvedInputs:j}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:At}:t).map(t=>{let n=new T.TokenComputer().extractNonceFromExtendedIdentifier(t.identifier);return new T.TokenTransfer({token:new T.Token({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var ge=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=Ue[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=z[t];if(s)return s}if(e){let s=z[e];if(s)return s}let r=this.getPrimaryExplorer();return z[r]||z[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=z[n];s&&(r[n]=`${s}/accounts/${e}`)}),r}getTransactionUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let s=z[n];s&&(r[n]=`${s}/transactions/${e}`)}),r}};var m=require("@multiversx/sdk-core"),R=require("@joai/warps");var Ve={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 U=o=>{if(o==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(o==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var fe=o=>({hash:o.hash.toString("hex"),alias:o.alias?.toString()||null,trust:o.trust.toString(),owner:o.owner.toString(),createdAt:o.created_at.toNumber(),upgradedAt:o.upgraded_at?.toNumber(),brand:o.brand?.toString("hex")||null,upgrade:o.upgrade?.toString("hex")||null}),Me=o=>({unitPrice:BigInt(o.unit_price.toString()),admins:o.admins.map(e=>e.toBech32())});var ye=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new R.WarpCache(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=(0,R.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,i=()=>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(U(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:s(),arguments:i()})}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(U(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(U(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(U(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(U(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(U(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(U(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(U(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=R.WarpCacheKey.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return R.WarpLogger.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let s=m.Address.newFromBech32(U(this.config.env)),i=this.getController(),c=i.createQuery({contract:s,function:"getInfoByAlias",arguments:[m.BytesValue.fromUTF8(e)]}),l=await i.runQuery(c),[f]=i.parseQueryResponse(l),h=f?fe(f):null,d=h?.brand?await this.fetchBrand(h.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:h,brand:d},t.ttl),{registryInfo:h,brand:d}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=R.WarpCacheKey.RegistryInfo(this.config.env,e);if(t){let d=this.cache.get(r);if(d)return R.WarpLogger.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),d}let n=m.Address.newFromBech32(U(this.config.env)),s=this.getController(),i=s.createQuery({contract:n,function:"getInfoByHash",arguments:[m.BytesValue.fromHex(e)]}),c=await s.runQuery(i),[l]=s.parseQueryResponse(c),f=l?fe(l):null,h=f?.brand?await this.fetchBrand(f.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:f,brand:h},t.ttl),{registryInfo:f,brand:h}}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(U(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserWarps",arguments:[new m.AddressValue(new m.Address(t))]}),i=await n.runQuery(s),[c]=n.parseQueryResponse(i);return c.map(fe)}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(U(this.config.env)),n=this.getController(),s=n.createQuery({contract:r,function:"getUserBrands",arguments:[new m.AddressValue(new m.Address(t))]}),i=await n.runQuery(s),[c]=n.parseQueryResponse(i),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=R.WarpCacheKey.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return R.WarpLogger.info(`WarpRegistry (fetchBrand): Brand found in cache: ${e}`),n;let i=v(this.chain,this.config.env,this.config).createNetworkProvider();try{let c=await i.getTransaction(e),l=JSON.parse(c.data.toString());return l.meta={query:null,chain:this.chain.name,identifier:(0,R.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(U(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Me(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new m.TransactionsFactoryConfig({chainID:this.chain.chainId}),t=m.AbiRegistry.create(Ve);return new m.SmartContractTransactionsFactory({config:e,abi:t})}getController(){let e=v(this.chain,this.config.env,this.config),t=m.AbiRegistry.create(Ve);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var oe=require("@joai/warps"),ct=require("@multiversx/sdk-core");var K=require("@multiversx/sdk-core"),it=yt(require("@scure/bip39"),1),ot=require("@scure/bip39/wordlists/english.js"),I=require("@joai/warps"),ee=class ee{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,I.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 t=(0,I.normalizeAndValidateMnemonic)(e),n=K.Mnemonic.fromString(t).deriveKey(0),s=n.hex(),c=n.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),l={provider:ee.PROVIDER_NAME,address:c,privateKey:s,mnemonic:t};return(0,I.setWarpWalletInConfig)(this.config,this.chain.name,l),l}async importFromPrivateKey(e){let t=K.UserSecretKey.fromString(e),r=t.hex(),s=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),i={provider:ee.PROVIDER_NAME,address:s,privateKey:r,mnemonic:null};return(0,I.setWarpWalletInConfig)(this.config,this.chain.name,i),i}async export(){let e=this.getAccount(),t=(0,I.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name),r=(0,I.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);return{provider:ee.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=it.generateMnemonic(ot.wordlist,256),t=(0,I.normalizeMnemonic)(e);(0,I.validateMnemonicLength)(t);let i=K.Mnemonic.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:ee.PROVIDER_NAME,address:i,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=(0,I.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=K.Mnemonic.fromString(e).deriveKey(0);return this.account=new K.Account(r,this.chain.addressHrp),this.account}};ee.PROVIDER_NAME="mnemonic";var We=ee;var D=require("@multiversx/sdk-core"),_=require("@joai/warps"),te=class te{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=(0,_.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 D.Message({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=D.Mnemonic.fromString(e).deriveKey(0),n=r.hex(),i=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:te.PROVIDER_NAME,address:i,privateKey:n,mnemonic:e};return(0,_.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let r=e.startsWith("-----")?D.UserSecretKey.fromPem(e):D.UserSecretKey.fromString(e),n=r.hex(),i=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:te.PROVIDER_NAME,address:i,privateKey:n,mnemonic:null};return(0,_.setWarpWalletInConfig)(this.config,this.chain.name,c),c}async export(){let e=this.getAccount(),t=(0,_.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name),r=(0,_.getWarpWalletMnemonicFromConfig)(this.config,this.chain.name);return{provider:te.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=D.UserSecretKey.generate(),t=e.hex(),n=e.generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:te.PROVIDER_NAME,address:n,privateKey:t,mnemonic:null}}getAccount(){if(this.account)return this.account;let e=(0,_.getWarpWalletPrivateKeyFromConfig)(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?D.UserSecretKey.fromPem(e):D.UserSecretKey.fromString(e);return this.account=new D.Account(r,this.chain.addressHrp),this.account}};te.PROVIDER_NAME="privateKey";var we=te;var ie=require("@joai/warps"),re=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return(0,ie.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,ie.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=(0,ie.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=(0,ie.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=(0,ie.getWarpWalletAddressFromConfig)(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var Ce=class{constructor(e,t){this.config=e;this.chain=t;this.cachedAddress=null;this.cachedPublicKey=null;this.entry=v(t,e.env,e),this.cache=new oe.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 re)throw new Error(`Wallet (${this.chain.name}) is read-only`);if(this.walletProvider instanceof we||this.walletProvider instanceof We){let n=this.walletProvider.getAccountInstance();if(t.nonce===0n){let s=await this.entry.recallAccountNonce(n.address),i=this.cache.get(`nonce:${n.address.toBech32()}`)||0,c=BigInt(Math.max(i,Number(s)));t.nonce=c}}else if(t.nonce===0n&&this.cachedAddress){let n=ct.Address.newFromBech32(this.cachedAddress),s=await this.entry.recallAccountNonce(n),i=this.cache.get(`nonce:${this.cachedAddress}`)||0,c=BigInt(Math.max(i,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 re)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,oe.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 re(this.config,this.chain):e.provider?this.createProviderForOperation(e.provider):new re(this.config,this.chain):null}initializeCache(){(0,oe.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 We(this.config,this.chain);throw new Error(`Unsupported wallet provider for ${this.chain.name}: ${e}`)}};var ve=(o,e)=>(t,r)=>{let n=e[t.env],s=new lt.WarpTypeRegistry;return s.registerType("token",{stringToNative:i=>i,nativeToString:i=>`token:${i}`}),s.registerType("codemeta",{stringToNative:i=>i,nativeToString:i=>`codemeta:${i}`}),s.registerTypeAlias("list","vector"),{chainInfo:n,builder:()=>new me(t,n),executor:new he(t,n,s),output:new Z(t,n,s),serializer:new L({typeRegistry:s}),registry:new ye(t,n),explorer:new ge(o,t),abiBuilder:()=>new H(t,n),brandBuilder:()=>new ue(t,n),dataLoader:new de(t,n),wallet:new Ce(t,n)}};var ce=require("@joai/warps");var be={chain:ce.WarpChainName.Multiversx,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/egld.svg"},Re=ve(ce.WarpChainName.Multiversx,{mainnet:{name:ce.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:be},testnet:{name:ce.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:be},devnet:{name:ce.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:be}});var Pe=require("@joai/warps");var pt={chain:Pe.WarpChainName.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},De={name:Pe.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:pt,minGasPrice:20000000000000n},Le=ve(Pe.WarpChainName.Claws,{mainnet:De,testnet:De,devnet:De});var bt=()=>[Re,Le];var $=require("@joai/warps");var Pt=o=>new $.WarpSerializer().nativeToString(w.Token,o),St=o=>new $.WarpSerializer().nativeToString(w.CodeMeta,o),It=(o,e)=>{if(e===null)return w.Optional+$.WarpConstants.ArgParamsSeparator;let t=o(e),r=t.indexOf($.WarpConstants.ArgParamsSeparator),n=t.substring(0,r),s=t.substring(r+1);return w.Optional+$.WarpConstants.ArgParamsSeparator+n+$.WarpConstants.ArgParamsSeparator+s},Nt=o=>new $.WarpSerializer().nativeToString(w.List,o);var p=require("@multiversx/sdk-core"),Bt=(o,e)=>o?p.OptionValue.newProvided(o):e?p.OptionValue.newMissingTyped(e):p.OptionValue.newMissing(),Ut=(o,e)=>o?new p.OptionalValue(o.getType(),o):e?new p.OptionalValue(e):p.OptionalValue.newMissing(),Ft=o=>{if(o.length===0)throw new Error("Cannot create a list from an empty array");let e=o[0].getType();return new p.List(e,o)},Ot=o=>p.VariadicValue.fromItems(...o),kt=o=>{let e=o.map(t=>t.getType());return new p.CompositeValue(new p.CompositeType(...e),o)},Vt=o=>p.StringValue.fromUTF8(o),Mt=o=>new p.U8Value(o),Rt=o=>new p.U16Value(o),Dt=o=>new p.U32Value(o),Lt=o=>new p.U64Value(o),Kt=o=>new p.BigUIntValue(BigInt(o)),_t=o=>new p.BooleanValue(o),Ht=o=>new p.AddressValue(p.Address.newFromBech32(o)),$t=o=>new p.TokenIdentifierValue(o),Gt=o=>p.BytesValue.fromHex(o),zt=o=>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(o.token.identifier),"token_identifier"),new p.Field(new p.U64Value(BigInt(o.token.nonce)),"token_nonce"),new p.Field(new p.BigUIntValue(BigInt(o.amount)),"amount")]),qt=o=>new p.CodeMetadataValue(p.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(o,"hex")))),Qt=()=>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 Xe}from"@joai/warps";var Xn=()=>[Xe.Multiversx,Xe.Claws];import{WarpTypeRegistry as Sn}from"@joai/warps";import{AbiRegistry as Fe,Address as ir,EnumType as or,OptionalType as cr,OptionType as lr,TransactionsFactoryConfig as pr,TransferTransactionsFactory as ur}from"@multiversx/sdk-core";import{createWarpIdentifier as mr,getLatestProtocolIdentifier as ft,getWarpWalletAddressFromConfig as dr,WarpCache as hr,WarpCacheKey as gr,WarpConstants as yt,WarpLogger as Wt}from"@joai/warps";import{DevnetEntrypoint as qt,MainnetEntrypoint as Qt,TestnetEntrypoint as jt}from"@multiversx/sdk-core";import{getProviderConfig as Jt}from"@joai/warps";var D=i=>!i.includes("-"),j=i=>D(i)?`${i}-000000`:i,w=(i,e,t)=>{let r="warp-sdk",a=t?Jt(t,i.name,e,i.defaultApiUrl):{url:i.defaultApiUrl},s=a.url,o={headers:a.headers};return e==="devnet"?new qt({url:s,kind:"api",clientName:r,networkProviderConfig:o}):e==="testnet"?new jt({url:s,kind:"api",clientName:r,networkProviderConfig:o}):new Qt({url:s,kind:"api",clientName:r,networkProviderConfig:o})};import{WarpLogger as Ye}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 Ye.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 Ye.error("WarpContractLoader: getVerificationInfo error",r),null}}};import{Address as er,AddressType as we,AddressValue as tt,BigUIntType as X,BigUIntValue as Ce,BooleanType as ve,BooleanValue as rt,BytesType as Te,BytesValue as nt,CodeMetadata as tr,CodeMetadataType as xe,CodeMetadataValue as at,CompositeType as Ae,CompositeValue as st,EnumType as Y,EnumValue as it,EnumVariantDefinition as rr,Field as Z,FieldDefinition as ee,List as ot,ListType as ct,NothingValue as S,OptionalType as lt,OptionalValue as Ee,OptionType as pt,OptionValue as be,StringType as Pe,StringValue as ut,Struct as te,StructType as k,Token as nr,TokenComputer as mt,TokenIdentifierType as re,TokenIdentifierValue as Se,U16Type as Ie,U16Value as dt,U32Type as Ne,U32Value as ht,U64Type as ne,U64Value as Be,U8Type as Ue,U8Value as gt,VariadicType as _,VariadicValue as ae}from"@multiversx/sdk-core";import{WarpSerializer as ar}from"@joai/warps";var Xt=i=>i?typeof i=="string"?i:i.address:null,Ze=(i,e)=>Xt(i.user?.wallets?.[e]||null);var m={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>Ze(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 fa={Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}},f={Null:"null",Optional:"optional",List:"list",Token:"token",CodeMeta:"codemeta"},Yt=(r=>(r.MultiversxExplorer="multiversx_explorer",r.MultiversxExplorerDevnet="multiversx_explorer_devnet",r.MultiversxExplorerTestnet="multiversx_explorer_testnet",r))(Yt||{}),Zt=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(Zt||{}),et={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 sr=new RegExp(`${m.ArgParamsSeparator}(.*)`),N=class{constructor(e){this.coreSerializer=new ar(e)}typedToString(e){let t=e.getType();if(t.hasExactClass(pt.ClassName)||e.hasClassOrSuperclass(be.ClassName)){if(!e.isSet())return l.Option+m.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return l.Option+m.ArgParamsSeparator+r}if(t.hasExactClass(_.ClassName)||e.hasClassOrSuperclass(ae.ClassName)){let r=e.getItems();if(r.length===0){let u=this.typeToString(t.getFirstTypeParameter());return l.Vector+m.ArgParamsSeparator+u+m.ArgParamsSeparator}let n=r.map(u=>this.typedToString(u));if(n.every(u=>u.startsWith(l.Tuple)))return l.Vector+m.ArgParamsSeparator+n.join(",");let a=n[0],s=a.indexOf(m.ArgParamsSeparator),o=a.substring(0,s),c=n.map(u=>{let p=u.indexOf(m.ArgParamsSeparator);return u.substring(p+1)}),d=o.startsWith(l.Struct)?m.ArgStructSeparator:m.ArgListSeparator;return l.Vector+m.ArgParamsSeparator+o+m.ArgParamsSeparator+c.join(d)}if(t.hasExactClass(lt.ClassName)||e.hasClassOrSuperclass(Ee.ClassName)){if(!e.isSet())return f.Optional+m.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return f.Optional+m.ArgParamsSeparator+r}if(t.hasExactClass(ct.ClassName)||e.hasClassOrSuperclass(ot.ClassName)){let n=e.getItems().map(c=>this.typedToString(c));if(n.every(c=>c.startsWith(l.Tuple)))return f.List+m.ArgParamsSeparator+n.join(",");let s=n.map(c=>c.split(m.ArgParamsSeparator)[0])[0],o=n.map(c=>c.split(m.ArgParamsSeparator)[1]);return f.List+m.ArgParamsSeparator+s+m.ArgParamsSeparator+o.join(m.ArgListSeparator)}if(t.hasExactClass(Ae.ClassName)||e.hasClassOrSuperclass(st.ClassName)){let n=e.getItems().map(a=>{let s=this.typedToString(a),o=s.indexOf(m.ArgParamsSeparator),c=s.substring(0,o),d=s.substring(o+1);return`${c},${d}`});return`${l.Tuple}(${n.join(",")})`}if(t.hasExactClass(X.ClassName)||e.hasClassOrSuperclass(Ce.ClassName)||t.getName()==="BigUint")return l.Biguint+m.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Ue.ClassName)||e.hasClassOrSuperclass(gt.ClassName))return l.Uint8+m.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Ie.ClassName)||e.hasClassOrSuperclass(dt.ClassName))return l.Uint16+m.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Ne.ClassName)||e.hasClassOrSuperclass(ht.ClassName))return l.Uint32+m.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(ne.ClassName)||e.hasClassOrSuperclass(Be.ClassName))return l.Uint64+m.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Pe.ClassName)||e.hasClassOrSuperclass(ut.ClassName))return l.String+m.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(ve.ClassName)||e.hasClassOrSuperclass(rt.ClassName))return l.Bool+m.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(we.ClassName)||e.hasClassOrSuperclass(tt.ClassName))return l.Address+m.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(Te.ClassName)||e.hasClassOrSuperclass(nt.ClassName))return l.Hex+m.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 mt().computeExtendedIdentifier(new nr({identifier:r,nonce:BigInt(n)}));return l.Asset+m.ArgParamsSeparator+o+m.ArgCompositeSeparator+a}if(t.hasExactClass(k.ClassName)||e.hasClassOrSuperclass(te.ClassName)){let r=e,a=r.getType().getName(),s=r.getFields();if(s.length===0)return`${l.Struct}(${a})${m.ArgParamsSeparator}`;let o=s.map(c=>{let d=c.value.getType(),p=this.typedToString(c.value).split(m.ArgParamsSeparator),g=p.length>2?p.slice(2).join(m.ArgParamsSeparator):p[1]||"";return`(${c.name}${m.ArgParamsSeparator}${this.typeToString(d)})${g}`});return`${l.Struct}(${a})${m.ArgParamsSeparator}${o.join(m.ArgListSeparator)}`}if(t.hasExactClass(Y.ClassName)||e.hasClassOrSuperclass(it.ClassName)){let r=e;return`enum(${r.getType().getName()})${m.ArgParamsSeparator}${r.discriminant}`}if(t.hasExactClass(re.ClassName)||e.hasClassOrSuperclass(Se.ClassName))return f.Token+m.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(xe.ClassName)||e.hasClassOrSuperclass(at.ClassName))return f.CodeMeta+m.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 Ae(...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 Pe;if(e===l.Uint8)return new Ue;if(e===l.Uint16)return new Ie;if(e===l.Uint32)return new Ne;if(e===l.Uint64)return new ne;if(e===l.Biguint)return new X;if(e===l.Bool)return new ve;if(e===l.Address)return new we;if(e===l.Hex)return new Te;if(e===l.Asset)return new k("EsdtTokenPayment",[new ee("token_identifier","",new re),new ee("token_nonce","",new ne),new ee("amount","",new X)]);if(e.startsWith("enum")){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Enum type must include a name in the format enum(Name)");return new Y(t[1],[])}if(e===f.Token)return new re;if(e===f.CodeMeta)return new xe;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 S?be.newMissingTyped(n.getType()):be.newProvided(n)}if(t===l.Vector){let n=r.indexOf(m.ArgParamsSeparator),a=r.substring(0,n),s=r.substring(n+1);if(a.startsWith(l.Tuple)){let p=s.split(",").map(g=>this.stringToTyped(g));return new ae(new _(this.nativeToType(a)),p)}if(s.includes("tuple(")){let u=this.splitTupleStrings(s),p=u.map(I=>this.stringToTyped(I)),v=u[0].match(/^(tuple\([^)]+\))/),h=v?v[1]:"tuple";return new ae(new _(this.nativeToType(h)),p)}let o=a.startsWith(l.Struct)?m.ArgStructSeparator:m.ArgListSeparator,d=s.split(o).map(u=>this.stringToTyped(`${a}:${u}`));return new ae(new _(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],u=a[c+1];s.push(this.stringToTyped(`${d}:${u}`))}let o=s.map(c=>c.getType());return new st(new Ae(...o),s)}if(t.startsWith(l.Struct)){let n=t.match(/\(([^)]+)\)/),a=n?n[1]:"CustomStruct";if(!r)return new te(new k(a,[]),[]);let s=r.split(m.ArgListSeparator),o=[],c=[];return s.forEach(d=>{let u=d.match(new RegExp(`^\\(([^${m.ArgParamsSeparator}]+)${m.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(u){let[,p,g,v]=u,h=this.stringToTyped(`${g}${m.ArgParamsSeparator}${v}`);o.push(new ee(p,"",h.getType())),c.push(new Z(h,p))}}),new te(new k(a,o),c)}if(t===l.String)return r?ut.fromUTF8(r):new S;if(t===l.Uint8)return r?new gt(Number(r)):new S;if(t===l.Uint16)return r?new dt(Number(r)):new S;if(t===l.Uint32)return r?new ht(Number(r)):new S;if(t===l.Uint64)return r?new Be(BigInt(r)):new S;if(t===l.Biguint)return r?new Ce(BigInt(r)):new S;if(t===l.Bool)return r?new rt(typeof r=="boolean"?r:r==="true"):new S;if(t===l.Address)return r?new tt(er.newFromBech32(r)):new S;if(t===l.Hex)return r?nt.fromHex(r):new S;if(t===l.Asset){let[n,a]=r.split(m.ArgCompositeSeparator),s=new mt,o=D(n)?j(n):s.extractIdentifierFromExtendedIdentifier(n),c=D(n)?0n:s.extractNonceFromExtendedIdentifier(n);return new te(this.nativeToType("asset"),[new Z(new Se(o),"token_identifier"),new Z(new Be(BigInt(c)),"token_nonce"),new Z(new Ce(BigInt(a)),"amount")])}if(t===f.Null)return new S;if(t===f.Optional){let n=this.stringToTyped(r);return n instanceof S?Ee.newMissing():new Ee(n.getType(),n)}if(t===f.List){let[n,a]=r.split(sr,2),o=a.split(m.ArgListSeparator).map(c=>this.stringToTyped(n+m.ArgParamsSeparator+c));return new ot(this.nativeToType(n),o)}if(t===f.Token)return r?new Se(r):new S;if(t===f.CodeMeta)return new at(tr.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(t.startsWith("enum")){let n=t.match(/\(([^)]+)\)/),a=n?n[1]:"CustomEnum",s=Number(r);if(isNaN(s))throw new Error(`WarpArgSerializer (stringToTyped): Invalid enum discriminant: ${r}`);let o=new rr(r,s,[]),c=new Y(a,[o]);return new it(c,o,[])}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(pt.ClassName))return l.Option+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(_.ClassName))return l.Vector+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Pe.ClassName))return l.String;if(e.hasExactClass(Ue.ClassName))return l.Uint8;if(e.hasExactClass(Ie.ClassName))return l.Uint16;if(e.hasExactClass(Ne.ClassName))return l.Uint32;if(e.hasExactClass(ne.ClassName))return l.Uint64;if(e.hasExactClass(X.ClassName))return l.Biguint;if(e.hasExactClass(ve.ClassName))return l.Bool;if(e.hasExactClass(we.ClassName))return l.Address;if(e.hasExactClass(Te.ClassName))return l.Hex;if(e.hasExactClass(re.ClassName))return f.Token;if(e.hasExactClass(lt.ClassName))return f.Optional+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(ct.ClassName))return f.List+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(xe.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()})`;if(e.hasExactClass(Y.ClassName))return`enum(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var U=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new J(this.config),this.cache=new hr(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=dr(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new pr({chainID:this.chain.chainId}),n=new ur({config:r}),a=ir.newFromBech32(t),s={protocol:ft("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:mr(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=gr.WarpAbi(this.config.env,e);if(t){let s=this.cache.get(r);if(s)return Wt.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 Wt.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(yt.IdentifierType.Hash)){let t=e.abi.split(yt.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)}}endpointsToWarps(e,t,r){let n=new N,a=r?btoa(JSON.stringify(r)):void 0;return e.getEndpoints().map(s=>{let o=s.modifiers.isReadonly(),c=s.input.map((u,p)=>{let g={name:u.name,type:n.typeToString(u.type),position:`arg:${p+1}`,source:"field",required:!u.type.hasClassOrSuperclass(cr.ClassName)&&!u.type.hasClassOrSuperclass(lr.ClassName)};if(u.type.hasExactClass(or.ClassName)){let v=u.type;g.options=Object.fromEntries(v.variants.map(h=>[String(h.discriminant),h.name]))}return g}),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:ft("warp"),name:s.name,title:s.name,description:null,chain:this.chain.name,actions:[d]}})}};import{Address as wt,TransactionsFactoryConfig as fr,TransferTransactionsFactory as yr}from"@multiversx/sdk-core";import{createWarpIdentifier as Wr,getWarpWalletAddressFromConfig as wr,WarpBrandBuilder as Cr,WarpLogger as vr}from"@joai/warps";import{Buffer as Tr}from"buffer";var se=class{constructor(e,t){this.config=e;this.chain=t;this.core=new Cr(e)}async createInscriptionTransaction(e){let t=wr(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new fr({chainID:this.chain.chainId}),n=new yr({config:r}),a=wt.newFromBech32(t),s=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(a,{receiver:wt.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(Tr.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:Wr(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 vr.error("BrandBuilder: Error creating from transaction hash",n),null}}};import{Address as Ct,TransactionsFactoryConfig as xr,TransferTransactionsFactory as Ar}from"@multiversx/sdk-core";import{createWarpIdentifier as Er,getWarpWalletAddressFromConfig as br,WarpBuilder as vt,WarpCache as Pr,WarpCacheKey as Sr,WarpLogger as Tt}from"@joai/warps";var ie=class extends vt{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new Pr(t.env,t.cache),this.core=new vt(t)}async createInscriptionTransaction(t){let r=br(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new xr({chainID:this.chain.chainId}),a=new Ar({config:n}),s=Ct.newFromBech32(r),o=JSON.stringify(t),c=await a.createTransactionForTransfer(s,{receiver:Ct.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:Er(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=Sr.Warp(this.config.env,t);if(r){let o=this.cache.get(n);if(o)return Tt.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 Tt.error("WarpBuilder: Error creating from transaction hash",o),null}}};import{Address as ke,Token as Fr,TokenComputer as kr}from"@multiversx/sdk-core";import{CacheTtl as Or,WarpCache as Vr,WarpCacheKey as Mr}from"@joai/warps";import{WarpChainName as It}from"@joai/warps";import{WarpChainName as Ir}from"@joai/warps";var xt=Ir.Multiversx,At=[{chain:xt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:xt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as Nr}from"@joai/warps";var b=Nr.Multiversx,Et=[{chain:b,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:b,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:b,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:b,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:b,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:b,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:b,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:b,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:b,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:b,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:b,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:b,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:b,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:b,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:b,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];import{WarpChainName as Br}from"@joai/warps";var bt=Br.Multiversx,Pt=[{chain:bt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:bt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as Ur}from"@joai/warps";var St=Ur.Claws,oe=[{chain:St,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:St,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Nt={[It.Multiversx]:{mainnet:Et,testnet:Pt,devnet:At},[It.Claws]:{mainnet:oe,testnet:oe,devnet:oe}},Bt=(i,e,t)=>(Nt[i]?.[e]||[]).find(n=>n.identifier===t)||null,Os=(i,e)=>Nt[i]?.[e]||[];var ce=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new Vr(e.env,e.cache)}async getAccount(e){let r=await w(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(ke.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(ke.newFromBech32(e)),n=t.getFungibleTokensOfAccount(ke.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=Mr.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 kr,s=D(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(),u=j(e),p=await d.doGetGeneric(`tokens/${u}`),g={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,g,Or.OneHour),g}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 qr,SmartContractTransactionsFactory as Qr,Token as jr,TokenComputer as Jr,TokenTransfer as Xr,TransactionsFactoryConfig as kt,TransferTransactionsFactory as Yr}from"@multiversx/sdk-core";import{applyOutputToMessages as Zr,extractResolvedInputValues as en,getNextInfo as tn,getWarpActionByIndex as Oe,getWarpWalletAddressFromConfig as Ve}from"@joai/warps";import{applyOutputToMessages as Rr,evaluateOutputCommon as le,extractResolvedInputValues as Dr,getWarpActionByIndex as Lr,getWarpWalletAddressFromConfig as Kr,parseOutputOutIndex as Ut,WarpCache as _r,WarpCacheKey as Hr,WarpConstants as Ft}from"@joai/warps";import{findEventsByFirstTopic as $r,SmartContractTransactionsOutcomeParser as Gr,TransactionEventsParser as zr}from"@multiversx/sdk-core";var L=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new U(e,t),this.serializer=new N({typeRegistry:this.typeRegistry}),this.cache=new _r(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(Hr.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],a=await this.extractContractOutput(e,t,r,n),s=Rr(e,a.output,this.config),o=Dr(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:Kr(this.config,this.chain.name),txHash:r.hash,tx:r,next:null,values:a.values,output:a.output,messages:s,destination:null,resolvedInputs:o}}async extractContractOutput(e,t,r,n){let a=Lr(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(W=>W.includes("out")||W.includes("event"))){for(let[W,A]of Object.entries(e.output))c[W]=A;return{values:{string:s,native:o,mapped:{}},output:await le(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}let u=await this.abi.getAbiForAction(a),p=new zr({abi:u}),g=new Gr({abi:u}),v=null,h=!1,I=()=>(h||(h=!0,v=g.parseExecute({transactionOnNetwork:r,function:a.func||void 0})),v);for(let[W,A]of Object.entries(e.output)){if(A.startsWith(Ft.Transform.Prefix))continue;if(A.startsWith("input.")){c[W]=A;continue}let K=Ut(A);if(K!==null&&K!==t){c[W]=null;continue}let[R,B,T,Je]=A.split(".");if(R==="event"){if(!B||isNaN(Number(T)))continue;let ye=Number(T),We=$r(r,B),x=p.parseEvents({events:We})[0];if(!x||typeof x!="object"){c[W]=null;continue}let E=Object.values(x)[ye]||null;E&&Je&&typeof E=="object"&&(E=E[Je]??null),E&&typeof E=="object"&&(E="toFixed"in E?E.toFixed():E.valueOf()),s.push(String(E)),o.push(E),c[W]=E&&E.valueOf()}else if(R==="out"||R.startsWith("out[")){if(!B)continue;let ye=I(),We=Number(B),x=ye.values[We-1]||null;T&&(x=x[T]||null),x&&typeof x=="object"&&(x="toFixed"in x?x.toFixed():x.valueOf()),s.push(String(x)),o.push(x),c[W]=x&&x.valueOf()}else c[W]=A}return{values:{string:s,native:o,mapped:{}},output:await le(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let a=t.map(u=>this.serializer.typedToString(u)),s=t.map(u=>this.serializer.typedToNative(u)[1]),o={string:a,native:s,mapped:{}},c={};if(!e.output)return{values:o,output:c};let d=u=>{let p=u.split(".").slice(1).map(v=>parseInt(v)-1);if(p.length===0)return;let g=s[p[0]];for(let v=1;v<p.length;v++){if(g==null)return;g=g[p[v]]}return g};for(let[u,p]of Object.entries(e.output)){if(p.startsWith(Ft.Transform.Prefix))continue;let g=Ut(p);if(g!==null&&g!==r){c[u]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?c[u]=d(p)||null:c[u]=p}return c=await le(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 u(h,I=[]){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 W=t.actions[h-1];if(!W)throw new Error(`Action ${h} not found`);let A;if(W.type==="query")A=await n.executeQuery(t,h,I);else if(W.type==="collect")A=await n.executeCollect(t,h,I,s);else throw new Error(`Unsupported or interactive action type: ${W.type}`);if(o.set(h,A),t.output)for(let K of Object.values(t.output)){let B=String(K).match(/^out\[(\d+)\]/);if(B){let T=parseInt(B[1],10);T!==h&&!o.has(T)&&await u(T)}}return c.delete(h),A}await u(r,a);let p={};for(let h of o.values())for(let[I,W]of Object.entries(h.output))W!==null?p[I]=W:I in p||(p[I]=null);let g=await le(t,p,p,r,a,this.serializer.coreSerializer,this.config);return{...o.get(r),action:r,output:g}}};var rn="EGLD-000000",pe=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new N({typeRegistry:this.typeRegistry}),this.abi=new U(this.config,this.chain),this.output=new L(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=Oe(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=Ve(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=H.newFromBech32(t),n=new kt({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 Yr({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=Ve(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=Oe(e.warp,e.action),n=H.newFromBech32(t),a=e.args.map(o=>this.serializer.stringToTyped(o)),s=new kt({chainID:e.chain.chainId});return new Qr({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=Oe(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(T=>this.serializer.stringToTyped(T)),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),u=d.returnCode==="ok",p=new qr,g=r.getEndpoint(d.function||t.func||""),v=(d.returnDataParts||[]).map(T=>Buffer.from(T)),h=p.buffersToValues(v,g.output),{values:I,output:W}=await this.output.extractQueryOutput(e.warp,h,e.action,e.resolvedInputs),A=tn(this.config,[],e.warp,e.action,W),R=e.resolvedInputs.find(T=>T.input.position==="receiver"||T.input.position==="destination")?.value||e.destination,B=en(e.resolvedInputs);return{status:u?"success":"error",warp:e.warp,action:e.action,user:Ve(this.config,e.chain.name),txHash:null,tx:null,next:A,values:I,output:{...W,_DATA:h},messages:Zr(e.warp,W,this.config),destination:R,resolvedInputs:B}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:rn}:t).map(t=>{let n=new Jr().extractNonceFromExtendedIdentifier(t.identifier);return new Xr({token:new jr({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var ue=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=et[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 Vt,Address as y,AddressValue as Re,BytesValue as C,SmartContractTransactionsFactory as an,TransactionsFactoryConfig as sn}from"@multiversx/sdk-core";import{createWarpIdentifier as on,getWarpWalletAddressFromConfig as cn,WarpCache as ln,WarpCacheKey as De,WarpLogger as Le}from"@joai/warps";var Me={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 P=i=>{if(i==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(i==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var me=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}),Ot=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(e=>e.toBech32())});var de=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new ln(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=cn(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(P(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(P(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(P(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(P(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(P(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(P(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[C.fromHex(e),new Re(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(P(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(P(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=De.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return Le.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let a=y.newFromBech32(P(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),u=d?me(d):null,p=u?.brand?await this.fetchBrand(u.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:u,brand:p},t.ttl),{registryInfo:u,brand:p}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=De.RegistryInfo(this.config.env,e);if(t){let p=this.cache.get(r);if(p)return Le.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),p}let n=y.newFromBech32(P(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?me(c):null,u=d?.brand?await this.fetchBrand(d.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:d,brand:u},t.ttl),{registryInfo:d,brand:u}}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(P(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new Re(new y(t))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s);return o.map(me)}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(P(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new Re(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=De.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return Le.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:on(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(P(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Ot(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new sn({chainID:this.chain.chainId}),t=Vt.create(Me);return new an({config:e,abi:t})}getController(){let e=w(this.chain,this.config.env,this.config),t=Vt.create(Me);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};import{CacheTtl as An,initializeWalletCache as En,WarpCache as bn}from"@joai/warps";import{Address as Pn}from"@multiversx/sdk-core";import{Account as pn,Message as un,Mnemonic as Ke,UserSecretKey as mn}from"@multiversx/sdk-core";import*as Dt from"@scure/bip39";import{wordlist as dn}from"@scure/bip39/wordlists/english.js";import{getWarpWalletAddressFromConfig as hn,getWarpWalletMnemonicFromConfig as Mt,getWarpWalletPrivateKeyFromConfig as gn,normalizeAndValidateMnemonic as fn,normalizeMnemonic as yn,setWarpWalletInConfig as Rt,validateMnemonicLength as Wn}from"@joai/warps";var O=class O{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 un({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let t=fn(e),n=Ke.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 Rt(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let t=mn.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 Rt(this.config,this.chain.name,s),s}async export(){let e=this.getAccount(),t=Mt(this.config,this.chain.name),r=gn(this.config,this.chain.name);return{provider:O.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=Dt.generateMnemonic(dn,256),t=yn(e);Wn(t);let s=Ke.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=Mt(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=Ke.fromString(e).deriveKey(0);return this.account=new pn(r,this.chain.addressHrp),this.account}};O.PROVIDER_NAME="mnemonic";var $=O;import{Account as wn,Message as Cn,Mnemonic as vn,UserSecretKey as G}from"@multiversx/sdk-core";import{getWarpWalletAddressFromConfig as Tn,getWarpWalletMnemonicFromConfig as xn,getWarpWalletPrivateKeyFromConfig as Lt,setWarpWalletInConfig as Kt}from"@joai/warps";var V=class V{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=Tn(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 Cn({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=vn.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 Kt(this.config,this.chain.name,o),o}async importFromPrivateKey(e){let r=e.startsWith("-----")?G.fromPem(e):G.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 Kt(this.config,this.chain.name,o),o}async export(){let e=this.getAccount(),t=Lt(this.config,this.chain.name),r=xn(this.config,this.chain.name);return{provider:V.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=G.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=Lt(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?G.fromPem(e):G.fromString(e);return this.account=new wn(r,this.chain.addressHrp),this.account}};V.PROVIDER_NAME="privateKey";var z=V;import{getWarpWalletAddressFromConfig as q}from"@joai/warps";var M=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return q(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=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var he=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 bn(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 z||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=Pn.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,An.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(){En(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 z(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 ge=(i,e)=>(t,r)=>{let n=e[t.env],a=new Sn;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 ie(t,n),executor:new pe(t,n,a),output:new L(t,n,a),serializer:new N({typeRegistry:a}),registry:new de(t,n),explorer:new ue(i,t),abiBuilder:()=>new U(t,n),brandBuilder:()=>new se(t,n),dataLoader:new ce(t,n),wallet:new he(t,n)}};import{WarpChainName as Q}from"@joai/warps";var _e={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"},_t=ge(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:_e},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:_e},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:_e}});import{WarpChainName as $e}from"@joai/warps";var In={chain:$e.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},He={name:$e.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:In,minGasPrice:20000000000000n},Ht=ge($e.Claws,{mainnet:He,testnet:He,devnet:He});var Wc=()=>[_t,Ht];import{WarpConstants as fe,WarpSerializer as Ge}from"@joai/warps";var xc=i=>new Ge().nativeToString(f.Token,i),Ac=i=>new Ge().nativeToString(f.CodeMeta,i),Ec=(i,e)=>{if(e===null)return f.Optional+fe.ArgParamsSeparator;let t=i(e),r=t.indexOf(fe.ArgParamsSeparator),n=t.substring(0,r),a=t.substring(r+1);return f.Optional+fe.ArgParamsSeparator+n+fe.ArgParamsSeparator+a},bc=i=>new Ge().nativeToString(f.List,i);import{Address as Nn,AddressValue as Bn,BigUIntType as Un,BigUIntValue as $t,BooleanValue as Fn,BytesValue as kn,CodeMetadata as On,CodeMetadataValue as Vn,CompositeType as Mn,CompositeValue as Rn,Field as ze,FieldDefinition as qe,List as Dn,NothingValue as Ln,OptionalValue as Qe,OptionValue as je,StringValue as Kn,Struct as _n,StructType as Hn,TokenIdentifierType as $n,TokenIdentifierValue as Gt,U16Value as Gn,U32Value as zn,U64Type as qn,U64Value as zt,U8Value as Qn,VariadicValue as jn}from"@multiversx/sdk-core";var Uc=(i,e)=>i?je.newProvided(i):e?je.newMissingTyped(e):je.newMissing(),Fc=(i,e)=>i?new Qe(i.getType(),i):e?new Qe(e):Qe.newMissing(),kc=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let e=i[0].getType();return new Dn(e,i)},Oc=i=>jn.fromItems(...i),Vc=i=>{let e=i.map(t=>t.getType());return new Rn(new Mn(...e),i)},Mc=i=>Kn.fromUTF8(i),Rc=i=>new Qn(i),Dc=i=>new Gn(i),Lc=i=>new zn(i),Kc=i=>new zt(i),_c=i=>new $t(BigInt(i)),Hc=i=>new Fn(i),$c=i=>new Bn(Nn.newFromBech32(i)),Gc=i=>new Gt(i),zc=i=>kn.fromHex(i),qc=i=>new _n(new Hn("EsdtTokenPayment",[new qe("token_identifier","",new $n),new qe("token_nonce","",new qn),new qe("amount","",new Un)]),[new ze(new Gt(i.token.identifier),"token_identifier"),new ze(new zt(BigInt(i.token.nonce)),"token_nonce"),new ze(new $t(BigInt(i.amount)),"amount")]),Qc=i=>new Vn(On.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),jc=()=>new Ln;export{Ht as ClawsAdapter,Zt as ClawsExplorers,F as ExplorerUrls,Nt as KnownTokens,_t as MultiversxAdapter,Yt as MultiversxExplorers,et as MultiversxExplorersConfig,In as NativeTokenClaw,_e as NativeTokenEgld,U as WarpMultiversxAbiBuilder,se as WarpMultiversxBrandBuilder,ie as WarpMultiversxBuilder,fa as WarpMultiversxConstants,J as WarpMultiversxContractLoader,ce as WarpMultiversxDataLoader,pe as WarpMultiversxExecutor,ue as WarpMultiversxExplorer,f as WarpMultiversxInputTypes,L as WarpMultiversxOutput,de as WarpMultiversxRegistry,N as WarpMultiversxSerializer,he as WarpMultiversxWallet,$c as address_value,qc as asset_value,_c as biguint_value,Hc as boolean_value,Ac as codemeta,Qc as codemeta_value,Vc as composite_value,ge as createMultiversxAdapter,Bt as findKnownTokenById,Wc as getAllMultiversxAdapters,Xn as getAllMultiversxChainNames,Os as getKnownTokensForChain,w as getMultiversxEntrypoint,P as getMultiversxRegistryAddress,j as getNormalizedTokenIdentifier,zc as hex_value,D as isNativeToken,bc as list,kc as list_value,jc as nothing_value,Uc as option_value,Ec as optional,Fc as optional_value,Mc as string_value,Ot as toTypedConfigInfo,me as toTypedRegistryInfo,xc as token,Gc as token_value,Dc as u16_value,Lc as u32_value,Kc as u64_value,Rc as u8_value,Oc as variadic_value};
|
|
1
|
+
import{WarpChainName as et}from"@joai/warps";var ea=()=>[et.Multiversx,et.Claws];import{WarpTypeRegistry as Bn}from"@joai/warps";import{AbiRegistry as ke,Address as lr,EnumType as pr,OptionalType as ur,OptionType as mr,TransactionsFactoryConfig as dr,TransferTransactionsFactory as hr}from"@multiversx/sdk-core";import{createWarpIdentifier as gr,getLatestProtocolIdentifier as Ct,getWarpWalletAddressFromConfig as fr,WarpCache as yr,WarpCacheKey as Wr,WarpConstants as vt,WarpLogger as Tt}from"@joai/warps";import{DevnetEntrypoint as Jt,MainnetEntrypoint as Xt,TestnetEntrypoint as Yt}from"@multiversx/sdk-core";import{getProviderConfig as Zt}from"@joai/warps";var L=i=>!i.includes("-"),X=i=>L(i)?`${i}-000000`:i,W=(i,e,t)=>{let r="warp-sdk",a=t?Zt(t,i.name,e,i.defaultApiUrl):{url:i.defaultApiUrl},s=a.url,o={headers:a.headers};return e==="devnet"?new Jt({url:s,kind:"api",clientName:r,networkProviderConfig:o}):e==="testnet"?new Yt({url:s,kind:"api",clientName:r,networkProviderConfig:o}):new Xt({url:s,kind:"api",clientName:r,networkProviderConfig:o})};import{WarpLogger as tt}from"@joai/warps";var Y=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 tt.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 tt.error("WarpContractLoader: getVerificationInfo error",r),null}}};import{Address as nr,AddressType as ve,AddressValue as st,BigUIntType as Z,BigUIntValue as Te,BooleanType as xe,BooleanValue as it,BytesType as Ae,BytesValue as ot,CodeMetadata as ar,CodeMetadataType as Ee,CodeMetadataValue as ct,CompositeType as be,CompositeValue as lt,EnumType as ee,EnumValue as pt,EnumVariantDefinition as sr,Field as te,FieldDefinition as re,List as ut,ListType as mt,NothingValue as N,OptionalType as dt,OptionalValue as Pe,OptionType as ht,OptionValue as Se,StringType as Ie,StringValue as gt,Struct as ne,StructType as V,Token as ir,TokenComputer as ft,TokenIdentifierType as ae,TokenIdentifierValue as Ne,U16Type as Be,U16Value as yt,U32Type as Ue,U32Value as Wt,U64Type as se,U64Value as Fe,U8Type as Oe,U8Value as wt,VariadicType as _,VariadicValue as ie}from"@multiversx/sdk-core";import{WarpSerializer as or}from"@joai/warps";var er=i=>i?typeof i=="string"?i:i.address:null,rt=(i,e)=>er(i.user?.wallets?.[e]||null);var nt=(r=>(r.Macos="macos",r.Linux="linux",r.Windows="windows",r))(nt||{}),Wa=Object.values(nt);var m={HttpProtocolPrefix:"https://",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierChainDefault:"multiversx",IdentifierType:{Alias:"alias",Hash:"hash"},IdentifierAliasMarker:"@",Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>rt(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 Ca={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||{}),rr=(r=>(r.ClawsExplorer="claws_explorer",r.ClawsExplorerDevnet="claws_explorer_devnet",r.ClawsExplorerTestnet="claws_explorer_testnet",r))(rr||{}),at={multiversx:{mainnet:["multiversx_explorer"],testnet:["multiversx_explorer_testnet"],devnet:["multiversx_explorer_devnet"]},claws:{mainnet:["claws_explorer"],testnet:["claws_explorer_testnet"],devnet:["claws_explorer_devnet"]}},k={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 cr=new RegExp(`${m.ArgParamsSeparator}(.*)`),B=class{constructor(e){this.coreSerializer=new or(e)}typedToString(e){let t=e.getType();if(t.hasExactClass(ht.ClassName)||e.hasClassOrSuperclass(Se.ClassName)){if(!e.isSet())return l.Option+m.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return l.Option+m.ArgParamsSeparator+r}if(t.hasExactClass(_.ClassName)||e.hasClassOrSuperclass(ie.ClassName)){let r=e.getItems();if(r.length===0){let u=this.typeToString(t.getFirstTypeParameter());return l.Vector+m.ArgParamsSeparator+u+m.ArgParamsSeparator}let n=r.map(u=>this.typedToString(u));if(n.every(u=>u.startsWith(l.Tuple)))return l.Vector+m.ArgParamsSeparator+n.join(",");let a=n[0],s=a.indexOf(m.ArgParamsSeparator),o=a.substring(0,s),c=n.map(u=>{let p=u.indexOf(m.ArgParamsSeparator);return u.substring(p+1)}),d=o.startsWith(l.Struct)?m.ArgStructSeparator:m.ArgListSeparator;return l.Vector+m.ArgParamsSeparator+o+m.ArgParamsSeparator+c.join(d)}if(t.hasExactClass(dt.ClassName)||e.hasClassOrSuperclass(Pe.ClassName)){if(!e.isSet())return f.Optional+m.ArgParamsSeparator+"null";let r=this.typedToString(e.getTypedValue());return f.Optional+m.ArgParamsSeparator+r}if(t.hasExactClass(mt.ClassName)||e.hasClassOrSuperclass(ut.ClassName)){let n=e.getItems().map(c=>this.typedToString(c));if(n.every(c=>c.startsWith(l.Tuple)))return f.List+m.ArgParamsSeparator+n.join(",");let s=n.map(c=>c.split(m.ArgParamsSeparator)[0])[0],o=n.map(c=>c.split(m.ArgParamsSeparator)[1]);return f.List+m.ArgParamsSeparator+s+m.ArgParamsSeparator+o.join(m.ArgListSeparator)}if(t.hasExactClass(be.ClassName)||e.hasClassOrSuperclass(lt.ClassName)){let n=e.getItems().map(a=>{let s=this.typedToString(a),o=s.indexOf(m.ArgParamsSeparator),c=s.substring(0,o),d=s.substring(o+1);return`${c},${d}`});return`${l.Tuple}(${n.join(",")})`}if(t.hasExactClass(Z.ClassName)||e.hasClassOrSuperclass(Te.ClassName)||t.getName()==="BigUint")return l.Biguint+m.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Oe.ClassName)||e.hasClassOrSuperclass(wt.ClassName))return l.Uint8+m.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Be.ClassName)||e.hasClassOrSuperclass(yt.ClassName))return l.Uint16+m.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(Ue.ClassName)||e.hasClassOrSuperclass(Wt.ClassName))return l.Uint32+m.ArgParamsSeparator+e.valueOf().toNumber();if(t.hasExactClass(se.ClassName)||e.hasClassOrSuperclass(Fe.ClassName))return l.Uint64+m.ArgParamsSeparator+BigInt(e.valueOf().toFixed());if(t.hasExactClass(Ie.ClassName)||e.hasClassOrSuperclass(gt.ClassName))return l.String+m.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(xe.ClassName)||e.hasClassOrSuperclass(it.ClassName))return l.Bool+m.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(ve.ClassName)||e.hasClassOrSuperclass(st.ClassName))return l.Address+m.ArgParamsSeparator+e.valueOf().toBech32();if(t.hasExactClass(Ae.ClassName)||e.hasClassOrSuperclass(ot.ClassName))return l.Hex+m.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 ft().computeExtendedIdentifier(new ir({identifier:r,nonce:BigInt(n)}));return l.Asset+m.ArgParamsSeparator+o+m.ArgCompositeSeparator+a}if(t.hasExactClass(V.ClassName)||e.hasClassOrSuperclass(ne.ClassName)){let r=e,a=r.getType().getName(),s=r.getFields();if(s.length===0)return`${l.Struct}(${a})${m.ArgParamsSeparator}`;let o=s.map(c=>{let d=c.value.getType(),p=this.typedToString(c.value).split(m.ArgParamsSeparator),h=p.length>2?p.slice(2).join(m.ArgParamsSeparator):p[1]||"";return`(${c.name}${m.ArgParamsSeparator}${this.typeToString(d)})${h}`});return`${l.Struct}(${a})${m.ArgParamsSeparator}${o.join(m.ArgListSeparator)}`}if(t.hasExactClass(ee.ClassName)||e.hasClassOrSuperclass(pt.ClassName)){let r=e;return`enum(${r.getType().getName()})${m.ArgParamsSeparator}${r.discriminant}`}if(t.hasExactClass(ae.ClassName)||e.hasClassOrSuperclass(Ne.ClassName))return f.Token+m.ArgParamsSeparator+e.valueOf();if(t.hasExactClass(Ee.ClassName)||e.hasClassOrSuperclass(ct.ClassName))return f.CodeMeta+m.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 be(...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 V(r,[])}if(e===l.String)return new Ie;if(e===l.Uint8)return new Oe;if(e===l.Uint16)return new Be;if(e===l.Uint32)return new Ue;if(e===l.Uint64)return new se;if(e===l.Biguint)return new Z;if(e===l.Bool)return new xe;if(e===l.Address)return new ve;if(e===l.Hex)return new Ae;if(e===l.Asset)return new V("EsdtTokenPayment",[new re("token_identifier","",new ae),new re("token_nonce","",new se),new re("amount","",new Z)]);if(e.startsWith("enum")){let t=e.match(/\(([^)]+)\)/);if(!t)throw new Error("Enum type must include a name in the format enum(Name)");return new ee(t[1],[])}if(e===f.Token)return new ae;if(e===f.CodeMeta)return new Ee;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 N?Se.newMissingTyped(n.getType()):Se.newProvided(n)}if(t===l.Vector){let n=r.indexOf(m.ArgParamsSeparator),a=r.substring(0,n),s=r.substring(n+1);if(a.startsWith(l.Tuple)){let p=s.split(",").map(h=>this.stringToTyped(h));return new ie(new _(this.nativeToType(a)),p)}if(s.includes("tuple(")){let u=this.splitTupleStrings(s),p=u.map(b=>this.stringToTyped(b)),v=u[0].match(/^(tuple\([^)]+\))/),g=v?v[1]:"tuple";return new ie(new _(this.nativeToType(g)),p)}let o=a.startsWith(l.Struct)?m.ArgStructSeparator:m.ArgListSeparator,d=s.split(o).map(u=>this.stringToTyped(`${a}:${u}`));return new ie(new _(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],u=a[c+1];s.push(this.stringToTyped(`${d}:${u}`))}let o=s.map(c=>c.getType());return new lt(new be(...o),s)}if(t.startsWith(l.Struct)){let n=t.match(/\(([^)]+)\)/),a=n?n[1]:"CustomStruct";if(!r)return new ne(new V(a,[]),[]);let s=r.split(m.ArgListSeparator),o=[],c=[];return s.forEach(d=>{let u=d.match(new RegExp(`^\\(([^${m.ArgParamsSeparator}]+)${m.ArgParamsSeparator}([^)]+)\\)(.+)$`));if(u){let[,p,h,v]=u,g=this.stringToTyped(`${h}${m.ArgParamsSeparator}${v}`);o.push(new re(p,"",g.getType())),c.push(new te(g,p))}}),new ne(new V(a,o),c)}if(t===l.String)return r?gt.fromUTF8(r):new N;if(t===l.Uint8)return r?new wt(Number(r)):new N;if(t===l.Uint16)return r?new yt(Number(r)):new N;if(t===l.Uint32)return r?new Wt(Number(r)):new N;if(t===l.Uint64)return r?new Fe(BigInt(r)):new N;if(t===l.Biguint)return r?new Te(BigInt(r)):new N;if(t===l.Bool)return r?new it(typeof r=="boolean"?r:r==="true"):new N;if(t===l.Address)return r?new st(nr.newFromBech32(r)):new N;if(t===l.Hex)return r?ot.fromHex(r):new N;if(t===l.Asset){let[n,a]=r.split(m.ArgCompositeSeparator),s=new ft,o=L(n)?X(n):s.extractIdentifierFromExtendedIdentifier(n),c=L(n)?0n:s.extractNonceFromExtendedIdentifier(n);return new ne(this.nativeToType("asset"),[new te(new Ne(o),"token_identifier"),new te(new Fe(BigInt(c)),"token_nonce"),new te(new Te(BigInt(a)),"amount")])}if(t===f.Null)return new N;if(t===f.Optional){let n=this.stringToTyped(r);return n instanceof N?Pe.newMissing():new Pe(n.getType(),n)}if(t===f.List){let[n,a]=r.split(cr,2),o=a.split(m.ArgListSeparator).map(c=>this.stringToTyped(n+m.ArgParamsSeparator+c));return new ut(this.nativeToType(n),o)}if(t===f.Token)return r?new Ne(r):new N;if(t===f.CodeMeta)return new ct(ar.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(t.startsWith("enum")){let n=t.match(/\(([^)]+)\)/),a=n?n[1]:"CustomEnum",s=Number(r);if(isNaN(s))throw new Error(`WarpArgSerializer (stringToTyped): Invalid enum discriminant: ${r}`);let o=new sr(r,s,[]),c=new ee(a,[o]);return new pt(c,o,[])}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(ht.ClassName))return l.Option+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(_.ClassName))return l.Vector+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Ie.ClassName))return l.String;if(e.hasExactClass(Oe.ClassName))return l.Uint8;if(e.hasExactClass(Be.ClassName))return l.Uint16;if(e.hasExactClass(Ue.ClassName))return l.Uint32;if(e.hasExactClass(se.ClassName))return l.Uint64;if(e.hasExactClass(Z.ClassName))return l.Biguint;if(e.hasExactClass(xe.ClassName))return l.Bool;if(e.hasExactClass(ve.ClassName))return l.Address;if(e.hasExactClass(Ae.ClassName))return l.Hex;if(e.hasExactClass(ae.ClassName))return f.Token;if(e.hasExactClass(dt.ClassName))return f.Optional+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(mt.ClassName))return f.List+m.ArgParamsSeparator+this.typeToString(e.getFirstTypeParameter());if(e.hasExactClass(Ee.ClassName))return f.CodeMeta;if(e.hasExactClass(V.ClassName)&&e.getClassName()==="EsdtTokenPayment")return l.Asset;if(e.hasExactClass(V.ClassName))return`${l.Struct}(${e.getName()})`;if(e.hasExactClass(ee.ClassName))return`enum(${e.getName()})`;throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${e.getClassName()}`)}};var F=class{constructor(e,t){this.config=e;this.chain=t;this.contractLoader=new Y(this.config),this.cache=new yr(this.config.env,this.config.cache)}async createInscriptionTransaction(e){let t=fr(this.config,this.chain.name);if(!t)throw new Error("WarpBuilder: user address not set");let r=new dr({chainID:this.chain.chainId}),n=new hr({config:r}),a=lr.newFromBech32(t),s={protocol:Ct("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:gr(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=Wr.WarpAbi(this.config.env,e);if(t){let s=this.cache.get(r);if(s)return Tt.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 Tt.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 ke.create(t.abi)}async fetchAbi(e){if(!e.abi)throw new Error("WarpActionExecutor: ABI not found");if(e.abi.startsWith(vt.IdentifierType.Hash)){let t=e.abi.split(vt.ArgParamsSeparator)[1],r=await this.createFromTransactionHash(t);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${e.abi}`);return ke.create(r.content)}else{let r=await(await fetch(e.abi)).json();return ke.create(r)}}endpointsToWarps(e,t,r){let n=new B,a=r?btoa(JSON.stringify(r)):void 0;return e.getEndpoints().map(s=>{let o=s.modifiers.isReadonly(),c=s.input.map((u,p)=>{let h={name:u.name,type:n.typeToString(u.type),position:`arg:${p+1}`,source:"field",required:!u.type.hasClassOrSuperclass(ur.ClassName)&&!u.type.hasClassOrSuperclass(mr.ClassName)};if(u.type.hasExactClass(pr.ClassName)){let v=u.type;h.options=Object.fromEntries(v.variants.map(g=>[String(g.discriminant),g.name]))}return h}),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:Ct("warp"),name:s.name,title:s.name,description:null,chain:this.chain.name,actions:[d]}})}};import{Address as xt,TransactionsFactoryConfig as wr,TransferTransactionsFactory as Cr}from"@multiversx/sdk-core";import{createWarpIdentifier as vr,getWarpWalletAddressFromConfig as Tr,WarpBrandBuilder as xr,WarpLogger as Ar}from"@joai/warps";import{Buffer as Er}from"buffer";var oe=class{constructor(e,t){this.config=e;this.chain=t;this.core=new xr(e)}async createInscriptionTransaction(e){let t=Tr(this.config,this.chain.name);if(!t)throw new Error("BrandBuilder: user address not set");let r=new wr({chainID:this.chain.chainId}),n=new Cr({config:r}),a=xt.newFromBech32(t),s=JSON.stringify(e);return await n.createTransactionForNativeTokenTransfer(a,{receiver:xt.newFromBech32(t),nativeAmount:BigInt(0),data:Uint8Array.from(Er.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:vr(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 At,TransactionsFactoryConfig as br,TransferTransactionsFactory as Pr}from"@multiversx/sdk-core";import{createWarpIdentifier as Sr,getWarpWalletAddressFromConfig as Ir,WarpBuilder as Et,WarpCache as Nr,WarpCacheKey as Br,WarpLogger as bt}from"@joai/warps";var ce=class extends Et{constructor(t,r){super(t);this.config=t;this.chain=r;this.cache=new Nr(t.env,t.cache),this.core=new Et(t)}async createInscriptionTransaction(t){let r=Ir(this.config,this.chain.name);if(!r)throw new Error("WarpBuilder: user address not set");let n=new br({chainID:this.chain.chainId}),a=new Pr({config:n}),s=At.newFromBech32(r),o=JSON.stringify(t),c=await a.createTransactionForTransfer(s,{receiver:At.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:Sr(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=Br.Warp(this.config.env,t);if(r){let o=this.cache.get(n);if(o)return bt.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 bt.error("WarpBuilder: Error creating from transaction hash",o),null}}};import{Address as Ve,Token as Vr,TokenComputer as Mr}from"@multiversx/sdk-core";import{CacheTtl as Rr,WarpCache as Dr,WarpCacheKey as Lr}from"@joai/warps";import{WarpChainName as Ft}from"@joai/warps";import{WarpChainName as Ur}from"@joai/warps";var Pt=Ur.Multiversx,St=[{chain:Pt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:Pt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as Fr}from"@joai/warps";var E=Fr.Multiversx,It=[{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"},{chain:E,identifier:"SEGLD-3ad2d0",name:"StakedEGLD",symbol:"SEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/SEGLD-3ad2d0/icon.png"},{chain:E,identifier:"HSEGLD-c13a4e",name:"HatomSEGLD",symbol:"HSEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HSEGLD-c13a4e/icon.png"},{chain:E,identifier:"UTK-2f80e9",name:"xMoney UTK",symbol:"UTK",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/UTK-2f80e9/icon.png"},{chain:E,identifier:"USDC-c76f1f",name:"WrappedUSDC",symbol:"USDC",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDC-c76f1f/icon.png"},{chain:E,identifier:"WEGLD-bd4d79",name:"WrappedEGLD",symbol:"WEGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WEGLD-bd4d79/icon.png"},{chain:E,identifier:"HTM-f51d55",name:"Hatom",symbol:"HTM",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HTM-f51d55/icon.png"},{chain:E,identifier:"MEX-455c57",name:"MEX",symbol:"MEX",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/MEX-455c57/icon.png"},{chain:E,identifier:"WTAO-4f5363",name:"WrappedTAO",symbol:"WTAO",decimals:9,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WTAO-4f5363/icon.png"},{chain:E,identifier:"HEGLD-d61095",name:"HatomEGLD",symbol:"HEGLD",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/HEGLD-d61095/icon.png"},{chain:E,identifier:"WBTC-5349b3",name:"WrappedBTC",symbol:"WBTC",decimals:8,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WBTC-5349b3/icon.png"},{chain:E,identifier:"WETH-b4ca29",name:"WrappedETH",symbol:"WETH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/WETH-b4ca29/icon.png"},{chain:E,identifier:"USH-111e09",name:"HatomUSD",symbol:"USH",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USH-111e09/icon.png"},{chain:E,identifier:"USDT-f8c08c",name:"WrappedUSDT",symbol:"USDT",decimals:6,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/USDT-f8c08c/icon.png"}];import{WarpChainName as Or}from"@joai/warps";var Nt=Or.Multiversx,Bt=[{chain:Nt,identifier:"EGLD",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"},{chain:Nt,identifier:"EGLD-000000",name:"eGold",symbol:"EGLD",decimals:18,logoUrl:"https://tools.multiversx.com/assets-cdn/tokens/EGLD-000000/icon.png"}];import{WarpChainName as kr}from"@joai/warps";var Ut=kr.Claws,le=[{chain:Ut,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},{chain:Ut,identifier:"CLAW-000000",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"}];var Ot={[Ft.Multiversx]:{mainnet:It,testnet:Bt,devnet:St},[Ft.Claws]:{mainnet:le,testnet:le,devnet:le}},kt=(i,e,t)=>(Ot[i]?.[e]||[]).find(n=>n.identifier===t)||null,Ds=(i,e)=>Ot[i]?.[e]||[];var pe=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new Dr(e.env,e.cache)}async getAccount(e){let r=await W(this.chain,this.config.env,this.config).createNetworkProvider().getAccount(Ve.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(Ve.newFromBech32(e)),n=t.getFungibleTokensOfAccount(Ve.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=Lr.Asset(this.config.env,this.chain.name,e),r=this.cache.get(t);if(r)return r;let n=kt(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 Mr,s=L(e)?0n:a.extractNonceFromExtendedIdentifier(e),o=new Vr({identifier:e,nonce:BigInt(s||0)}),c=a.isFungible(o),d=W(this.chain,this.config.env,this.config).createNetworkProvider(),u=X(e),p=await d.doGetGeneric(`tokens/${u}`),h={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,h,Rr.OneHour),h}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 Jr,SmartContractTransactionsFactory as Xr,Token as Yr,TokenComputer as Zr,TokenTransfer as en,TransactionsFactoryConfig as Mt,TransferTransactionsFactory as tn}from"@multiversx/sdk-core";import{applyOutputToMessages as rn,extractResolvedInputValues as nn,getNextInfo as an,getWarpActionByIndex as Re,getWarpWalletAddressFromConfig as De}from"@joai/warps";import{applyOutputToMessages as Kr,evaluateOutputCommon as ue,extractResolvedInputValues as _r,getWarpActionByIndex as Hr,getWarpWalletAddressFromConfig as $r,parseOutputOutIndex as Vt,WarpCache as Gr,WarpCacheKey as zr,WarpConstants as Me}from"@joai/warps";import{findEventsByFirstTopic as qr,SmartContractTransactionsOutcomeParser as Qr,TransactionEventsParser as jr}from"@multiversx/sdk-core";var K=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.abi=new F(e,t),this.serializer=new B({typeRegistry:this.typeRegistry}),this.cache=new Gr(e.env,e.cache)}async getActionExecution(e,t,r){let n=this.cache.get(zr.WarpExecutable(this.config.env,e.meta?.hash||"",t))??[],a=await this.extractContractOutput(e,t,r,n),s=Kr(e,a.output,this.config),o=_r(n);return{status:r.status?.isSuccessful?.()?"success":"error",warp:e,action:t,user:$r(this.config,this.chain.name),txHash:r.hash,tx:r,next:null,values:a.values,output:a.output,messages:s,destination:null,resolvedInputs:o}}async extractContractOutput(e,t,r,n){let a=Hr(e,t),s=[],o=[],c={};if(!e.output||a.type!=="contract")return{values:{string:s,native:o,mapped:{}},output:c};let d=r.hash,u=C=>{c[C]=d,s.push(String(d)),o.push(d)};if(!Object.values(e.output).some(C=>C.startsWith("event.")||C.startsWith("out.")||C.startsWith("out["))){for(let[C,S]of Object.entries(e.output))if(!S.startsWith(Me.Transform.Prefix)){if(S==="out"){u(C);continue}c[C]=S}return{values:{string:s,native:o,mapped:{}},output:await ue(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}let h=await this.abi.getAbiForAction(a),v=new jr({abi:h}),g=new Qr({abi:h}),b=null,P=!1,U=()=>(P||(P=!0,b=g.parseExecute({transactionOnNetwork:r,function:a.func||void 0})),b);for(let[C,S]of Object.entries(e.output)){if(S.startsWith(Me.Transform.Prefix))continue;if(S.startsWith("input.")){c[C]=S;continue}if(S==="out"){u(C);continue}let O=Vt(S);if(O!==null&&O!==t){c[C]=null;continue}let[x,j,J,Ze]=S.split(".");if(x==="event"){if(!j||isNaN(Number(J)))continue;let we=Number(J),Ce=qr(r,j),T=v.parseEvents({events:Ce})[0];if(!T||typeof T!="object"){c[C]=null;continue}let A=Object.values(T)[we]||null;A&&Ze&&typeof A=="object"&&(A=A[Ze]??null),A&&typeof A=="object"&&(A="toFixed"in A?A.toFixed():A.valueOf()),s.push(String(A)),o.push(A),c[C]=A&&A.valueOf()}else if(x==="out"||x.startsWith("out[")){if(!j)continue;let we=U(),Ce=Number(j),T=we.values[Ce-1]||null;J&&(T=T[J]||null),T&&typeof T=="object"&&(T="toFixed"in T?T.toFixed():T.valueOf()),s.push(String(T)),o.push(T),c[C]=T&&T.valueOf()}else c[C]=S}return{values:{string:s,native:o,mapped:{}},output:await ue(e,c,o,t,n,this.serializer.coreSerializer,this.config)}}async extractQueryOutput(e,t,r,n){let a=t.map(u=>this.serializer.typedToString(u)),s=t.map(u=>this.serializer.typedToNative(u)[1]),o={string:a,native:s,mapped:{}},c={};if(!e.output)return{values:o,output:c};let d=u=>{let p=u.split(".").slice(1).map(v=>parseInt(v)-1);if(p.length===0)return;let h=s[p[0]];for(let v=1;v<p.length;v++){if(h==null)return;h=h[p[v]]}return h};for(let[u,p]of Object.entries(e.output)){if(p.startsWith(Me.Transform.Prefix))continue;let h=Vt(p);if(h!==null&&h!==r){c[u]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?c[u]=d(p)||null:c[u]=p}return c=await ue(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 u(g,b=[]){if(o.has(g))return o.get(g);if(c.has(g))throw new Error(`Circular dependency detected at action ${g}`);c.add(g);let P=t.actions[g-1];if(!P)throw new Error(`Action ${g} not found`);let U;if(P.type==="query")U=await n.executeQuery(t,g,b);else if(P.type==="collect")U=await n.executeCollect(t,g,b,s);else throw new Error(`Unsupported or interactive action type: ${P.type}`);if(o.set(g,U),t.output)for(let C of Object.values(t.output)){let O=String(C).match(/^out\[(\d+)\]/);if(O){let x=parseInt(O[1],10);x!==g&&!o.has(x)&&await u(x)}}return c.delete(g),U}await u(r,a);let p={};for(let g of o.values())for(let[b,P]of Object.entries(g.output))P!==null?p[b]=P:b in p||(p[b]=null);let h=await ue(t,p,p,r,a,this.serializer.coreSerializer,this.config);return{...o.get(r),action:r,output:h}}};var sn="EGLD-000000",me=class{constructor(e,t,r){this.config=e;this.chain=t;this.typeRegistry=r;this.serializer=new B({typeRegistry:this.typeRegistry}),this.abi=new F(this.config,this.chain),this.output=new K(this.config,this.chain,this.typeRegistry)}async createTransaction(e){let t=Re(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=De(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=H.newFromBech32(t),n=new Mt({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 tn({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=De(this.config,e.chain.name);if(!t)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=Re(e.warp,e.action),n=H.newFromBech32(t),a=e.args.map(o=>this.serializer.stringToTyped(o)),s=new Mt({chainID:e.chain.chainId});return new Xr({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=Re(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(x=>this.serializer.stringToTyped(x)),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),u=d.returnCode==="ok",p=new Jr,h=r.getEndpoint(d.function||t.func||""),v=(d.returnDataParts||[]).map(x=>Buffer.from(x)),g=p.buffersToValues(v,h.output),{values:b,output:P}=await this.output.extractQueryOutput(e.warp,g,e.action,e.resolvedInputs),U=an(this.config,[],e.warp,e.action,P),S=e.resolvedInputs.find(x=>x.input.position==="receiver"||x.input.position==="destination")?.value||e.destination,O=nn(e.resolvedInputs);return{status:u?"success":"error",warp:e.warp,action:e.action,user:De(this.config,e.chain.name),txHash:null,tx:null,next:U,values:b,output:{...P,_DATA:g},messages:rn(e.warp,P,this.config),destination:S,resolvedInputs:O}}toTokenTransfers(e){return e.map(t=>t.identifier===this.chain.nativeToken.identifier?{...t,identifier:sn}:t).map(t=>{let n=new Zr().extractNonceFromExtendedIdentifier(t.identifier);return new en({token:new Yr({identifier:t.identifier,nonce:BigInt(n||0)}),amount:t.amount})})}};var de=class{constructor(e,t){this.chain=e;this.config=t}getExplorers(){let e=at[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=k[t];if(a)return a}if(e){let a=k[e];if(a)return a}let r=this.getPrimaryExplorer();return k[r]||k[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=k[n];a&&(r[n]=`${a}/accounts/${e}`)}),r}getTransactionUrls(e){let t=this.getAllExplorers(),r={};return t.forEach(n=>{let a=k[n];a&&(r[n]=`${a}/transactions/${e}`)}),r}};import{AbiRegistry as Dt,Address as y,AddressValue as Ke,BytesValue as w,SmartContractTransactionsFactory as cn,TransactionsFactoryConfig as ln}from"@multiversx/sdk-core";import{createWarpIdentifier as pn,getWarpWalletAddressFromConfig as un,WarpCache as mn,WarpCacheKey as _e,WarpLogger as He}from"@joai/warps";var Le={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 he=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}),Rt=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(e=>e.toBech32())});var ge=class{constructor(e,t){this.config=e;this.chain=t;this.cache=new mn(e.env,e.cache),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=un(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?[w.fromHex(e),w.fromUTF8(t),w.fromHex(r)]:t?[w.fromHex(e),w.fromUTF8(t)]:[w.fromHex(e)];return await this.getFactory().createTransactionForExecute(n,{contract:y.newFromBech32(I(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(I(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[w.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(I(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:r?[w.fromUTF8(e),w.fromHex(t),w.fromHex(r)]:[w.fromUTF8(e),w.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(I(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[w.fromHex(e),w.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(I(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[w.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(I(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[w.fromHex(e),new Ke(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(I(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[w.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(I(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[w.fromHex(e),w.fromHex(t)]})}async getInfoByAlias(e,t){try{let r=_e.RegistryInfo(this.config.env,e),n=t?this.cache.get(r):null;if(n)return He.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${e}`),n;let a=y.newFromBech32(I(this.config.env)),s=this.getController(),o=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[w.fromUTF8(e)]}),c=await s.runQuery(o),[d]=s.parseQueryResponse(c),u=d?he(d):null,p=u?.brand?await this.fetchBrand(u.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:u,brand:p},t.ttl),{registryInfo:u,brand:p}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(e,t){try{let r=_e.RegistryInfo(this.config.env,e);if(t){let p=this.cache.get(r);if(p)return He.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${e}`),p}let n=y.newFromBech32(I(this.config.env)),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[w.fromHex(e)]}),o=await a.runQuery(s),[c]=a.parseQueryResponse(o),d=c?he(c):null,u=d?.brand?await this.fetchBrand(d.brand):null;return t&&t.ttl&&this.cache.set(r,{registryInfo:d,brand:u},t.ttl),{registryInfo:d,brand:u}}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(I(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new Ke(new y(t))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s);return o.map(he)}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(I(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new Ke(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=_e.Brand(this.config.env,e),n=t?this.cache.get(r):null;if(n)return He.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:pn(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(I(this.config.env)),t=this.getController(),[r]=await t.query({contract:e,function:"getConfig",arguments:[]}),n=r?Rt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let e=new ln({chainID:this.chain.chainId}),t=Dt.create(Le);return new cn({config:e,abi:t})}getController(){let e=W(this.chain,this.config.env,this.config),t=Dt.create(Le);return e.createSmartContractController(t)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};import{CacheTtl as Pn,initializeWalletCache as Sn,WarpCache as In}from"@joai/warps";import{Address as Nn}from"@multiversx/sdk-core";import{Account as dn,Message as hn,Mnemonic as $e,UserSecretKey as gn}from"@multiversx/sdk-core";import*as _t from"@scure/bip39";import{wordlist as fn}from"@scure/bip39/wordlists/english.js";import{getWarpWalletAddressFromConfig as yn,getWarpWalletMnemonicFromConfig as Lt,getWarpWalletPrivateKeyFromConfig as Wn,normalizeAndValidateMnemonic as wn,normalizeMnemonic as Cn,setWarpWalletInConfig as Kt,validateMnemonicLength as vn}from"@joai/warps";var M=class M{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=yn(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 t=wn(e),n=$e.fromString(t).deriveKey(0),a=n.hex(),o=n.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),c={provider:M.PROVIDER_NAME,address:o,privateKey:a,mnemonic:t};return Kt(this.config,this.chain.name,c),c}async importFromPrivateKey(e){let t=gn.fromString(e),r=t.hex(),a=t.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),s={provider:M.PROVIDER_NAME,address:a,privateKey:r,mnemonic:null};return Kt(this.config,this.chain.name,s),s}async export(){let e=this.getAccount(),t=Lt(this.config,this.chain.name),r=Wn(this.config,this.chain.name);return{provider:M.PROVIDER_NAME,address:e.address.toBech32(),privateKey:r||null,mnemonic:t||null}}async generate(){let e=_t.generateMnemonic(fn,256),t=Cn(e);vn(t);let s=$e.fromString(t).deriveKey(0).generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:M.PROVIDER_NAME,address:s,privateKey:null,mnemonic:t}}getAccount(){if(this.account)return this.account;let e=Lt(this.config,this.chain.name);if(!e)throw new Error("No mnemonic provided");let r=$e.fromString(e).deriveKey(0);return this.account=new dn(r,this.chain.addressHrp),this.account}};M.PROVIDER_NAME="mnemonic";var $=M;import{Account as Tn,Message as xn,Mnemonic as An,UserSecretKey as G}from"@multiversx/sdk-core";import{getWarpWalletAddressFromConfig as En,getWarpWalletMnemonicFromConfig as bn,getWarpWalletPrivateKeyFromConfig as Ht,setWarpWalletInConfig as $t}from"@joai/warps";var R=class R{constructor(e,t){this.config=e;this.chain=t;this.account=null}async getAddress(){let e=En(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 xn({data:r}));return Buffer.from(n).toString("hex")}getAccountInstance(){return this.getAccount()}async importFromMnemonic(e){let r=An.fromString(e).deriveKey(0),n=r.hex(),s=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:R.PROVIDER_NAME,address:s,privateKey:n,mnemonic:e};return $t(this.config,this.chain.name,o),o}async importFromPrivateKey(e){let r=e.startsWith("-----")?G.fromPem(e):G.fromString(e),n=r.hex(),s=r.generatePublicKey().toAddress(this.chain.addressHrp).toBech32(),o={provider:R.PROVIDER_NAME,address:s,privateKey:n,mnemonic:null};return $t(this.config,this.chain.name,o),o}async export(){let e=this.getAccount(),t=Ht(this.config,this.chain.name),r=bn(this.config,this.chain.name);return{provider:R.PROVIDER_NAME,address:e.address.toBech32(),privateKey:t||null,mnemonic:r||null}}async generate(){let e=G.generate(),t=e.hex(),n=e.generatePublicKey().toAddress(this.chain.addressHrp).toBech32();return{provider:R.PROVIDER_NAME,address:n,privateKey:t,mnemonic:null}}getAccount(){if(this.account)return this.account;let e=Ht(this.config,this.chain.name);if(!e)throw new Error("No private key provided");let r=e.startsWith("-----")?G.fromPem(e):G.fromString(e);return this.account=new Tn(r,this.chain.addressHrp),this.account}};R.PROVIDER_NAME="privateKey";var z=R;import{getWarpWalletAddressFromConfig as q}from"@joai/warps";var D=class{constructor(e,t){this.config=e;this.chain=t}async getAddress(){return q(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=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async importFromPrivateKey(e){let t=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${t}`)}async export(){let e=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}async generate(){let e=q(this.config,this.chain.name);throw new Error(`Wallet can not be used for signing: ${e}`)}};var fe=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 In(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 D)throw new Error(`Wallet (${this.chain.name}) is read-only`);if(this.walletProvider instanceof z||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=Nn.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 D)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,Pn.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 D(this.config,this.chain):e.provider?this.createProviderForOperation(e.provider):new D(this.config,this.chain):null}initializeCache(){Sn(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 z(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 ye=(i,e)=>(t,r)=>{let n=e[t.env],a=new Bn;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 ce(t,n),executor:new me(t,n,a),output:new K(t,n,a),serializer:new B({typeRegistry:a}),registry:new ge(t,n),explorer:new de(i,t),abiBuilder:()=>new F(t,n),brandBuilder:()=>new oe(t,n),dataLoader:new pe(t,n),wallet:new fe(t,n)}};import{WarpChainName as Q}from"@joai/warps";var Ge={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"},Gt=ye(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:Ge},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:Ge},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:Ge}});import{WarpChainName as qe}from"@joai/warps";var Un={chain:qe.Claws,identifier:"CLAW",name:"Claws",symbol:"CLAW",decimals:18,logoUrl:"https://raw.githubusercontent.com/JoAiHQ/assets/refs/heads/main/tokens/logos/claw.svg"},ze={name:qe.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:Un,minGasPrice:20000000000000n},zt=ye(qe.Claws,{mainnet:ze,testnet:ze,devnet:ze});var Tc=()=>[Gt,zt];import{WarpConstants as We,WarpSerializer as Qe}from"@joai/warps";var Pc=i=>new Qe().nativeToString(f.Token,i),Sc=i=>new Qe().nativeToString(f.CodeMeta,i),Ic=(i,e)=>{if(e===null)return f.Optional+We.ArgParamsSeparator;let t=i(e),r=t.indexOf(We.ArgParamsSeparator),n=t.substring(0,r),a=t.substring(r+1);return f.Optional+We.ArgParamsSeparator+n+We.ArgParamsSeparator+a},Nc=i=>new Qe().nativeToString(f.List,i);import{Address as Fn,AddressValue as On,BigUIntType as kn,BigUIntValue as qt,BooleanValue as Vn,BytesValue as Mn,CodeMetadata as Rn,CodeMetadataValue as Dn,CompositeType as Ln,CompositeValue as Kn,Field as je,FieldDefinition as Je,List as _n,NothingValue as Hn,OptionalValue as Xe,OptionValue as Ye,StringValue as $n,Struct as Gn,StructType as zn,TokenIdentifierType as qn,TokenIdentifierValue as Qt,U16Value as Qn,U32Value as jn,U64Type as Jn,U64Value as jt,U8Value as Xn,VariadicValue as Yn}from"@multiversx/sdk-core";var Vc=(i,e)=>i?Ye.newProvided(i):e?Ye.newMissingTyped(e):Ye.newMissing(),Mc=(i,e)=>i?new Xe(i.getType(),i):e?new Xe(e):Xe.newMissing(),Rc=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let e=i[0].getType();return new _n(e,i)},Dc=i=>Yn.fromItems(...i),Lc=i=>{let e=i.map(t=>t.getType());return new Kn(new Ln(...e),i)},Kc=i=>$n.fromUTF8(i),_c=i=>new Xn(i),Hc=i=>new Qn(i),$c=i=>new jn(i),Gc=i=>new jt(i),zc=i=>new qt(BigInt(i)),qc=i=>new Vn(i),Qc=i=>new On(Fn.newFromBech32(i)),jc=i=>new Qt(i),Jc=i=>Mn.fromHex(i),Xc=i=>new Gn(new zn("EsdtTokenPayment",[new Je("token_identifier","",new qn),new Je("token_nonce","",new Jn),new Je("amount","",new kn)]),[new je(new Qt(i.token.identifier),"token_identifier"),new je(new jt(BigInt(i.token.nonce)),"token_nonce"),new je(new qt(BigInt(i.amount)),"amount")]),Yc=i=>new Dn(Rn.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),Zc=()=>new Hn;export{zt as ClawsAdapter,rr as ClawsExplorers,k as ExplorerUrls,Ot as KnownTokens,Gt as MultiversxAdapter,tr as MultiversxExplorers,at as MultiversxExplorersConfig,Un as NativeTokenClaw,Ge as NativeTokenEgld,F as WarpMultiversxAbiBuilder,oe as WarpMultiversxBrandBuilder,ce as WarpMultiversxBuilder,Ca as WarpMultiversxConstants,Y as WarpMultiversxContractLoader,pe as WarpMultiversxDataLoader,me as WarpMultiversxExecutor,de as WarpMultiversxExplorer,f as WarpMultiversxInputTypes,K as WarpMultiversxOutput,ge as WarpMultiversxRegistry,B as WarpMultiversxSerializer,fe as WarpMultiversxWallet,Qc as address_value,Xc as asset_value,zc as biguint_value,qc as boolean_value,Sc as codemeta,Yc as codemeta_value,Lc as composite_value,ye as createMultiversxAdapter,kt as findKnownTokenById,Tc as getAllMultiversxAdapters,ea as getAllMultiversxChainNames,Ds as getKnownTokensForChain,W as getMultiversxEntrypoint,I as getMultiversxRegistryAddress,X as getNormalizedTokenIdentifier,Jc as hex_value,L as isNativeToken,Nc as list,Rc as list_value,Zc as nothing_value,Vc as option_value,Ic as optional,Mc as optional_value,Kc as string_value,Rt as toTypedConfigInfo,he as toTypedRegistryInfo,Pc as token,jc as token_value,Hc as u16_value,$c as u32_value,Gc as u64_value,_c as u8_value,Dc as variadic_value};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@joai/warps-adapter-multiversx",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
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": "^
|
|
41
|
+
"@joai/warps": "^4.0.0"
|
|
42
42
|
}
|
|
43
43
|
}
|