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