@vleap/warps-adapter-multiversx 0.2.0-alpha.15 → 0.2.0-alpha.17

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.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { WarpChainEnv, WarpClientConfig, Adapter, AdapterWarpAbiBuilder, WarpAbi, WarpCacheConfig, WarpContractAction, WarpQueryAction, WarpBrand, WarpBuilder, AdapterWarpBuilder, Warp, WarpChainInfo, WarpContract, WarpContractVerification, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpRegistry, WarpRegistryConfigInfo, WarpRegistryInfo, WarpChain, AdapterWarpResults, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
2
2
  import { TransactionOnNetwork, AbiRegistry, Transaction, NetworkEntrypoint, TypedValue, Type } from '@multiversx/sdk-core';
3
3
 
4
- declare const getMultiversxRegistryAddress: (env: WarpChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "####" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
4
+ declare const getMultiversxRegistryAddress: (env: WarpChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
5
5
 
6
6
  declare const WarpMultiversxConstants: {
7
7
  ChainName: string;
@@ -32,7 +32,7 @@ declare class WarpMultiversxBrandBuilder {
32
32
  private config;
33
33
  private core;
34
34
  constructor(config: WarpClientConfig);
35
- createInscriptionTransaction(brand: WarpBrand): Transaction;
35
+ createInscriptionTransaction(brand: WarpBrand): Promise<Transaction>;
36
36
  createFromTransaction(tx: TransactionOnNetwork, validateSchema?: boolean): Promise<WarpBrand>;
37
37
  createFromTransactionHash(hash: string): Promise<WarpBrand | null>;
38
38
  }
@@ -42,7 +42,7 @@ declare class WarpMultiversxBuilder extends WarpBuilder implements AdapterWarpBu
42
42
  private cache;
43
43
  private core;
44
44
  constructor(config: WarpClientConfig);
45
- createInscriptionTransaction(warp: Warp): Transaction;
45
+ createInscriptionTransaction(warp: Warp): Promise<Transaction>;
46
46
  createFromTransaction(tx: TransactionOnNetwork, validate?: boolean): Promise<Warp>;
47
47
  createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null>;
48
48
  }
@@ -83,14 +83,14 @@ declare class WarpMultiversxRegistry implements AdapterWarpRegistry {
83
83
  constructor(config: WarpClientConfig);
84
84
  init(): Promise<void>;
85
85
  getRegistryConfig(): WarpRegistryConfigInfo;
86
- createWarpRegisterTransaction(txHash: string, alias?: string | null, brand?: string | null): Transaction;
87
- createWarpUnregisterTransaction(txHash: string): Transaction;
88
- createWarpUpgradeTransaction(alias: string, txHash: string): Transaction;
89
- createWarpAliasSetTransaction(txHash: string, alias: string): Transaction;
90
- createWarpVerifyTransaction(txHash: string): Transaction;
91
- createWarpTransferOwnershipTransaction(txHash: string, newOwner: string): Transaction;
92
- createBrandRegisterTransaction(txHash: string): Transaction;
93
- createWarpBrandingTransaction(warpHash: string, brandHash: string): Transaction;
86
+ createWarpRegisterTransaction(txHash: string, alias?: string | null, brand?: string | null): Promise<Transaction>;
87
+ createWarpUnregisterTransaction(txHash: string): Promise<Transaction>;
88
+ createWarpUpgradeTransaction(alias: string, txHash: string): Promise<Transaction>;
89
+ createWarpAliasSetTransaction(txHash: string, alias: string): Promise<Transaction>;
90
+ createWarpVerifyTransaction(txHash: string): Promise<Transaction>;
91
+ createWarpTransferOwnershipTransaction(txHash: string, newOwner: string): Promise<Transaction>;
92
+ createBrandRegisterTransaction(txHash: string): Promise<Transaction>;
93
+ createWarpBrandingTransaction(warpHash: string, brandHash: string): Promise<Transaction>;
94
94
  getInfoByAlias(alias: string, cache?: WarpCacheConfig): Promise<{
95
95
  registryInfo: WarpRegistryInfo | null;
96
96
  brand: WarpBrand | null;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { WarpChainEnv, WarpClientConfig, Adapter, AdapterWarpAbiBuilder, WarpAbi, WarpCacheConfig, WarpContractAction, WarpQueryAction, WarpBrand, WarpBuilder, AdapterWarpBuilder, Warp, WarpChainInfo, WarpContract, WarpContractVerification, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpRegistry, WarpRegistryConfigInfo, WarpRegistryInfo, WarpChain, AdapterWarpResults, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
2
2
  import { TransactionOnNetwork, AbiRegistry, Transaction, NetworkEntrypoint, TypedValue, Type } from '@multiversx/sdk-core';
3
3
 
4
- declare const getMultiversxRegistryAddress: (env: WarpChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "####" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
4
+ declare const getMultiversxRegistryAddress: (env: WarpChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
5
5
 
6
6
  declare const WarpMultiversxConstants: {
7
7
  ChainName: string;
@@ -32,7 +32,7 @@ declare class WarpMultiversxBrandBuilder {
32
32
  private config;
33
33
  private core;
34
34
  constructor(config: WarpClientConfig);
35
- createInscriptionTransaction(brand: WarpBrand): Transaction;
35
+ createInscriptionTransaction(brand: WarpBrand): Promise<Transaction>;
36
36
  createFromTransaction(tx: TransactionOnNetwork, validateSchema?: boolean): Promise<WarpBrand>;
37
37
  createFromTransactionHash(hash: string): Promise<WarpBrand | null>;
38
38
  }
@@ -42,7 +42,7 @@ declare class WarpMultiversxBuilder extends WarpBuilder implements AdapterWarpBu
42
42
  private cache;
43
43
  private core;
44
44
  constructor(config: WarpClientConfig);
45
- createInscriptionTransaction(warp: Warp): Transaction;
45
+ createInscriptionTransaction(warp: Warp): Promise<Transaction>;
46
46
  createFromTransaction(tx: TransactionOnNetwork, validate?: boolean): Promise<Warp>;
47
47
  createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null>;
48
48
  }
@@ -83,14 +83,14 @@ declare class WarpMultiversxRegistry implements AdapterWarpRegistry {
83
83
  constructor(config: WarpClientConfig);
84
84
  init(): Promise<void>;
85
85
  getRegistryConfig(): WarpRegistryConfigInfo;
86
- createWarpRegisterTransaction(txHash: string, alias?: string | null, brand?: string | null): Transaction;
87
- createWarpUnregisterTransaction(txHash: string): Transaction;
88
- createWarpUpgradeTransaction(alias: string, txHash: string): Transaction;
89
- createWarpAliasSetTransaction(txHash: string, alias: string): Transaction;
90
- createWarpVerifyTransaction(txHash: string): Transaction;
91
- createWarpTransferOwnershipTransaction(txHash: string, newOwner: string): Transaction;
92
- createBrandRegisterTransaction(txHash: string): Transaction;
93
- createWarpBrandingTransaction(warpHash: string, brandHash: string): Transaction;
86
+ createWarpRegisterTransaction(txHash: string, alias?: string | null, brand?: string | null): Promise<Transaction>;
87
+ createWarpUnregisterTransaction(txHash: string): Promise<Transaction>;
88
+ createWarpUpgradeTransaction(alias: string, txHash: string): Promise<Transaction>;
89
+ createWarpAliasSetTransaction(txHash: string, alias: string): Promise<Transaction>;
90
+ createWarpVerifyTransaction(txHash: string): Promise<Transaction>;
91
+ createWarpTransferOwnershipTransaction(txHash: string, newOwner: string): Promise<Transaction>;
92
+ createBrandRegisterTransaction(txHash: string): Promise<Transaction>;
93
+ createWarpBrandingTransaction(warpHash: string, brandHash: string): Promise<Transaction>;
94
94
  getInfoByAlias(alias: string, cache?: WarpCacheConfig): Promise<{
95
95
  registryInfo: WarpRegistryInfo | null;
96
96
  brand: WarpBrand | null;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var Y=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var ct=Object.prototype.hasOwnProperty;var ut=(l,t)=>{for(var e in t)Y(l,e,{get:t[e],enumerable:!0})},pt=(l,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ot(t))!ct.call(l,a)&&a!==e&&Y(l,a,{get:()=>t[a],enumerable:!(r=st(t,a))||r.enumerable});return l};var lt=l=>pt(Y({},"__esModule",{value:!0}),l);var mt={};ut(mt,{WarpMultiversxAbiBuilder:()=>_,WarpMultiversxBrandBuilder:()=>H,WarpMultiversxBuilder:()=>D,WarpMultiversxConstants:()=>S,WarpMultiversxContractLoader:()=>Q,WarpMultiversxExecutor:()=>b,WarpMultiversxExplorer:()=>j,WarpMultiversxRegistry:()=>G,WarpMultiversxResults:()=>k,WarpMultiversxSerializer:()=>P,getMultiversxAdapter:()=>z,getMultiversxRegistryAddress:()=>W});module.exports=lt(mt);var W=l=>l==="devnet"?"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36":l==="testnet"?"####":"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";var S={ChainName:"multiversx",ChainPrefix:"mvx",Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};var J=require("@multiversx/sdk-core"),B=require("@vleap/warps");var Z=require("@vleap/warps");var g=require("@multiversx/sdk-core"),x=require("@vleap/warps");var q=require("@multiversx/sdk-core"),h=require("@vleap/warps");var n=require("@multiversx/sdk-core"),v=require("@vleap/warps"),et=new RegExp(`${v.WarpConstants.ArgParamsSeparator}(.*)`),P=class{constructor(){this.coreSerializer=new v.WarpSerializer}typedToString(t){if(t.hasClassOrSuperclass(n.OptionValue.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(n.OptionalValue.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(n.List.ClassName)){let e=t.getItems(),a=e.map(c=>this.typedToString(c).split(v.WarpConstants.ArgParamsSeparator)[0])[0],i=e.map(c=>this.typedToString(c).split(v.WarpConstants.ArgParamsSeparator)[1]);return`list:${a}:${i.join(",")}`}if(t.hasClassOrSuperclass(n.VariadicValue.ClassName)){let e=t.getItems(),a=e.map(c=>this.typedToString(c).split(v.WarpConstants.ArgParamsSeparator)[0])[0],i=e.map(c=>this.typedToString(c).split(v.WarpConstants.ArgParamsSeparator)[1]);return`variadic:${a}:${i.join(",")}`}if(t.hasClassOrSuperclass(n.CompositeValue.ClassName)){let e=t.getItems(),r=e.map(s=>this.typedToString(s).split(v.WarpConstants.ArgParamsSeparator)[0]),a=e.map(s=>this.typedToString(s).split(v.WarpConstants.ArgParamsSeparator)[1]),i=r.join(v.WarpConstants.ArgCompositeSeparator),c=a.join(v.WarpConstants.ArgCompositeSeparator);return`composite(${i}):${c}`}if(t.hasClassOrSuperclass(n.BigUIntValue.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(n.U8Value.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(n.U16Value.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(n.U32Value.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(n.U64Value.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(n.StringValue.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(n.BooleanValue.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(n.AddressValue.ClassName))return`address:${t.valueOf().bech32()}`;if(t.hasClassOrSuperclass(n.TokenIdentifierValue.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(n.BytesValue.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(n.CodeMetadataValue.ClassName))return`codemeta:${t.valueOf().toBuffer().toString("hex")}`;if(t.getType().getName()==="EsdtTokenPayment"){let e=t.getFieldValue("token_identifier").valueOf(),r=t.getFieldValue("token_nonce").valueOf(),a=t.getFieldValue("amount").valueOf();return`esdt:${e}|${r}|${a}`}throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${t.getClassName()}`)}typedToNative(t){let e=this.typedToString(t);return this.coreSerializer.stringToNative(e)}nativeToTyped(t,e){let r=this.coreSerializer.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new n.CompositeType(...e.split(v.WarpConstants.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new n.StringType;if(t==="uint8")return new n.U8Type;if(t==="uint16")return new n.U16Type;if(t==="uint32")return new n.U32Type;if(t==="uint64")return new n.U64Type;if(t==="biguint")return new n.BigUIntType;if(t==="bool")return new n.BooleanType;if(t==="address")return new n.AddressType;if(t==="token")return new n.TokenIdentifierType;if(t==="hex")return new n.BytesType;if(t==="codemeta")return new n.CodeMetadataType;if(t==="esdt"||t==="nft")return new n.StructType("EsdtTokenPayment",[new n.FieldDefinition("token_identifier","",new n.TokenIdentifierType),new n.FieldDefinition("token_nonce","",new n.U64Type),new n.FieldDefinition("amount","",new n.BigUIntType)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new n.NothingValue;if(e==="option"){let a=this.stringToTyped(r);return a instanceof n.NothingValue?n.OptionValue.newMissingTyped(a.getType()):n.OptionValue.newProvided(a)}if(e==="optional"){let a=this.stringToTyped(r);return a instanceof n.NothingValue?n.OptionalValue.newMissing():new n.OptionalValue(a.getType(),a)}if(e==="list"){let[a,i]=r.split(et,2),s=i.split(",").map(p=>this.stringToTyped(`${a}:${p}`));return new n.List(this.nativeToType(a),s)}if(e==="variadic"){let[a,i]=r.split(et,2),s=i.split(",").map(p=>this.stringToTyped(`${a}:${p}`));return new n.VariadicValue(new n.VariadicType(this.nativeToType(a)),s)}if(e.startsWith("composite")){let a=e.match(/\(([^)]+)\)/)?.[1],i=r.split(v.WarpConstants.ArgCompositeSeparator),c=a.split(v.WarpConstants.ArgCompositeSeparator),s=i.map((u,m)=>this.stringToTyped(`${c[m]}:${u}`)),p=s.map(u=>u.getType());return new n.CompositeValue(new n.CompositeType(...p),s)}if(e==="string")return r?n.StringValue.fromUTF8(r):new n.NothingValue;if(e==="uint8")return r?new n.U8Value(Number(r)):new n.NothingValue;if(e==="uint16")return r?new n.U16Value(Number(r)):new n.NothingValue;if(e==="uint32")return r?new n.U32Value(Number(r)):new n.NothingValue;if(e==="uint64")return r?new n.U64Value(BigInt(r)):new n.NothingValue;if(e==="biguint")return r?new n.BigUIntValue(BigInt(r)):new n.NothingValue;if(e==="bool")return r?new n.BooleanValue(typeof r=="boolean"?r:r==="true"):new n.NothingValue;if(e==="address")return r?new n.AddressValue(n.Address.newFromBech32(r)):new n.NothingValue;if(e==="token")return r?new n.TokenIdentifierValue(r):new n.NothingValue;if(e==="hex")return r?n.BytesValue.fromHex(r):new n.NothingValue;if(e==="codemeta")return new n.CodeMetadataValue(n.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let a=r.split(v.WarpConstants.ArgCompositeSeparator);return new n.Struct(this.nativeToType("esdt"),[new n.Field(new n.TokenIdentifierValue(a[0]),"token_identifier"),new n.Field(new n.U64Value(BigInt(a[1])),"token_nonce"),new n.Field(new n.BigUIntValue(BigInt(a[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof n.OptionType)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.OptionalType)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.ListType)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.VariadicType)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.StringType)return"string";if(t instanceof n.U8Type)return"uint8";if(t instanceof n.U16Type)return"uint16";if(t instanceof n.U32Type)return"uint32";if(t instanceof n.U64Type)return"uint64";if(t instanceof n.BigUIntType)return"biguint";if(t instanceof n.BooleanType)return"bool";if(t instanceof n.AddressType)return"address";if(t instanceof n.TokenIdentifierType)return"token";if(t instanceof n.BytesType)return"hex";if(t instanceof n.CodeMetadataType)return"codemeta";if(t instanceof n.StructType&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var k=class{constructor(t){this.config=t;this.abi=new _(t),this.serializer=new P,this.cache=new h.WarpCache(t.cache?.type)}async getTransactionExecutionResults(t,e){let{actionIndex:r}=(0,h.findWarpExecutableAction)(t),a=this.cache.get(h.WarpCacheKey.WarpExecutable(this.config.env,t.meta?.hash||"",r))??[],i=z(this.config),c=await this.extractContractResults(t,e,a),s=(0,h.getNextInfo)(this.config,i,t,r,c),p=(0,h.applyResultsToMessages)(t,c.results);return{success:e.status.isSuccessful(),warp:t,action:r,user:this.config.user?.wallets?.[S.ChainName]||null,txHash:e.hash,next:s,values:c.values,results:c.results,messages:p}}async extractContractResults(t,e,r){let{action:a,actionIndex:i}=(0,h.findWarpExecutableAction)(t),c=[],s={};if(!t.results||a.type!=="contract")return{values:c,results:s};if(!Object.values(t.results).some(I=>I.includes("out")||I.includes("event"))){for(let[I,y]of Object.entries(t.results))s[I]=y;return{values:c,results:await(0,h.evaluateResultsCommon)(t,s,i,r)}}let u=await this.abi.getAbiForAction(a),m=new q.TransactionEventsParser({abi:u}),T=new q.SmartContractTransactionsOutcomeParser({abi:u}).parseExecute({transactionOnNetwork:e,function:a.func||void 0});for(let[I,y]of Object.entries(t.results)){if(y.startsWith(h.WarpConstants.Transform.Prefix))continue;if(y.startsWith("input.")){s[I]=y;continue}let V=(0,h.parseResultsOutIndex)(y);if(V!==null&&V!==i){s[I]=null;continue}let[A,F,N]=y.split(".");if(A==="event"){if(!F||isNaN(Number(N)))continue;let R=Number(N),C=(0,q.findEventsByFirstTopic)(e,F),L=m.parseEvents({events:C})[0],K=Object.values(L)[R]||null;c.push(K),s[I]=K&&K.valueOf()}else if(A==="out"||A.startsWith("out[")){if(!F)continue;let R=Number(F),C=T.values[R-1]||null;N&&(C=C[N]||null),C&&typeof C=="object"&&(C="toFixed"in C?C.toFixed():C.valueOf()),c.push(C),s[I]=C&&C.valueOf()}else s[I]=y}return{values:c,results:await(0,h.evaluateResultsCommon)(t,s,i,r)}}async extractQueryResults(t,e,r,a){let i=e.map(u=>this.serializer.typedToString(u)),c=e.map(u=>this.serializer.typedToNative(u)[1]),s={};if(!t.results)return{values:i,results:s};let p=u=>{let m=u.split(".").slice(1).map(T=>parseInt(T)-1);if(m.length===0)return;let d=c[m[0]];for(let T=1;T<m.length;T++){if(d==null)return;d=d[m[T]]}return d};for(let[u,m]of Object.entries(t.results)){if(m.startsWith(h.WarpConstants.Transform.Prefix))continue;let d=(0,h.parseResultsOutIndex)(m);if(d!==null&&d!==r){s[u]=null;continue}m.startsWith("out.")||m==="out"||m.startsWith("out[")?s[u]=p(m)||null:s[u]=m}return{values:i,results:await(0,h.evaluateResultsCommon)(t,s,r,a)}}async resolveWarpResultsRecursively(t){let e=t.warp,r=t.entryActionIndex,a=t.executor,i=t.inputs,c=t.meta,s=new Map,p=new Set,u=this;async function m(y,V=[]){if(s.has(y))return s.get(y);if(p.has(y))throw new Error(`Circular dependency detected at action ${y}`);p.add(y);let A=e.actions[y-1];if(!A)throw new Error(`Action ${y} not found`);let F;if(A.type==="query")F=await a.executeQuery(e,y,V);else if(A.type==="collect")F=await a.executeCollect(e,y,V,c);else throw new Error(`Unsupported or interactive action type: ${A.type}`);if(s.set(y,F),e.results)for(let N of Object.values(e.results)){let C=String(N).match(/^out\[(\d+)\]/);if(C){let L=parseInt(C[1],10);L!==y&&!s.has(L)&&await m(L)}}return p.delete(y),F}await m(r,i);let d={};for(let y of s.values())for(let[V,A]of Object.entries(y.results))A!==null?d[V]=A:V in d||(d[V]=null);let T=await(0,h.evaluateResultsCommon)(e,d,r,i);return{...s.get(r),action:r,results:T}}};var f=require("@multiversx/sdk-core");var O=l=>f.StringValue.fromUTF8(l);var rt=l=>new f.U32Value(l);var nt=l=>new f.Struct(new f.StructType("EsdtTokenPayment",[new f.FieldDefinition("token_identifier","",new f.TokenIdentifierType),new f.FieldDefinition("token_nonce","",new f.U64Type),new f.FieldDefinition("amount","",new f.BigUIntType)]),[new f.Field(new f.TokenIdentifierValue(l.token.identifier),"token_identifier"),new f.Field(new f.U64Value(BigInt(l.token.nonce)),"token_nonce"),new f.Field(new f.BigUIntValue(BigInt(l.amount)),"amount")]);var b=class l{constructor(t){this.config=t;this.serializer=new P,this.abi=new _(this.config),this.results=new k(this.config)}async createTransaction(t){let e=(0,x.getWarpActionByIndex)(t.warp,t.action),r=null;if(e.type==="transfer")r=await this.createTransferTransaction(t);else if(e.type==="contract")r=await this.createContractCallTransaction(t);else{if(e.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(e.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${e.type})`);return r}async createTransferTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=g.Address.newFromBech32(e),a=new g.TransactionsFactoryConfig({chainID:t.chain.chainId}),i=t.data?Buffer.from(this.serializer.stringToTyped(t.data).valueOf()):null;return new g.TransferTransactionsFactory({config:a}).createTransactionForTransfer(r,{receiver:g.Address.newFromBech32(t.destination),nativeAmount:t.value,data:i?new Uint8Array(i):void 0})}async createContractCallTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=(0,x.getWarpActionByIndex)(t.warp,t.action),a=g.Address.newFromBech32(e),i=t.args.map(s=>this.serializer.stringToTyped(s)),c=new g.TransactionsFactoryConfig({chainID:t.chain.chainId});return new g.SmartContractTransactionsFactory({config:c}).createTransactionForExecute(a,{contract:g.Address.newFromBech32(t.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:i,nativeTransferAmount:t.value})}async executeQuery(t){let e=(0,x.getWarpActionByIndex)(t.warp,t.action);if(e.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${e.type}`);let r=await this.abi.getAbiForAction(e),a=t.args.map(R=>this.serializer.stringToTyped(R)),i=l.getChainEntrypoint(t.chain,this.config.env),c=g.Address.newFromBech32(t.destination),s=i.createSmartContractController(r),p=s.createQuery({contract:c,function:e.func||"",arguments:a}),u=await s.runQuery(p),m=u.returnCode==="ok",d=new g.ArgSerializer,T=r.getEndpoint(u.function||e.func||""),I=(u.returnDataParts||[]).map(R=>Buffer.from(R)),y=d.buffersToValues(I,T.output),{values:V,results:A}=await this.results.extractQueryResults(t.warp,y,t.action,t.resolvedInputs),F=z(this.config),N=(0,x.getNextInfo)(this.config,F,t.warp,t.action,A);return{success:m,warp:t.warp,action:t.action,user:this.config.user?.wallets?.[t.chain.name]||null,txHash:null,next:N,values:V,results:A,messages:(0,x.applyResultsToMessages)(t.warp,A)}}async preprocessInput(t,e,r,a){if(r==="esdt"){let[i,c,s,p]=a.split(x.WarpConstants.ArgCompositeSeparator);if(p)return e;let u=new g.Token({identifier:i,nonce:BigInt(c)});if(!new g.TokenComputer().isFungible(u))return e;let T=(0,x.findKnownTokenById)(i)?.decimals;if(T||(T=(await(await fetch(`${t.apiUrl}/tokens/${i}`)).json()).decimals),!T)throw new Error(`WarpActionExecutor: Decimals not found for token ${i}`);let I=nt(new g.TokenTransfer({token:u,amount:(0,x.shiftBigintBy)(s,T)}));return this.serializer.typedToString(I)+x.WarpConstants.ArgCompositeSeparator+T}return e}static getChainEntrypoint(t,e){let r="warp-sdk",a="api";return e==="devnet"?new g.DevnetEntrypoint(t.apiUrl,a,r):e==="testnet"?new g.TestnetEntrypoint(t.apiUrl,a,r):new g.MainnetEntrypoint(t.apiUrl,a,r)}};var Q=class{constructor(t){this.config=t}async getContract(t,e){try{let i=await b.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:i.ownerAddress,verified:i.isVerified||!1}}catch(r){return Z.WarpLogger.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let i=await b.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:i.codeHash,abi:i.source.abi}}catch(r){return Z.WarpLogger.error("WarpContractLoader: getVerificationInfo error",r),null}}};var _=class{constructor(t){this.config=t;this.contractLoader=new Q(this.config),this.cache=new B.WarpCache(this.config.cache?.type)}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={chain:S.ChainName,hash:t.hash,creator:t.sender.bech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=B.WarpCacheKey.WarpAbi(this.config.env,t);if(e){let s=this.cache.get(r);if(s)return B.WarpLogger.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),s}let a=(0,B.getMainChainInfo)(this.config),c=b.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let s=await c.getTransaction(t),p=await this.createFromTransaction(s);return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch(s){return B.WarpLogger.error("WarpAbiBuilder: Error creating from transaction hash",s),null}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);if(!t.address)throw new Error("WarpActionExecutor: Address not found");let e=(0,B.getMainChainInfo)(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return J.AbiRegistry.create(r.abi)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith(B.WarpConstants.IdentifierType.Hash)){let e=t.abi.split(B.WarpConstants.IdentifierParamSeparatorDefault)[1],r=await this.createFromTransactionHash(e);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return J.AbiRegistry.create(r.content)}else{let r=await(await fetch(t.abi)).json();return J.AbiRegistry.create(r)}}};var U=require("@multiversx/sdk-core"),M=require("@vleap/warps"),at=require("buffer");var H=class{constructor(t){this.config=t;this.core=new M.WarpBrandBuilder(t)}createInscriptionTransaction(t){let e=(0,M.getMainChainInfo)(this.config),r=this.config.user?.wallets?.[e.name];if(!r)throw new Error("BrandBuilder: user address not set");let a=new U.TransactionsFactoryConfig({chainID:e.chainId}),i=new U.TransferTransactionsFactory({config:a}),c=U.Address.newFromBech32(r),s=JSON.stringify(t);return i.createTransactionForNativeTokenTransfer(c,{receiver:U.Address.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from(at.Buffer.from(s))})}async createFromTransaction(t,e=!1){return await this.core.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=(0,M.getMainChainInfo)(this.config),a=b.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let i=await a.getTransaction(t);return this.createFromTransaction(i)}catch(i){return M.WarpLogger.error("BrandBuilder: Error creating from transaction hash",i),null}}};var $=require("@multiversx/sdk-core"),E=require("@vleap/warps");var D=class extends E.WarpBuilder{constructor(e){super(e);this.config=e;this.cache=new E.WarpCache(e.cache?.type),this.core=new E.WarpBuilder(e)}createInscriptionTransaction(e){let r=(0,E.getMainChainInfo)(this.config),a=this.config.user?.wallets?.[r.name];if(!a)throw new Error("WarpBuilder: user address not set");let i=new $.TransactionsFactoryConfig({chainID:r.chainId}),c=new $.TransferTransactionsFactory({config:i}),s=$.Address.newFromBech32(a),p=JSON.stringify(e),u=c.createTransactionForTransfer(s,{receiver:$.Address.newFromBech32(a),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(p))});return u.gasLimit=u.gasLimit+BigInt(2e6),u}async createFromTransaction(e,r=!1){let a=await this.core.createFromRaw(e.data.toString(),r);return a.meta={chain:S.ChainName,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},a}async createFromTransactionHash(e,r){let a=E.WarpCacheKey.Warp(this.config.env,e);if(r){let p=this.cache.get(a);if(p)return E.WarpLogger.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${e}`),p}let i=(0,E.getMainChainInfo)(this.config),s=b.getChainEntrypoint(i,this.config.env).createNetworkProvider();try{let p=await s.getTransaction(e),u=await this.createFromTransaction(p);return r&&r.ttl&&u&&this.cache.set(a,u,r.ttl),u}catch(p){return E.WarpLogger.error("WarpBuilder: Error creating from transaction hash",p),null}}};var j=class{constructor(t){this.chainInfo=t}getAccountUrl(t){return`${this.chainInfo.explorerUrl}/accounts/${t}`}getTransactionUrl(t){return`${this.chainInfo.explorerUrl}/transactions/${t}`}};var o=require("@multiversx/sdk-core"),w=require("@vleap/warps");var tt={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"}],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}]},{name:"setChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}],outputs:[]},{name:"removeChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"}],outputs:[]},{name:"getChain",mutability:"readonly",inputs:[{name:"name",type:"bytes"}],outputs:[{type:"ChainView"}]},{name:"getChains",mutability:"readonly",inputs:[],outputs:[{type:"variadic<ChainView>",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:{ChainView:{type:"struct",fields:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}]},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 X=l=>({hash:l.hash.toString("hex"),alias:l.alias?.toString()||null,trust:l.trust.toString(),owner:l.owner.toString(),createdAt:l.created_at.toNumber(),upgradedAt:l.upgraded_at?.toNumber(),brand:l.brand?.toString("hex")||null,upgrade:l.upgrade?.toString("hex")||null}),it=l=>({unitPrice:BigInt(l.unit_price.toString()),admins:l.admins.map(t=>t.toBech32())});var G=class{constructor(t){this.config=t;this.cache=new w.WarpCache(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=this.config.user?.wallets?.[S.ChainName]||null}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}createWarpRegisterTransaction(t,e,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 a=o.Address.newFromBech32(this.userWallet),i=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,c=()=>e&&r?[o.BytesValue.fromHex(t),o.BytesValue.fromUTF8(e),o.BytesValue.fromHex(r)]:e?[o.BytesValue.fromHex(t),o.BytesValue.fromUTF8(e)]:[o.BytesValue.fromHex(t)];return this.getFactory().createTransactionForExecute(a,{contract:o.Address.newFromBech32(W(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:i(),arguments:c()})}createWarpUnregisterTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[o.BytesValue.fromHex(t)]})}createWarpUpgradeTransaction(t,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 r=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromUTF8(t),o.BytesValue.fromHex(e)]})}createWarpAliasSetTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromHex(t),o.BytesValue.fromUTF8(e)]})}createWarpVerifyTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[o.BytesValue.fromHex(t)]})}createWarpTransferOwnershipTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[o.BytesValue.fromHex(t),new o.AddressValue(new o.Address(e))]})}createBrandRegisterTransaction(t){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 e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromHex(t)]})}createWarpBrandingTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromHex(t),o.BytesValue.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=w.WarpCacheKey.RegistryInfo(this.config.env,t),a=e?this.cache.get(r):null;if(a)return w.WarpLogger.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),a;let i=o.Address.newFromBech32(W(this.config.env)),c=this.getController(),s=c.createQuery({contract:i,function:"getInfoByAlias",arguments:[o.BytesValue.fromUTF8(t)]}),p=await c.runQuery(s),[u]=c.parseQueryResponse(p),m=u?X(u):null,d=m?.brand?await this.fetchBrand(m.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:m,brand:d},e.ttl),{registryInfo:m,brand:d}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=w.WarpCacheKey.RegistryInfo(this.config.env,t);if(e){let d=this.cache.get(r);if(d)return w.WarpLogger.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),d}let a=o.Address.newFromBech32(W(this.config.env)),i=this.getController(),c=i.createQuery({contract:a,function:"getInfoByHash",arguments:[o.BytesValue.fromHex(t)]}),s=await i.runQuery(c),[p]=i.parseQueryResponse(s),u=p?X(p):null,m=u?.brand?await this.fetchBrand(u.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:u,brand:m},e.ttl),{registryInfo:u,brand:m}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(W(this.config.env)),a=this.getController(),i=a.createQuery({contract:r,function:"getUserWarps",arguments:[new o.AddressValue(new o.Address(e))]}),c=await a.runQuery(i),[s]=a.parseQueryResponse(c);return s.map(X)}catch{return[]}}async getUserBrands(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(W(this.config.env)),a=this.getController(),i=a.createQuery({contract:r,function:"getUserBrands",arguments:[new o.AddressValue(new o.Address(e))]}),c=await a.runQuery(i),[s]=a.parseQueryResponse(c),p=s.map(d=>d.toString("hex")),u={ttl:365*24*60*60};return(await Promise.all(p.map(d=>this.fetchBrand(d,u)))).filter(d=>d!==null)}catch{return[]}}async getChainInfos(t){let e=w.WarpCacheKey.ChainInfos(this.config.env);if(t&&t.ttl){let u=this.cache.get(e);if(u)return w.WarpLogger.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),u}let r=o.Address.newFromBech32(W(this.config.env)),a=this.getController(),i=a.createQuery({contract:r,function:"getChains",arguments:[]}),c=await a.runQuery(i),[s]=a.parseQueryResponse(c),p=s.map(w.toTypedChainInfo);if(t&&t.ttl){for(let u of p)this.cache.set(w.WarpCacheKey.ChainInfo(this.config.env,u.chain),u,t.ttl);this.cache.set(e,p,t.ttl)}return p}async getChainInfo(t,e){try{let r=w.WarpCacheKey.ChainInfo(this.config.env,t),a=e?this.cache.get(r):null;if(a)return w.WarpLogger.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),a;let i=o.Address.newFromBech32(W(this.config.env)),c=this.getController(),s=c.createQuery({contract:i,function:"getChain",arguments:[o.BytesValue.fromUTF8(t)]}),p=await c.runQuery(s),[u]=c.parseQueryResponse(p),m=u?(0,w.toTypedChainInfo)(u):null;return e&&e.ttl&&m&&this.cache.set(r,m,e.ttl),m}catch{return null}}async setChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"setChain",gasLimit:BigInt(1e7),arguments:[O(t.name),O(t.displayName),O(t.chainId),rt(t.blockTime),O(t.addressHrp),O(t.apiUrl),O(t.explorerUrl),O(t.nativeToken)]})}async removeChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"removeChain",gasLimit:BigInt(1e7),arguments:[O(t)]})}async fetchBrand(t,e){let r=w.WarpCacheKey.Brand(this.config.env,t),a=e?this.cache.get(r):null;if(a)return w.WarpLogger.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),a;let i=(0,w.getMainChainInfo)(this.config),s=b.getChainEntrypoint(i,this.config.env).createNetworkProvider();try{let p=await s.getTransaction(t),u=JSON.parse(p.data.toString());return u.meta={hash:p.hash,creator:p.sender.bech32(),createdAt:new Date(p.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,u,e.ttl),u}catch{return null}}async loadRegistryConfigs(){let t=o.Address.newFromBech32(W(this.config.env)),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),a=r?it(r):null;this.registryConfig=a||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=(0,w.getMainChainInfo)(this.config),e=new o.TransactionsFactoryConfig({chainID:t.chainId}),r=o.AbiRegistry.create(tt);return new o.SmartContractTransactionsFactory({config:e,abi:r})}getController(){let t=(0,w.getMainChainInfo)(this.config),e=b.getChainEntrypoint(t,this.config.env),r=o.AbiRegistry.create(tt);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var z=l=>({chain:S.ChainName,prefix:S.ChainPrefix,builder:()=>new D(l),executor:new b(l),results:new k(l),serializer:new P,registry:new G(l),explorer:t=>new j(t),abiBuilder:()=>new _(l),brandBuilder:()=>new H(l)});0&&(module.exports={WarpMultiversxAbiBuilder,WarpMultiversxBrandBuilder,WarpMultiversxBuilder,WarpMultiversxConstants,WarpMultiversxContractLoader,WarpMultiversxExecutor,WarpMultiversxExplorer,WarpMultiversxRegistry,WarpMultiversxResults,WarpMultiversxSerializer,getMultiversxAdapter,getMultiversxRegistryAddress});
1
+ "use strict";var Y=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var ct=Object.prototype.hasOwnProperty;var ut=(l,t)=>{for(var e in t)Y(l,e,{get:t[e],enumerable:!0})},pt=(l,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ot(t))!ct.call(l,a)&&a!==e&&Y(l,a,{get:()=>t[a],enumerable:!(r=st(t,a))||r.enumerable});return l};var lt=l=>pt(Y({},"__esModule",{value:!0}),l);var mt={};ut(mt,{WarpMultiversxAbiBuilder:()=>_,WarpMultiversxBrandBuilder:()=>H,WarpMultiversxBuilder:()=>D,WarpMultiversxConstants:()=>S,WarpMultiversxContractLoader:()=>Q,WarpMultiversxExecutor:()=>v,WarpMultiversxExplorer:()=>j,WarpMultiversxRegistry:()=>G,WarpMultiversxResults:()=>N,WarpMultiversxSerializer:()=>P,getMultiversxAdapter:()=>z,getMultiversxRegistryAddress:()=>W});module.exports=lt(mt);var W=l=>{if(l==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(l==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var S={ChainName:"multiversx",ChainPrefix:"mvx",Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};var J=require("@multiversx/sdk-core"),B=require("@vleap/warps");var Z=require("@vleap/warps");var g=require("@multiversx/sdk-core"),x=require("@vleap/warps");var q=require("@multiversx/sdk-core"),h=require("@vleap/warps");var n=require("@multiversx/sdk-core"),b=require("@vleap/warps"),et=new RegExp(`${b.WarpConstants.ArgParamsSeparator}(.*)`),P=class{constructor(){this.coreSerializer=new b.WarpSerializer}typedToString(t){if(t.hasClassOrSuperclass(n.OptionValue.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(n.OptionalValue.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(n.List.ClassName)){let e=t.getItems(),a=e.map(c=>this.typedToString(c).split(b.WarpConstants.ArgParamsSeparator)[0])[0],i=e.map(c=>this.typedToString(c).split(b.WarpConstants.ArgParamsSeparator)[1]);return`list:${a}:${i.join(",")}`}if(t.hasClassOrSuperclass(n.VariadicValue.ClassName)){let e=t.getItems(),a=e.map(c=>this.typedToString(c).split(b.WarpConstants.ArgParamsSeparator)[0])[0],i=e.map(c=>this.typedToString(c).split(b.WarpConstants.ArgParamsSeparator)[1]);return`variadic:${a}:${i.join(",")}`}if(t.hasClassOrSuperclass(n.CompositeValue.ClassName)){let e=t.getItems(),r=e.map(s=>this.typedToString(s).split(b.WarpConstants.ArgParamsSeparator)[0]),a=e.map(s=>this.typedToString(s).split(b.WarpConstants.ArgParamsSeparator)[1]),i=r.join(b.WarpConstants.ArgCompositeSeparator),c=a.join(b.WarpConstants.ArgCompositeSeparator);return`composite(${i}):${c}`}if(t.hasClassOrSuperclass(n.BigUIntValue.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(n.U8Value.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(n.U16Value.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(n.U32Value.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(n.U64Value.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(n.StringValue.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(n.BooleanValue.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(n.AddressValue.ClassName))return`address:${t.valueOf().toBech32()}`;if(t.hasClassOrSuperclass(n.TokenIdentifierValue.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(n.BytesValue.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(n.CodeMetadataValue.ClassName))return`codemeta:${t.valueOf().toString()}`;if(t.getType().getName()==="EsdtTokenPayment"){let e=t.getFieldValue("token_identifier").valueOf(),r=t.getFieldValue("token_nonce").valueOf(),a=t.getFieldValue("amount").valueOf();return`esdt:${e}|${r}|${a}`}throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${t.getClassName()}`)}typedToNative(t){let e=this.typedToString(t);return this.coreSerializer.stringToNative(e)}nativeToTyped(t,e){let r=this.coreSerializer.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new n.CompositeType(...e.split(b.WarpConstants.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new n.StringType;if(t==="uint8")return new n.U8Type;if(t==="uint16")return new n.U16Type;if(t==="uint32")return new n.U32Type;if(t==="uint64")return new n.U64Type;if(t==="biguint")return new n.BigUIntType;if(t==="bool")return new n.BooleanType;if(t==="address")return new n.AddressType;if(t==="token")return new n.TokenIdentifierType;if(t==="hex")return new n.BytesType;if(t==="codemeta")return new n.CodeMetadataType;if(t==="esdt"||t==="nft")return new n.StructType("EsdtTokenPayment",[new n.FieldDefinition("token_identifier","",new n.TokenIdentifierType),new n.FieldDefinition("token_nonce","",new n.U64Type),new n.FieldDefinition("amount","",new n.BigUIntType)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new n.NothingValue;if(e==="option"){let a=this.stringToTyped(r);return a instanceof n.NothingValue?n.OptionValue.newMissingTyped(a.getType()):n.OptionValue.newProvided(a)}if(e==="optional"){let a=this.stringToTyped(r);return a instanceof n.NothingValue?n.OptionalValue.newMissing():new n.OptionalValue(a.getType(),a)}if(e==="list"){let[a,i]=r.split(et,2),s=i.split(",").map(p=>this.stringToTyped(`${a}:${p}`));return new n.List(this.nativeToType(a),s)}if(e==="variadic"){let[a,i]=r.split(et,2),s=i.split(",").map(p=>this.stringToTyped(`${a}:${p}`));return new n.VariadicValue(new n.VariadicType(this.nativeToType(a)),s)}if(e.startsWith("composite")){let a=e.match(/\(([^)]+)\)/)?.[1],i=r.split(b.WarpConstants.ArgCompositeSeparator),c=a.split(b.WarpConstants.ArgCompositeSeparator),s=i.map((u,m)=>this.stringToTyped(`${c[m]}:${u}`)),p=s.map(u=>u.getType());return new n.CompositeValue(new n.CompositeType(...p),s)}if(e==="string")return r?n.StringValue.fromUTF8(r):new n.NothingValue;if(e==="uint8")return r?new n.U8Value(Number(r)):new n.NothingValue;if(e==="uint16")return r?new n.U16Value(Number(r)):new n.NothingValue;if(e==="uint32")return r?new n.U32Value(Number(r)):new n.NothingValue;if(e==="uint64")return r?new n.U64Value(BigInt(r)):new n.NothingValue;if(e==="biguint")return r?new n.BigUIntValue(BigInt(r)):new n.NothingValue;if(e==="bool")return r?new n.BooleanValue(typeof r=="boolean"?r:r==="true"):new n.NothingValue;if(e==="address")return r?new n.AddressValue(n.Address.newFromBech32(r)):new n.NothingValue;if(e==="token")return r?new n.TokenIdentifierValue(r):new n.NothingValue;if(e==="hex")return r?n.BytesValue.fromHex(r):new n.NothingValue;if(e==="codemeta")return new n.CodeMetadataValue(n.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let a=r.split(b.WarpConstants.ArgCompositeSeparator);return new n.Struct(this.nativeToType("esdt"),[new n.Field(new n.TokenIdentifierValue(a[0]),"token_identifier"),new n.Field(new n.U64Value(BigInt(a[1])),"token_nonce"),new n.Field(new n.BigUIntValue(BigInt(a[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof n.OptionType)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.OptionalType)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.ListType)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.VariadicType)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof n.StringType)return"string";if(t instanceof n.U8Type)return"uint8";if(t instanceof n.U16Type)return"uint16";if(t instanceof n.U32Type)return"uint32";if(t instanceof n.U64Type)return"uint64";if(t instanceof n.BigUIntType)return"biguint";if(t instanceof n.BooleanType)return"bool";if(t instanceof n.AddressType)return"address";if(t instanceof n.TokenIdentifierType)return"token";if(t instanceof n.BytesType)return"hex";if(t instanceof n.CodeMetadataType)return"codemeta";if(t instanceof n.StructType&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var N=class{constructor(t){this.config=t;this.abi=new _(t),this.serializer=new P,this.cache=new h.WarpCache(t.cache?.type)}async getTransactionExecutionResults(t,e){let{actionIndex:r}=(0,h.findWarpExecutableAction)(t),a=this.cache.get(h.WarpCacheKey.WarpExecutable(this.config.env,t.meta?.hash||"",r))??[],i=z(this.config),c=await this.extractContractResults(t,e,a),s=(0,h.getNextInfo)(this.config,i,t,r,c),p=(0,h.applyResultsToMessages)(t,c.results);return{success:e.status.isSuccessful(),warp:t,action:r,user:this.config.user?.wallets?.[S.ChainName]||null,txHash:e.hash,next:s,values:c.values,results:c.results,messages:p}}async extractContractResults(t,e,r){let{action:a,actionIndex:i}=(0,h.findWarpExecutableAction)(t),c=[],s={};if(!t.results||a.type!=="contract")return{values:c,results:s};if(!Object.values(t.results).some(I=>I.includes("out")||I.includes("event"))){for(let[I,y]of Object.entries(t.results))s[I]=y;return{values:c,results:await(0,h.evaluateResultsCommon)(t,s,i,r)}}let u=await this.abi.getAbiForAction(a),m=new q.TransactionEventsParser({abi:u}),T=new q.SmartContractTransactionsOutcomeParser({abi:u}).parseExecute({transactionOnNetwork:e,function:a.func||void 0});for(let[I,y]of Object.entries(t.results)){if(y.startsWith(h.WarpConstants.Transform.Prefix))continue;if(y.startsWith("input.")){s[I]=y;continue}let V=(0,h.parseResultsOutIndex)(y);if(V!==null&&V!==i){s[I]=null;continue}let[A,F,k]=y.split(".");if(A==="event"){if(!F||isNaN(Number(k)))continue;let R=Number(k),C=(0,q.findEventsByFirstTopic)(e,F),L=m.parseEvents({events:C})[0],K=Object.values(L)[R]||null;c.push(K),s[I]=K&&K.valueOf()}else if(A==="out"||A.startsWith("out[")){if(!F)continue;let R=Number(F),C=T.values[R-1]||null;k&&(C=C[k]||null),C&&typeof C=="object"&&(C="toFixed"in C?C.toFixed():C.valueOf()),c.push(C),s[I]=C&&C.valueOf()}else s[I]=y}return{values:c,results:await(0,h.evaluateResultsCommon)(t,s,i,r)}}async extractQueryResults(t,e,r,a){let i=e.map(u=>this.serializer.typedToString(u)),c=e.map(u=>this.serializer.typedToNative(u)[1]),s={};if(!t.results)return{values:i,results:s};let p=u=>{let m=u.split(".").slice(1).map(T=>parseInt(T)-1);if(m.length===0)return;let d=c[m[0]];for(let T=1;T<m.length;T++){if(d==null)return;d=d[m[T]]}return d};for(let[u,m]of Object.entries(t.results)){if(m.startsWith(h.WarpConstants.Transform.Prefix))continue;let d=(0,h.parseResultsOutIndex)(m);if(d!==null&&d!==r){s[u]=null;continue}m.startsWith("out.")||m==="out"||m.startsWith("out[")?s[u]=p(m)||null:s[u]=m}return{values:i,results:await(0,h.evaluateResultsCommon)(t,s,r,a)}}async resolveWarpResultsRecursively(t){let e=t.warp,r=t.entryActionIndex,a=t.executor,i=t.inputs,c=t.meta,s=new Map,p=new Set,u=this;async function m(y,V=[]){if(s.has(y))return s.get(y);if(p.has(y))throw new Error(`Circular dependency detected at action ${y}`);p.add(y);let A=e.actions[y-1];if(!A)throw new Error(`Action ${y} not found`);let F;if(A.type==="query")F=await a.executeQuery(e,y,V);else if(A.type==="collect")F=await a.executeCollect(e,y,V,c);else throw new Error(`Unsupported or interactive action type: ${A.type}`);if(s.set(y,F),e.results)for(let k of Object.values(e.results)){let C=String(k).match(/^out\[(\d+)\]/);if(C){let L=parseInt(C[1],10);L!==y&&!s.has(L)&&await m(L)}}return p.delete(y),F}await m(r,i);let d={};for(let y of s.values())for(let[V,A]of Object.entries(y.results))A!==null?d[V]=A:V in d||(d[V]=null);let T=await(0,h.evaluateResultsCommon)(e,d,r,i);return{...s.get(r),action:r,results:T}}};var f=require("@multiversx/sdk-core");var O=l=>f.StringValue.fromUTF8(l);var rt=l=>new f.U32Value(l);var nt=l=>new f.Struct(new f.StructType("EsdtTokenPayment",[new f.FieldDefinition("token_identifier","",new f.TokenIdentifierType),new f.FieldDefinition("token_nonce","",new f.U64Type),new f.FieldDefinition("amount","",new f.BigUIntType)]),[new f.Field(new f.TokenIdentifierValue(l.token.identifier),"token_identifier"),new f.Field(new f.U64Value(BigInt(l.token.nonce)),"token_nonce"),new f.Field(new f.BigUIntValue(BigInt(l.amount)),"amount")]);var v=class l{constructor(t){this.config=t;this.serializer=new P,this.abi=new _(this.config),this.results=new N(this.config)}async createTransaction(t){let e=(0,x.getWarpActionByIndex)(t.warp,t.action),r=null;if(e.type==="transfer")r=await this.createTransferTransaction(t);else if(e.type==="contract")r=await this.createContractCallTransaction(t);else{if(e.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(e.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${e.type})`);return r}async createTransferTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=g.Address.newFromBech32(e),a=new g.TransactionsFactoryConfig({chainID:t.chain.chainId}),i=t.data?Buffer.from(this.serializer.stringToTyped(t.data).valueOf()):null;return new g.TransferTransactionsFactory({config:a}).createTransactionForTransfer(r,{receiver:g.Address.newFromBech32(t.destination),nativeAmount:t.value,data:i?new Uint8Array(i):void 0})}async createContractCallTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=(0,x.getWarpActionByIndex)(t.warp,t.action),a=g.Address.newFromBech32(e),i=t.args.map(s=>this.serializer.stringToTyped(s)),c=new g.TransactionsFactoryConfig({chainID:t.chain.chainId});return new g.SmartContractTransactionsFactory({config:c}).createTransactionForExecute(a,{contract:g.Address.newFromBech32(t.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:i,nativeTransferAmount:t.value})}async executeQuery(t){let e=(0,x.getWarpActionByIndex)(t.warp,t.action);if(e.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${e.type}`);let r=await this.abi.getAbiForAction(e),a=t.args.map(R=>this.serializer.stringToTyped(R)),i=l.getChainEntrypoint(t.chain,this.config.env),c=g.Address.newFromBech32(t.destination),s=i.createSmartContractController(r),p=s.createQuery({contract:c,function:e.func||"",arguments:a}),u=await s.runQuery(p),m=u.returnCode==="ok",d=new g.ArgSerializer,T=r.getEndpoint(u.function||e.func||""),I=(u.returnDataParts||[]).map(R=>Buffer.from(R)),y=d.buffersToValues(I,T.output),{values:V,results:A}=await this.results.extractQueryResults(t.warp,y,t.action,t.resolvedInputs),F=z(this.config),k=(0,x.getNextInfo)(this.config,F,t.warp,t.action,A);return{success:m,warp:t.warp,action:t.action,user:this.config.user?.wallets?.[t.chain.name]||null,txHash:null,next:k,values:V,results:A,messages:(0,x.applyResultsToMessages)(t.warp,A)}}async preprocessInput(t,e,r,a){if(r==="esdt"){let[i,c,s,p]=a.split(x.WarpConstants.ArgCompositeSeparator);if(p)return e;let u=new g.Token({identifier:i,nonce:BigInt(c)});if(!new g.TokenComputer().isFungible(u))return e;let T=(0,x.findKnownTokenById)(i)?.decimals;if(T||(T=(await(await fetch(`${t.apiUrl}/tokens/${i}`)).json()).decimals),!T)throw new Error(`WarpActionExecutor: Decimals not found for token ${i}`);let I=nt(new g.TokenTransfer({token:u,amount:(0,x.shiftBigintBy)(s,T)}));return this.serializer.typedToString(I)+x.WarpConstants.ArgCompositeSeparator+T}return e}static getChainEntrypoint(t,e){let r="warp-sdk";return e==="devnet"?new g.DevnetEntrypoint({url:t.apiUrl,kind:"api",clientName:r}):e==="testnet"?new g.TestnetEntrypoint({url:t.apiUrl,kind:"api",clientName:r}):new g.MainnetEntrypoint({url:t.apiUrl,kind:"api",clientName:r})}};var Q=class{constructor(t){this.config=t}async getContract(t,e){try{let i=await v.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:i.ownerAddress,verified:i.isVerified||!1}}catch(r){return Z.WarpLogger.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let i=await v.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:i.codeHash,abi:i.source.abi}}catch(r){return Z.WarpLogger.error("WarpContractLoader: getVerificationInfo error",r),null}}};var _=class{constructor(t){this.config=t;this.contractLoader=new Q(this.config),this.cache=new B.WarpCache(this.config.cache?.type)}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={chain:S.ChainName,hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=B.WarpCacheKey.WarpAbi(this.config.env,t);if(e){let s=this.cache.get(r);if(s)return B.WarpLogger.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),s}let a=(0,B.getMainChainInfo)(this.config),c=v.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let s=await c.getTransaction(t),p=await this.createFromTransaction(s);return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch(s){return B.WarpLogger.error("WarpAbiBuilder: Error creating from transaction hash",s),null}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);if(!t.address)throw new Error("WarpActionExecutor: Address not found");let e=(0,B.getMainChainInfo)(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return J.AbiRegistry.create(r.abi)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith(B.WarpConstants.IdentifierType.Hash)){let e=t.abi.split(B.WarpConstants.IdentifierParamSeparatorDefault)[1],r=await this.createFromTransactionHash(e);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return J.AbiRegistry.create(r.content)}else{let r=await(await fetch(t.abi)).json();return J.AbiRegistry.create(r)}}};var U=require("@multiversx/sdk-core"),M=require("@vleap/warps"),at=require("buffer");var H=class{constructor(t){this.config=t;this.core=new M.WarpBrandBuilder(t)}async createInscriptionTransaction(t){let e=(0,M.getMainChainInfo)(this.config),r=this.config.user?.wallets?.[e.name];if(!r)throw new Error("BrandBuilder: user address not set");let a=new U.TransactionsFactoryConfig({chainID:e.chainId}),i=new U.TransferTransactionsFactory({config:a}),c=U.Address.newFromBech32(r),s=JSON.stringify(t);return await i.createTransactionForNativeTokenTransfer(c,{receiver:U.Address.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from(at.Buffer.from(s))})}async createFromTransaction(t,e=!1){return await this.core.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=(0,M.getMainChainInfo)(this.config),a=v.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let i=await a.getTransaction(t);return this.createFromTransaction(i)}catch(i){return M.WarpLogger.error("BrandBuilder: Error creating from transaction hash",i),null}}};var $=require("@multiversx/sdk-core"),E=require("@vleap/warps");var D=class extends E.WarpBuilder{constructor(e){super(e);this.config=e;this.cache=new E.WarpCache(e.cache?.type),this.core=new E.WarpBuilder(e)}async createInscriptionTransaction(e){let r=(0,E.getMainChainInfo)(this.config),a=this.config.user?.wallets?.[r.name];if(!a)throw new Error("WarpBuilder: user address not set");let i=new $.TransactionsFactoryConfig({chainID:r.chainId}),c=new $.TransferTransactionsFactory({config:i}),s=$.Address.newFromBech32(a),p=JSON.stringify(e),u=await c.createTransactionForTransfer(s,{receiver:$.Address.newFromBech32(a),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(p))});return u.gasLimit=u.gasLimit+BigInt(2e6),u}async createFromTransaction(e,r=!1){let a=await this.core.createFromRaw(e.data.toString(),r);return a.meta={chain:S.ChainName,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},a}async createFromTransactionHash(e,r){let a=E.WarpCacheKey.Warp(this.config.env,e);if(r){let p=this.cache.get(a);if(p)return E.WarpLogger.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${e}`),p}let i=(0,E.getMainChainInfo)(this.config),s=v.getChainEntrypoint(i,this.config.env).createNetworkProvider();try{let p=await s.getTransaction(e),u=await this.createFromTransaction(p);return r&&r.ttl&&u&&this.cache.set(a,u,r.ttl),u}catch(p){return E.WarpLogger.error("WarpBuilder: Error creating from transaction hash",p),null}}};var j=class{constructor(t){this.chainInfo=t}getAccountUrl(t){return`${this.chainInfo.explorerUrl}/accounts/${t}`}getTransactionUrl(t){return`${this.chainInfo.explorerUrl}/transactions/${t}`}};var o=require("@multiversx/sdk-core"),w=require("@vleap/warps");var tt={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"}],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}]},{name:"setChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}],outputs:[]},{name:"removeChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"}],outputs:[]},{name:"getChain",mutability:"readonly",inputs:[{name:"name",type:"bytes"}],outputs:[{type:"ChainView"}]},{name:"getChains",mutability:"readonly",inputs:[],outputs:[{type:"variadic<ChainView>",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:{ChainView:{type:"struct",fields:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}]},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 X=l=>({hash:l.hash.toString("hex"),alias:l.alias?.toString()||null,trust:l.trust.toString(),owner:l.owner.toString(),createdAt:l.created_at.toNumber(),upgradedAt:l.upgraded_at?.toNumber(),brand:l.brand?.toString("hex")||null,upgrade:l.upgrade?.toString("hex")||null}),it=l=>({unitPrice:BigInt(l.unit_price.toString()),admins:l.admins.map(t=>t.toBech32())});var G=class{constructor(t){this.config=t;this.cache=new w.WarpCache(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=this.config.user?.wallets?.[S.ChainName]||null}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}async createWarpRegisterTransaction(t,e,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 a=o.Address.newFromBech32(this.userWallet),i=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,c=()=>e&&r?[o.BytesValue.fromHex(t),o.BytesValue.fromUTF8(e),o.BytesValue.fromHex(r)]:e?[o.BytesValue.fromHex(t),o.BytesValue.fromUTF8(e)]:[o.BytesValue.fromHex(t)];return await this.getFactory().createTransactionForExecute(a,{contract:o.Address.newFromBech32(W(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:i(),arguments:c()})}async createWarpUnregisterTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[o.BytesValue.fromHex(t)]})}async createWarpUpgradeTransaction(t,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 r=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromUTF8(t),o.BytesValue.fromHex(e)]})}async createWarpAliasSetTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromHex(t),o.BytesValue.fromUTF8(e)]})}async createWarpVerifyTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[o.BytesValue.fromHex(t)]})}async createWarpTransferOwnershipTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[o.BytesValue.fromHex(t),new o.AddressValue(new o.Address(e))]})}async createBrandRegisterTransaction(t){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 e=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromHex(t)]})}async createWarpBrandingTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:o.Address.newFromBech32(W(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[o.BytesValue.fromHex(t),o.BytesValue.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=w.WarpCacheKey.RegistryInfo(this.config.env,t),a=e?this.cache.get(r):null;if(a)return w.WarpLogger.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),a;let i=o.Address.newFromBech32(W(this.config.env)),c=this.getController(),s=c.createQuery({contract:i,function:"getInfoByAlias",arguments:[o.BytesValue.fromUTF8(t)]}),p=await c.runQuery(s),[u]=c.parseQueryResponse(p),m=u?X(u):null,d=m?.brand?await this.fetchBrand(m.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:m,brand:d},e.ttl),{registryInfo:m,brand:d}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=w.WarpCacheKey.RegistryInfo(this.config.env,t);if(e){let d=this.cache.get(r);if(d)return w.WarpLogger.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),d}let a=o.Address.newFromBech32(W(this.config.env)),i=this.getController(),c=i.createQuery({contract:a,function:"getInfoByHash",arguments:[o.BytesValue.fromHex(t)]}),s=await i.runQuery(c),[p]=i.parseQueryResponse(s),u=p?X(p):null,m=u?.brand?await this.fetchBrand(u.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:u,brand:m},e.ttl),{registryInfo:u,brand:m}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(W(this.config.env)),a=this.getController(),i=a.createQuery({contract:r,function:"getUserWarps",arguments:[new o.AddressValue(new o.Address(e))]}),c=await a.runQuery(i),[s]=a.parseQueryResponse(c);return s.map(X)}catch{return[]}}async getUserBrands(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=o.Address.newFromBech32(W(this.config.env)),a=this.getController(),i=a.createQuery({contract:r,function:"getUserBrands",arguments:[new o.AddressValue(new o.Address(e))]}),c=await a.runQuery(i),[s]=a.parseQueryResponse(c),p=s.map(d=>d.toString("hex")),u={ttl:365*24*60*60};return(await Promise.all(p.map(d=>this.fetchBrand(d,u)))).filter(d=>d!==null)}catch{return[]}}async getChainInfos(t){let e=w.WarpCacheKey.ChainInfos(this.config.env);if(t&&t.ttl){let u=this.cache.get(e);if(u)return w.WarpLogger.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),u}let r=o.Address.newFromBech32(W(this.config.env)),a=this.getController(),i=a.createQuery({contract:r,function:"getChains",arguments:[]}),c=await a.runQuery(i),[s]=a.parseQueryResponse(c),p=s.map(w.toTypedChainInfo);if(t&&t.ttl){for(let u of p)this.cache.set(w.WarpCacheKey.ChainInfo(this.config.env,u.chain),u,t.ttl);this.cache.set(e,p,t.ttl)}return p}async getChainInfo(t,e){try{let r=w.WarpCacheKey.ChainInfo(this.config.env,t),a=e?this.cache.get(r):null;if(a)return w.WarpLogger.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),a;let i=o.Address.newFromBech32(W(this.config.env)),c=this.getController(),s=c.createQuery({contract:i,function:"getChain",arguments:[o.BytesValue.fromUTF8(t)]}),p=await c.runQuery(s),[u]=c.parseQueryResponse(p),m=u?(0,w.toTypedChainInfo)(u):null;return e&&e.ttl&&m&&this.cache.set(r,m,e.ttl),m}catch{return null}}async setChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"setChain",gasLimit:BigInt(1e7),arguments:[O(t.name),O(t.displayName),O(t.chainId),rt(t.blockTime),O(t.addressHrp),O(t.apiUrl),O(t.explorerUrl),O(t.nativeToken)]})}async removeChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=o.Address.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:o.Address.newFromBech32(W(this.config.env)),function:"removeChain",gasLimit:BigInt(1e7),arguments:[O(t)]})}async fetchBrand(t,e){let r=w.WarpCacheKey.Brand(this.config.env,t),a=e?this.cache.get(r):null;if(a)return w.WarpLogger.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),a;let i=(0,w.getMainChainInfo)(this.config),s=v.getChainEntrypoint(i,this.config.env).createNetworkProvider();try{let p=await s.getTransaction(t),u=JSON.parse(p.data.toString());return u.meta={hash:p.hash,creator:p.sender.toBech32(),createdAt:new Date(p.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,u,e.ttl),u}catch{return null}}async loadRegistryConfigs(){let t=o.Address.newFromBech32(W(this.config.env)),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),a=r?it(r):null;this.registryConfig=a||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=(0,w.getMainChainInfo)(this.config),e=new o.TransactionsFactoryConfig({chainID:t.chainId}),r=o.AbiRegistry.create(tt);return new o.SmartContractTransactionsFactory({config:e,abi:r})}getController(){let t=(0,w.getMainChainInfo)(this.config),e=v.getChainEntrypoint(t,this.config.env),r=o.AbiRegistry.create(tt);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var z=l=>({chain:S.ChainName,prefix:S.ChainPrefix,builder:()=>new D(l),executor:new v(l),results:new N(l),serializer:new P,registry:new G(l),explorer:t=>new j(t),abiBuilder:()=>new _(l),brandBuilder:()=>new H(l)});0&&(module.exports={WarpMultiversxAbiBuilder,WarpMultiversxBrandBuilder,WarpMultiversxBuilder,WarpMultiversxConstants,WarpMultiversxContractLoader,WarpMultiversxExecutor,WarpMultiversxExplorer,WarpMultiversxRegistry,WarpMultiversxResults,WarpMultiversxSerializer,getMultiversxAdapter,getMultiversxRegistryAddress});
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var g=u=>u==="devnet"?"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36":u==="testnet"?"####":"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";var A={ChainName:"multiversx",ChainPrefix:"mvx",Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};import{AbiRegistry as at}from"@multiversx/sdk-core";import{getMainChainInfo as Mt,WarpCache as _e,WarpCacheKey as Oe,WarpConstants as $t,WarpLogger as qt}from"@vleap/warps";import{WarpLogger as Ut}from"@vleap/warps";import{Address as _,ArgSerializer as Ce,DevnetEntrypoint as be,MainnetEntrypoint as ve,SmartContractTransactionsFactory as Ie,TestnetEntrypoint as Ae,Token as xe,TokenComputer as Be,TokenTransfer as Ee,TransactionsFactoryConfig as Nt,TransferTransactionsFactory as Ve}from"@multiversx/sdk-core";import{applyResultsToMessages as Se,findKnownTokenById as Fe,getNextInfo as Re,getWarpActionByIndex as nt,shiftBigintBy as Pe,WarpConstants as kt}from"@vleap/warps";import{findEventsByFirstTopic as ae,SmartContractTransactionsOutcomeParser as ie,TransactionEventsParser as se}from"@multiversx/sdk-core";import{applyResultsToMessages as oe,evaluateResultsCommon as k,findWarpExecutableAction as Ft,getNextInfo as ce,parseResultsOutIndex as Rt,WarpCache as ue,WarpCacheKey as pe,WarpConstants as Pt}from"@vleap/warps";import{Address as Xt,AddressType as ct,AddressValue as ut,BigUIntType as H,BigUIntValue as D,BooleanType as pt,BooleanValue as lt,BytesType as ft,BytesValue as mt,CodeMetadata as Yt,CodeMetadataType as dt,CodeMetadataValue as gt,CompositeType as yt,CompositeValue as ht,Field as j,FieldDefinition as G,List as wt,ListType as Zt,NothingValue as C,OptionalType as te,OptionalValue as K,OptionType as ee,OptionValue as J,StringType as Wt,StringValue as Tt,Struct as re,StructType as Ct,TokenIdentifierType as X,TokenIdentifierValue as Y,U16Type as bt,U16Value as vt,U32Type as It,U32Value as At,U64Type as Z,U64Value as tt,U8Type as xt,U8Value as Bt,VariadicType as Et,VariadicValue as Vt}from"@multiversx/sdk-core";import{WarpConstants as b,WarpSerializer as ne}from"@vleap/warps";var St=new RegExp(`${b.ArgParamsSeparator}(.*)`),V=class{constructor(){this.coreSerializer=new ne}typedToString(t){if(t.hasClassOrSuperclass(J.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(K.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(wt.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(b.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(b.ArgParamsSeparator)[1]);return`list:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(Vt.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(b.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(b.ArgParamsSeparator)[1]);return`variadic:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(ht.ClassName)){let e=t.getItems(),r=e.map(i=>this.typedToString(i).split(b.ArgParamsSeparator)[0]),n=e.map(i=>this.typedToString(i).split(b.ArgParamsSeparator)[1]),a=r.join(b.ArgCompositeSeparator),s=n.join(b.ArgCompositeSeparator);return`composite(${a}):${s}`}if(t.hasClassOrSuperclass(D.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Bt.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(vt.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(At.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(tt.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Tt.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(lt.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(ut.ClassName))return`address:${t.valueOf().bech32()}`;if(t.hasClassOrSuperclass(Y.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(mt.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(gt.ClassName))return`codemeta:${t.valueOf().toBuffer().toString("hex")}`;if(t.getType().getName()==="EsdtTokenPayment"){let e=t.getFieldValue("token_identifier").valueOf(),r=t.getFieldValue("token_nonce").valueOf(),n=t.getFieldValue("amount").valueOf();return`esdt:${e}|${r}|${n}`}throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${t.getClassName()}`)}typedToNative(t){let e=this.typedToString(t);return this.coreSerializer.stringToNative(e)}nativeToTyped(t,e){let r=this.coreSerializer.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new yt(...e.split(b.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new Wt;if(t==="uint8")return new xt;if(t==="uint16")return new bt;if(t==="uint32")return new It;if(t==="uint64")return new Z;if(t==="biguint")return new H;if(t==="bool")return new pt;if(t==="address")return new ct;if(t==="token")return new X;if(t==="hex")return new ft;if(t==="codemeta")return new dt;if(t==="esdt"||t==="nft")return new Ct("EsdtTokenPayment",[new G("token_identifier","",new X),new G("token_nonce","",new Z),new G("amount","",new H)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new C;if(e==="option"){let n=this.stringToTyped(r);return n instanceof C?J.newMissingTyped(n.getType()):J.newProvided(n)}if(e==="optional"){let n=this.stringToTyped(r);return n instanceof C?K.newMissing():new K(n.getType(),n)}if(e==="list"){let[n,a]=r.split(St,2),i=a.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new wt(this.nativeToType(n),i)}if(e==="variadic"){let[n,a]=r.split(St,2),i=a.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new Vt(new Et(this.nativeToType(n)),i)}if(e.startsWith("composite")){let n=e.match(/\(([^)]+)\)/)?.[1],a=r.split(b.ArgCompositeSeparator),s=n.split(b.ArgCompositeSeparator),i=a.map((o,p)=>this.stringToTyped(`${s[p]}:${o}`)),c=i.map(o=>o.getType());return new ht(new yt(...c),i)}if(e==="string")return r?Tt.fromUTF8(r):new C;if(e==="uint8")return r?new Bt(Number(r)):new C;if(e==="uint16")return r?new vt(Number(r)):new C;if(e==="uint32")return r?new At(Number(r)):new C;if(e==="uint64")return r?new tt(BigInt(r)):new C;if(e==="biguint")return r?new D(BigInt(r)):new C;if(e==="bool")return r?new lt(typeof r=="boolean"?r:r==="true"):new C;if(e==="address")return r?new ut(Xt.newFromBech32(r)):new C;if(e==="token")return r?new Y(r):new C;if(e==="hex")return r?mt.fromHex(r):new C;if(e==="codemeta")return new gt(Yt.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let n=r.split(b.ArgCompositeSeparator);return new re(this.nativeToType("esdt"),[new j(new Y(n[0]),"token_identifier"),new j(new tt(BigInt(n[1])),"token_nonce"),new j(new D(BigInt(n[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof ee)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof te)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Zt)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Et)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Wt)return"string";if(t instanceof xt)return"uint8";if(t instanceof bt)return"uint16";if(t instanceof It)return"uint32";if(t instanceof Z)return"uint64";if(t instanceof H)return"biguint";if(t instanceof pt)return"bool";if(t instanceof ct)return"address";if(t instanceof X)return"token";if(t instanceof ft)return"hex";if(t instanceof dt)return"codemeta";if(t instanceof Ct&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var F=class{constructor(t){this.config=t;this.abi=new S(t),this.serializer=new V,this.cache=new ue(t.cache?.type)}async getTransactionExecutionResults(t,e){let{actionIndex:r}=Ft(t),n=this.cache.get(pe.WarpExecutable(this.config.env,t.meta?.hash||"",r))??[],a=U(this.config),s=await this.extractContractResults(t,e,n),i=ce(this.config,a,t,r,s),c=oe(t,s.results);return{success:e.status.isSuccessful(),warp:t,action:r,user:this.config.user?.wallets?.[A.ChainName]||null,txHash:e.hash,next:i,values:s.values,results:s.results,messages:c}}async extractContractResults(t,e,r){let{action:n,actionIndex:a}=Ft(t),s=[],i={};if(!t.results||n.type!=="contract")return{values:s,results:i};if(!Object.values(t.results).some(W=>W.includes("out")||W.includes("event"))){for(let[W,m]of Object.entries(t.results))i[W]=m;return{values:s,results:await k(t,i,a,r)}}let o=await this.abi.getAbiForAction(n),p=new se({abi:o}),y=new ie({abi:o}).parseExecute({transactionOnNetwork:e,function:n.func||void 0});for(let[W,m]of Object.entries(t.results)){if(m.startsWith(Pt.Transform.Prefix))continue;if(m.startsWith("input.")){i[W]=m;continue}let v=Rt(m);if(v!==null&&v!==a){i[W]=null;continue}let[T,I,E]=m.split(".");if(T==="event"){if(!I||isNaN(Number(E)))continue;let x=Number(E),h=ae(e,I),P=p.parseEvents({events:h})[0],N=Object.values(P)[x]||null;s.push(N),i[W]=N&&N.valueOf()}else if(T==="out"||T.startsWith("out[")){if(!I)continue;let x=Number(I),h=y.values[x-1]||null;E&&(h=h[E]||null),h&&typeof h=="object"&&(h="toFixed"in h?h.toFixed():h.valueOf()),s.push(h),i[W]=h&&h.valueOf()}else i[W]=m}return{values:s,results:await k(t,i,a,r)}}async extractQueryResults(t,e,r,n){let a=e.map(o=>this.serializer.typedToString(o)),s=e.map(o=>this.serializer.typedToNative(o)[1]),i={};if(!t.results)return{values:a,results:i};let c=o=>{let p=o.split(".").slice(1).map(y=>parseInt(y)-1);if(p.length===0)return;let f=s[p[0]];for(let y=1;y<p.length;y++){if(f==null)return;f=f[p[y]]}return f};for(let[o,p]of Object.entries(t.results)){if(p.startsWith(Pt.Transform.Prefix))continue;let f=Rt(p);if(f!==null&&f!==r){i[o]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?i[o]=c(p)||null:i[o]=p}return{values:a,results:await k(t,i,r,n)}}async resolveWarpResultsRecursively(t){let e=t.warp,r=t.entryActionIndex,n=t.executor,a=t.inputs,s=t.meta,i=new Map,c=new Set,o=this;async function p(m,v=[]){if(i.has(m))return i.get(m);if(c.has(m))throw new Error(`Circular dependency detected at action ${m}`);c.add(m);let T=e.actions[m-1];if(!T)throw new Error(`Action ${m} not found`);let I;if(T.type==="query")I=await n.executeQuery(e,m,v);else if(T.type==="collect")I=await n.executeCollect(e,m,v,s);else throw new Error(`Unsupported or interactive action type: ${T.type}`);if(i.set(m,I),e.results)for(let E of Object.values(e.results)){let h=String(E).match(/^out\[(\d+)\]/);if(h){let P=parseInt(h[1],10);P!==m&&!i.has(P)&&await p(P)}}return c.delete(m),I}await p(r,a);let f={};for(let m of i.values())for(let[v,T]of Object.entries(m.results))T!==null?f[v]=T:v in f||(f[v]=null);let y=await k(e,f,r,a);return{...i.get(r),action:r,results:y}}};import{Address as Ar,AddressValue as xr,BigUIntType as le,BigUIntValue as fe,BooleanValue as Br,BytesValue as Er,CodeMetadata as Vr,CodeMetadataValue as Sr,CompositeType as Fr,CompositeValue as Rr,Field as et,FieldDefinition as rt,List as Pr,NothingValue as _r,OptionalValue as Or,OptionValue as Nr,StringValue as me,Struct as de,StructType as ge,TokenIdentifierType as ye,TokenIdentifierValue as he,U16Value as $r,U32Value as we,U64Type as We,U64Value as Te,U8Value as qr,VariadicValue as Lr}from"@multiversx/sdk-core";var B=u=>me.fromUTF8(u);var _t=u=>new we(u);var Ot=u=>new de(new ge("EsdtTokenPayment",[new rt("token_identifier","",new ye),new rt("token_nonce","",new We),new rt("amount","",new le)]),[new et(new he(u.token.identifier),"token_identifier"),new et(new Te(BigInt(u.token.nonce)),"token_nonce"),new et(new fe(BigInt(u.amount)),"amount")]);var w=class u{constructor(t){this.config=t;this.serializer=new V,this.abi=new S(this.config),this.results=new F(this.config)}async createTransaction(t){let e=nt(t.warp,t.action),r=null;if(e.type==="transfer")r=await this.createTransferTransaction(t);else if(e.type==="contract")r=await this.createContractCallTransaction(t);else{if(e.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(e.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${e.type})`);return r}async createTransferTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=_.newFromBech32(e),n=new Nt({chainID:t.chain.chainId}),a=t.data?Buffer.from(this.serializer.stringToTyped(t.data).valueOf()):null;return new Ve({config:n}).createTransactionForTransfer(r,{receiver:_.newFromBech32(t.destination),nativeAmount:t.value,data:a?new Uint8Array(a):void 0})}async createContractCallTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=nt(t.warp,t.action),n=_.newFromBech32(e),a=t.args.map(i=>this.serializer.stringToTyped(i)),s=new Nt({chainID:t.chain.chainId});return new Ie({config:s}).createTransactionForExecute(n,{contract:_.newFromBech32(t.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:a,nativeTransferAmount:t.value})}async executeQuery(t){let e=nt(t.warp,t.action);if(e.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${e.type}`);let r=await this.abi.getAbiForAction(e),n=t.args.map(x=>this.serializer.stringToTyped(x)),a=u.getChainEntrypoint(t.chain,this.config.env),s=_.newFromBech32(t.destination),i=a.createSmartContractController(r),c=i.createQuery({contract:s,function:e.func||"",arguments:n}),o=await i.runQuery(c),p=o.returnCode==="ok",f=new Ce,y=r.getEndpoint(o.function||e.func||""),W=(o.returnDataParts||[]).map(x=>Buffer.from(x)),m=f.buffersToValues(W,y.output),{values:v,results:T}=await this.results.extractQueryResults(t.warp,m,t.action,t.resolvedInputs),I=U(this.config),E=Re(this.config,I,t.warp,t.action,T);return{success:p,warp:t.warp,action:t.action,user:this.config.user?.wallets?.[t.chain.name]||null,txHash:null,next:E,values:v,results:T,messages:Se(t.warp,T)}}async preprocessInput(t,e,r,n){if(r==="esdt"){let[a,s,i,c]=n.split(kt.ArgCompositeSeparator);if(c)return e;let o=new xe({identifier:a,nonce:BigInt(s)});if(!new Be().isFungible(o))return e;let y=Fe(a)?.decimals;if(y||(y=(await(await fetch(`${t.apiUrl}/tokens/${a}`)).json()).decimals),!y)throw new Error(`WarpActionExecutor: Decimals not found for token ${a}`);let W=Ot(new Ee({token:o,amount:Pe(i,y)}));return this.serializer.typedToString(W)+kt.ArgCompositeSeparator+y}return e}static getChainEntrypoint(t,e){let r="warp-sdk",n="api";return e==="devnet"?new be(t.apiUrl,n,r):e==="testnet"?new Ae(t.apiUrl,n,r):new ve(t.apiUrl,n,r)}};var M=class{constructor(t){this.config=t}async getContract(t,e){try{let a=await w.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:a.ownerAddress,verified:a.isVerified||!1}}catch(r){return Ut.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let a=await w.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:a.codeHash,abi:a.source.abi}}catch(r){return Ut.error("WarpContractLoader: getVerificationInfo error",r),null}}};var S=class{constructor(t){this.config=t;this.contractLoader=new M(this.config),this.cache=new _e(this.config.cache?.type)}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={chain:A.ChainName,hash:t.hash,creator:t.sender.bech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=Oe.WarpAbi(this.config.env,t);if(e){let i=this.cache.get(r);if(i)return qt.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),i}let n=Mt(this.config),s=w.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let i=await s.getTransaction(t),c=await this.createFromTransaction(i);return e&&e.ttl&&c&&this.cache.set(r,c,e.ttl),c}catch(i){return qt.error("WarpAbiBuilder: Error creating from transaction hash",i),null}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);if(!t.address)throw new Error("WarpActionExecutor: Address not found");let e=Mt(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return at.create(r.abi)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith($t.IdentifierType.Hash)){let e=t.abi.split($t.IdentifierParamSeparatorDefault)[1],r=await this.createFromTransactionHash(e);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return at.create(r.content)}else{let r=await(await fetch(t.abi)).json();return at.create(r)}}};import{Address as Lt,TransactionsFactoryConfig as Ne,TransferTransactionsFactory as ke}from"@multiversx/sdk-core";import{getMainChainInfo as zt,WarpBrandBuilder as Ue,WarpLogger as Me}from"@vleap/warps";import{Buffer as $e}from"buffer";var $=class{constructor(t){this.config=t;this.core=new Ue(t)}createInscriptionTransaction(t){let e=zt(this.config),r=this.config.user?.wallets?.[e.name];if(!r)throw new Error("BrandBuilder: user address not set");let n=new Ne({chainID:e.chainId}),a=new ke({config:n}),s=Lt.newFromBech32(r),i=JSON.stringify(t);return a.createTransactionForNativeTokenTransfer(s,{receiver:Lt.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from($e.from(i))})}async createFromTransaction(t,e=!1){return await this.core.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=zt(this.config),n=w.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let a=await n.getTransaction(t);return this.createFromTransaction(a)}catch(a){return Me.error("BrandBuilder: Error creating from transaction hash",a),null}}};import{Address as Qt,TransactionsFactoryConfig as qe,TransferTransactionsFactory as Le}from"@multiversx/sdk-core";import{getMainChainInfo as Ht,WarpBuilder as Dt,WarpCache as ze,WarpCacheKey as Qe,WarpLogger as jt}from"@vleap/warps";var q=class extends Dt{constructor(e){super(e);this.config=e;this.cache=new ze(e.cache?.type),this.core=new Dt(e)}createInscriptionTransaction(e){let r=Ht(this.config),n=this.config.user?.wallets?.[r.name];if(!n)throw new Error("WarpBuilder: user address not set");let a=new qe({chainID:r.chainId}),s=new Le({config:a}),i=Qt.newFromBech32(n),c=JSON.stringify(e),o=s.createTransactionForTransfer(i,{receiver:Qt.newFromBech32(n),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(c))});return o.gasLimit=o.gasLimit+BigInt(2e6),o}async createFromTransaction(e,r=!1){let n=await this.core.createFromRaw(e.data.toString(),r);return n.meta={chain:A.ChainName,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},n}async createFromTransactionHash(e,r){let n=Qe.Warp(this.config.env,e);if(r){let c=this.cache.get(n);if(c)return jt.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${e}`),c}let a=Ht(this.config),i=w.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let c=await i.getTransaction(e),o=await this.createFromTransaction(c);return r&&r.ttl&&o&&this.cache.set(n,o,r.ttl),o}catch(c){return jt.error("WarpBuilder: Error creating from transaction hash",c),null}}};var L=class{constructor(t){this.chainInfo=t}getAccountUrl(t){return`${this.chainInfo.explorerUrl}/accounts/${t}`}getTransactionUrl(t){return`${this.chainInfo.explorerUrl}/transactions/${t}`}};import{AbiRegistry as Kt,Address as l,AddressValue as st,BytesValue as d,SmartContractTransactionsFactory as De,TransactionsFactoryConfig as je}from"@multiversx/sdk-core";import{getMainChainInfo as ot,toTypedChainInfo as Jt,WarpCache as Ge,WarpCacheKey as R,WarpLogger as O}from"@vleap/warps";var it={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"}],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}]},{name:"setChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}],outputs:[]},{name:"removeChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"}],outputs:[]},{name:"getChain",mutability:"readonly",inputs:[{name:"name",type:"bytes"}],outputs:[{type:"ChainView"}]},{name:"getChains",mutability:"readonly",inputs:[],outputs:[{type:"variadic<ChainView>",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:{ChainView:{type:"struct",fields:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}]},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 z=u=>({hash:u.hash.toString("hex"),alias:u.alias?.toString()||null,trust:u.trust.toString(),owner:u.owner.toString(),createdAt:u.created_at.toNumber(),upgradedAt:u.upgraded_at?.toNumber(),brand:u.brand?.toString("hex")||null,upgrade:u.upgrade?.toString("hex")||null}),Gt=u=>({unitPrice:BigInt(u.unit_price.toString()),admins:u.admins.map(t=>t.toBech32())});var Q=class{constructor(t){this.config=t;this.cache=new Ge(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=this.config.user?.wallets?.[A.ChainName]||null}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}createWarpRegisterTransaction(t,e,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=l.newFromBech32(this.userWallet),a=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,s=()=>e&&r?[d.fromHex(t),d.fromUTF8(e),d.fromHex(r)]:e?[d.fromHex(t),d.fromUTF8(e)]:[d.fromHex(t)];return this.getFactory().createTransactionForExecute(n,{contract:l.newFromBech32(g(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:a(),arguments:s()})}createWarpUnregisterTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[d.fromHex(t)]})}createWarpUpgradeTransaction(t,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 r=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromUTF8(t),d.fromHex(e)]})}createWarpAliasSetTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromHex(t),d.fromUTF8(e)]})}createWarpVerifyTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[d.fromHex(t)]})}createWarpTransferOwnershipTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[d.fromHex(t),new st(new l(e))]})}createBrandRegisterTransaction(t){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 e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromHex(t)]})}createWarpBrandingTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromHex(t),d.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=R.RegistryInfo(this.config.env,t),n=e?this.cache.get(r):null;if(n)return O.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),n;let a=l.newFromBech32(g(this.config.env)),s=this.getController(),i=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[d.fromUTF8(t)]}),c=await s.runQuery(i),[o]=s.parseQueryResponse(c),p=o?z(o):null,f=p?.brand?await this.fetchBrand(p.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:p,brand:f},e.ttl),{registryInfo:p,brand:f}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=R.RegistryInfo(this.config.env,t);if(e){let f=this.cache.get(r);if(f)return O.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),f}let n=l.newFromBech32(g(this.config.env)),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[d.fromHex(t)]}),i=await a.runQuery(s),[c]=a.parseQueryResponse(i),o=c?z(c):null,p=o?.brand?await this.fetchBrand(o.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:o,brand:p},e.ttl),{registryInfo:o,brand:p}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(g(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new st(new l(e))]}),s=await n.runQuery(a),[i]=n.parseQueryResponse(s);return i.map(z)}catch{return[]}}async getUserBrands(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(g(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new st(new l(e))]}),s=await n.runQuery(a),[i]=n.parseQueryResponse(s),c=i.map(f=>f.toString("hex")),o={ttl:365*24*60*60};return(await Promise.all(c.map(f=>this.fetchBrand(f,o)))).filter(f=>f!==null)}catch{return[]}}async getChainInfos(t){let e=R.ChainInfos(this.config.env);if(t&&t.ttl){let o=this.cache.get(e);if(o)return O.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),o}let r=l.newFromBech32(g(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getChains",arguments:[]}),s=await n.runQuery(a),[i]=n.parseQueryResponse(s),c=i.map(Jt);if(t&&t.ttl){for(let o of c)this.cache.set(R.ChainInfo(this.config.env,o.chain),o,t.ttl);this.cache.set(e,c,t.ttl)}return c}async getChainInfo(t,e){try{let r=R.ChainInfo(this.config.env,t),n=e?this.cache.get(r):null;if(n)return O.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),n;let a=l.newFromBech32(g(this.config.env)),s=this.getController(),i=s.createQuery({contract:a,function:"getChain",arguments:[d.fromUTF8(t)]}),c=await s.runQuery(i),[o]=s.parseQueryResponse(c),p=o?Jt(o):null;return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch{return null}}async setChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"setChain",gasLimit:BigInt(1e7),arguments:[B(t.name),B(t.displayName),B(t.chainId),_t(t.blockTime),B(t.addressHrp),B(t.apiUrl),B(t.explorerUrl),B(t.nativeToken)]})}async removeChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"removeChain",gasLimit:BigInt(1e7),arguments:[B(t)]})}async fetchBrand(t,e){let r=R.Brand(this.config.env,t),n=e?this.cache.get(r):null;if(n)return O.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),n;let a=ot(this.config),i=w.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let c=await i.getTransaction(t),o=JSON.parse(c.data.toString());return o.meta={hash:c.hash,creator:c.sender.bech32(),createdAt:new Date(c.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,o,e.ttl),o}catch{return null}}async loadRegistryConfigs(){let t=l.newFromBech32(g(this.config.env)),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),n=r?Gt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=ot(this.config),e=new je({chainID:t.chainId}),r=Kt.create(it);return new De({config:e,abi:r})}getController(){let t=ot(this.config),e=w.getChainEntrypoint(t,this.config.env),r=Kt.create(it);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var U=u=>({chain:A.ChainName,prefix:A.ChainPrefix,builder:()=>new q(u),executor:new w(u),results:new F(u),serializer:new V,registry:new Q(u),explorer:t=>new L(t),abiBuilder:()=>new S(u),brandBuilder:()=>new $(u)});export{S as WarpMultiversxAbiBuilder,$ as WarpMultiversxBrandBuilder,q as WarpMultiversxBuilder,A as WarpMultiversxConstants,M as WarpMultiversxContractLoader,w as WarpMultiversxExecutor,L as WarpMultiversxExplorer,Q as WarpMultiversxRegistry,F as WarpMultiversxResults,V as WarpMultiversxSerializer,U as getMultiversxAdapter,g as getMultiversxRegistryAddress};
1
+ var g=u=>{if(u==="devnet")return"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36";if(u==="testnet")throw new Error("Multiversx testnet is not supported");return"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"};var A={ChainName:"multiversx",ChainPrefix:"mvx",Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};import{AbiRegistry as at}from"@multiversx/sdk-core";import{getMainChainInfo as Mt,WarpCache as _e,WarpCacheKey as Oe,WarpConstants as $t,WarpLogger as qt}from"@vleap/warps";import{WarpLogger as Ut}from"@vleap/warps";import{Address as _,ArgSerializer as Ce,DevnetEntrypoint as ve,MainnetEntrypoint as be,SmartContractTransactionsFactory as Ie,TestnetEntrypoint as Ae,Token as xe,TokenComputer as Be,TokenTransfer as Ee,TransactionsFactoryConfig as kt,TransferTransactionsFactory as Ve}from"@multiversx/sdk-core";import{applyResultsToMessages as Se,findKnownTokenById as Fe,getNextInfo as Re,getWarpActionByIndex as nt,shiftBigintBy as Pe,WarpConstants as Nt}from"@vleap/warps";import{findEventsByFirstTopic as ae,SmartContractTransactionsOutcomeParser as ie,TransactionEventsParser as se}from"@multiversx/sdk-core";import{applyResultsToMessages as oe,evaluateResultsCommon as N,findWarpExecutableAction as Ft,getNextInfo as ce,parseResultsOutIndex as Rt,WarpCache as ue,WarpCacheKey as pe,WarpConstants as Pt}from"@vleap/warps";import{Address as Xt,AddressType as ct,AddressValue as ut,BigUIntType as H,BigUIntValue as D,BooleanType as pt,BooleanValue as lt,BytesType as ft,BytesValue as mt,CodeMetadata as Yt,CodeMetadataType as dt,CodeMetadataValue as gt,CompositeType as yt,CompositeValue as ht,Field as j,FieldDefinition as G,List as wt,ListType as Zt,NothingValue as C,OptionalType as te,OptionalValue as K,OptionType as ee,OptionValue as J,StringType as Wt,StringValue as Tt,Struct as re,StructType as Ct,TokenIdentifierType as X,TokenIdentifierValue as Y,U16Type as vt,U16Value as bt,U32Type as It,U32Value as At,U64Type as Z,U64Value as tt,U8Type as xt,U8Value as Bt,VariadicType as Et,VariadicValue as Vt}from"@multiversx/sdk-core";import{WarpConstants as v,WarpSerializer as ne}from"@vleap/warps";var St=new RegExp(`${v.ArgParamsSeparator}(.*)`),V=class{constructor(){this.coreSerializer=new ne}typedToString(t){if(t.hasClassOrSuperclass(J.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(K.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(wt.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(v.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(v.ArgParamsSeparator)[1]);return`list:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(Vt.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(v.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(v.ArgParamsSeparator)[1]);return`variadic:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(ht.ClassName)){let e=t.getItems(),r=e.map(i=>this.typedToString(i).split(v.ArgParamsSeparator)[0]),n=e.map(i=>this.typedToString(i).split(v.ArgParamsSeparator)[1]),a=r.join(v.ArgCompositeSeparator),s=n.join(v.ArgCompositeSeparator);return`composite(${a}):${s}`}if(t.hasClassOrSuperclass(D.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Bt.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(bt.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(At.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(tt.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Tt.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(lt.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(ut.ClassName))return`address:${t.valueOf().toBech32()}`;if(t.hasClassOrSuperclass(Y.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(mt.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(gt.ClassName))return`codemeta:${t.valueOf().toString()}`;if(t.getType().getName()==="EsdtTokenPayment"){let e=t.getFieldValue("token_identifier").valueOf(),r=t.getFieldValue("token_nonce").valueOf(),n=t.getFieldValue("amount").valueOf();return`esdt:${e}|${r}|${n}`}throw new Error(`WarpArgSerializer (typedToString): Unsupported input type: ${t.getClassName()}`)}typedToNative(t){let e=this.typedToString(t);return this.coreSerializer.stringToNative(e)}nativeToTyped(t,e){let r=this.coreSerializer.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new yt(...e.split(v.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new Wt;if(t==="uint8")return new xt;if(t==="uint16")return new vt;if(t==="uint32")return new It;if(t==="uint64")return new Z;if(t==="biguint")return new H;if(t==="bool")return new pt;if(t==="address")return new ct;if(t==="token")return new X;if(t==="hex")return new ft;if(t==="codemeta")return new dt;if(t==="esdt"||t==="nft")return new Ct("EsdtTokenPayment",[new G("token_identifier","",new X),new G("token_nonce","",new Z),new G("amount","",new H)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new C;if(e==="option"){let n=this.stringToTyped(r);return n instanceof C?J.newMissingTyped(n.getType()):J.newProvided(n)}if(e==="optional"){let n=this.stringToTyped(r);return n instanceof C?K.newMissing():new K(n.getType(),n)}if(e==="list"){let[n,a]=r.split(St,2),i=a.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new wt(this.nativeToType(n),i)}if(e==="variadic"){let[n,a]=r.split(St,2),i=a.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new Vt(new Et(this.nativeToType(n)),i)}if(e.startsWith("composite")){let n=e.match(/\(([^)]+)\)/)?.[1],a=r.split(v.ArgCompositeSeparator),s=n.split(v.ArgCompositeSeparator),i=a.map((o,p)=>this.stringToTyped(`${s[p]}:${o}`)),c=i.map(o=>o.getType());return new ht(new yt(...c),i)}if(e==="string")return r?Tt.fromUTF8(r):new C;if(e==="uint8")return r?new Bt(Number(r)):new C;if(e==="uint16")return r?new bt(Number(r)):new C;if(e==="uint32")return r?new At(Number(r)):new C;if(e==="uint64")return r?new tt(BigInt(r)):new C;if(e==="biguint")return r?new D(BigInt(r)):new C;if(e==="bool")return r?new lt(typeof r=="boolean"?r:r==="true"):new C;if(e==="address")return r?new ut(Xt.newFromBech32(r)):new C;if(e==="token")return r?new Y(r):new C;if(e==="hex")return r?mt.fromHex(r):new C;if(e==="codemeta")return new gt(Yt.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let n=r.split(v.ArgCompositeSeparator);return new re(this.nativeToType("esdt"),[new j(new Y(n[0]),"token_identifier"),new j(new tt(BigInt(n[1])),"token_nonce"),new j(new D(BigInt(n[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof ee)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof te)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Zt)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Et)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Wt)return"string";if(t instanceof xt)return"uint8";if(t instanceof vt)return"uint16";if(t instanceof It)return"uint32";if(t instanceof Z)return"uint64";if(t instanceof H)return"biguint";if(t instanceof pt)return"bool";if(t instanceof ct)return"address";if(t instanceof X)return"token";if(t instanceof ft)return"hex";if(t instanceof dt)return"codemeta";if(t instanceof Ct&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var F=class{constructor(t){this.config=t;this.abi=new S(t),this.serializer=new V,this.cache=new ue(t.cache?.type)}async getTransactionExecutionResults(t,e){let{actionIndex:r}=Ft(t),n=this.cache.get(pe.WarpExecutable(this.config.env,t.meta?.hash||"",r))??[],a=U(this.config),s=await this.extractContractResults(t,e,n),i=ce(this.config,a,t,r,s),c=oe(t,s.results);return{success:e.status.isSuccessful(),warp:t,action:r,user:this.config.user?.wallets?.[A.ChainName]||null,txHash:e.hash,next:i,values:s.values,results:s.results,messages:c}}async extractContractResults(t,e,r){let{action:n,actionIndex:a}=Ft(t),s=[],i={};if(!t.results||n.type!=="contract")return{values:s,results:i};if(!Object.values(t.results).some(W=>W.includes("out")||W.includes("event"))){for(let[W,m]of Object.entries(t.results))i[W]=m;return{values:s,results:await N(t,i,a,r)}}let o=await this.abi.getAbiForAction(n),p=new se({abi:o}),y=new ie({abi:o}).parseExecute({transactionOnNetwork:e,function:n.func||void 0});for(let[W,m]of Object.entries(t.results)){if(m.startsWith(Pt.Transform.Prefix))continue;if(m.startsWith("input.")){i[W]=m;continue}let b=Rt(m);if(b!==null&&b!==a){i[W]=null;continue}let[T,I,E]=m.split(".");if(T==="event"){if(!I||isNaN(Number(E)))continue;let x=Number(E),h=ae(e,I),P=p.parseEvents({events:h})[0],k=Object.values(P)[x]||null;s.push(k),i[W]=k&&k.valueOf()}else if(T==="out"||T.startsWith("out[")){if(!I)continue;let x=Number(I),h=y.values[x-1]||null;E&&(h=h[E]||null),h&&typeof h=="object"&&(h="toFixed"in h?h.toFixed():h.valueOf()),s.push(h),i[W]=h&&h.valueOf()}else i[W]=m}return{values:s,results:await N(t,i,a,r)}}async extractQueryResults(t,e,r,n){let a=e.map(o=>this.serializer.typedToString(o)),s=e.map(o=>this.serializer.typedToNative(o)[1]),i={};if(!t.results)return{values:a,results:i};let c=o=>{let p=o.split(".").slice(1).map(y=>parseInt(y)-1);if(p.length===0)return;let f=s[p[0]];for(let y=1;y<p.length;y++){if(f==null)return;f=f[p[y]]}return f};for(let[o,p]of Object.entries(t.results)){if(p.startsWith(Pt.Transform.Prefix))continue;let f=Rt(p);if(f!==null&&f!==r){i[o]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?i[o]=c(p)||null:i[o]=p}return{values:a,results:await N(t,i,r,n)}}async resolveWarpResultsRecursively(t){let e=t.warp,r=t.entryActionIndex,n=t.executor,a=t.inputs,s=t.meta,i=new Map,c=new Set,o=this;async function p(m,b=[]){if(i.has(m))return i.get(m);if(c.has(m))throw new Error(`Circular dependency detected at action ${m}`);c.add(m);let T=e.actions[m-1];if(!T)throw new Error(`Action ${m} not found`);let I;if(T.type==="query")I=await n.executeQuery(e,m,b);else if(T.type==="collect")I=await n.executeCollect(e,m,b,s);else throw new Error(`Unsupported or interactive action type: ${T.type}`);if(i.set(m,I),e.results)for(let E of Object.values(e.results)){let h=String(E).match(/^out\[(\d+)\]/);if(h){let P=parseInt(h[1],10);P!==m&&!i.has(P)&&await p(P)}}return c.delete(m),I}await p(r,a);let f={};for(let m of i.values())for(let[b,T]of Object.entries(m.results))T!==null?f[b]=T:b in f||(f[b]=null);let y=await N(e,f,r,a);return{...i.get(r),action:r,results:y}}};import{Address as Ar,AddressValue as xr,BigUIntType as le,BigUIntValue as fe,BooleanValue as Br,BytesValue as Er,CodeMetadata as Vr,CodeMetadataValue as Sr,CompositeType as Fr,CompositeValue as Rr,Field as et,FieldDefinition as rt,List as Pr,NothingValue as _r,OptionalValue as Or,OptionValue as kr,StringValue as me,Struct as de,StructType as ge,TokenIdentifierType as ye,TokenIdentifierValue as he,U16Value as $r,U32Value as we,U64Type as We,U64Value as Te,U8Value as qr,VariadicValue as Lr}from"@multiversx/sdk-core";var B=u=>me.fromUTF8(u);var _t=u=>new we(u);var Ot=u=>new de(new ge("EsdtTokenPayment",[new rt("token_identifier","",new ye),new rt("token_nonce","",new We),new rt("amount","",new le)]),[new et(new he(u.token.identifier),"token_identifier"),new et(new Te(BigInt(u.token.nonce)),"token_nonce"),new et(new fe(BigInt(u.amount)),"amount")]);var w=class u{constructor(t){this.config=t;this.serializer=new V,this.abi=new S(this.config),this.results=new F(this.config)}async createTransaction(t){let e=nt(t.warp,t.action),r=null;if(e.type==="transfer")r=await this.createTransferTransaction(t);else if(e.type==="contract")r=await this.createContractCallTransaction(t);else{if(e.type==="query")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(e.type==="collect")throw new Error("WarpMultiversxExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!r)throw new Error(`WarpMultiversxExecutor: Invalid action type (${e.type})`);return r}async createTransferTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createTransfer - user address not set");let r=_.newFromBech32(e),n=new kt({chainID:t.chain.chainId}),a=t.data?Buffer.from(this.serializer.stringToTyped(t.data).valueOf()):null;return new Ve({config:n}).createTransactionForTransfer(r,{receiver:_.newFromBech32(t.destination),nativeAmount:t.value,data:a?new Uint8Array(a):void 0})}async createContractCallTransaction(t){let e=this.config.user?.wallets?.[t.chain.name];if(!e)throw new Error("WarpMultiversxExecutor: createContractCall - user address not set");let r=nt(t.warp,t.action),n=_.newFromBech32(e),a=t.args.map(i=>this.serializer.stringToTyped(i)),s=new kt({chainID:t.chain.chainId});return new Ie({config:s}).createTransactionForExecute(n,{contract:_.newFromBech32(t.destination),function:"func"in r&&r.func||"",gasLimit:"gasLimit"in r?BigInt(r.gasLimit||0):0n,arguments:a,nativeTransferAmount:t.value})}async executeQuery(t){let e=nt(t.warp,t.action);if(e.type!=="query")throw new Error(`WarpMultiversxExecutor: Invalid action type for executeQuery: ${e.type}`);let r=await this.abi.getAbiForAction(e),n=t.args.map(x=>this.serializer.stringToTyped(x)),a=u.getChainEntrypoint(t.chain,this.config.env),s=_.newFromBech32(t.destination),i=a.createSmartContractController(r),c=i.createQuery({contract:s,function:e.func||"",arguments:n}),o=await i.runQuery(c),p=o.returnCode==="ok",f=new Ce,y=r.getEndpoint(o.function||e.func||""),W=(o.returnDataParts||[]).map(x=>Buffer.from(x)),m=f.buffersToValues(W,y.output),{values:b,results:T}=await this.results.extractQueryResults(t.warp,m,t.action,t.resolvedInputs),I=U(this.config),E=Re(this.config,I,t.warp,t.action,T);return{success:p,warp:t.warp,action:t.action,user:this.config.user?.wallets?.[t.chain.name]||null,txHash:null,next:E,values:b,results:T,messages:Se(t.warp,T)}}async preprocessInput(t,e,r,n){if(r==="esdt"){let[a,s,i,c]=n.split(Nt.ArgCompositeSeparator);if(c)return e;let o=new xe({identifier:a,nonce:BigInt(s)});if(!new Be().isFungible(o))return e;let y=Fe(a)?.decimals;if(y||(y=(await(await fetch(`${t.apiUrl}/tokens/${a}`)).json()).decimals),!y)throw new Error(`WarpActionExecutor: Decimals not found for token ${a}`);let W=Ot(new Ee({token:o,amount:Pe(i,y)}));return this.serializer.typedToString(W)+Nt.ArgCompositeSeparator+y}return e}static getChainEntrypoint(t,e){let r="warp-sdk";return e==="devnet"?new ve({url:t.apiUrl,kind:"api",clientName:r}):e==="testnet"?new Ae({url:t.apiUrl,kind:"api",clientName:r}):new be({url:t.apiUrl,kind:"api",clientName:r})}};var M=class{constructor(t){this.config=t}async getContract(t,e){try{let a=await w.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:a.ownerAddress,verified:a.isVerified||!1}}catch(r){return Ut.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let a=await w.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:a.codeHash,abi:a.source.abi}}catch(r){return Ut.error("WarpContractLoader: getVerificationInfo error",r),null}}};var S=class{constructor(t){this.config=t;this.contractLoader=new M(this.config),this.cache=new _e(this.config.cache?.type)}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={chain:A.ChainName,hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=Oe.WarpAbi(this.config.env,t);if(e){let i=this.cache.get(r);if(i)return qt.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),i}let n=Mt(this.config),s=w.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let i=await s.getTransaction(t),c=await this.createFromTransaction(i);return e&&e.ttl&&c&&this.cache.set(r,c,e.ttl),c}catch(i){return qt.error("WarpAbiBuilder: Error creating from transaction hash",i),null}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);if(!t.address)throw new Error("WarpActionExecutor: Address not found");let e=Mt(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return at.create(r.abi)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith($t.IdentifierType.Hash)){let e=t.abi.split($t.IdentifierParamSeparatorDefault)[1],r=await this.createFromTransactionHash(e);if(!r)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return at.create(r.content)}else{let r=await(await fetch(t.abi)).json();return at.create(r)}}};import{Address as Lt,TransactionsFactoryConfig as ke,TransferTransactionsFactory as Ne}from"@multiversx/sdk-core";import{getMainChainInfo as zt,WarpBrandBuilder as Ue,WarpLogger as Me}from"@vleap/warps";import{Buffer as $e}from"buffer";var $=class{constructor(t){this.config=t;this.core=new Ue(t)}async createInscriptionTransaction(t){let e=zt(this.config),r=this.config.user?.wallets?.[e.name];if(!r)throw new Error("BrandBuilder: user address not set");let n=new ke({chainID:e.chainId}),a=new Ne({config:n}),s=Lt.newFromBech32(r),i=JSON.stringify(t);return await a.createTransactionForNativeTokenTransfer(s,{receiver:Lt.newFromBech32(r),nativeAmount:BigInt(0),data:Uint8Array.from($e.from(i))})}async createFromTransaction(t,e=!1){return await this.core.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=zt(this.config),n=w.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let a=await n.getTransaction(t);return this.createFromTransaction(a)}catch(a){return Me.error("BrandBuilder: Error creating from transaction hash",a),null}}};import{Address as Qt,TransactionsFactoryConfig as qe,TransferTransactionsFactory as Le}from"@multiversx/sdk-core";import{getMainChainInfo as Ht,WarpBuilder as Dt,WarpCache as ze,WarpCacheKey as Qe,WarpLogger as jt}from"@vleap/warps";var q=class extends Dt{constructor(e){super(e);this.config=e;this.cache=new ze(e.cache?.type),this.core=new Dt(e)}async createInscriptionTransaction(e){let r=Ht(this.config),n=this.config.user?.wallets?.[r.name];if(!n)throw new Error("WarpBuilder: user address not set");let a=new qe({chainID:r.chainId}),s=new Le({config:a}),i=Qt.newFromBech32(n),c=JSON.stringify(e),o=await s.createTransactionForTransfer(i,{receiver:Qt.newFromBech32(n),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(c))});return o.gasLimit=o.gasLimit+BigInt(2e6),o}async createFromTransaction(e,r=!1){let n=await this.core.createFromRaw(e.data.toString(),r);return n.meta={chain:A.ChainName,hash:e.hash,creator:e.sender.toBech32(),createdAt:new Date(e.timestamp*1e3).toISOString()},n}async createFromTransactionHash(e,r){let n=Qe.Warp(this.config.env,e);if(r){let c=this.cache.get(n);if(c)return jt.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${e}`),c}let a=Ht(this.config),i=w.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let c=await i.getTransaction(e),o=await this.createFromTransaction(c);return r&&r.ttl&&o&&this.cache.set(n,o,r.ttl),o}catch(c){return jt.error("WarpBuilder: Error creating from transaction hash",c),null}}};var L=class{constructor(t){this.chainInfo=t}getAccountUrl(t){return`${this.chainInfo.explorerUrl}/accounts/${t}`}getTransactionUrl(t){return`${this.chainInfo.explorerUrl}/transactions/${t}`}};import{AbiRegistry as Kt,Address as l,AddressValue as st,BytesValue as d,SmartContractTransactionsFactory as De,TransactionsFactoryConfig as je}from"@multiversx/sdk-core";import{getMainChainInfo as ot,toTypedChainInfo as Jt,WarpCache as Ge,WarpCacheKey as R,WarpLogger as O}from"@vleap/warps";var it={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"}],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}]},{name:"setChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}],outputs:[]},{name:"removeChain",onlyOwner:!0,mutability:"mutable",inputs:[{name:"name",type:"bytes"}],outputs:[]},{name:"getChain",mutability:"readonly",inputs:[{name:"name",type:"bytes"}],outputs:[{type:"ChainView"}]},{name:"getChains",mutability:"readonly",inputs:[],outputs:[{type:"variadic<ChainView>",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:{ChainView:{type:"struct",fields:[{name:"name",type:"bytes"},{name:"display_name",type:"bytes"},{name:"chain_id",type:"bytes"},{name:"block_time",type:"u32"},{name:"address_hrp",type:"bytes"},{name:"api_url",type:"bytes"},{name:"explorer_url",type:"bytes"},{name:"native_token",type:"bytes"}]},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 z=u=>({hash:u.hash.toString("hex"),alias:u.alias?.toString()||null,trust:u.trust.toString(),owner:u.owner.toString(),createdAt:u.created_at.toNumber(),upgradedAt:u.upgraded_at?.toNumber(),brand:u.brand?.toString("hex")||null,upgrade:u.upgrade?.toString("hex")||null}),Gt=u=>({unitPrice:BigInt(u.unit_price.toString()),admins:u.admins.map(t=>t.toBech32())});var Q=class{constructor(t){this.config=t;this.cache=new Ge(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]},this.userWallet=this.config.user?.wallets?.[A.ChainName]||null}async init(){await this.loadRegistryConfigs()}getRegistryConfig(){return this.registryConfig}async createWarpRegisterTransaction(t,e,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=l.newFromBech32(this.userWallet),a=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,s=()=>e&&r?[d.fromHex(t),d.fromUTF8(e),d.fromHex(r)]:e?[d.fromHex(t),d.fromUTF8(e)]:[d.fromHex(t)];return await this.getFactory().createTransactionForExecute(n,{contract:l.newFromBech32(g(this.config.env)),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:a(),arguments:s()})}async createWarpUnregisterTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[d.fromHex(t)]})}async createWarpUpgradeTransaction(t,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 r=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromUTF8(t),d.fromHex(e)]})}async createWarpAliasSetTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromHex(t),d.fromUTF8(e)]})}async createWarpVerifyTransaction(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[d.fromHex(t)]})}async createWarpTransferOwnershipTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[d.fromHex(t),new st(new l(e))]})}async createBrandRegisterTransaction(t){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 e=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromHex(t)]})}async createWarpBrandingTransaction(t,e){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(this.userWallet);return await this.getFactory().createTransactionForExecute(r,{contract:l.newFromBech32(g(this.config.env)),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[d.fromHex(t),d.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=R.RegistryInfo(this.config.env,t),n=e?this.cache.get(r):null;if(n)return O.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),n;let a=l.newFromBech32(g(this.config.env)),s=this.getController(),i=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[d.fromUTF8(t)]}),c=await s.runQuery(i),[o]=s.parseQueryResponse(c),p=o?z(o):null,f=p?.brand?await this.fetchBrand(p.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:p,brand:f},e.ttl),{registryInfo:p,brand:f}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=R.RegistryInfo(this.config.env,t);if(e){let f=this.cache.get(r);if(f)return O.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),f}let n=l.newFromBech32(g(this.config.env)),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[d.fromHex(t)]}),i=await a.runQuery(s),[c]=a.parseQueryResponse(i),o=c?z(c):null,p=o?.brand?await this.fetchBrand(o.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:o,brand:p},e.ttl),{registryInfo:o,brand:p}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(g(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new st(new l(e))]}),s=await n.runQuery(a),[i]=n.parseQueryResponse(s);return i.map(z)}catch{return[]}}async getUserBrands(t){try{let e=t||this.userWallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=l.newFromBech32(g(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new st(new l(e))]}),s=await n.runQuery(a),[i]=n.parseQueryResponse(s),c=i.map(f=>f.toString("hex")),o={ttl:365*24*60*60};return(await Promise.all(c.map(f=>this.fetchBrand(f,o)))).filter(f=>f!==null)}catch{return[]}}async getChainInfos(t){let e=R.ChainInfos(this.config.env);if(t&&t.ttl){let o=this.cache.get(e);if(o)return O.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),o}let r=l.newFromBech32(g(this.config.env)),n=this.getController(),a=n.createQuery({contract:r,function:"getChains",arguments:[]}),s=await n.runQuery(a),[i]=n.parseQueryResponse(s),c=i.map(Jt);if(t&&t.ttl){for(let o of c)this.cache.set(R.ChainInfo(this.config.env,o.chain),o,t.ttl);this.cache.set(e,c,t.ttl)}return c}async getChainInfo(t,e){try{let r=R.ChainInfo(this.config.env,t),n=e?this.cache.get(r):null;if(n)return O.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),n;let a=l.newFromBech32(g(this.config.env)),s=this.getController(),i=s.createQuery({contract:a,function:"getChain",arguments:[d.fromUTF8(t)]}),c=await s.runQuery(i),[o]=s.parseQueryResponse(c),p=o?Jt(o):null;return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch{return null}}async setChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"setChain",gasLimit:BigInt(1e7),arguments:[B(t.name),B(t.displayName),B(t.chainId),_t(t.blockTime),B(t.addressHrp),B(t.apiUrl),B(t.explorerUrl),B(t.nativeToken)]})}async removeChain(t){if(!this.userWallet)throw new Error("WarpRegistry: user address not set");let e=l.newFromBech32(this.userWallet);return this.getFactory().createTransactionForExecute(e,{contract:l.newFromBech32(g(this.config.env)),function:"removeChain",gasLimit:BigInt(1e7),arguments:[B(t)]})}async fetchBrand(t,e){let r=R.Brand(this.config.env,t),n=e?this.cache.get(r):null;if(n)return O.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),n;let a=ot(this.config),i=w.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let c=await i.getTransaction(t),o=JSON.parse(c.data.toString());return o.meta={hash:c.hash,creator:c.sender.toBech32(),createdAt:new Date(c.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,o,e.ttl),o}catch{return null}}async loadRegistryConfigs(){let t=l.newFromBech32(g(this.config.env)),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),n=r?Gt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=ot(this.config),e=new je({chainID:t.chainId}),r=Kt.create(it);return new De({config:e,abi:r})}getController(){let t=ot(this.config),e=w.getChainEntrypoint(t,this.config.env),r=Kt.create(it);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.userWallet&&this.registryConfig.admins.includes(this.userWallet)}};var U=u=>({chain:A.ChainName,prefix:A.ChainPrefix,builder:()=>new q(u),executor:new w(u),results:new F(u),serializer:new V,registry:new Q(u),explorer:t=>new L(t),abiBuilder:()=>new S(u),brandBuilder:()=>new $(u)});export{S as WarpMultiversxAbiBuilder,$ as WarpMultiversxBrandBuilder,q as WarpMultiversxBuilder,A as WarpMultiversxConstants,M as WarpMultiversxContractLoader,w as WarpMultiversxExecutor,L as WarpMultiversxExplorer,Q as WarpMultiversxRegistry,F as WarpMultiversxResults,V as WarpMultiversxSerializer,U as getMultiversxAdapter,g as getMultiversxRegistryAddress};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-multiversx",
3
- "version": "0.2.0-alpha.15",
3
+ "version": "0.2.0-alpha.17",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -18,19 +18,19 @@
18
18
  "dist"
19
19
  ],
20
20
  "devDependencies": {
21
- "@types/jest": "^29.5.14",
22
- "jest": "^30.0.0",
23
- "jest-environment-jsdom": "^30.0.0",
21
+ "@types/jest": "^30.0.0",
22
+ "jest": "^30.0.5",
23
+ "jest-environment-jsdom": "^30.0.5",
24
24
  "jest-fetch-mock": "^3.0.3",
25
- "ts-jest": "^29.4.0",
25
+ "ts-jest": "^29.4.1",
26
26
  "tsup": "^8.5.0",
27
- "typescript": "^5.8.3"
27
+ "typescript": "^5.9.2"
28
28
  },
29
29
  "publishConfig": {
30
30
  "access": "public"
31
31
  },
32
32
  "dependencies": {
33
- "@multiversx/sdk-core": "^14.2.1",
34
- "@vleap/warps": "^3.0.0-alpha.56"
33
+ "@multiversx/sdk-core": "^15.0.0",
34
+ "@vleap/warps": "^3.0.0-alpha.58"
35
35
  }
36
36
  }