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