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