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