@vleap/warps 2.3.0-alpha.7 → 3.0.0-alpha.10

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
@@ -30,12 +30,12 @@ declare class WarpCache {
30
30
  clear(): void;
31
31
  }
32
32
 
33
- type ChainEnv = 'mainnet' | 'testnet' | 'devnet';
33
+ type WarpChainEnv = 'mainnet' | 'testnet' | 'devnet';
34
34
  type ProtocolName = 'warp' | 'brand' | 'abi';
35
35
 
36
36
  type WarpChain = string;
37
- type WarpConfig = {
38
- env: ChainEnv;
37
+ type WarpInitConfig = {
38
+ env: WarpChainEnv;
39
39
  clientUrl?: string;
40
40
  currentUrl?: string;
41
41
  vars?: Record<string, string | number>;
@@ -62,7 +62,7 @@ type WarpConfig = {
62
62
  type WarpCacheConfig = {
63
63
  ttl?: number;
64
64
  };
65
- type ChainInfo = {
65
+ type WarpChainInfo = {
66
66
  name: WarpChain;
67
67
  displayName: string;
68
68
  chainId: string;
@@ -199,12 +199,12 @@ type WarpContractVerification = {
199
199
  abi: object;
200
200
  };
201
201
 
202
- type WarpAbi = {
202
+ type WarpWarpAbi = {
203
203
  protocol: string;
204
- content: AbiContents;
204
+ content: WarpAbiContents;
205
205
  meta?: WarpMeta;
206
206
  };
207
- type AbiContents = {
207
+ type WarpAbiContents = {
208
208
  name?: string;
209
209
  constructor?: any;
210
210
  upgradeConstructor?: any;
@@ -242,18 +242,18 @@ type BrandMeta = {
242
242
  createdAt: string;
243
243
  };
244
244
 
245
- type TrustStatus = 'unverified' | 'verified' | 'blacklisted';
246
- type RegistryInfo = {
245
+ type WarpTrustStatus = 'unverified' | 'verified' | 'blacklisted';
246
+ type WarpRegistryInfo = {
247
247
  hash: string;
248
248
  alias: string | null;
249
- trust: TrustStatus;
249
+ trust: WarpTrustStatus;
250
250
  owner: string;
251
251
  createdAt: number;
252
252
  upgradedAt: number;
253
253
  brand: string | null;
254
254
  upgrade: string | null;
255
255
  };
256
- type ConfigInfo = {
256
+ type WarpRegistryConfigInfo = {
257
257
  unitPrice: bigint;
258
258
  admins: string[];
259
259
  };
@@ -294,7 +294,7 @@ type WarpSearchHit = {
294
294
  declare class BrandBuilder {
295
295
  private config;
296
296
  private pendingBrand;
297
- constructor(config: WarpConfig);
297
+ constructor(config: WarpInitConfig);
298
298
  createInscriptionTransaction(brand: Brand): Transaction;
299
299
  createFromRaw(encoded: string, validateSchema?: boolean): Promise<Brand>;
300
300
  createFromTransaction(tx: TransactionOnNetwork, validateSchema?: boolean): Promise<Brand>;
@@ -315,22 +315,22 @@ declare const WarpProtocolVersions: {
315
315
  Brand: string;
316
316
  Abi: string;
317
317
  };
318
- declare const Config: {
318
+ declare const WarpConfig: {
319
319
  LatestWarpSchemaUrl: string;
320
320
  LatestBrandSchemaUrl: string;
321
- DefaultClientUrl: (env: ChainEnv) => "https://usewarp.to" | "https://testnet.usewarp.to" | "https://devnet.usewarp.to";
321
+ DefaultClientUrl: (env: WarpChainEnv) => "https://usewarp.to" | "https://testnet.usewarp.to" | "https://devnet.usewarp.to";
322
322
  SuperClientUrls: string[];
323
323
  MainChain: {
324
324
  Name: string;
325
325
  DisplayName: string;
326
- ApiUrl: (env: ChainEnv) => "https://devnet-api.multiversx.com" | "https://testnet-api.multiversx.com" | "https://api.multiversx.com";
327
- ExplorerUrl: (env: ChainEnv) => "https://devnet-explorer.multiversx.com" | "https://testnet-explorer.multiversx.com" | "https://explorer.multiversx.com";
328
- BlockTime: (env: ChainEnv) => number;
326
+ ApiUrl: (env: WarpChainEnv) => "https://devnet-api.multiversx.com" | "https://testnet-api.multiversx.com" | "https://api.multiversx.com";
327
+ ExplorerUrl: (env: WarpChainEnv) => "https://devnet-explorer.multiversx.com" | "https://testnet-explorer.multiversx.com" | "https://explorer.multiversx.com";
328
+ BlockTime: (env: WarpChainEnv) => number;
329
329
  AddressHrp: string;
330
- ChainId: (env: ChainEnv) => "D" | "T" | "1";
330
+ ChainId: (env: WarpChainEnv) => "D" | "T" | "1";
331
331
  };
332
332
  Registry: {
333
- Contract: (env: ChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "####" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
333
+ Contract: (env: WarpChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "####" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
334
334
  };
335
335
  AvailableActionInputSources: WarpActionInputSource[];
336
336
  AvailableActionInputTypes: WarpActionInputType[];
@@ -338,13 +338,13 @@ declare const Config: {
338
338
  };
339
339
 
340
340
  type InterpolationBag = {
341
- config: WarpConfig;
342
- chain: ChainInfo;
341
+ config: WarpInitConfig;
342
+ chain: WarpChainInfo;
343
343
  };
344
344
  declare class WarpInterpolator {
345
- static apply(config: WarpConfig, warp: Warp): Promise<Warp>;
346
- static applyGlobals(config: WarpConfig, warp: Warp): Promise<Warp>;
347
- static applyVars(config: WarpConfig, warp: Warp): Warp;
345
+ static apply(config: WarpInitConfig, warp: Warp): Promise<Warp>;
346
+ static applyGlobals(config: WarpInitConfig, warp: Warp): Promise<Warp>;
347
+ static applyVars(config: WarpInitConfig, warp: Warp): Warp;
348
348
  private static applyRootGlobals;
349
349
  private static applyActionGlobals;
350
350
  }
@@ -391,11 +391,11 @@ declare const WarpConstants: {
391
391
  };
392
392
  };
393
393
 
394
- declare const getMainChainInfo: (config: WarpConfig) => ChainInfo;
395
- declare const getChainExplorerUrl: (chain: ChainInfo, path?: string) => string;
394
+ declare const getMainChainInfo: (config: WarpInitConfig) => WarpChainInfo;
395
+ declare const getChainExplorerUrl: (chain: WarpChainInfo, path?: string) => string;
396
396
  declare const getLatestProtocolIdentifier: (name: ProtocolName) => string;
397
397
  declare const getWarpActionByIndex: (warp: Warp, index: number) => WarpAction;
398
- declare const toTypedChainInfo: (chainInfo: any) => ChainInfo;
398
+ declare const toTypedChainInfo: (chainInfo: any) => WarpChainInfo;
399
399
  declare const shiftBigintBy: (value: bigint | string, decimals: number) => bigint;
400
400
  declare const toPreviewText: (text: string, maxChars?: number) => string;
401
401
  declare const replacePlaceholders: (message: string, bag: Record<string, any>) => string;
@@ -422,11 +422,11 @@ declare const nothing: () => NothingValue;
422
422
  declare class WarpAbiBuilder {
423
423
  private config;
424
424
  private cache;
425
- constructor(config: WarpConfig);
426
- createInscriptionTransaction(abi: AbiContents): Transaction;
427
- createFromRaw(encoded: string): Promise<WarpAbi>;
428
- createFromTransaction(tx: TransactionOnNetwork): Promise<WarpAbi>;
429
- createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<WarpAbi | null>;
425
+ constructor(config: WarpInitConfig);
426
+ createInscriptionTransaction(abi: WarpAbiContents): Transaction;
427
+ createFromRaw(encoded: string): Promise<WarpWarpAbi>;
428
+ createFromTransaction(tx: TransactionOnNetwork): Promise<WarpWarpAbi>;
429
+ createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<WarpWarpAbi | null>;
430
430
  }
431
431
 
432
432
  type TxComponents = {
@@ -443,15 +443,15 @@ declare class WarpActionExecutor {
443
443
  private serializer;
444
444
  private contractLoader;
445
445
  private cache;
446
- constructor(config: WarpConfig);
446
+ constructor(config: WarpInitConfig);
447
447
  createTransactionForExecute(warp: Warp, actionIndex: number, inputs: string[]): Promise<Transaction>;
448
448
  getTransactionExecutionResults(warp: Warp, actionIndex: number, tx: TransactionOnNetwork): Promise<WarpExecution>;
449
449
  executeQuery(warp: Warp, actionIndex: number, inputs: string[]): Promise<WarpExecution>;
450
450
  executeCollect(warp: Warp, actionIndex: number, inputs: string[], meta?: Record<string, any>): Promise<WarpExecution>;
451
- getTxComponentsFromInputs(chain: ChainInfo, action: WarpTransferAction | WarpContractAction | WarpQueryAction, inputs: string[], sender?: Address): Promise<TxComponents>;
452
- getResolvedInputs(chain: ChainInfo, action: WarpAction, inputArgs: string[]): Promise<ResolvedInput[]>;
451
+ getTxComponentsFromInputs(chain: WarpChainInfo, action: WarpTransferAction | WarpContractAction | WarpQueryAction, inputs: string[], sender?: Address): Promise<TxComponents>;
452
+ getResolvedInputs(chain: WarpChainInfo, action: WarpAction, inputArgs: string[]): Promise<ResolvedInput[]>;
453
453
  getModifiedInputs(inputs: ResolvedInput[]): ResolvedInput[];
454
- preprocessInput(chain: ChainInfo, input: string): Promise<string>;
454
+ preprocessInput(chain: WarpChainInfo, input: string): Promise<string>;
455
455
  getAbiForAction(action: WarpContractAction | WarpQueryAction): Promise<AbiRegistry>;
456
456
  private getPreparedArgs;
457
457
  private getPreparedMessages;
@@ -475,7 +475,7 @@ declare class WarpBuilder {
475
475
  private config;
476
476
  private cache;
477
477
  private pendingWarp;
478
- constructor(config: WarpConfig);
478
+ constructor(config: WarpInitConfig);
479
479
  createInscriptionTransaction(warp: Warp): Transaction;
480
480
  createFromRaw(encoded: string, validate?: boolean): Promise<Warp>;
481
481
  createFromTransaction(tx: TransactionOnNetwork, validate?: boolean): Promise<Warp>;
@@ -494,14 +494,14 @@ declare class WarpBuilder {
494
494
 
495
495
  declare class WarpContractLoader {
496
496
  private readonly config;
497
- constructor(config: WarpConfig);
498
- getContract(address: string, chain: ChainInfo): Promise<WarpContract | null>;
499
- getVerificationInfo(address: string, chain: ChainInfo): Promise<WarpContractVerification | null>;
497
+ constructor(config: WarpInitConfig);
498
+ getContract(address: string, chain: WarpChainInfo): Promise<WarpContract | null>;
499
+ getVerificationInfo(address: string, chain: WarpChainInfo): Promise<WarpContractVerification | null>;
500
500
  }
501
501
 
502
502
  declare class WarpIndex {
503
503
  private config;
504
- constructor(config: WarpConfig);
504
+ constructor(config: WarpInitConfig);
505
505
  search(query: string, params?: Record<string, any>, headers?: Record<string, string>): Promise<WarpSearchHit[]>;
506
506
  }
507
507
 
@@ -509,7 +509,7 @@ type DetectionResult = {
509
509
  match: boolean;
510
510
  url: string;
511
511
  warp: Warp | null;
512
- registryInfo: RegistryInfo | null;
512
+ registryInfo: WarpRegistryInfo | null;
513
513
  brand: Brand | null;
514
514
  };
515
515
  type DetectionResultFromHtml = {
@@ -521,7 +521,7 @@ type DetectionResultFromHtml = {
521
521
  };
522
522
  declare class WarpLink {
523
523
  private config;
524
- constructor(config: WarpConfig);
524
+ constructor(config: WarpInitConfig);
525
525
  isValid(url: string): boolean;
526
526
  detectFromHtml(content: string): Promise<DetectionResultFromHtml>;
527
527
  detect(url: string, cache?: WarpCacheConfig): Promise<DetectionResult>;
@@ -534,8 +534,8 @@ declare class WarpLink {
534
534
  declare class WarpRegistry {
535
535
  private config;
536
536
  private cache;
537
- registryConfig: ConfigInfo;
538
- constructor(config: WarpConfig);
537
+ registryConfig: WarpRegistryConfigInfo;
538
+ constructor(config: WarpInitConfig);
539
539
  init(): Promise<void>;
540
540
  createWarpRegisterTransaction(txHash: string, alias?: string | null, brand?: string | null): Transaction$1;
541
541
  createWarpUnregisterTransaction(txHash: string): Transaction$1;
@@ -546,17 +546,17 @@ declare class WarpRegistry {
546
546
  createBrandRegisterTransaction(txHash: string): Transaction$1;
547
547
  createWarpBrandingTransaction(warpHash: string, brandHash: string): Transaction$1;
548
548
  getInfoByAlias(alias: string, cache?: WarpCacheConfig): Promise<{
549
- registryInfo: RegistryInfo | null;
549
+ registryInfo: WarpRegistryInfo | null;
550
550
  brand: Brand | null;
551
551
  }>;
552
552
  getInfoByHash(hash: string, cache?: WarpCacheConfig): Promise<{
553
- registryInfo: RegistryInfo | null;
553
+ registryInfo: WarpRegistryInfo | null;
554
554
  brand: Brand | null;
555
555
  }>;
556
- getUserWarpRegistryInfos(user?: string): Promise<RegistryInfo[]>;
556
+ getUserWarpRegistryInfos(user?: string): Promise<WarpRegistryInfo[]>;
557
557
  getUserBrands(user?: string): Promise<Brand[]>;
558
- getChainInfos(cache?: WarpCacheConfig): Promise<ChainInfo[]>;
559
- getChainInfo(chain: WarpChain, cache?: WarpCacheConfig): Promise<ChainInfo | null>;
558
+ getChainInfos(cache?: WarpCacheConfig): Promise<WarpChainInfo[]>;
559
+ getChainInfo(chain: WarpChain, cache?: WarpCacheConfig): Promise<WarpChainInfo | null>;
560
560
  fetchBrand(hash: string, cache?: WarpCacheConfig): Promise<Brand | null>;
561
561
  getRegistryContractAddress(): Address$1;
562
562
  private loadRegistryConfigs;
@@ -571,11 +571,11 @@ declare class WarpUtils {
571
571
  identifier: string;
572
572
  identifierBase: string;
573
573
  } | null;
574
- static getNextInfo(config: WarpConfig, warp: Warp, actionIndex: number, results: WarpExecutionResults): WarpExecutionNextInfo | null;
574
+ static getNextInfo(config: WarpInitConfig, warp: Warp, actionIndex: number, results: WarpExecutionResults): WarpExecutionNextInfo | null;
575
575
  private static buildNextUrl;
576
576
  private static getNestedValue;
577
- static getChainInfoForAction(config: WarpConfig, action: WarpAction): Promise<ChainInfo>;
578
- static getChainEntrypoint(chainInfo: ChainInfo, env: ChainEnv): NetworkEntrypoint;
577
+ static getChainInfoForAction(config: WarpInitConfig, action: WarpAction): Promise<WarpChainInfo>;
578
+ static getChainEntrypoint(chainInfo: WarpChainInfo, env: WarpChainEnv): NetworkEntrypoint;
579
579
  }
580
580
 
581
581
  type ValidationResult = {
@@ -585,7 +585,7 @@ type ValidationResult = {
585
585
  type ValidationError = string;
586
586
  declare class WarpValidator {
587
587
  private config;
588
- constructor(config: WarpConfig);
588
+ constructor(config: WarpInitConfig);
589
589
  validate(warp: Warp): Promise<ValidationResult>;
590
590
  private validateMaxOneValuePosition;
591
591
  private validateVariableNamesAndResultNamesUppercase;
@@ -593,4 +593,4 @@ declare class WarpValidator {
593
593
  private validateSchema;
594
594
  }
595
595
 
596
- export { type AbiContents, type BaseWarpActionInputType, type Brand, BrandBuilder, type BrandColors, type BrandCta, type BrandMeta, type BrandUrls, CacheKey, CacheTtl, type CacheType, type ChainEnv, type ChainInfo, Config, type ConfigInfo, type InterpolationBag, type ProtocolName, type RegistryInfo, type ResolvedInput, type TrustStatus, type Warp, type WarpAbi, WarpAbiBuilder, type WarpAction, WarpActionExecutor, type WarpActionInput, type WarpActionInputModifier, type WarpActionInputPosition, type WarpActionInputSource, type WarpActionInputType, type WarpActionType, WarpArgSerializer, WarpBuilder, WarpCache, type WarpCacheConfig, type WarpChain, type WarpCollectAction, type WarpConfig, WarpConstants, type WarpContract, type WarpContractAction, type WarpContractActionTransfer, WarpContractLoader, type WarpContractVerification, type WarpExecution, type WarpExecutionMessages, type WarpExecutionNextInfo, type WarpExecutionResults, type WarpIdType, WarpIndex, WarpInterpolator, WarpLink, type WarpLinkAction, type WarpMessageName, type WarpMeta, type WarpNativeValue, WarpProtocolVersions, type WarpQueryAction, WarpRegistry, type WarpResultName, type WarpResulutionPath, type WarpSearchHit, type WarpSearchResult, type WarpTransferAction, WarpUtils, WarpValidator, type WarpVarPlaceholder, address, biguint, boolean, codemeta, composite, esdt, getChainExplorerUrl, getLatestProtocolIdentifier, getMainChainInfo, getWarpActionByIndex, hex, list, nothing, option, optional, replacePlaceholders, shiftBigintBy, string, toPreviewText, toTypedChainInfo, token, u16, u32, u64, u8, variadic };
596
+ export { type BaseWarpActionInputType, type Brand, BrandBuilder, type BrandColors, type BrandCta, type BrandMeta, type BrandUrls, CacheKey, CacheTtl, type CacheType, type InterpolationBag, type ProtocolName, type ResolvedInput, type Warp, WarpAbiBuilder, type WarpAbiContents, type WarpAction, WarpActionExecutor, type WarpActionInput, type WarpActionInputModifier, type WarpActionInputPosition, type WarpActionInputSource, type WarpActionInputType, type WarpActionType, WarpArgSerializer, WarpBuilder, WarpCache, type WarpCacheConfig, type WarpChain, type WarpChainEnv, type WarpChainInfo, type WarpCollectAction, WarpConfig, WarpConstants, type WarpContract, type WarpContractAction, type WarpContractActionTransfer, WarpContractLoader, type WarpContractVerification, type WarpExecution, type WarpExecutionMessages, type WarpExecutionNextInfo, type WarpExecutionResults, type WarpIdType, WarpIndex, type WarpInitConfig, WarpInterpolator, WarpLink, type WarpLinkAction, type WarpMessageName, type WarpMeta, type WarpNativeValue, WarpProtocolVersions, type WarpQueryAction, WarpRegistry, type WarpRegistryConfigInfo, type WarpRegistryInfo, type WarpResultName, type WarpResulutionPath, type WarpSearchHit, type WarpSearchResult, type WarpTransferAction, type WarpTrustStatus, WarpUtils, WarpValidator, type WarpVarPlaceholder, type WarpWarpAbi, address, biguint, boolean, codemeta, composite, esdt, getChainExplorerUrl, getLatestProtocolIdentifier, getMainChainInfo, getWarpActionByIndex, hex, list, nothing, option, optional, replacePlaceholders, shiftBigintBy, string, toPreviewText, toTypedChainInfo, token, u16, u32, u64, u8, variadic };
package/dist/index.d.ts CHANGED
@@ -30,12 +30,12 @@ declare class WarpCache {
30
30
  clear(): void;
31
31
  }
32
32
 
33
- type ChainEnv = 'mainnet' | 'testnet' | 'devnet';
33
+ type WarpChainEnv = 'mainnet' | 'testnet' | 'devnet';
34
34
  type ProtocolName = 'warp' | 'brand' | 'abi';
35
35
 
36
36
  type WarpChain = string;
37
- type WarpConfig = {
38
- env: ChainEnv;
37
+ type WarpInitConfig = {
38
+ env: WarpChainEnv;
39
39
  clientUrl?: string;
40
40
  currentUrl?: string;
41
41
  vars?: Record<string, string | number>;
@@ -62,7 +62,7 @@ type WarpConfig = {
62
62
  type WarpCacheConfig = {
63
63
  ttl?: number;
64
64
  };
65
- type ChainInfo = {
65
+ type WarpChainInfo = {
66
66
  name: WarpChain;
67
67
  displayName: string;
68
68
  chainId: string;
@@ -199,12 +199,12 @@ type WarpContractVerification = {
199
199
  abi: object;
200
200
  };
201
201
 
202
- type WarpAbi = {
202
+ type WarpWarpAbi = {
203
203
  protocol: string;
204
- content: AbiContents;
204
+ content: WarpAbiContents;
205
205
  meta?: WarpMeta;
206
206
  };
207
- type AbiContents = {
207
+ type WarpAbiContents = {
208
208
  name?: string;
209
209
  constructor?: any;
210
210
  upgradeConstructor?: any;
@@ -242,18 +242,18 @@ type BrandMeta = {
242
242
  createdAt: string;
243
243
  };
244
244
 
245
- type TrustStatus = 'unverified' | 'verified' | 'blacklisted';
246
- type RegistryInfo = {
245
+ type WarpTrustStatus = 'unverified' | 'verified' | 'blacklisted';
246
+ type WarpRegistryInfo = {
247
247
  hash: string;
248
248
  alias: string | null;
249
- trust: TrustStatus;
249
+ trust: WarpTrustStatus;
250
250
  owner: string;
251
251
  createdAt: number;
252
252
  upgradedAt: number;
253
253
  brand: string | null;
254
254
  upgrade: string | null;
255
255
  };
256
- type ConfigInfo = {
256
+ type WarpRegistryConfigInfo = {
257
257
  unitPrice: bigint;
258
258
  admins: string[];
259
259
  };
@@ -294,7 +294,7 @@ type WarpSearchHit = {
294
294
  declare class BrandBuilder {
295
295
  private config;
296
296
  private pendingBrand;
297
- constructor(config: WarpConfig);
297
+ constructor(config: WarpInitConfig);
298
298
  createInscriptionTransaction(brand: Brand): Transaction;
299
299
  createFromRaw(encoded: string, validateSchema?: boolean): Promise<Brand>;
300
300
  createFromTransaction(tx: TransactionOnNetwork, validateSchema?: boolean): Promise<Brand>;
@@ -315,22 +315,22 @@ declare const WarpProtocolVersions: {
315
315
  Brand: string;
316
316
  Abi: string;
317
317
  };
318
- declare const Config: {
318
+ declare const WarpConfig: {
319
319
  LatestWarpSchemaUrl: string;
320
320
  LatestBrandSchemaUrl: string;
321
- DefaultClientUrl: (env: ChainEnv) => "https://usewarp.to" | "https://testnet.usewarp.to" | "https://devnet.usewarp.to";
321
+ DefaultClientUrl: (env: WarpChainEnv) => "https://usewarp.to" | "https://testnet.usewarp.to" | "https://devnet.usewarp.to";
322
322
  SuperClientUrls: string[];
323
323
  MainChain: {
324
324
  Name: string;
325
325
  DisplayName: string;
326
- ApiUrl: (env: ChainEnv) => "https://devnet-api.multiversx.com" | "https://testnet-api.multiversx.com" | "https://api.multiversx.com";
327
- ExplorerUrl: (env: ChainEnv) => "https://devnet-explorer.multiversx.com" | "https://testnet-explorer.multiversx.com" | "https://explorer.multiversx.com";
328
- BlockTime: (env: ChainEnv) => number;
326
+ ApiUrl: (env: WarpChainEnv) => "https://devnet-api.multiversx.com" | "https://testnet-api.multiversx.com" | "https://api.multiversx.com";
327
+ ExplorerUrl: (env: WarpChainEnv) => "https://devnet-explorer.multiversx.com" | "https://testnet-explorer.multiversx.com" | "https://explorer.multiversx.com";
328
+ BlockTime: (env: WarpChainEnv) => number;
329
329
  AddressHrp: string;
330
- ChainId: (env: ChainEnv) => "D" | "T" | "1";
330
+ ChainId: (env: WarpChainEnv) => "D" | "T" | "1";
331
331
  };
332
332
  Registry: {
333
- Contract: (env: ChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "####" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
333
+ Contract: (env: WarpChainEnv) => "erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36" | "####" | "erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe";
334
334
  };
335
335
  AvailableActionInputSources: WarpActionInputSource[];
336
336
  AvailableActionInputTypes: WarpActionInputType[];
@@ -338,13 +338,13 @@ declare const Config: {
338
338
  };
339
339
 
340
340
  type InterpolationBag = {
341
- config: WarpConfig;
342
- chain: ChainInfo;
341
+ config: WarpInitConfig;
342
+ chain: WarpChainInfo;
343
343
  };
344
344
  declare class WarpInterpolator {
345
- static apply(config: WarpConfig, warp: Warp): Promise<Warp>;
346
- static applyGlobals(config: WarpConfig, warp: Warp): Promise<Warp>;
347
- static applyVars(config: WarpConfig, warp: Warp): Warp;
345
+ static apply(config: WarpInitConfig, warp: Warp): Promise<Warp>;
346
+ static applyGlobals(config: WarpInitConfig, warp: Warp): Promise<Warp>;
347
+ static applyVars(config: WarpInitConfig, warp: Warp): Warp;
348
348
  private static applyRootGlobals;
349
349
  private static applyActionGlobals;
350
350
  }
@@ -391,11 +391,11 @@ declare const WarpConstants: {
391
391
  };
392
392
  };
393
393
 
394
- declare const getMainChainInfo: (config: WarpConfig) => ChainInfo;
395
- declare const getChainExplorerUrl: (chain: ChainInfo, path?: string) => string;
394
+ declare const getMainChainInfo: (config: WarpInitConfig) => WarpChainInfo;
395
+ declare const getChainExplorerUrl: (chain: WarpChainInfo, path?: string) => string;
396
396
  declare const getLatestProtocolIdentifier: (name: ProtocolName) => string;
397
397
  declare const getWarpActionByIndex: (warp: Warp, index: number) => WarpAction;
398
- declare const toTypedChainInfo: (chainInfo: any) => ChainInfo;
398
+ declare const toTypedChainInfo: (chainInfo: any) => WarpChainInfo;
399
399
  declare const shiftBigintBy: (value: bigint | string, decimals: number) => bigint;
400
400
  declare const toPreviewText: (text: string, maxChars?: number) => string;
401
401
  declare const replacePlaceholders: (message: string, bag: Record<string, any>) => string;
@@ -422,11 +422,11 @@ declare const nothing: () => NothingValue;
422
422
  declare class WarpAbiBuilder {
423
423
  private config;
424
424
  private cache;
425
- constructor(config: WarpConfig);
426
- createInscriptionTransaction(abi: AbiContents): Transaction;
427
- createFromRaw(encoded: string): Promise<WarpAbi>;
428
- createFromTransaction(tx: TransactionOnNetwork): Promise<WarpAbi>;
429
- createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<WarpAbi | null>;
425
+ constructor(config: WarpInitConfig);
426
+ createInscriptionTransaction(abi: WarpAbiContents): Transaction;
427
+ createFromRaw(encoded: string): Promise<WarpWarpAbi>;
428
+ createFromTransaction(tx: TransactionOnNetwork): Promise<WarpWarpAbi>;
429
+ createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<WarpWarpAbi | null>;
430
430
  }
431
431
 
432
432
  type TxComponents = {
@@ -443,15 +443,15 @@ declare class WarpActionExecutor {
443
443
  private serializer;
444
444
  private contractLoader;
445
445
  private cache;
446
- constructor(config: WarpConfig);
446
+ constructor(config: WarpInitConfig);
447
447
  createTransactionForExecute(warp: Warp, actionIndex: number, inputs: string[]): Promise<Transaction>;
448
448
  getTransactionExecutionResults(warp: Warp, actionIndex: number, tx: TransactionOnNetwork): Promise<WarpExecution>;
449
449
  executeQuery(warp: Warp, actionIndex: number, inputs: string[]): Promise<WarpExecution>;
450
450
  executeCollect(warp: Warp, actionIndex: number, inputs: string[], meta?: Record<string, any>): Promise<WarpExecution>;
451
- getTxComponentsFromInputs(chain: ChainInfo, action: WarpTransferAction | WarpContractAction | WarpQueryAction, inputs: string[], sender?: Address): Promise<TxComponents>;
452
- getResolvedInputs(chain: ChainInfo, action: WarpAction, inputArgs: string[]): Promise<ResolvedInput[]>;
451
+ getTxComponentsFromInputs(chain: WarpChainInfo, action: WarpTransferAction | WarpContractAction | WarpQueryAction, inputs: string[], sender?: Address): Promise<TxComponents>;
452
+ getResolvedInputs(chain: WarpChainInfo, action: WarpAction, inputArgs: string[]): Promise<ResolvedInput[]>;
453
453
  getModifiedInputs(inputs: ResolvedInput[]): ResolvedInput[];
454
- preprocessInput(chain: ChainInfo, input: string): Promise<string>;
454
+ preprocessInput(chain: WarpChainInfo, input: string): Promise<string>;
455
455
  getAbiForAction(action: WarpContractAction | WarpQueryAction): Promise<AbiRegistry>;
456
456
  private getPreparedArgs;
457
457
  private getPreparedMessages;
@@ -475,7 +475,7 @@ declare class WarpBuilder {
475
475
  private config;
476
476
  private cache;
477
477
  private pendingWarp;
478
- constructor(config: WarpConfig);
478
+ constructor(config: WarpInitConfig);
479
479
  createInscriptionTransaction(warp: Warp): Transaction;
480
480
  createFromRaw(encoded: string, validate?: boolean): Promise<Warp>;
481
481
  createFromTransaction(tx: TransactionOnNetwork, validate?: boolean): Promise<Warp>;
@@ -494,14 +494,14 @@ declare class WarpBuilder {
494
494
 
495
495
  declare class WarpContractLoader {
496
496
  private readonly config;
497
- constructor(config: WarpConfig);
498
- getContract(address: string, chain: ChainInfo): Promise<WarpContract | null>;
499
- getVerificationInfo(address: string, chain: ChainInfo): Promise<WarpContractVerification | null>;
497
+ constructor(config: WarpInitConfig);
498
+ getContract(address: string, chain: WarpChainInfo): Promise<WarpContract | null>;
499
+ getVerificationInfo(address: string, chain: WarpChainInfo): Promise<WarpContractVerification | null>;
500
500
  }
501
501
 
502
502
  declare class WarpIndex {
503
503
  private config;
504
- constructor(config: WarpConfig);
504
+ constructor(config: WarpInitConfig);
505
505
  search(query: string, params?: Record<string, any>, headers?: Record<string, string>): Promise<WarpSearchHit[]>;
506
506
  }
507
507
 
@@ -509,7 +509,7 @@ type DetectionResult = {
509
509
  match: boolean;
510
510
  url: string;
511
511
  warp: Warp | null;
512
- registryInfo: RegistryInfo | null;
512
+ registryInfo: WarpRegistryInfo | null;
513
513
  brand: Brand | null;
514
514
  };
515
515
  type DetectionResultFromHtml = {
@@ -521,7 +521,7 @@ type DetectionResultFromHtml = {
521
521
  };
522
522
  declare class WarpLink {
523
523
  private config;
524
- constructor(config: WarpConfig);
524
+ constructor(config: WarpInitConfig);
525
525
  isValid(url: string): boolean;
526
526
  detectFromHtml(content: string): Promise<DetectionResultFromHtml>;
527
527
  detect(url: string, cache?: WarpCacheConfig): Promise<DetectionResult>;
@@ -534,8 +534,8 @@ declare class WarpLink {
534
534
  declare class WarpRegistry {
535
535
  private config;
536
536
  private cache;
537
- registryConfig: ConfigInfo;
538
- constructor(config: WarpConfig);
537
+ registryConfig: WarpRegistryConfigInfo;
538
+ constructor(config: WarpInitConfig);
539
539
  init(): Promise<void>;
540
540
  createWarpRegisterTransaction(txHash: string, alias?: string | null, brand?: string | null): Transaction$1;
541
541
  createWarpUnregisterTransaction(txHash: string): Transaction$1;
@@ -546,17 +546,17 @@ declare class WarpRegistry {
546
546
  createBrandRegisterTransaction(txHash: string): Transaction$1;
547
547
  createWarpBrandingTransaction(warpHash: string, brandHash: string): Transaction$1;
548
548
  getInfoByAlias(alias: string, cache?: WarpCacheConfig): Promise<{
549
- registryInfo: RegistryInfo | null;
549
+ registryInfo: WarpRegistryInfo | null;
550
550
  brand: Brand | null;
551
551
  }>;
552
552
  getInfoByHash(hash: string, cache?: WarpCacheConfig): Promise<{
553
- registryInfo: RegistryInfo | null;
553
+ registryInfo: WarpRegistryInfo | null;
554
554
  brand: Brand | null;
555
555
  }>;
556
- getUserWarpRegistryInfos(user?: string): Promise<RegistryInfo[]>;
556
+ getUserWarpRegistryInfos(user?: string): Promise<WarpRegistryInfo[]>;
557
557
  getUserBrands(user?: string): Promise<Brand[]>;
558
- getChainInfos(cache?: WarpCacheConfig): Promise<ChainInfo[]>;
559
- getChainInfo(chain: WarpChain, cache?: WarpCacheConfig): Promise<ChainInfo | null>;
558
+ getChainInfos(cache?: WarpCacheConfig): Promise<WarpChainInfo[]>;
559
+ getChainInfo(chain: WarpChain, cache?: WarpCacheConfig): Promise<WarpChainInfo | null>;
560
560
  fetchBrand(hash: string, cache?: WarpCacheConfig): Promise<Brand | null>;
561
561
  getRegistryContractAddress(): Address$1;
562
562
  private loadRegistryConfigs;
@@ -571,11 +571,11 @@ declare class WarpUtils {
571
571
  identifier: string;
572
572
  identifierBase: string;
573
573
  } | null;
574
- static getNextInfo(config: WarpConfig, warp: Warp, actionIndex: number, results: WarpExecutionResults): WarpExecutionNextInfo | null;
574
+ static getNextInfo(config: WarpInitConfig, warp: Warp, actionIndex: number, results: WarpExecutionResults): WarpExecutionNextInfo | null;
575
575
  private static buildNextUrl;
576
576
  private static getNestedValue;
577
- static getChainInfoForAction(config: WarpConfig, action: WarpAction): Promise<ChainInfo>;
578
- static getChainEntrypoint(chainInfo: ChainInfo, env: ChainEnv): NetworkEntrypoint;
577
+ static getChainInfoForAction(config: WarpInitConfig, action: WarpAction): Promise<WarpChainInfo>;
578
+ static getChainEntrypoint(chainInfo: WarpChainInfo, env: WarpChainEnv): NetworkEntrypoint;
579
579
  }
580
580
 
581
581
  type ValidationResult = {
@@ -585,7 +585,7 @@ type ValidationResult = {
585
585
  type ValidationError = string;
586
586
  declare class WarpValidator {
587
587
  private config;
588
- constructor(config: WarpConfig);
588
+ constructor(config: WarpInitConfig);
589
589
  validate(warp: Warp): Promise<ValidationResult>;
590
590
  private validateMaxOneValuePosition;
591
591
  private validateVariableNamesAndResultNamesUppercase;
@@ -593,4 +593,4 @@ declare class WarpValidator {
593
593
  private validateSchema;
594
594
  }
595
595
 
596
- export { type AbiContents, type BaseWarpActionInputType, type Brand, BrandBuilder, type BrandColors, type BrandCta, type BrandMeta, type BrandUrls, CacheKey, CacheTtl, type CacheType, type ChainEnv, type ChainInfo, Config, type ConfigInfo, type InterpolationBag, type ProtocolName, type RegistryInfo, type ResolvedInput, type TrustStatus, type Warp, type WarpAbi, WarpAbiBuilder, type WarpAction, WarpActionExecutor, type WarpActionInput, type WarpActionInputModifier, type WarpActionInputPosition, type WarpActionInputSource, type WarpActionInputType, type WarpActionType, WarpArgSerializer, WarpBuilder, WarpCache, type WarpCacheConfig, type WarpChain, type WarpCollectAction, type WarpConfig, WarpConstants, type WarpContract, type WarpContractAction, type WarpContractActionTransfer, WarpContractLoader, type WarpContractVerification, type WarpExecution, type WarpExecutionMessages, type WarpExecutionNextInfo, type WarpExecutionResults, type WarpIdType, WarpIndex, WarpInterpolator, WarpLink, type WarpLinkAction, type WarpMessageName, type WarpMeta, type WarpNativeValue, WarpProtocolVersions, type WarpQueryAction, WarpRegistry, type WarpResultName, type WarpResulutionPath, type WarpSearchHit, type WarpSearchResult, type WarpTransferAction, WarpUtils, WarpValidator, type WarpVarPlaceholder, address, biguint, boolean, codemeta, composite, esdt, getChainExplorerUrl, getLatestProtocolIdentifier, getMainChainInfo, getWarpActionByIndex, hex, list, nothing, option, optional, replacePlaceholders, shiftBigintBy, string, toPreviewText, toTypedChainInfo, token, u16, u32, u64, u8, variadic };
596
+ export { type BaseWarpActionInputType, type Brand, BrandBuilder, type BrandColors, type BrandCta, type BrandMeta, type BrandUrls, CacheKey, CacheTtl, type CacheType, type InterpolationBag, type ProtocolName, type ResolvedInput, type Warp, WarpAbiBuilder, type WarpAbiContents, type WarpAction, WarpActionExecutor, type WarpActionInput, type WarpActionInputModifier, type WarpActionInputPosition, type WarpActionInputSource, type WarpActionInputType, type WarpActionType, WarpArgSerializer, WarpBuilder, WarpCache, type WarpCacheConfig, type WarpChain, type WarpChainEnv, type WarpChainInfo, type WarpCollectAction, WarpConfig, WarpConstants, type WarpContract, type WarpContractAction, type WarpContractActionTransfer, WarpContractLoader, type WarpContractVerification, type WarpExecution, type WarpExecutionMessages, type WarpExecutionNextInfo, type WarpExecutionResults, type WarpIdType, WarpIndex, type WarpInitConfig, WarpInterpolator, WarpLink, type WarpLinkAction, type WarpMessageName, type WarpMeta, type WarpNativeValue, WarpProtocolVersions, type WarpQueryAction, WarpRegistry, type WarpRegistryConfigInfo, type WarpRegistryInfo, type WarpResultName, type WarpResulutionPath, type WarpSearchHit, type WarpSearchResult, type WarpTransferAction, type WarpTrustStatus, WarpUtils, WarpValidator, type WarpVarPlaceholder, type WarpWarpAbi, address, biguint, boolean, codemeta, composite, esdt, getChainExplorerUrl, getLatestProtocolIdentifier, getMainChainInfo, getWarpActionByIndex, hex, list, nothing, option, optional, replacePlaceholders, shiftBigintBy, string, toPreviewText, toTypedChainInfo, token, u16, u32, u64, u8, variadic };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var Et=Object.create;var it=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Vt=Object.getPrototypeOf,Ut=Object.prototype.hasOwnProperty;var Nt=(i,t)=>()=>(i&&(t=i(i=0)),t);var ht=(i,t)=>{for(var e in t)it(i,e,{get:t[e],enumerable:!0})},yt=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pt(t))!Ut.call(i,n)&&n!==e&&it(i,n,{get:()=>t[n],enumerable:!(r=Rt(t,n))||r.enumerable});return i};var ut=(i,t,e)=>(e=i!=null?Et(Vt(i)):{},yt(t||!i||!i.__esModule?it(e,"default",{value:i,enumerable:!0}):e,i)),Ot=i=>yt(it({},"__esModule",{value:!0}),i);var It={};ht(It,{runInVm:()=>ne});var ne,vt=Nt(()=>{"use strict";ne=async(i,t)=>{if(typeof window>"u"){let e;try{e=require("vm2").VM}catch{throw new Error('The optional dependency "vm2" is not installed. To use runInVm in Node.js, please install vm2: npm install vm2 --save. This is not required for browser usage.')}let r=new e({timeout:1e3,sandbox:{result:t},eval:!1,wasm:!1});return i.trim().startsWith("(")&&i.includes("=>")?r.run(`(${i})(result)`):null}return new Promise((e,r)=>{try{let n=new Blob([`
1
+ "use strict";var Et=Object.create;var it=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Vt=Object.getPrototypeOf,Ut=Object.prototype.hasOwnProperty;var Nt=(i,t)=>()=>(i&&(t=i(i=0)),t);var ht=(i,t)=>{for(var e in t)it(i,e,{get:t[e],enumerable:!0})},yt=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Pt(t))!Ut.call(i,n)&&n!==e&&it(i,n,{get:()=>t[n],enumerable:!(r=Rt(t,n))||r.enumerable});return i};var pt=(i,t,e)=>(e=i!=null?Et(Vt(i)):{},yt(t||!i||!i.__esModule?it(e,"default",{value:i,enumerable:!0}):e,i)),Ot=i=>yt(it({},"__esModule",{value:!0}),i);var bt={};ht(bt,{runInVm:()=>ne});var ne,vt=Nt(()=>{"use strict";ne=async(i,t)=>{if(typeof window>"u"){let e;try{e=require("vm2").VM}catch{throw new Error('The optional dependency "vm2" is not installed. To use runInVm in Node.js, please install vm2: npm install vm2 --save. This is not required for browser usage.')}let r=new e({timeout:1e3,sandbox:{result:t},eval:!1,wasm:!1});return i.trim().startsWith("(")&&i.includes("=>")?r.run(`(${i})(result)`):null}return new Promise((e,r)=>{try{let n=new Blob([`
2
2
  self.onmessage = function(e) {
3
3
  try {
4
4
  const result = e.data;
@@ -8,5 +8,5 @@
8
8
  self.postMessage({ error: error.toString() });
9
9
  }
10
10
  };
11
- `],{type:"application/javascript"}),a=URL.createObjectURL(n),s=new Worker(a);s.onmessage=function(o){o.data.error?r(new Error(o.data.error)):e(o.data.result),s.terminate(),URL.revokeObjectURL(a)},s.onerror=function(o){r(new Error(`Error in transform: ${o.message}`)),s.terminate(),URL.revokeObjectURL(a)},s.postMessage(t)}catch(n){return r(n)}})}});var ce={};ht(ce,{BrandBuilder:()=>ft,CacheKey:()=>S,CacheTtl:()=>Y,Config:()=>x,WarpAbiBuilder:()=>rt,WarpActionExecutor:()=>gt,WarpArgSerializer:()=>k,WarpBuilder:()=>tt,WarpCache:()=>V,WarpConstants:()=>f,WarpContractLoader:()=>nt,WarpIndex:()=>mt,WarpInterpolator:()=>N,WarpLink:()=>et,WarpProtocolVersions:()=>$,WarpRegistry:()=>_,WarpUtils:()=>W,WarpValidator:()=>Z,address:()=>Xt,biguint:()=>Kt,boolean:()=>Jt,codemeta:()=>ee,composite:()=>Ht,esdt:()=>te,getChainExplorerUrl:()=>Ft,getLatestProtocolIdentifier:()=>L,getMainChainInfo:()=>A,getWarpActionByIndex:()=>O,hex:()=>Zt,list:()=>_t,nothing:()=>re,option:()=>Lt,optional:()=>qt,replacePlaceholders:()=>K,shiftBigintBy:()=>z,string:()=>jt,toPreviewText:()=>pt,toTypedChainInfo:()=>at,token:()=>Yt,u16:()=>Qt,u32:()=>Gt,u64:()=>zt,u8:()=>Dt,variadic:()=>Mt});module.exports=Ot(ce);var M=require("@multiversx/sdk-core"),Ct=ut(require("ajv"));var f={HttpProtocolPrefix:"http",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierType:{Alias:"alias",Hash:"hash"},Source:{UserWallet:"user:wallet"},Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>i.config.user?.wallet},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:i=>i.chain.apiUrl},ChainExplorerUrl:{Placeholder:"CHAIN_EXPLORER",Accessor:i=>i.chain.explorerUrl}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",Transform:{Prefix:"transform:"},Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};var $={Warp:"2.0.1",Brand:"0.1.0",Abi:"0.1.0"},x={LatestWarpSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/v${$.Warp}.schema.json`,LatestBrandSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/brand/v${$.Brand}.schema.json`,DefaultClientUrl:i=>i==="devnet"?"https://devnet.usewarp.to":i==="testnet"?"https://testnet.usewarp.to":"https://usewarp.to",SuperClientUrls:["https://usewarp.to","https://testnet.usewarp.to","https://devnet.usewarp.to"],MainChain:{Name:"multiversx",DisplayName:"MultiversX",ApiUrl:i=>i==="devnet"?"https://devnet-api.multiversx.com":i==="testnet"?"https://testnet-api.multiversx.com":"https://api.multiversx.com",ExplorerUrl:i=>i==="devnet"?"https://devnet-explorer.multiversx.com":i==="testnet"?"https://testnet-explorer.multiversx.com":"https://explorer.multiversx.com",BlockTime:i=>6e3,AddressHrp:"erd",ChainId:i=>i==="devnet"?"D":i==="testnet"?"T":"1"},Registry:{Contract:i=>i==="devnet"?"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36":i==="testnet"?"####":"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"},AvailableActionInputSources:["field","query",f.Source.UserWallet],AvailableActionInputTypes:["string","uint8","uint16","uint32","uint64","biguint","boolean","address"],AvailableActionInputPositions:["receiver","value","transfer","arg:1","arg:2","arg:3","arg:4","arg:5","arg:6","arg:7","arg:8","arg:9","arg:10","data","ignore"]};var A=i=>({name:x.MainChain.Name,displayName:x.MainChain.DisplayName,chainId:x.MainChain.ChainId(i.env),blockTime:x.MainChain.BlockTime(i.env),addressHrp:x.MainChain.AddressHrp,apiUrl:x.MainChain.ApiUrl(i.env),explorerUrl:x.MainChain.ExplorerUrl(i.env)}),Ft=(i,t)=>i.explorerUrl+(t?"/"+t:""),L=i=>{if(i==="warp")return`warp:${$.Warp}`;if(i==="brand")return`brand:${$.Brand}`;if(i==="abi")return`abi:${$.Abi}`;throw new Error(`getLatestProtocolIdentifier: Invalid protocol name: ${i}`)},O=(i,t)=>i?.actions[t-1],at=i=>({name:i.name.toString(),displayName:i.display_name.toString(),chainId:i.chain_id.toString(),blockTime:i.block_time.toNumber(),addressHrp:i.address_hrp.toString(),apiUrl:i.api_url.toString(),explorerUrl:i.explorer_url.toString()}),z=(i,t)=>{let e=i.toString(),[r,n=""]=e.split("."),a=Math.abs(t);if(t>0)return BigInt(r+n.padEnd(a,"0"));if(t<0){let s=r+n;if(a>=s.length)return 0n;let o=s.slice(0,-a)||"0";return BigInt(o)}else return e.includes(".")?BigInt(e.split(".")[0]):BigInt(e)},pt=(i,t=100)=>{if(!i)return"";let e=i.replace(/<\/?(h[1-6])[^>]*>/gi," - ").replace(/<\/?(p|div|ul|ol|li|br|hr)[^>]*>/gi," ").replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return e=e.startsWith("- ")?e.slice(2):e,e=e.length>t?e.substring(0,e.lastIndexOf(" ",t))+"...":e,e},K=(i,t)=>i.replace(/\{\{([^}]+)\}\}/g,(e,r)=>t[r]||"");var j=class j{static info(...t){j.isTestEnv||console.info(...t)}static warn(...t){j.isTestEnv||console.warn(...t)}static error(...t){j.isTestEnv||console.error(...t)}};j.isTestEnv=typeof process<"u"&&process.env.JEST_WORKER_ID!==void 0;var C=j;var D=require("@multiversx/sdk-core");var J=class{constructor(t="warp-cache"){this.prefix=t}getKey(t){return`${this.prefix}:${t}`}get(t){try{let e=localStorage.getItem(this.getKey(t));if(!e)return null;let r=JSON.parse(e);return Date.now()>r.expiresAt?(localStorage.removeItem(this.getKey(t)),null):r.value}catch{return null}}set(t,e,r){let n={value:e,expiresAt:Date.now()+r*1e3};localStorage.setItem(this.getKey(t),JSON.stringify(n))}forget(t){localStorage.removeItem(this.getKey(t))}clear(){for(let t=0;t<localStorage.length;t++){let e=localStorage.key(t);e?.startsWith(this.prefix)&&localStorage.removeItem(e)}}};var F=class F{get(t){let e=F.cache.get(t);return e?Date.now()>e.expiresAt?(F.cache.delete(t),null):e.value:null}set(t,e,r){let n=Date.now()+r*1e3;F.cache.set(t,{value:e,expiresAt:n})}forget(t){F.cache.delete(t)}clear(){F.cache.clear()}};F.cache=new Map;var X=F;var Y={OneMinute:60,OneHour:60*60,OneDay:60*60*24,OneWeek:60*60*24*7,OneMonth:60*60*24*30,OneYear:60*60*24*365},S={Warp:i=>`warp:${i}`,WarpAbi:i=>`warp-abi:${i}`,LastWarpExecutionInputs:(i,t)=>`warp-exec-inputs:${i}:${t}`,RegistryInfo:i=>`registry-info:${i}`,Brand:i=>`brand:${i}`,ChainInfo:i=>`chain:${i}`,ChainInfos:()=>"chains"},V=class{constructor(t){this.strategy=this.selectStrategy(t)}selectStrategy(t){return t==="localStorage"?new J:t==="memory"?new X:typeof window<"u"&&window.localStorage?new J:new X}set(t,e,r){this.strategy.set(t,e,r)}get(t){return this.strategy.get(t)}forget(t){this.strategy.forget(t)}clear(){this.strategy.clear()}};var Wt=ut(require("qr-code-styling"));var q=require("@multiversx/sdk-core");var wt=ut(require("ajv"));var Z=class{constructor(t){this.config=t;this.config=t}async validate(t){let e=[];return e.push(...this.validateMaxOneValuePosition(t)),e.push(...this.validateVariableNamesAndResultNamesUppercase(t)),e.push(...this.validateAbiIsSetIfApplicable(t)),e.push(...await this.validateSchema(t)),{valid:e.length===0,errors:e}}validateMaxOneValuePosition(t){return t.actions.filter(r=>r.inputs?r.inputs.some(n=>n.position==="value"):!1).length>1?["Only one value position action is allowed"]:[]}validateVariableNamesAndResultNamesUppercase(t){let e=[],r=(n,a)=>{n&&Object.keys(n).forEach(s=>{s!==s.toUpperCase()&&e.push(`${a} name '${s}' must be uppercase`)})};return r(t.vars,"Variable"),r(t.results,"Result"),e}validateAbiIsSetIfApplicable(t){let e=t.actions.some(s=>s.type==="contract"),r=t.actions.some(s=>s.type==="query");if(!e&&!r)return[];let n=t.actions.some(s=>s.abi),a=Object.values(t.results||{}).some(s=>s.startsWith("out.")||s.startsWith("event."));return t.results&&!n&&a?["ABI is required when results are present for contract or query actions"]:[]}async validateSchema(t){try{let e=this.config.schema?.warp||x.LatestWarpSchemaUrl,n=await(await fetch(e)).json(),a=new wt.default,s=a.compile(n);return s(t)?[]:[`Schema validation failed: ${a.errorsText(s.errors)}`]}catch(e){return[`Schema validation failed: ${e instanceof Error?e.message:String(e)}`]}}};var tt=class{constructor(t){this.pendingWarp={protocol:L("warp"),name:"",title:"",description:null,preview:"",actions:[]};this.config=t,this.cache=new V(t.cache?.type)}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=A(this.config),r=new q.TransactionsFactoryConfig({chainID:e.chainId}),n=new q.TransferTransactionsFactory({config:r}),a=q.Address.newFromBech32(this.config.user.wallet),s=JSON.stringify(t),o=n.createTransactionForTransfer(a,{receiver:q.Address.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(s))});return o.gasLimit=o.gasLimit+BigInt(2e6),o}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.validate(r),r}async createFromTransaction(t,e=!1){let r=await this.createFromRaw(t.data.toString(),e);return r.meta={hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},r}async createFromTransactionHash(t,e){let r=S.Warp(t);if(e){let o=this.cache.get(r);if(o)return C.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),o}let n=A(this.config),s=W.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await s.getTransaction(t),u=await this.createFromTransaction(o);return e&&e.ttl&&u&&this.cache.set(r,u,e.ttl),u}catch(o){return C.error("WarpBuilder: Error creating from transaction hash",o),null}}setName(t){return this.pendingWarp.name=t,this}setTitle(t){return this.pendingWarp.title=t,this}setDescription(t){return this.pendingWarp.description=t,this}setPreview(t){return this.pendingWarp.preview=t,this}setActions(t){return this.pendingWarp.actions=t,this}addAction(t){return this.pendingWarp.actions.push(t),this}async build(){return this.ensure(this.pendingWarp.protocol,"protocol is required"),this.ensure(this.pendingWarp.name,"name is required"),this.ensure(this.pendingWarp.title,"title is required"),this.ensure(this.pendingWarp.actions.length>0,"actions are required"),await this.validate(this.pendingWarp),this.pendingWarp}getDescriptionPreview(t,e=100){return pt(t,e)}ensure(t,e){if(!t)throw new Error(e)}async validate(t){let r=await new Z(this.config).validate(t);if(!r.valid)throw new Error(r.errors.join(`
12
- `))}};var N=class{static async apply(t,e){let r=this.applyVars(t,e);return await this.applyGlobals(t,r)}static async applyGlobals(t,e){let r={...e};return r.actions=await Promise.all(r.actions.map(async n=>await this.applyActionGlobals(t,n))),r=await this.applyRootGlobals(r,t),r}static applyVars(t,e){if(!e?.vars)return e;let r=JSON.stringify(e),n=(a,s)=>{r=r.replace(new RegExp(`{{${a.toUpperCase()}}}`,"g"),s.toString())};return Object.entries(e.vars).forEach(([a,s])=>{if(typeof s!="string")n(a,s);else if(s.startsWith(`${f.Vars.Query}:`)){if(!t.currentUrl)throw new Error("WarpUtils: currentUrl config is required to prepare vars");let o=s.split(`${f.Vars.Query}:`)[1],u=new URLSearchParams(t.currentUrl.split("?")[1]).get(o);u&&n(a,u)}else if(s.startsWith(`${f.Vars.Env}:`)){let o=s.split(`${f.Vars.Env}:`)[1],u=t.vars?.[o];u&&n(a,u)}else s===f.Source.UserWallet&&t.user?.wallet?n(a,t.user.wallet):n(a,s)}),JSON.parse(r)}static async applyRootGlobals(t,e){let r=JSON.stringify(t),n={config:e,chain:A(e)};return Object.values(f.Globals).forEach(a=>{let s=a.Accessor(n);s!=null&&(r=r.replace(new RegExp(`{{${a.Placeholder}}}`,"g"),s.toString()))}),JSON.parse(r)}static async applyActionGlobals(t,e){let r=await W.getChainInfoForAction(t,e),n=JSON.stringify(e),a={config:t,chain:r};return Object.values(f.Globals).forEach(s=>{let o=s.Accessor(a);o!=null&&(n=n.replace(new RegExp(`{{${s.Placeholder}}}`,"g"),o.toString()))}),JSON.parse(n)}};var h=require("@multiversx/sdk-core/out");var lt={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"}],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"}]},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 st=i=>({hash:i.hash.toString("hex"),alias:i.alias?.toString()||null,trust:i.trust.toString(),owner:i.owner.toString(),createdAt:i.created_at.toNumber(),upgradedAt:i.upgraded_at?.toNumber(),brand:i.brand?.toString("hex")||null,upgrade:i.upgrade?.toString("hex")||null}),Tt=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(t=>t.toBech32())});var _=class{constructor(t){this.config=t,this.cache=new V(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]}}async init(){await this.loadRegistryConfigs()}createWarpRegisterTransaction(t,e,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let n=h.Address.newFromBech32(this.config.user.wallet),a=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,s=()=>e&&r?[h.BytesValue.fromHex(t),h.BytesValue.fromUTF8(e),h.BytesValue.fromHex(r)]:e?[h.BytesValue.fromHex(t),h.BytesValue.fromUTF8(e)]:[h.BytesValue.fromHex(t)];return this.getFactory().createTransactionForExecute(n,{contract:this.getRegistryContractAddress(),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:a(),arguments:s()})}createWarpUnregisterTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[h.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.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromUTF8(t),h.BytesValue.fromHex(e)]})}createWarpAliasSetTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromHex(t),h.BytesValue.fromUTF8(e)]})}createWarpVerifyTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[h.BytesValue.fromHex(t)]})}createWarpTransferOwnershipTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[h.BytesValue.fromHex(t),new h.AddressValue(new h.Address(e))]})}createBrandRegisterTransaction(t){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromHex(t)]})}createWarpBrandingTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromHex(t),h.BytesValue.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=S.RegistryInfo(t),n=e?this.cache.get(r):null;if(n)return C.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),n;let a=this.getRegistryContractAddress(),s=this.getController(),o=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[h.BytesValue.fromUTF8(t)]}),u=await s.runQuery(o),[p]=s.parseQueryResponse(u),d=p?st(p):null,g=d?.brand?await this.fetchBrand(d.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:d,brand:g},e.ttl),{registryInfo:d,brand:g}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=S.RegistryInfo(t);if(e){let g=this.cache.get(r);if(g)return C.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),g}let n=this.getRegistryContractAddress(),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[h.BytesValue.fromHex(t)]}),o=await a.runQuery(s),[u]=a.parseQueryResponse(o),p=u?st(u):null,d=p?.brand?await this.fetchBrand(p.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:p,brand:d},e.ttl),{registryInfo:p,brand:d}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new h.AddressValue(new h.Address(e))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s);return o.map(st)}catch{return[]}}async getUserBrands(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new h.AddressValue(new h.Address(e))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s),u=o.map(g=>g.toString("hex")),p={ttl:365*24*60*60};return(await Promise.all(u.map(g=>this.fetchBrand(g,p)))).filter(g=>g!==null)}catch{return[]}}async getChainInfos(t){let e=S.ChainInfos();if(t&&t.ttl){let p=this.cache.get(e);if(p)return C.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),p}let r=this.getRegistryContractAddress(),n=this.getController(),a=n.createQuery({contract:r,function:"getChains",arguments:[]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s),u=o.map(at);if(t&&t.ttl){for(let p of u)this.cache.set(S.ChainInfo(p.chain),p,t.ttl);this.cache.set(e,u,t.ttl)}return u}async getChainInfo(t,e){try{let r=S.ChainInfo(t),n=e?this.cache.get(r):null;if(n)return C.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),n;let a=this.getRegistryContractAddress(),s=this.getController(),o=s.createQuery({contract:a,function:"getChain",arguments:[h.BytesValue.fromUTF8(t)]}),u=await s.runQuery(o),[p]=s.parseQueryResponse(u),d=p?at(p):null;return e&&e.ttl&&d&&this.cache.set(r,d,e.ttl),d}catch{return null}}async fetchBrand(t,e){let r=S.Brand(t),n=e?this.cache.get(r):null;if(n)return C.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),n;let a=A(this.config),o=W.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let u=await o.getTransaction(t),p=JSON.parse(u.data.toString());return p.meta={hash:u.hash,creator:u.sender.bech32(),createdAt:new Date(u.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,p,e.ttl),p}catch{return null}}getRegistryContractAddress(){return h.Address.newFromBech32(this.config.registry?.contract||x.Registry.Contract(this.config.env))}async loadRegistryConfigs(){let t=this.getRegistryContractAddress(),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),n=r?Tt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=A(this.config),e=new h.TransactionsFactoryConfig({chainID:t.chainId}),r=h.AbiRegistry.create(lt);return new h.SmartContractTransactionsFactory({config:e,abi:r})}getController(){let t=A(this.config),e=W.getChainEntrypoint(t,this.config.env),r=h.AbiRegistry.create(lt);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.config.user?.wallet&&this.registryConfig.admins.includes(this.config.user.wallet)}};var et=class{constructor(t){this.config=t;this.config=t}isValid(t){return t.startsWith(f.HttpProtocolPrefix)?!!this.extractIdentifierInfoFromUrl(t):!1}async detectFromHtml(t){if(!t.length)return{match:!1,results:[]};let n=[...t.matchAll(/https?:\/\/[^\s"'<>]+/gi)].map(p=>p[0]).filter(p=>this.isValid(p)).map(p=>this.detect(p)),s=(await Promise.all(n)).filter(p=>p.match),o=s.length>0,u=s.map(p=>({url:p.url,warp:p.warp}));return{match:o,results:u}}async detect(t,e){let r={match:!1,url:t,warp:null,registryInfo:null,brand:null},n=t.startsWith(f.HttpProtocolPrefix)?this.extractIdentifierInfoFromUrl(t):W.getInfoFromPrefixedIdentifier(t);if(!n)return r;try{let{type:a,identifierBase:s}=n,o=new tt(this.config),u=new _(this.config),p=null,d=null,g=null;if(a==="hash"){p=await o.createFromTransactionHash(s,e);let y=await u.getInfoByHash(s,e);d=y.registryInfo,g=y.brand}else if(a==="alias"){let y=await u.getInfoByAlias(s,e);d=y.registryInfo,g=y.brand,y.registryInfo&&(p=await o.createFromTransactionHash(y.registryInfo.hash,e))}let w=p?await N.apply(this.config,p):null;return w?{match:!0,url:t,warp:w,registryInfo:d,brand:g}:r}catch(a){return C.error("Error detecting warp link",a),r}}build(t,e){let r=this.config.clientUrl||x.DefaultClientUrl(this.config.env),n=t===f.IdentifierType.Alias?encodeURIComponent(e):encodeURIComponent(t+f.IdentifierParamSeparator+e);return x.SuperClientUrls.includes(r)?`${r}/${n}`:`${r}?${f.IdentifierParamName}=${n}`}buildFromPrefixedIdentifier(t){let e=W.getInfoFromPrefixedIdentifier(t);return e?this.build(e.type,e.identifierBase):""}generateQrCode(t,e,r=512,n="white",a="black",s="#23F7DD"){let o=this.build(t,e);return new Wt.default({type:"svg",width:r,height:r,data:String(o),margin:16,qrOptions:{typeNumber:0,mode:"Byte",errorCorrectionLevel:"Q"},backgroundOptions:{color:n},dotsOptions:{type:"extra-rounded",color:a},cornersSquareOptions:{type:"extra-rounded",color:a},cornersDotOptions:{type:"square",color:a},imageOptions:{hideBackgroundDots:!0,imageSize:.4,margin:8},image:`data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 100 100" fill="${encodeURIComponent(s)}" xmlns="http://www.w3.org/2000/svg"><path d="M54.8383 50.0242L95 28.8232L88.2456 16L51.4717 30.6974C50.5241 31.0764 49.4759 31.0764 48.5283 30.6974L11.7544 16L5 28.8232L45.1616 50.0242L5 71.2255L11.7544 84.0488L48.5283 69.351C49.4759 68.9724 50.5241 68.9724 51.4717 69.351L88.2456 84.0488L95 71.2255L54.8383 50.0242Z"/></svg>`})}extractIdentifierInfoFromUrl(t){let e=new URL(t),r=x.SuperClientUrls.includes(e.origin),n=e.searchParams.get(f.IdentifierParamName),a=r&&!n?e.pathname.split("/")[1]:n;if(!a)return null;let s=decodeURIComponent(a);return W.getInfoFromPrefixedIdentifier(s)}};var $t="https://",W=class{static getInfoFromPrefixedIdentifier(t){let e=decodeURIComponent(t),r=e.includes(f.IdentifierParamSeparator)?e:`${f.IdentifierType.Alias}${f.IdentifierParamSeparator}${e}`,[n,a]=r.split(f.IdentifierParamSeparator),s=a.split("?")[0];return{type:n,identifier:a,identifierBase:s}}static getNextInfo(t,e,r,n){let a=e.actions?.[r]?.next||e.next||null;if(!a)return null;if(a.startsWith($t))return[{identifier:null,url:a}];let[s,o]=a.split("?");if(!o)return[{identifier:s,url:this.buildNextUrl(s,t)}];let u=o.match(/{{([^}]+)\[\](\.[^}]+)?}}/g)||[];if(u.length===0){let m=K(o,{...e.vars,...n}),T=m?`${s}?${m}`:s;return[{identifier:T,url:this.buildNextUrl(T,t)}]}let p=u[0];if(!p)return[];let d=p.match(/{{([^[]+)\[\]/),g=d?d[1]:null;if(!g||n[g]===void 0)return[];let w=Array.isArray(n[g])?n[g]:[n[g]];if(w.length===0)return[];let y=u.filter(m=>m.includes(`{{${g}[]`)).map(m=>{let T=m.match(/\[\](\.[^}]+)?}}/),v=T&&T[1]||"";return{placeholder:m,field:v?v.slice(1):"",regex:new RegExp(m.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g")}});return w.map(m=>{let T=o;for(let{regex:E,field:P}of y){let I=P?this.getNestedValue(m,P):m;if(I==null)return null;T=T.replace(E,I)}if(T.includes("{{")||T.includes("}}"))return null;let v=T?`${s}?${T}`:s;return{identifier:v,url:this.buildNextUrl(v,t)}}).filter(m=>m!==null)}static buildNextUrl(t,e){let[r,n]=t.split("?"),a=this.getInfoFromPrefixedIdentifier(r)||{type:"alias",identifier:r,identifierBase:r},o=new et(e).build(a.type,a.identifierBase);if(!n)return o;let u=new URL(o);return new URLSearchParams(n).forEach((p,d)=>u.searchParams.set(d,p)),u.toString().replace(/\/\?/,"?")}static getNestedValue(t,e){return e.split(".").reduce((r,n)=>r?.[n],t)}static async getChainInfoForAction(t,e){if(!e.chain)return A(t);let r=await new _(t).getChainInfo(e.chain,{ttl:Y.OneWeek});if(!r)throw new Error(`WarpActionExecutor: Chain info not found for ${e.chain}`);return r}static getChainEntrypoint(t,e){let r="warp-sdk",n="api";return e==="devnet"?new D.DevnetEntrypoint(t.apiUrl,n,r):e==="testnet"?new D.TestnetEntrypoint(t.apiUrl,n,r):new D.MainnetEntrypoint(t.apiUrl,n,r)}};var ft=class{constructor(t){this.pendingBrand={protocol:L("brand"),name:"",description:"",logo:""};this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("BrandBuilder: user address not set");let e=A(this.config),r=new M.TransactionsFactoryConfig({chainID:e.chainId}),n=new M.TransferTransactionsFactory({config:r}),a=M.Address.newFromBech32(this.config.user.wallet),s=JSON.stringify(t);return n.createTransactionForNativeTokenTransfer(a,{receiver:M.Address.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(s))})}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.ensureValidSchema(r),r}async createFromTransaction(t,e=!1){return await this.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=A(this.config),n=W.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let a=await n.getTransaction(t);return this.createFromTransaction(a)}catch(a){return C.error("BrandBuilder: Error creating from transaction hash",a),null}}setName(t){return this.pendingBrand.name=t,this}setDescription(t){return this.pendingBrand.description=t,this}setLogo(t){return this.pendingBrand.logo=t,this}setUrls(t){return this.pendingBrand.urls=t,this}setColors(t){return this.pendingBrand.colors=t,this}setCta(t){return this.pendingBrand.cta=t,this}async build(){return this.ensure(this.pendingBrand.name,"name is required"),this.ensure(this.pendingBrand.description,"description is required"),this.ensure(this.pendingBrand.logo,"logo is required"),await this.ensureValidSchema(this.pendingBrand),this.pendingBrand}ensure(t,e){if(!t)throw new Error(`Warp: ${e}`)}async ensureValidSchema(t){let e=this.config.schema?.brand||x.LatestBrandSchemaUrl,n=await(await fetch(e)).json(),a=new Ct.default,s=a.compile(n);if(!s(t))throw new Error(`BrandBuilder: schema validation failed: ${a.errorsText(s.errors)}`)}};var l=require("@multiversx/sdk-core/out"),Lt=(i,t)=>i?l.OptionValue.newProvided(i):t?l.OptionValue.newMissingTyped(t):l.OptionValue.newMissing(),qt=(i,t)=>i?new l.OptionalValue(i.getType(),i):t?new l.OptionalValue(t):l.OptionalValue.newMissing(),_t=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let t=i[0].getType();return new l.List(t,i)},Mt=i=>l.VariadicValue.fromItems(...i),Ht=i=>{let t=i.map(e=>e.getType());return new l.CompositeValue(new l.CompositeType(...t),i)},jt=i=>l.StringValue.fromUTF8(i),Dt=i=>new l.U8Value(i),Qt=i=>new l.U16Value(i),Gt=i=>new l.U32Value(i),zt=i=>new l.U64Value(i),Kt=i=>new l.BigUIntValue(BigInt(i)),Jt=i=>new l.BooleanValue(i),Xt=i=>new l.AddressValue(l.Address.newFromBech32(i)),Yt=i=>new l.TokenIdentifierValue(i),Zt=i=>l.BytesValue.fromHex(i),te=i=>new l.Struct(new l.StructType("EsdtTokenPayment",[new l.FieldDefinition("token_identifier","",new l.TokenIdentifierType),new l.FieldDefinition("token_nonce","",new l.U64Type),new l.FieldDefinition("amount","",new l.BigUIntType)]),[new l.Field(new l.TokenIdentifierValue(i.token.identifier),"token_identifier"),new l.Field(new l.U64Value(BigInt(i.token.nonce)),"token_nonce"),new l.Field(new l.BigUIntValue(BigInt(i.amount)),"amount")]),ee=i=>new l.CodeMetadataValue(l.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),re=()=>new l.NothingValue;var Q=require("@multiversx/sdk-core");var rt=class{constructor(t){this.cache=new V;this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=A(this.config),r=new Q.TransactionsFactoryConfig({chainID:e.chainId}),n=new Q.TransferTransactionsFactory({config:r}),a={protocol:L("abi"),content:t},s=Q.Address.newFromBech32(this.config.user.wallet),o=JSON.stringify(a),u=n.createTransactionForTransfer(s,{receiver:s,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return u.gasLimit=u.gasLimit+BigInt(2e6),u}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={hash:t.hash,creator:t.sender.bech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=S.WarpAbi(t);if(e){let o=this.cache.get(r);if(o)return C.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),o}let n=A(this.config),s=W.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await s.getTransaction(t),u=await this.createFromTransaction(o);return e&&e.ttl&&u&&this.cache.set(r,u,e.ttl),u}catch(o){return C.error("WarpAbiBuilder: Error creating from transaction hash",o),null}}};var b=require("@multiversx/sdk-core");var G=require("@multiversx/sdk-core/out");var c=require("@multiversx/sdk-core/out");var bt=new RegExp(`${f.ArgParamsSeparator}(.*)`),k=class{nativeToString(t,e){return t==="esdt"&&e instanceof c.TokenTransfer?`esdt:${e.token.identifier}|${e.token.nonce.toString()}|${e.amount.toString()}`:`${t}:${e?.toString()??""}`}typedToString(t){if(t.hasClassOrSuperclass(c.OptionValue.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(c.OptionalValue.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(c.List.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[1]);return`list:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(c.VariadicValue.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[1]);return`variadic:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(c.CompositeValue.ClassName)){let e=t.getItems(),r=e.map(o=>this.typedToString(o).split(f.ArgParamsSeparator)[0]),n=e.map(o=>this.typedToString(o).split(f.ArgParamsSeparator)[1]),a=r.join(f.ArgCompositeSeparator),s=n.join(f.ArgCompositeSeparator);return`composite(${a}):${s}`}if(t.hasClassOrSuperclass(c.BigUIntValue.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(c.U8Value.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(c.U16Value.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(c.U32Value.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(c.U64Value.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(c.StringValue.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(c.BooleanValue.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(c.AddressValue.ClassName))return`address:${t.valueOf().bech32()}`;if(t.hasClassOrSuperclass(c.TokenIdentifierValue.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(c.BytesValue.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(c.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(),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.stringToNative(e)}nativeToTyped(t,e){let r=this.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new c.CompositeType(...e.split(f.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new c.StringType;if(t==="uint8")return new c.U8Type;if(t==="uint16")return new c.U16Type;if(t==="uint32")return new c.U32Type;if(t==="uint64")return new c.U64Type;if(t==="biguint")return new c.BigUIntType;if(t==="bool")return new c.BooleanType;if(t==="address")return new c.AddressType;if(t==="token")return new c.TokenIdentifierType;if(t==="hex")return new c.BytesType;if(t==="codemeta")return new c.CodeMetadataType;if(t==="esdt"||t==="nft")return new c.StructType("EsdtTokenPayment",[new c.FieldDefinition("token_identifier","",new c.TokenIdentifierType),new c.FieldDefinition("token_nonce","",new c.U64Type),new c.FieldDefinition("amount","",new c.BigUIntType)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToNative(t){let e=t.split(f.ArgParamsSeparator),r=e[0],n=e.slice(1).join(f.ArgParamsSeparator);if(r==="null")return[r,null];if(r==="option"){let[a,s]=n.split(f.ArgParamsSeparator);return[`option:${a}`,s||null]}else if(r==="optional"){let[a,s]=n.split(f.ArgParamsSeparator);return[`optional:${a}`,s||null]}else if(r==="list"){let a=n.split(f.ArgParamsSeparator),s=a.slice(0,-1).join(f.ArgParamsSeparator),o=a[a.length-1],p=(o?o.split(","):[]).map(d=>this.stringToNative(`${s}:${d}`)[1]);return[`list:${s}`,p]}else if(r==="variadic"){let a=n.split(f.ArgParamsSeparator),s=a.slice(0,-1).join(f.ArgParamsSeparator),o=a[a.length-1],p=(o?o.split(","):[]).map(d=>this.stringToNative(`${s}:${d}`)[1]);return[`variadic:${s}`,p]}else if(r.startsWith("composite")){let a=r.match(/\(([^)]+)\)/)?.[1]?.split(f.ArgCompositeSeparator),o=n.split(f.ArgCompositeSeparator).map((u,p)=>this.stringToNative(`${a[p]}:${u}`)[1]);return[r,o]}else{if(r==="string")return[r,n];if(r==="uint8"||r==="uint16"||r==="uint32")return[r,Number(n)];if(r==="uint64"||r==="biguint")return[r,BigInt(n||0)];if(r==="bool")return[r,n==="true"];if(r==="address")return[r,n];if(r==="token")return[r,n];if(r==="hex")return[r,n];if(r==="codemeta")return[r,n];if(r==="esdt"){let[a,s,o]=n.split(f.ArgCompositeSeparator);return[r,new c.TokenTransfer({token:new c.Token({identifier:a,nonce:BigInt(s)}),amount:BigInt(o)})]}}throw new Error(`WarpArgSerializer (stringToNative): Unsupported input type: ${r}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new c.NothingValue;if(e==="option"){let n=this.stringToTyped(r);return n instanceof c.NothingValue?c.OptionValue.newMissingTyped(n.getType()):c.OptionValue.newProvided(n)}if(e==="optional"){let n=this.stringToTyped(r);return n instanceof c.NothingValue?c.OptionalValue.newMissing():new c.OptionalValue(n.getType(),n)}if(e==="list"){let[n,a]=r.split(bt,2),o=a.split(",").map(u=>this.stringToTyped(`${n}:${u}`));return new c.List(this.nativeToType(n),o)}if(e==="variadic"){let[n,a]=r.split(bt,2),o=a.split(",").map(u=>this.stringToTyped(`${n}:${u}`));return new c.VariadicValue(new c.VariadicType(this.nativeToType(n)),o)}if(e.startsWith("composite")){let n=e.match(/\(([^)]+)\)/)?.[1],a=r.split(f.ArgCompositeSeparator),s=n.split(f.ArgCompositeSeparator),o=a.map((p,d)=>this.stringToTyped(`${s[d]}:${p}`)),u=o.map(p=>p.getType());return new c.CompositeValue(new c.CompositeType(...u),o)}if(e==="string")return r?c.StringValue.fromUTF8(r):new c.NothingValue;if(e==="uint8")return r?new c.U8Value(Number(r)):new c.NothingValue;if(e==="uint16")return r?new c.U16Value(Number(r)):new c.NothingValue;if(e==="uint32")return r?new c.U32Value(Number(r)):new c.NothingValue;if(e==="uint64")return r?new c.U64Value(BigInt(r)):new c.NothingValue;if(e==="biguint")return r?new c.BigUIntValue(BigInt(r)):new c.NothingValue;if(e==="bool")return r?new c.BooleanValue(typeof r=="boolean"?r:r==="true"):new c.NothingValue;if(e==="address")return r?new c.AddressValue(c.Address.newFromBech32(r)):new c.NothingValue;if(e==="token")return r?new c.TokenIdentifierValue(r):new c.NothingValue;if(e==="hex")return r?c.BytesValue.fromHex(r):new c.NothingValue;if(e==="codemeta")return new c.CodeMetadataValue(c.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let n=r.split(f.ArgCompositeSeparator);return new c.Struct(this.nativeToType("esdt"),[new c.Field(new c.TokenIdentifierValue(n[0]),"token_identifier"),new c.Field(new c.U64Value(BigInt(n[1])),"token_nonce"),new c.Field(new c.BigUIntValue(BigInt(n[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof c.OptionType)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.OptionalType)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.ListType)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.VariadicType)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.StringType)return"string";if(t instanceof c.U8Type)return"uint8";if(t instanceof c.U16Type)return"uint16";if(t instanceof c.U32Type)return"uint32";if(t instanceof c.U64Type)return"uint64";if(t instanceof c.BigUIntType)return"biguint";if(t instanceof c.BooleanType)return"bool";if(t instanceof c.AddressType)return"address";if(t instanceof c.TokenIdentifierType)return"token";if(t instanceof c.BytesType)return"hex";if(t instanceof c.CodeMetadataType)return"codemeta";if(t instanceof c.StructType&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var dt=i=>{if(i==="out")return 1;let t=i.match(/^out\[(\d+)\]/);return t?parseInt(t[1],10):(i.startsWith("out.")||i.startsWith("event."),null)},ie=(i,t)=>t.reduce((e,r)=>e&&e[r]!==void 0?e[r]:null,i),At=async(i,t,e,r,n,a)=>{let s=[],o={};if(!t.results||e.type!=="contract")return{values:s,results:o};if(!Object.values(t.results).some(y=>y.includes("out")||y.includes("event"))){for(let[y,B]of Object.entries(t.results))o[y]=B;return{values:s,results:await ot(t,o,n,a)}}let p=await i.getAbiForAction(e),d=new G.TransactionEventsParser({abi:p}),w=new G.SmartContractTransactionsOutcomeParser({abi:p}).parseExecute({transactionOnNetwork:r,function:e.func||void 0});for(let[y,B]of Object.entries(t.results)){if(B.startsWith(f.Transform.Prefix))continue;if(B.startsWith("input.")){o[y]=B;continue}let m=dt(B);if(m!==null&&m!==n){o[y]=null;continue}let[T,v,E]=B.split(".");if(T==="event"){if(!v||isNaN(Number(E)))continue;let P=Number(E),I=(0,G.findEventsByFirstTopic)(r,v),H=d.parseEvents({events:I})[0],U=Object.values(H)[P]||null;s.push(U),o[y]=U&&U.valueOf()}else if(T==="out"||T.startsWith("out[")){if(!v)continue;let P=Number(v),I=w.values[P-1]||null;E&&(I=I[E]||null),I&&typeof I=="object"&&(I="toFixed"in I?I.toFixed():I.valueOf()),s.push(I),o[y]=I&&I.valueOf()}else o[y]=B}return{values:s,results:await ot(t,o,n,a)}},xt=async(i,t,e,r)=>{let n=new k,a=t.map(p=>n.typedToString(p)),s=t.map(p=>n.typedToNative(p)[1]),o={};if(!i.results)return{values:a,results:o};let u=p=>{let d=p.split(".").slice(1).map(w=>parseInt(w)-1);if(d.length===0)return;let g=s[d[0]];for(let w=1;w<d.length;w++){if(g==null)return;g=g[d[w]]}return g};for(let[p,d]of Object.entries(i.results)){if(d.startsWith(f.Transform.Prefix))continue;let g=dt(d);if(g!==null&&g!==e){o[p]=null;continue}d.startsWith("out.")||d==="out"||d.startsWith("out[")?o[p]=u(d)||null:o[p]=d}return{values:a,results:await ot(i,o,e,r)}},Bt=async(i,t,e,r)=>{let n=[],a={};for(let[s,o]of Object.entries(i.results||{})){if(o.startsWith(f.Transform.Prefix))continue;let u=dt(o);if(u!==null&&u!==e){a[s]=null;continue}let[p,...d]=o.split(".");if(p==="out"||p.startsWith("out[")){let g=d.length===0?t?.data||t:ie(t,d);n.push(g),a[s]=g}else a[s]=o}return{values:n,results:await ot(i,a,e,r)}};var ot=async(i,t,e,r)=>{if(!i.results)return t;let n={...t};return n=ae(n,i,e,r),n=await se(i,n),n},ae=(i,t,e,r)=>{let n={...i},a=O(t,e)?.inputs||[],s=new k;for(let[o,u]of Object.entries(n))if(typeof u=="string"&&u.startsWith("input.")){let p=u.split(".")[1],d=a.findIndex(w=>w.as===p||w.name===p),g=d!==-1?r[d]?.value:null;n[o]=g?s.stringToNative(g)[1]:null}return n},se=async(i,t)=>{if(!i.results)return t;let e={...t},r=Object.entries(i.results).filter(([,n])=>n.startsWith(f.Transform.Prefix)).map(([n,a])=>({key:n,code:a.substring(f.Transform.Prefix.length)}));for(let{key:n,code:a}of r)try{let{runInVm:s}=await Promise.resolve().then(()=>(vt(),It));e[n]=await s(a,e)}catch(s){C.error(`Transform error for result '${n}':`,s),e[n]=null}return e};var oe=[{id:"EGLD",name:"eGold",decimals:18},{id:"EGLD-000000",name:"eGold",decimals:18}],St=i=>oe.find(t=>t.id===i)||null;var nt=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 C.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 C.error("WarpContractLoader: getVerificationInfo error",r),null}}};var gt=class{constructor(t){if(!t.currentUrl)throw new Error("WarpActionExecutor: currentUrl config not set");this.config=t,this.url=new URL(t.currentUrl),this.serializer=new k,this.contractLoader=new nt(t),this.cache=new V(t.cache?.type)}async createTransactionForExecute(t,e,r){let n=O(t,e);if(!this.config.user?.wallet)throw new Error("WarpActionExecutor: user address not set");let a=b.Address.newFromBech32(this.config.user.wallet),s=await W.getChainInfoForAction(this.config,n),o=new b.TransactionsFactoryConfig({chainID:s.chainId}),{destination:u,args:p,value:d,transfers:g,data:w,resolvedInputs:y}=await this.getTxComponentsFromInputs(s,n,r,a),B=p.map(T=>this.serializer.stringToTyped(T)),m=null;if(n.type==="transfer")m=new b.TransferTransactionsFactory({config:o}).createTransactionForTransfer(a,{receiver:u,nativeAmount:d,tokenTransfers:g,data:w?new Uint8Array(w):void 0});else if(n.type==="contract"&&u.isSmartContract())m=new b.SmartContractTransactionsFactory({config:o}).createTransactionForExecute(a,{contract:u,function:"func"in n&&n.func||"",gasLimit:"gasLimit"in n?BigInt(n.gasLimit||0):0n,arguments:B,tokenTransfers:g,nativeTransferAmount:d});else{if(n.type==="query")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(n.type==="collect")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!m)throw new Error(`WarpActionExecutor: Invalid action type (${n.type})`);return this.cache.set(S.LastWarpExecutionInputs(t.meta?.hash||"",e),y,Y.OneWeek),m}async getTransactionExecutionResults(t,e,r){let n=await N.apply(this.config,t),a=O(n,e),s=this.cache.get(S.LastWarpExecutionInputs(t.meta?.hash||"",e))??[],{values:o,results:u}=await At(this,n,a,r,e,s),p=W.getNextInfo(this.config,n,e,u),d=this.getPreparedMessages(n,u);return{success:r.status.isSuccessful(),warp:n,action:e,user:this.config.user?.wallet||null,txHash:r.hash,next:p,values:o,results:u,messages:d}}async executeQuery(t,e,r){let n=O(t,e);if(!n)throw new Error("WarpActionExecutor: Action not found");if(!n.func)throw new Error("WarpActionExecutor: Function not found");let a=await W.getChainInfoForAction(this.config,n),s=await N.apply(this.config,t),o=await this.getAbiForAction(n),{args:u,resolvedInputs:p}=await this.getTxComponentsFromInputs(a,n,r),d=u.map(ct=>this.serializer.stringToTyped(ct)),g=W.getChainEntrypoint(a,this.config.env),w=b.Address.newFromBech32(n.address),y=g.createSmartContractController(o),B=y.createQuery({contract:w,function:n.func,arguments:d}),m=await y.runQuery(B),T=m.returnCode==="ok",v=new b.ArgSerializer,E=o.getEndpoint(m.function),P=m.returnDataParts.map(ct=>Buffer.from(ct)),I=v.buffersToValues(P,E.output),{values:H,results:U}=await xt(s,I,e,p),R=W.getNextInfo(this.config,s,e,U);return{success:T,warp:s,action:e,user:this.config.user?.wallet||null,txHash:null,next:R,values:H,results:U,messages:this.getPreparedMessages(s,U)}}async executeCollect(t,e,r,n){let a=O(t,e);if(!a)throw new Error("WarpActionExecutor: Action not found");let s=await W.getChainInfoForAction(this.config,a),o=await N.apply(this.config,t),u=await this.getResolvedInputs(s,a,r),p=this.getModifiedInputs(u),d=m=>{if(!m.value)return null;let T=this.serializer.stringToNative(m.value)[1];if(m.input.type==="biguint")return T.toString();if(m.input.type==="esdt"){let v=T;return{token:v.token.identifier,nonce:v.token.nonce.toString(),amount:v.amount.toString()}}else return T},g=new Headers;g.set("Content-Type","application/json"),g.set("Accept","application/json"),Object.entries(a.destination.headers||{}).forEach(([m,T])=>{g.set(m,T)});let w=Object.fromEntries(p.map(m=>[m.input.as||m.input.name,d(m)])),y=a.destination.method||"GET",B=y==="GET"?void 0:JSON.stringify({inputs:w,meta:n});try{let m=await fetch(a.destination.url,{method:y,headers:g,body:B}),T=await m.json(),{values:v,results:E}=await Bt(o,T,e,p),P=W.getNextInfo(this.config,o,e,E);return{success:m.ok,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:P,values:v,results:E,messages:this.getPreparedMessages(o,E)}}catch(m){return C.error("WarpActionExecutor: Error executing collect",m),{success:!1,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:null,values:[],results:{},messages:{}}}}async getTxComponentsFromInputs(t,e,r,n){let a=await this.getResolvedInputs(t,e,r),s=this.getModifiedInputs(a),o=s.find(R=>R.input.position==="receiver")?.value,u="address"in e?e.address:null,p=o?.split(":")[1]||u||n?.toBech32();if(!p)throw new Error("WarpActionExecutor: Destination/Receiver not provided");let d=b.Address.newFromBech32(p),g=this.getPreparedArgs(e,s),w=s.find(R=>R.input.position==="value")?.value||null,y="value"in e?e.value:null,B=BigInt(w?.split(":")[1]||y||0),m=s.filter(R=>R.input.position==="transfer"&&R.value).map(R=>R.value),v=[...("transfers"in e?e.transfers:[])?.map(this.toTypedTransfer)||[],...m?.map(R=>this.serializer.stringToNative(R)[1])||[]],E=s.find(R=>R.input.position==="data")?.value,P="data"in e?e.data||"":null,I=E||P||null,H=I?this.serializer.stringToTyped(I).valueOf():null,U=H?Buffer.from(H):null;return{destination:d,args:g,value:B,transfers:v,data:U,resolvedInputs:s}}async getResolvedInputs(t,e,r){let n=e.inputs||[],a=await Promise.all(r.map(o=>this.preprocessInput(t,o))),s=(o,u)=>{if(o.source==="query"){let p=this.url.searchParams.get(o.name);return p?this.serializer.nativeToString(o.type,p):null}else return o.source===f.Source.UserWallet?this.config.user?.wallet?this.serializer.nativeToString("address",this.config.user.wallet):null:a[u]||null};return n.map((o,u)=>({input:o,value:s(o,u)}))}getModifiedInputs(t){return t.map((e,r)=>{if(e.input.modifier?.startsWith("scale:")){let[,n]=e.input.modifier.split(":");if(isNaN(Number(n))){let a=Number(t.find(u=>u.input.name===n)?.value?.split(":")[1]);if(!a)throw new Error(`WarpActionExecutor: Exponent value not found for input ${n}`);let s=e.value?.split(":")[1];if(!s)throw new Error("WarpActionExecutor: Scalable value not found");let o=z(s,+a);return{...e,value:`${e.input.type}:${o}`}}else{let a=e.value?.split(":")[1];if(!a)throw new Error("WarpActionExecutor: Scalable value not found");let s=z(a,+n);return{...e,value:`${e.input.type}:${s}`}}}else return e})}async preprocessInput(t,e){try{let[r,n]=e.split(f.ArgParamsSeparator,2);if(r==="esdt"){let[a,s,o,u]=n.split(f.ArgCompositeSeparator);if(u)return e;let p=new b.Token({identifier:a,nonce:BigInt(s)});if(!new b.TokenComputer().isFungible(p))return e;let w=St(a)?.decimals;if(w||(w=(await(await fetch(`${t.apiUrl}/tokens/${a}`)).json()).decimals),!w)throw new Error(`WarpActionExecutor: Decimals not found for token ${a}`);let y=new b.TokenTransfer({token:p,amount:z(o,w)});return this.serializer.nativeToString(r,y)+f.ArgCompositeSeparator+w}return e}catch{return e}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);let e=A(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return b.AbiRegistry.create(r.abi)}getPreparedArgs(t,e){let r="args"in t?t.args||[]:[];return e.forEach(({input:n,value:a})=>{if(!a||!n.position?.startsWith("arg:"))return;let s=Number(n.position.split(":")[1])-1;r.splice(s,0,a)}),r}getPreparedMessages(t,e){let r=Object.entries(t.messages||{}).map(([n,a])=>[n,K(a,e)]);return Object.fromEntries(r)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith(f.IdentifierType.Hash)){let e=new rt(this.config),r=t.abi.split(f.IdentifierParamSeparator)[1],n=await e.createFromTransactionHash(r);if(!n)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return b.AbiRegistry.create(n.content)}else{let r=await(await fetch(t.abi)).json();return b.AbiRegistry.create(r)}}toTypedTransfer(t){return new b.TokenTransfer({token:new b.Token({identifier:t.token,nonce:BigInt(t.nonce||0)}),amount:BigInt(t.amount||0)})}};var mt=class{constructor(t){this.config=t}async search(t,e,r){if(!this.config.index?.url)throw new Error("WarpIndex: Index URL is not set");try{let n=await fetch(this.config.index?.url,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.index?.apiKey}`,...r},body:JSON.stringify({[this.config.index?.searchParamName||"search"]:t,...e})});if(!n.ok)throw new Error(`WarpIndex: search failed with status ${n.status}`);return(await n.json()).hits}catch(n){throw C.error("WarpIndex: Error searching for warps: ",n),n}}};0&&(module.exports={BrandBuilder,CacheKey,CacheTtl,Config,WarpAbiBuilder,WarpActionExecutor,WarpArgSerializer,WarpBuilder,WarpCache,WarpConstants,WarpContractLoader,WarpIndex,WarpInterpolator,WarpLink,WarpProtocolVersions,WarpRegistry,WarpUtils,WarpValidator,address,biguint,boolean,codemeta,composite,esdt,getChainExplorerUrl,getLatestProtocolIdentifier,getMainChainInfo,getWarpActionByIndex,hex,list,nothing,option,optional,replacePlaceholders,shiftBigintBy,string,toPreviewText,toTypedChainInfo,token,u16,u32,u64,u8,variadic});
11
+ `],{type:"application/javascript"}),a=URL.createObjectURL(n),s=new Worker(a);s.onmessage=function(o){o.data.error?r(new Error(o.data.error)):e(o.data.result),s.terminate(),URL.revokeObjectURL(a)},s.onerror=function(o){r(new Error(`Error in transform: ${o.message}`)),s.terminate(),URL.revokeObjectURL(a)},s.postMessage(t)}catch(n){return r(n)}})}});var ce={};ht(ce,{BrandBuilder:()=>ft,CacheKey:()=>S,CacheTtl:()=>Y,WarpAbiBuilder:()=>rt,WarpActionExecutor:()=>gt,WarpArgSerializer:()=>k,WarpBuilder:()=>tt,WarpCache:()=>V,WarpConfig:()=>B,WarpConstants:()=>f,WarpContractLoader:()=>nt,WarpIndex:()=>mt,WarpInterpolator:()=>N,WarpLink:()=>et,WarpProtocolVersions:()=>$,WarpRegistry:()=>q,WarpUtils:()=>T,WarpValidator:()=>Z,address:()=>Xt,biguint:()=>Kt,boolean:()=>Jt,codemeta:()=>ee,composite:()=>Dt,esdt:()=>te,getChainExplorerUrl:()=>Ft,getLatestProtocolIdentifier:()=>L,getMainChainInfo:()=>A,getWarpActionByIndex:()=>O,hex:()=>Zt,list:()=>qt,nothing:()=>re,option:()=>Lt,optional:()=>_t,replacePlaceholders:()=>K,shiftBigintBy:()=>z,string:()=>Ht,toPreviewText:()=>ut,toTypedChainInfo:()=>at,token:()=>Yt,u16:()=>Qt,u32:()=>Gt,u64:()=>zt,u8:()=>jt,variadic:()=>Mt});module.exports=Ot(ce);var M=require("@multiversx/sdk-core"),Ct=pt(require("ajv"));var f={HttpProtocolPrefix:"http",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierType:{Alias:"alias",Hash:"hash"},Source:{UserWallet:"user:wallet"},Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:i=>i.config.user?.wallet},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:i=>i.chain.apiUrl},ChainExplorerUrl:{Placeholder:"CHAIN_EXPLORER",Accessor:i=>i.chain.explorerUrl}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",Transform:{Prefix:"transform:"},Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};var $={Warp:"2.0.1",Brand:"0.1.0",Abi:"0.1.0"},B={LatestWarpSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/v${$.Warp}.schema.json`,LatestBrandSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/brand/v${$.Brand}.schema.json`,DefaultClientUrl:i=>i==="devnet"?"https://devnet.usewarp.to":i==="testnet"?"https://testnet.usewarp.to":"https://usewarp.to",SuperClientUrls:["https://usewarp.to","https://testnet.usewarp.to","https://devnet.usewarp.to"],MainChain:{Name:"multiversx",DisplayName:"MultiversX",ApiUrl:i=>i==="devnet"?"https://devnet-api.multiversx.com":i==="testnet"?"https://testnet-api.multiversx.com":"https://api.multiversx.com",ExplorerUrl:i=>i==="devnet"?"https://devnet-explorer.multiversx.com":i==="testnet"?"https://testnet-explorer.multiversx.com":"https://explorer.multiversx.com",BlockTime:i=>6e3,AddressHrp:"erd",ChainId:i=>i==="devnet"?"D":i==="testnet"?"T":"1"},Registry:{Contract:i=>i==="devnet"?"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36":i==="testnet"?"####":"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"},AvailableActionInputSources:["field","query",f.Source.UserWallet],AvailableActionInputTypes:["string","uint8","uint16","uint32","uint64","biguint","boolean","address"],AvailableActionInputPositions:["receiver","value","transfer","arg:1","arg:2","arg:3","arg:4","arg:5","arg:6","arg:7","arg:8","arg:9","arg:10","data","ignore"]};var A=i=>({name:B.MainChain.Name,displayName:B.MainChain.DisplayName,chainId:B.MainChain.ChainId(i.env),blockTime:B.MainChain.BlockTime(i.env),addressHrp:B.MainChain.AddressHrp,apiUrl:B.MainChain.ApiUrl(i.env),explorerUrl:B.MainChain.ExplorerUrl(i.env)}),Ft=(i,t)=>i.explorerUrl+(t?"/"+t:""),L=i=>{if(i==="warp")return`warp:${$.Warp}`;if(i==="brand")return`brand:${$.Brand}`;if(i==="abi")return`abi:${$.Abi}`;throw new Error(`getLatestProtocolIdentifier: Invalid protocol name: ${i}`)},O=(i,t)=>i?.actions[t-1],at=i=>({name:i.name.toString(),displayName:i.display_name.toString(),chainId:i.chain_id.toString(),blockTime:i.block_time.toNumber(),addressHrp:i.address_hrp.toString(),apiUrl:i.api_url.toString(),explorerUrl:i.explorer_url.toString()}),z=(i,t)=>{let e=i.toString(),[r,n=""]=e.split("."),a=Math.abs(t);if(t>0)return BigInt(r+n.padEnd(a,"0"));if(t<0){let s=r+n;if(a>=s.length)return 0n;let o=s.slice(0,-a)||"0";return BigInt(o)}else return e.includes(".")?BigInt(e.split(".")[0]):BigInt(e)},ut=(i,t=100)=>{if(!i)return"";let e=i.replace(/<\/?(h[1-6])[^>]*>/gi," - ").replace(/<\/?(p|div|ul|ol|li|br|hr)[^>]*>/gi," ").replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return e=e.startsWith("- ")?e.slice(2):e,e=e.length>t?e.substring(0,e.lastIndexOf(" ",t))+"...":e,e},K=(i,t)=>i.replace(/\{\{([^}]+)\}\}/g,(e,r)=>t[r]||"");var H=class H{static info(...t){H.isTestEnv||console.info(...t)}static warn(...t){H.isTestEnv||console.warn(...t)}static error(...t){H.isTestEnv||console.error(...t)}};H.isTestEnv=typeof process<"u"&&process.env.JEST_WORKER_ID!==void 0;var C=H;var j=require("@multiversx/sdk-core");var J=class{constructor(t="warp-cache"){this.prefix=t}getKey(t){return`${this.prefix}:${t}`}get(t){try{let e=localStorage.getItem(this.getKey(t));if(!e)return null;let r=JSON.parse(e);return Date.now()>r.expiresAt?(localStorage.removeItem(this.getKey(t)),null):r.value}catch{return null}}set(t,e,r){let n={value:e,expiresAt:Date.now()+r*1e3};localStorage.setItem(this.getKey(t),JSON.stringify(n))}forget(t){localStorage.removeItem(this.getKey(t))}clear(){for(let t=0;t<localStorage.length;t++){let e=localStorage.key(t);e?.startsWith(this.prefix)&&localStorage.removeItem(e)}}};var F=class F{get(t){let e=F.cache.get(t);return e?Date.now()>e.expiresAt?(F.cache.delete(t),null):e.value:null}set(t,e,r){let n=Date.now()+r*1e3;F.cache.set(t,{value:e,expiresAt:n})}forget(t){F.cache.delete(t)}clear(){F.cache.clear()}};F.cache=new Map;var X=F;var Y={OneMinute:60,OneHour:60*60,OneDay:60*60*24,OneWeek:60*60*24*7,OneMonth:60*60*24*30,OneYear:60*60*24*365},S={Warp:i=>`warp:${i}`,WarpAbi:i=>`warp-abi:${i}`,LastWarpExecutionInputs:(i,t)=>`warp-exec-inputs:${i}:${t}`,RegistryInfo:i=>`registry-info:${i}`,Brand:i=>`brand:${i}`,ChainInfo:i=>`chain:${i}`,ChainInfos:()=>"chains"},V=class{constructor(t){this.strategy=this.selectStrategy(t)}selectStrategy(t){return t==="localStorage"?new J:t==="memory"?new X:typeof window<"u"&&window.localStorage?new J:new X}set(t,e,r){this.strategy.set(t,e,r)}get(t){return this.strategy.get(t)}forget(t){this.strategy.forget(t)}clear(){this.strategy.clear()}};var Tt=pt(require("qr-code-styling"));var _=require("@multiversx/sdk-core");var wt=pt(require("ajv"));var Z=class{constructor(t){this.config=t;this.config=t}async validate(t){let e=[];return e.push(...this.validateMaxOneValuePosition(t)),e.push(...this.validateVariableNamesAndResultNamesUppercase(t)),e.push(...this.validateAbiIsSetIfApplicable(t)),e.push(...await this.validateSchema(t)),{valid:e.length===0,errors:e}}validateMaxOneValuePosition(t){return t.actions.filter(r=>r.inputs?r.inputs.some(n=>n.position==="value"):!1).length>1?["Only one value position action is allowed"]:[]}validateVariableNamesAndResultNamesUppercase(t){let e=[],r=(n,a)=>{n&&Object.keys(n).forEach(s=>{s!==s.toUpperCase()&&e.push(`${a} name '${s}' must be uppercase`)})};return r(t.vars,"Variable"),r(t.results,"Result"),e}validateAbiIsSetIfApplicable(t){let e=t.actions.some(s=>s.type==="contract"),r=t.actions.some(s=>s.type==="query");if(!e&&!r)return[];let n=t.actions.some(s=>s.abi),a=Object.values(t.results||{}).some(s=>s.startsWith("out.")||s.startsWith("event."));return t.results&&!n&&a?["ABI is required when results are present for contract or query actions"]:[]}async validateSchema(t){try{let e=this.config.schema?.warp||B.LatestWarpSchemaUrl,n=await(await fetch(e)).json(),a=new wt.default,s=a.compile(n);return s(t)?[]:[`Schema validation failed: ${a.errorsText(s.errors)}`]}catch(e){return[`Schema validation failed: ${e instanceof Error?e.message:String(e)}`]}}};var tt=class{constructor(t){this.pendingWarp={protocol:L("warp"),name:"",title:"",description:null,preview:"",actions:[]};this.config=t,this.cache=new V(t.cache?.type)}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=A(this.config),r=new _.TransactionsFactoryConfig({chainID:e.chainId}),n=new _.TransferTransactionsFactory({config:r}),a=_.Address.newFromBech32(this.config.user.wallet),s=JSON.stringify(t),o=n.createTransactionForTransfer(a,{receiver:_.Address.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(s))});return o.gasLimit=o.gasLimit+BigInt(2e6),o}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.validate(r),r}async createFromTransaction(t,e=!1){let r=await this.createFromRaw(t.data.toString(),e);return r.meta={hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},r}async createFromTransactionHash(t,e){let r=S.Warp(t);if(e){let o=this.cache.get(r);if(o)return C.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),o}let n=A(this.config),s=T.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await s.getTransaction(t),p=await this.createFromTransaction(o);return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch(o){return C.error("WarpBuilder: Error creating from transaction hash",o),null}}setName(t){return this.pendingWarp.name=t,this}setTitle(t){return this.pendingWarp.title=t,this}setDescription(t){return this.pendingWarp.description=t,this}setPreview(t){return this.pendingWarp.preview=t,this}setActions(t){return this.pendingWarp.actions=t,this}addAction(t){return this.pendingWarp.actions.push(t),this}async build(){return this.ensure(this.pendingWarp.protocol,"protocol is required"),this.ensure(this.pendingWarp.name,"name is required"),this.ensure(this.pendingWarp.title,"title is required"),this.ensure(this.pendingWarp.actions.length>0,"actions are required"),await this.validate(this.pendingWarp),this.pendingWarp}getDescriptionPreview(t,e=100){return ut(t,e)}ensure(t,e){if(!t)throw new Error(e)}async validate(t){let r=await new Z(this.config).validate(t);if(!r.valid)throw new Error(r.errors.join(`
12
+ `))}};var N=class{static async apply(t,e){let r=this.applyVars(t,e);return await this.applyGlobals(t,r)}static async applyGlobals(t,e){let r={...e};return r.actions=await Promise.all(r.actions.map(async n=>await this.applyActionGlobals(t,n))),r=await this.applyRootGlobals(r,t),r}static applyVars(t,e){if(!e?.vars)return e;let r=JSON.stringify(e),n=(a,s)=>{r=r.replace(new RegExp(`{{${a.toUpperCase()}}}`,"g"),s.toString())};return Object.entries(e.vars).forEach(([a,s])=>{if(typeof s!="string")n(a,s);else if(s.startsWith(`${f.Vars.Query}:`)){if(!t.currentUrl)throw new Error("WarpUtils: currentUrl config is required to prepare vars");let o=s.split(`${f.Vars.Query}:`)[1],p=new URLSearchParams(t.currentUrl.split("?")[1]).get(o);p&&n(a,p)}else if(s.startsWith(`${f.Vars.Env}:`)){let o=s.split(`${f.Vars.Env}:`)[1],p=t.vars?.[o];p&&n(a,p)}else s===f.Source.UserWallet&&t.user?.wallet?n(a,t.user.wallet):n(a,s)}),JSON.parse(r)}static async applyRootGlobals(t,e){let r=JSON.stringify(t),n={config:e,chain:A(e)};return Object.values(f.Globals).forEach(a=>{let s=a.Accessor(n);s!=null&&(r=r.replace(new RegExp(`{{${a.Placeholder}}}`,"g"),s.toString()))}),JSON.parse(r)}static async applyActionGlobals(t,e){let r=await T.getChainInfoForAction(t,e),n=JSON.stringify(e),a={config:t,chain:r};return Object.values(f.Globals).forEach(s=>{let o=s.Accessor(a);o!=null&&(n=n.replace(new RegExp(`{{${s.Placeholder}}}`,"g"),o.toString()))}),JSON.parse(n)}};var h=require("@multiversx/sdk-core/out");var lt={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"}],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"}]},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 st=i=>({hash:i.hash.toString("hex"),alias:i.alias?.toString()||null,trust:i.trust.toString(),owner:i.owner.toString(),createdAt:i.created_at.toNumber(),upgradedAt:i.upgraded_at?.toNumber(),brand:i.brand?.toString("hex")||null,upgrade:i.upgrade?.toString("hex")||null}),Wt=i=>({unitPrice:BigInt(i.unit_price.toString()),admins:i.admins.map(t=>t.toBech32())});var q=class{constructor(t){this.config=t,this.cache=new V(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]}}async init(){await this.loadRegistryConfigs()}createWarpRegisterTransaction(t,e,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let n=h.Address.newFromBech32(this.config.user.wallet),a=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,s=()=>e&&r?[h.BytesValue.fromHex(t),h.BytesValue.fromUTF8(e),h.BytesValue.fromHex(r)]:e?[h.BytesValue.fromHex(t),h.BytesValue.fromUTF8(e)]:[h.BytesValue.fromHex(t)];return this.getFactory().createTransactionForExecute(n,{contract:this.getRegistryContractAddress(),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:a(),arguments:s()})}createWarpUnregisterTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[h.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.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromUTF8(t),h.BytesValue.fromHex(e)]})}createWarpAliasSetTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromHex(t),h.BytesValue.fromUTF8(e)]})}createWarpVerifyTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[h.BytesValue.fromHex(t)]})}createWarpTransferOwnershipTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[h.BytesValue.fromHex(t),new h.AddressValue(new h.Address(e))]})}createBrandRegisterTransaction(t){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromHex(t)]})}createWarpBrandingTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=h.Address.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[h.BytesValue.fromHex(t),h.BytesValue.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=S.RegistryInfo(t),n=e?this.cache.get(r):null;if(n)return C.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),n;let a=this.getRegistryContractAddress(),s=this.getController(),o=s.createQuery({contract:a,function:"getInfoByAlias",arguments:[h.BytesValue.fromUTF8(t)]}),p=await s.runQuery(o),[u]=s.parseQueryResponse(p),d=u?st(u):null,g=d?.brand?await this.fetchBrand(d.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:d,brand:g},e.ttl),{registryInfo:d,brand:g}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=S.RegistryInfo(t);if(e){let g=this.cache.get(r);if(g)return C.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),g}let n=this.getRegistryContractAddress(),a=this.getController(),s=a.createQuery({contract:n,function:"getInfoByHash",arguments:[h.BytesValue.fromHex(t)]}),o=await a.runQuery(s),[p]=a.parseQueryResponse(o),u=p?st(p):null,d=u?.brand?await this.fetchBrand(u.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:u,brand:d},e.ttl),{registryInfo:u,brand:d}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),a=n.createQuery({contract:r,function:"getUserWarps",arguments:[new h.AddressValue(new h.Address(e))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s);return o.map(st)}catch{return[]}}async getUserBrands(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),a=n.createQuery({contract:r,function:"getUserBrands",arguments:[new h.AddressValue(new h.Address(e))]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s),p=o.map(g=>g.toString("hex")),u={ttl:365*24*60*60};return(await Promise.all(p.map(g=>this.fetchBrand(g,u)))).filter(g=>g!==null)}catch{return[]}}async getChainInfos(t){let e=S.ChainInfos();if(t&&t.ttl){let u=this.cache.get(e);if(u)return C.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),u}let r=this.getRegistryContractAddress(),n=this.getController(),a=n.createQuery({contract:r,function:"getChains",arguments:[]}),s=await n.runQuery(a),[o]=n.parseQueryResponse(s),p=o.map(at);if(t&&t.ttl){for(let u of p)this.cache.set(S.ChainInfo(u.chain),u,t.ttl);this.cache.set(e,p,t.ttl)}return p}async getChainInfo(t,e){try{let r=S.ChainInfo(t),n=e?this.cache.get(r):null;if(n)return C.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),n;let a=this.getRegistryContractAddress(),s=this.getController(),o=s.createQuery({contract:a,function:"getChain",arguments:[h.BytesValue.fromUTF8(t)]}),p=await s.runQuery(o),[u]=s.parseQueryResponse(p),d=u?at(u):null;return e&&e.ttl&&d&&this.cache.set(r,d,e.ttl),d}catch{return null}}async fetchBrand(t,e){let r=S.Brand(t),n=e?this.cache.get(r):null;if(n)return C.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),n;let a=A(this.config),o=T.getChainEntrypoint(a,this.config.env).createNetworkProvider();try{let p=await o.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}}getRegistryContractAddress(){return h.Address.newFromBech32(this.config.registry?.contract||B.Registry.Contract(this.config.env))}async loadRegistryConfigs(){let t=this.getRegistryContractAddress(),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),n=r?Wt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=A(this.config),e=new h.TransactionsFactoryConfig({chainID:t.chainId}),r=h.AbiRegistry.create(lt);return new h.SmartContractTransactionsFactory({config:e,abi:r})}getController(){let t=A(this.config),e=T.getChainEntrypoint(t,this.config.env),r=h.AbiRegistry.create(lt);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.config.user?.wallet&&this.registryConfig.admins.includes(this.config.user.wallet)}};var et=class{constructor(t){this.config=t;this.config=t}isValid(t){return t.startsWith(f.HttpProtocolPrefix)?!!this.extractIdentifierInfoFromUrl(t):!1}async detectFromHtml(t){if(!t.length)return{match:!1,results:[]};let n=[...t.matchAll(/https?:\/\/[^\s"'<>]+/gi)].map(u=>u[0]).filter(u=>this.isValid(u)).map(u=>this.detect(u)),s=(await Promise.all(n)).filter(u=>u.match),o=s.length>0,p=s.map(u=>({url:u.url,warp:u.warp}));return{match:o,results:p}}async detect(t,e){let r={match:!1,url:t,warp:null,registryInfo:null,brand:null},n=t.startsWith(f.HttpProtocolPrefix)?this.extractIdentifierInfoFromUrl(t):T.getInfoFromPrefixedIdentifier(t);if(!n)return r;try{let{type:a,identifierBase:s}=n,o=new tt(this.config),p=new q(this.config),u=null,d=null,g=null;if(a==="hash"){u=await o.createFromTransactionHash(s,e);let y=await p.getInfoByHash(s,e);d=y.registryInfo,g=y.brand}else if(a==="alias"){let y=await p.getInfoByAlias(s,e);d=y.registryInfo,g=y.brand,y.registryInfo&&(u=await o.createFromTransactionHash(y.registryInfo.hash,e))}let w=u?await N.apply(this.config,u):null;return w?{match:!0,url:t,warp:w,registryInfo:d,brand:g}:r}catch(a){return C.error("Error detecting warp link",a),r}}build(t,e){let r=this.config.clientUrl||B.DefaultClientUrl(this.config.env),n=t===f.IdentifierType.Alias?encodeURIComponent(e):encodeURIComponent(t+f.IdentifierParamSeparator+e);return B.SuperClientUrls.includes(r)?`${r}/${n}`:`${r}?${f.IdentifierParamName}=${n}`}buildFromPrefixedIdentifier(t){let e=T.getInfoFromPrefixedIdentifier(t);return e?this.build(e.type,e.identifierBase):""}generateQrCode(t,e,r=512,n="white",a="black",s="#23F7DD"){let o=this.build(t,e);return new Tt.default({type:"svg",width:r,height:r,data:String(o),margin:16,qrOptions:{typeNumber:0,mode:"Byte",errorCorrectionLevel:"Q"},backgroundOptions:{color:n},dotsOptions:{type:"extra-rounded",color:a},cornersSquareOptions:{type:"extra-rounded",color:a},cornersDotOptions:{type:"square",color:a},imageOptions:{hideBackgroundDots:!0,imageSize:.4,margin:8},image:`data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 100 100" fill="${encodeURIComponent(s)}" xmlns="http://www.w3.org/2000/svg"><path d="M54.8383 50.0242L95 28.8232L88.2456 16L51.4717 30.6974C50.5241 31.0764 49.4759 31.0764 48.5283 30.6974L11.7544 16L5 28.8232L45.1616 50.0242L5 71.2255L11.7544 84.0488L48.5283 69.351C49.4759 68.9724 50.5241 68.9724 51.4717 69.351L88.2456 84.0488L95 71.2255L54.8383 50.0242Z"/></svg>`})}extractIdentifierInfoFromUrl(t){let e=new URL(t),r=B.SuperClientUrls.includes(e.origin),n=e.searchParams.get(f.IdentifierParamName),a=r&&!n?e.pathname.split("/")[1]:n;if(!a)return null;let s=decodeURIComponent(a);return T.getInfoFromPrefixedIdentifier(s)}};var $t="https://",T=class{static getInfoFromPrefixedIdentifier(t){let e=decodeURIComponent(t),r=e.includes(f.IdentifierParamSeparator)?e:`${f.IdentifierType.Alias}${f.IdentifierParamSeparator}${e}`,[n,a]=r.split(f.IdentifierParamSeparator),s=a.split("?")[0];return{type:n,identifier:a,identifierBase:s}}static getNextInfo(t,e,r,n){let a=e.actions?.[r]?.next||e.next||null;if(!a)return null;if(a.startsWith($t))return[{identifier:null,url:a}];let[s,o]=a.split("?");if(!o)return[{identifier:s,url:this.buildNextUrl(s,t)}];let p=o.match(/{{([^}]+)\[\](\.[^}]+)?}}/g)||[];if(p.length===0){let m=K(o,{...e.vars,...n}),W=m?`${s}?${m}`:s;return[{identifier:W,url:this.buildNextUrl(W,t)}]}let u=p[0];if(!u)return[];let d=u.match(/{{([^[]+)\[\]/),g=d?d[1]:null;if(!g||n[g]===void 0)return[];let w=Array.isArray(n[g])?n[g]:[n[g]];if(w.length===0)return[];let y=p.filter(m=>m.includes(`{{${g}[]`)).map(m=>{let W=m.match(/\[\](\.[^}]+)?}}/),v=W&&W[1]||"";return{placeholder:m,field:v?v.slice(1):"",regex:new RegExp(m.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g")}});return w.map(m=>{let W=o;for(let{regex:E,field:P}of y){let b=P?this.getNestedValue(m,P):m;if(b==null)return null;W=W.replace(E,b)}if(W.includes("{{")||W.includes("}}"))return null;let v=W?`${s}?${W}`:s;return{identifier:v,url:this.buildNextUrl(v,t)}}).filter(m=>m!==null)}static buildNextUrl(t,e){let[r,n]=t.split("?"),a=this.getInfoFromPrefixedIdentifier(r)||{type:"alias",identifier:r,identifierBase:r},o=new et(e).build(a.type,a.identifierBase);if(!n)return o;let p=new URL(o);return new URLSearchParams(n).forEach((u,d)=>p.searchParams.set(d,u)),p.toString().replace(/\/\?/,"?")}static getNestedValue(t,e){return e.split(".").reduce((r,n)=>r?.[n],t)}static async getChainInfoForAction(t,e){if(!e.chain)return A(t);let r=await new q(t).getChainInfo(e.chain,{ttl:Y.OneWeek});if(!r)throw new Error(`WarpActionExecutor: Chain info not found for ${e.chain}`);return r}static getChainEntrypoint(t,e){let r="warp-sdk",n="api";return e==="devnet"?new j.DevnetEntrypoint(t.apiUrl,n,r):e==="testnet"?new j.TestnetEntrypoint(t.apiUrl,n,r):new j.MainnetEntrypoint(t.apiUrl,n,r)}};var ft=class{constructor(t){this.pendingBrand={protocol:L("brand"),name:"",description:"",logo:""};this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("BrandBuilder: user address not set");let e=A(this.config),r=new M.TransactionsFactoryConfig({chainID:e.chainId}),n=new M.TransferTransactionsFactory({config:r}),a=M.Address.newFromBech32(this.config.user.wallet),s=JSON.stringify(t);return n.createTransactionForNativeTokenTransfer(a,{receiver:M.Address.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(s))})}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.ensureValidSchema(r),r}async createFromTransaction(t,e=!1){return await this.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=A(this.config),n=T.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let a=await n.getTransaction(t);return this.createFromTransaction(a)}catch(a){return C.error("BrandBuilder: Error creating from transaction hash",a),null}}setName(t){return this.pendingBrand.name=t,this}setDescription(t){return this.pendingBrand.description=t,this}setLogo(t){return this.pendingBrand.logo=t,this}setUrls(t){return this.pendingBrand.urls=t,this}setColors(t){return this.pendingBrand.colors=t,this}setCta(t){return this.pendingBrand.cta=t,this}async build(){return this.ensure(this.pendingBrand.name,"name is required"),this.ensure(this.pendingBrand.description,"description is required"),this.ensure(this.pendingBrand.logo,"logo is required"),await this.ensureValidSchema(this.pendingBrand),this.pendingBrand}ensure(t,e){if(!t)throw new Error(`Warp: ${e}`)}async ensureValidSchema(t){let e=this.config.schema?.brand||B.LatestBrandSchemaUrl,n=await(await fetch(e)).json(),a=new Ct.default,s=a.compile(n);if(!s(t))throw new Error(`BrandBuilder: schema validation failed: ${a.errorsText(s.errors)}`)}};var l=require("@multiversx/sdk-core/out"),Lt=(i,t)=>i?l.OptionValue.newProvided(i):t?l.OptionValue.newMissingTyped(t):l.OptionValue.newMissing(),_t=(i,t)=>i?new l.OptionalValue(i.getType(),i):t?new l.OptionalValue(t):l.OptionalValue.newMissing(),qt=i=>{if(i.length===0)throw new Error("Cannot create a list from an empty array");let t=i[0].getType();return new l.List(t,i)},Mt=i=>l.VariadicValue.fromItems(...i),Dt=i=>{let t=i.map(e=>e.getType());return new l.CompositeValue(new l.CompositeType(...t),i)},Ht=i=>l.StringValue.fromUTF8(i),jt=i=>new l.U8Value(i),Qt=i=>new l.U16Value(i),Gt=i=>new l.U32Value(i),zt=i=>new l.U64Value(i),Kt=i=>new l.BigUIntValue(BigInt(i)),Jt=i=>new l.BooleanValue(i),Xt=i=>new l.AddressValue(l.Address.newFromBech32(i)),Yt=i=>new l.TokenIdentifierValue(i),Zt=i=>l.BytesValue.fromHex(i),te=i=>new l.Struct(new l.StructType("EsdtTokenPayment",[new l.FieldDefinition("token_identifier","",new l.TokenIdentifierType),new l.FieldDefinition("token_nonce","",new l.U64Type),new l.FieldDefinition("amount","",new l.BigUIntType)]),[new l.Field(new l.TokenIdentifierValue(i.token.identifier),"token_identifier"),new l.Field(new l.U64Value(BigInt(i.token.nonce)),"token_nonce"),new l.Field(new l.BigUIntValue(BigInt(i.amount)),"amount")]),ee=i=>new l.CodeMetadataValue(l.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(i,"hex")))),re=()=>new l.NothingValue;var Q=require("@multiversx/sdk-core");var rt=class{constructor(t){this.cache=new V;this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=A(this.config),r=new Q.TransactionsFactoryConfig({chainID:e.chainId}),n=new Q.TransferTransactionsFactory({config:r}),a={protocol:L("abi"),content:t},s=Q.Address.newFromBech32(this.config.user.wallet),o=JSON.stringify(a),p=n.createTransactionForTransfer(s,{receiver:s,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return p.gasLimit=p.gasLimit+BigInt(2e6),p}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={hash:t.hash,creator:t.sender.bech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=S.WarpAbi(t);if(e){let o=this.cache.get(r);if(o)return C.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),o}let n=A(this.config),s=T.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await s.getTransaction(t),p=await this.createFromTransaction(o);return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch(o){return C.error("WarpAbiBuilder: Error creating from transaction hash",o),null}}};var I=require("@multiversx/sdk-core");var G=require("@multiversx/sdk-core/out");var c=require("@multiversx/sdk-core/out");var It=new RegExp(`${f.ArgParamsSeparator}(.*)`),k=class{nativeToString(t,e){return t==="esdt"&&e instanceof c.TokenTransfer?`esdt:${e.token.identifier}|${e.token.nonce.toString()}|${e.amount.toString()}`:`${t}:${e?.toString()??""}`}typedToString(t){if(t.hasClassOrSuperclass(c.OptionValue.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(c.OptionalValue.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(c.List.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[1]);return`list:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(c.VariadicValue.ClassName)){let e=t.getItems(),n=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[0])[0],a=e.map(s=>this.typedToString(s).split(f.ArgParamsSeparator)[1]);return`variadic:${n}:${a.join(",")}`}if(t.hasClassOrSuperclass(c.CompositeValue.ClassName)){let e=t.getItems(),r=e.map(o=>this.typedToString(o).split(f.ArgParamsSeparator)[0]),n=e.map(o=>this.typedToString(o).split(f.ArgParamsSeparator)[1]),a=r.join(f.ArgCompositeSeparator),s=n.join(f.ArgCompositeSeparator);return`composite(${a}):${s}`}if(t.hasClassOrSuperclass(c.BigUIntValue.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(c.U8Value.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(c.U16Value.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(c.U32Value.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(c.U64Value.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(c.StringValue.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(c.BooleanValue.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(c.AddressValue.ClassName))return`address:${t.valueOf().bech32()}`;if(t.hasClassOrSuperclass(c.TokenIdentifierValue.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(c.BytesValue.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(c.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(),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.stringToNative(e)}nativeToTyped(t,e){let r=this.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new c.CompositeType(...e.split(f.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new c.StringType;if(t==="uint8")return new c.U8Type;if(t==="uint16")return new c.U16Type;if(t==="uint32")return new c.U32Type;if(t==="uint64")return new c.U64Type;if(t==="biguint")return new c.BigUIntType;if(t==="bool")return new c.BooleanType;if(t==="address")return new c.AddressType;if(t==="token")return new c.TokenIdentifierType;if(t==="hex")return new c.BytesType;if(t==="codemeta")return new c.CodeMetadataType;if(t==="esdt"||t==="nft")return new c.StructType("EsdtTokenPayment",[new c.FieldDefinition("token_identifier","",new c.TokenIdentifierType),new c.FieldDefinition("token_nonce","",new c.U64Type),new c.FieldDefinition("amount","",new c.BigUIntType)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToNative(t){let e=t.split(f.ArgParamsSeparator),r=e[0],n=e.slice(1).join(f.ArgParamsSeparator);if(r==="null")return[r,null];if(r==="option"){let[a,s]=n.split(f.ArgParamsSeparator);return[`option:${a}`,s||null]}else if(r==="optional"){let[a,s]=n.split(f.ArgParamsSeparator);return[`optional:${a}`,s||null]}else if(r==="list"){let a=n.split(f.ArgParamsSeparator),s=a.slice(0,-1).join(f.ArgParamsSeparator),o=a[a.length-1],u=(o?o.split(","):[]).map(d=>this.stringToNative(`${s}:${d}`)[1]);return[`list:${s}`,u]}else if(r==="variadic"){let a=n.split(f.ArgParamsSeparator),s=a.slice(0,-1).join(f.ArgParamsSeparator),o=a[a.length-1],u=(o?o.split(","):[]).map(d=>this.stringToNative(`${s}:${d}`)[1]);return[`variadic:${s}`,u]}else if(r.startsWith("composite")){let a=r.match(/\(([^)]+)\)/)?.[1]?.split(f.ArgCompositeSeparator),o=n.split(f.ArgCompositeSeparator).map((p,u)=>this.stringToNative(`${a[u]}:${p}`)[1]);return[r,o]}else{if(r==="string")return[r,n];if(r==="uint8"||r==="uint16"||r==="uint32")return[r,Number(n)];if(r==="uint64"||r==="biguint")return[r,BigInt(n||0)];if(r==="bool")return[r,n==="true"];if(r==="address")return[r,n];if(r==="token")return[r,n];if(r==="hex")return[r,n];if(r==="codemeta")return[r,n];if(r==="esdt"){let[a,s,o]=n.split(f.ArgCompositeSeparator);return[r,new c.TokenTransfer({token:new c.Token({identifier:a,nonce:BigInt(s)}),amount:BigInt(o)})]}}throw new Error(`WarpArgSerializer (stringToNative): Unsupported input type: ${r}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new c.NothingValue;if(e==="option"){let n=this.stringToTyped(r);return n instanceof c.NothingValue?c.OptionValue.newMissingTyped(n.getType()):c.OptionValue.newProvided(n)}if(e==="optional"){let n=this.stringToTyped(r);return n instanceof c.NothingValue?c.OptionalValue.newMissing():new c.OptionalValue(n.getType(),n)}if(e==="list"){let[n,a]=r.split(It,2),o=a.split(",").map(p=>this.stringToTyped(`${n}:${p}`));return new c.List(this.nativeToType(n),o)}if(e==="variadic"){let[n,a]=r.split(It,2),o=a.split(",").map(p=>this.stringToTyped(`${n}:${p}`));return new c.VariadicValue(new c.VariadicType(this.nativeToType(n)),o)}if(e.startsWith("composite")){let n=e.match(/\(([^)]+)\)/)?.[1],a=r.split(f.ArgCompositeSeparator),s=n.split(f.ArgCompositeSeparator),o=a.map((u,d)=>this.stringToTyped(`${s[d]}:${u}`)),p=o.map(u=>u.getType());return new c.CompositeValue(new c.CompositeType(...p),o)}if(e==="string")return r?c.StringValue.fromUTF8(r):new c.NothingValue;if(e==="uint8")return r?new c.U8Value(Number(r)):new c.NothingValue;if(e==="uint16")return r?new c.U16Value(Number(r)):new c.NothingValue;if(e==="uint32")return r?new c.U32Value(Number(r)):new c.NothingValue;if(e==="uint64")return r?new c.U64Value(BigInt(r)):new c.NothingValue;if(e==="biguint")return r?new c.BigUIntValue(BigInt(r)):new c.NothingValue;if(e==="bool")return r?new c.BooleanValue(typeof r=="boolean"?r:r==="true"):new c.NothingValue;if(e==="address")return r?new c.AddressValue(c.Address.newFromBech32(r)):new c.NothingValue;if(e==="token")return r?new c.TokenIdentifierValue(r):new c.NothingValue;if(e==="hex")return r?c.BytesValue.fromHex(r):new c.NothingValue;if(e==="codemeta")return new c.CodeMetadataValue(c.CodeMetadata.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let n=r.split(f.ArgCompositeSeparator);return new c.Struct(this.nativeToType("esdt"),[new c.Field(new c.TokenIdentifierValue(n[0]),"token_identifier"),new c.Field(new c.U64Value(BigInt(n[1])),"token_nonce"),new c.Field(new c.BigUIntValue(BigInt(n[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof c.OptionType)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.OptionalType)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.ListType)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.VariadicType)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof c.StringType)return"string";if(t instanceof c.U8Type)return"uint8";if(t instanceof c.U16Type)return"uint16";if(t instanceof c.U32Type)return"uint32";if(t instanceof c.U64Type)return"uint64";if(t instanceof c.BigUIntType)return"biguint";if(t instanceof c.BooleanType)return"bool";if(t instanceof c.AddressType)return"address";if(t instanceof c.TokenIdentifierType)return"token";if(t instanceof c.BytesType)return"hex";if(t instanceof c.CodeMetadataType)return"codemeta";if(t instanceof c.StructType&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var dt=i=>{if(i==="out")return 1;let t=i.match(/^out\[(\d+)\]/);return t?parseInt(t[1],10):(i.startsWith("out.")||i.startsWith("event."),null)},ie=(i,t)=>t.reduce((e,r)=>e&&e[r]!==void 0?e[r]:null,i),At=async(i,t,e,r,n,a)=>{let s=[],o={};if(!t.results||e.type!=="contract")return{values:s,results:o};if(!Object.values(t.results).some(y=>y.includes("out")||y.includes("event"))){for(let[y,x]of Object.entries(t.results))o[y]=x;return{values:s,results:await ot(t,o,n,a)}}let u=await i.getAbiForAction(e),d=new G.TransactionEventsParser({abi:u}),w=new G.SmartContractTransactionsOutcomeParser({abi:u}).parseExecute({transactionOnNetwork:r,function:e.func||void 0});for(let[y,x]of Object.entries(t.results)){if(x.startsWith(f.Transform.Prefix))continue;if(x.startsWith("input.")){o[y]=x;continue}let m=dt(x);if(m!==null&&m!==n){o[y]=null;continue}let[W,v,E]=x.split(".");if(W==="event"){if(!v||isNaN(Number(E)))continue;let P=Number(E),b=(0,G.findEventsByFirstTopic)(r,v),D=d.parseEvents({events:b})[0],U=Object.values(D)[P]||null;s.push(U),o[y]=U&&U.valueOf()}else if(W==="out"||W.startsWith("out[")){if(!v)continue;let P=Number(v),b=w.values[P-1]||null;E&&(b=b[E]||null),b&&typeof b=="object"&&(b="toFixed"in b?b.toFixed():b.valueOf()),s.push(b),o[y]=b&&b.valueOf()}else o[y]=x}return{values:s,results:await ot(t,o,n,a)}},xt=async(i,t,e,r)=>{let n=new k,a=t.map(u=>n.typedToString(u)),s=t.map(u=>n.typedToNative(u)[1]),o={};if(!i.results)return{values:a,results:o};let p=u=>{let d=u.split(".").slice(1).map(w=>parseInt(w)-1);if(d.length===0)return;let g=s[d[0]];for(let w=1;w<d.length;w++){if(g==null)return;g=g[d[w]]}return g};for(let[u,d]of Object.entries(i.results)){if(d.startsWith(f.Transform.Prefix))continue;let g=dt(d);if(g!==null&&g!==e){o[u]=null;continue}d.startsWith("out.")||d==="out"||d.startsWith("out[")?o[u]=p(d)||null:o[u]=d}return{values:a,results:await ot(i,o,e,r)}},Bt=async(i,t,e,r)=>{let n=[],a={};for(let[s,o]of Object.entries(i.results||{})){if(o.startsWith(f.Transform.Prefix))continue;let p=dt(o);if(p!==null&&p!==e){a[s]=null;continue}let[u,...d]=o.split(".");if(u==="out"||u.startsWith("out[")){let g=d.length===0?t?.data||t:ie(t,d);n.push(g),a[s]=g}else a[s]=o}return{values:n,results:await ot(i,a,e,r)}};var ot=async(i,t,e,r)=>{if(!i.results)return t;let n={...t};return n=ae(n,i,e,r),n=await se(i,n),n},ae=(i,t,e,r)=>{let n={...i},a=O(t,e)?.inputs||[],s=new k;for(let[o,p]of Object.entries(n))if(typeof p=="string"&&p.startsWith("input.")){let u=p.split(".")[1],d=a.findIndex(w=>w.as===u||w.name===u),g=d!==-1?r[d]?.value:null;n[o]=g?s.stringToNative(g)[1]:null}return n},se=async(i,t)=>{if(!i.results)return t;let e={...t},r=Object.entries(i.results).filter(([,n])=>n.startsWith(f.Transform.Prefix)).map(([n,a])=>({key:n,code:a.substring(f.Transform.Prefix.length)}));for(let{key:n,code:a}of r)try{let{runInVm:s}=await Promise.resolve().then(()=>(vt(),bt));e[n]=await s(a,e)}catch(s){C.error(`Transform error for result '${n}':`,s),e[n]=null}return e};var oe=[{id:"EGLD",name:"eGold",decimals:18},{id:"EGLD-000000",name:"eGold",decimals:18}],St=i=>oe.find(t=>t.id===i)||null;var nt=class{constructor(t){this.config=t}async getContract(t,e){try{let a=await T.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:a.ownerAddress,verified:a.isVerified||!1}}catch(r){return C.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let a=await T.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:a.codeHash,abi:a.source.abi}}catch(r){return C.error("WarpContractLoader: getVerificationInfo error",r),null}}};var gt=class{constructor(t){if(!t.currentUrl)throw new Error("WarpActionExecutor: currentUrl config not set");this.config=t,this.url=new URL(t.currentUrl),this.serializer=new k,this.contractLoader=new nt(t),this.cache=new V(t.cache?.type)}async createTransactionForExecute(t,e,r){let n=O(t,e);if(!this.config.user?.wallet)throw new Error("WarpActionExecutor: user address not set");let a=I.Address.newFromBech32(this.config.user.wallet),s=await T.getChainInfoForAction(this.config,n),o=new I.TransactionsFactoryConfig({chainID:s.chainId}),{destination:p,args:u,value:d,transfers:g,data:w,resolvedInputs:y}=await this.getTxComponentsFromInputs(s,n,r,a),x=u.map(W=>this.serializer.stringToTyped(W)),m=null;if(n.type==="transfer")m=new I.TransferTransactionsFactory({config:o}).createTransactionForTransfer(a,{receiver:p,nativeAmount:d,tokenTransfers:g,data:w?new Uint8Array(w):void 0});else if(n.type==="contract"&&p.isSmartContract())m=new I.SmartContractTransactionsFactory({config:o}).createTransactionForExecute(a,{contract:p,function:"func"in n&&n.func||"",gasLimit:"gasLimit"in n?BigInt(n.gasLimit||0):0n,arguments:x,tokenTransfers:g,nativeTransferAmount:d});else{if(n.type==="query")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(n.type==="collect")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!m)throw new Error(`WarpActionExecutor: Invalid action type (${n.type})`);return this.cache.set(S.LastWarpExecutionInputs(t.meta?.hash||"",e),y,Y.OneWeek),m}async getTransactionExecutionResults(t,e,r){let n=await N.apply(this.config,t),a=O(n,e),s=this.cache.get(S.LastWarpExecutionInputs(t.meta?.hash||"",e))??[],{values:o,results:p}=await At(this,n,a,r,e,s),u=T.getNextInfo(this.config,n,e,p),d=this.getPreparedMessages(n,p);return{success:r.status.isSuccessful(),warp:n,action:e,user:this.config.user?.wallet||null,txHash:r.hash,next:u,values:o,results:p,messages:d}}async executeQuery(t,e,r){let n=O(t,e);if(!n)throw new Error("WarpActionExecutor: Action not found");if(!n.func)throw new Error("WarpActionExecutor: Function not found");let a=await T.getChainInfoForAction(this.config,n),s=await N.apply(this.config,t),o=await this.getAbiForAction(n),{args:p,resolvedInputs:u}=await this.getTxComponentsFromInputs(a,n,r),d=p.map(ct=>this.serializer.stringToTyped(ct)),g=T.getChainEntrypoint(a,this.config.env),w=I.Address.newFromBech32(n.address),y=g.createSmartContractController(o),x=y.createQuery({contract:w,function:n.func,arguments:d}),m=await y.runQuery(x),W=m.returnCode==="ok",v=new I.ArgSerializer,E=o.getEndpoint(m.function),P=m.returnDataParts.map(ct=>Buffer.from(ct)),b=v.buffersToValues(P,E.output),{values:D,results:U}=await xt(s,b,e,u),R=T.getNextInfo(this.config,s,e,U);return{success:W,warp:s,action:e,user:this.config.user?.wallet||null,txHash:null,next:R,values:D,results:U,messages:this.getPreparedMessages(s,U)}}async executeCollect(t,e,r,n){let a=O(t,e);if(!a)throw new Error("WarpActionExecutor: Action not found");let s=await T.getChainInfoForAction(this.config,a),o=await N.apply(this.config,t),p=await this.getResolvedInputs(s,a,r),u=this.getModifiedInputs(p),d=m=>{if(!m.value)return null;let W=this.serializer.stringToNative(m.value)[1];if(m.input.type==="biguint")return W.toString();if(m.input.type==="esdt"){let v=W;return{token:v.token.identifier,nonce:v.token.nonce.toString(),amount:v.amount.toString()}}else return W},g=new Headers;g.set("Content-Type","application/json"),g.set("Accept","application/json"),Object.entries(a.destination.headers||{}).forEach(([m,W])=>{g.set(m,W)});let w=Object.fromEntries(u.map(m=>[m.input.as||m.input.name,d(m)])),y=a.destination.method||"GET",x=y==="GET"?void 0:JSON.stringify({inputs:w,meta:n});C.info("Executing collect",{url:a.destination.url,method:y,headers:g,body:x});try{let m=await fetch(a.destination.url,{method:y,headers:g,body:x}),W=await m.json(),{values:v,results:E}=await Bt(o,W,e,u),P=T.getNextInfo(this.config,o,e,E);return{success:m.ok,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:P,values:v,results:{...E,_DATA:W},messages:this.getPreparedMessages(o,E)}}catch(m){return C.error("WarpActionExecutor: Error executing collect",m),{success:!1,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:null,values:[],results:{_DATA:m},messages:{}}}}async getTxComponentsFromInputs(t,e,r,n){let a=await this.getResolvedInputs(t,e,r),s=this.getModifiedInputs(a),o=s.find(R=>R.input.position==="receiver")?.value,p="address"in e?e.address:null,u=o?.split(":")[1]||p||n?.toBech32();if(!u)throw new Error("WarpActionExecutor: Destination/Receiver not provided");let d=I.Address.newFromBech32(u),g=this.getPreparedArgs(e,s),w=s.find(R=>R.input.position==="value")?.value||null,y="value"in e?e.value:null,x=BigInt(w?.split(":")[1]||y||0),m=s.filter(R=>R.input.position==="transfer"&&R.value).map(R=>R.value),v=[...("transfers"in e?e.transfers:[])?.map(this.toTypedTransfer)||[],...m?.map(R=>this.serializer.stringToNative(R)[1])||[]],E=s.find(R=>R.input.position==="data")?.value,P="data"in e?e.data||"":null,b=E||P||null,D=b?this.serializer.stringToTyped(b).valueOf():null,U=D?Buffer.from(D):null;return{destination:d,args:g,value:x,transfers:v,data:U,resolvedInputs:s}}async getResolvedInputs(t,e,r){let n=e.inputs||[],a=await Promise.all(r.map(o=>this.preprocessInput(t,o))),s=(o,p)=>{if(o.source==="query"){let u=this.url.searchParams.get(o.name);return u?this.serializer.nativeToString(o.type,u):null}else return o.source===f.Source.UserWallet?this.config.user?.wallet?this.serializer.nativeToString("address",this.config.user.wallet):null:a[p]||null};return n.map((o,p)=>({input:o,value:s(o,p)}))}getModifiedInputs(t){return t.map((e,r)=>{if(e.input.modifier?.startsWith("scale:")){let[,n]=e.input.modifier.split(":");if(isNaN(Number(n))){let a=Number(t.find(p=>p.input.name===n)?.value?.split(":")[1]);if(!a)throw new Error(`WarpActionExecutor: Exponent value not found for input ${n}`);let s=e.value?.split(":")[1];if(!s)throw new Error("WarpActionExecutor: Scalable value not found");let o=z(s,+a);return{...e,value:`${e.input.type}:${o}`}}else{let a=e.value?.split(":")[1];if(!a)throw new Error("WarpActionExecutor: Scalable value not found");let s=z(a,+n);return{...e,value:`${e.input.type}:${s}`}}}else return e})}async preprocessInput(t,e){try{let[r,n]=e.split(f.ArgParamsSeparator,2);if(r==="esdt"){let[a,s,o,p]=n.split(f.ArgCompositeSeparator);if(p)return e;let u=new I.Token({identifier:a,nonce:BigInt(s)});if(!new I.TokenComputer().isFungible(u))return e;let w=St(a)?.decimals;if(w||(w=(await(await fetch(`${t.apiUrl}/tokens/${a}`)).json()).decimals),!w)throw new Error(`WarpActionExecutor: Decimals not found for token ${a}`);let y=new I.TokenTransfer({token:u,amount:z(o,w)});return this.serializer.nativeToString(r,y)+f.ArgCompositeSeparator+w}return e}catch{return e}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);let e=A(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return I.AbiRegistry.create(r.abi)}getPreparedArgs(t,e){let r="args"in t?t.args||[]:[];return e.forEach(({input:n,value:a})=>{if(!a||!n.position?.startsWith("arg:"))return;let s=Number(n.position.split(":")[1])-1;r.splice(s,0,a)}),r}getPreparedMessages(t,e){let r=Object.entries(t.messages||{}).map(([n,a])=>[n,K(a,e)]);return Object.fromEntries(r)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith(f.IdentifierType.Hash)){let e=new rt(this.config),r=t.abi.split(f.IdentifierParamSeparator)[1],n=await e.createFromTransactionHash(r);if(!n)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return I.AbiRegistry.create(n.content)}else{let r=await(await fetch(t.abi)).json();return I.AbiRegistry.create(r)}}toTypedTransfer(t){return new I.TokenTransfer({token:new I.Token({identifier:t.token,nonce:BigInt(t.nonce||0)}),amount:BigInt(t.amount||0)})}};var mt=class{constructor(t){this.config=t}async search(t,e,r){if(!this.config.index?.url)throw new Error("WarpIndex: Index URL is not set");try{let n=await fetch(this.config.index?.url,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.index?.apiKey}`,...r},body:JSON.stringify({[this.config.index?.searchParamName||"search"]:t,...e})});if(!n.ok)throw new Error(`WarpIndex: search failed with status ${n.status}`);return(await n.json()).hits}catch(n){throw C.error("WarpIndex: Error searching for warps: ",n),n}}};0&&(module.exports={BrandBuilder,CacheKey,CacheTtl,WarpAbiBuilder,WarpActionExecutor,WarpArgSerializer,WarpBuilder,WarpCache,WarpConfig,WarpConstants,WarpContractLoader,WarpIndex,WarpInterpolator,WarpLink,WarpProtocolVersions,WarpRegistry,WarpUtils,WarpValidator,address,biguint,boolean,codemeta,composite,esdt,getChainExplorerUrl,getLatestProtocolIdentifier,getMainChainInfo,getWarpActionByIndex,hex,list,nothing,option,optional,replacePlaceholders,shiftBigintBy,string,toPreviewText,toTypedChainInfo,token,u16,u32,u64,u8,variadic});
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import"./chunk-3SAEGOMQ.mjs";import{Address as At,TransactionsFactoryConfig as Te,TransferTransactionsFactory as Ce}from"@multiversx/sdk-core";import We from"ajv";var l={HttpProtocolPrefix:"http",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierType:{Alias:"alias",Hash:"hash"},Source:{UserWallet:"user:wallet"},Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:s=>s.config.user?.wallet},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:s=>s.chain.apiUrl},ChainExplorerUrl:{Placeholder:"CHAIN_EXPLORER",Accessor:s=>s.chain.explorerUrl}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",Transform:{Prefix:"transform:"},Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};var $={Warp:"2.0.1",Brand:"0.1.0",Abi:"0.1.0"},v={LatestWarpSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/v${$.Warp}.schema.json`,LatestBrandSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/brand/v${$.Brand}.schema.json`,DefaultClientUrl:s=>s==="devnet"?"https://devnet.usewarp.to":s==="testnet"?"https://testnet.usewarp.to":"https://usewarp.to",SuperClientUrls:["https://usewarp.to","https://testnet.usewarp.to","https://devnet.usewarp.to"],MainChain:{Name:"multiversx",DisplayName:"MultiversX",ApiUrl:s=>s==="devnet"?"https://devnet-api.multiversx.com":s==="testnet"?"https://testnet-api.multiversx.com":"https://api.multiversx.com",ExplorerUrl:s=>s==="devnet"?"https://devnet-explorer.multiversx.com":s==="testnet"?"https://testnet-explorer.multiversx.com":"https://explorer.multiversx.com",BlockTime:s=>6e3,AddressHrp:"erd",ChainId:s=>s==="devnet"?"D":s==="testnet"?"T":"1"},Registry:{Contract:s=>s==="devnet"?"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36":s==="testnet"?"####":"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"},AvailableActionInputSources:["field","query",l.Source.UserWallet],AvailableActionInputTypes:["string","uint8","uint16","uint32","uint64","biguint","boolean","address"],AvailableActionInputPositions:["receiver","value","transfer","arg:1","arg:2","arg:3","arg:4","arg:5","arg:6","arg:7","arg:8","arg:9","arg:10","data","ignore"]};var W=s=>({name:v.MainChain.Name,displayName:v.MainChain.DisplayName,chainId:v.MainChain.ChainId(s.env),blockTime:v.MainChain.BlockTime(s.env),addressHrp:v.MainChain.AddressHrp,apiUrl:v.MainChain.ApiUrl(s.env),explorerUrl:v.MainChain.ExplorerUrl(s.env)}),gr=(s,t)=>s.explorerUrl+(t?"/"+t:""),L=s=>{if(s==="warp")return`warp:${$.Warp}`;if(s==="brand")return`brand:${$.Brand}`;if(s==="abi")return`abi:${$.Abi}`;throw new Error(`getLatestProtocolIdentifier: Invalid protocol name: ${s}`)},F=(s,t)=>s?.actions[t-1],et=s=>({name:s.name.toString(),displayName:s.display_name.toString(),chainId:s.chain_id.toString(),blockTime:s.block_time.toNumber(),addressHrp:s.address_hrp.toString(),apiUrl:s.api_url.toString(),explorerUrl:s.explorer_url.toString()}),M=(s,t)=>{let e=s.toString(),[r,n=""]=e.split("."),i=Math.abs(t);if(t>0)return BigInt(r+n.padEnd(i,"0"));if(t<0){let a=r+n;if(i>=a.length)return 0n;let o=a.slice(0,-i)||"0";return BigInt(o)}else return e.includes(".")?BigInt(e.split(".")[0]):BigInt(e)},Wt=(s,t=100)=>{if(!s)return"";let e=s.replace(/<\/?(h[1-6])[^>]*>/gi," - ").replace(/<\/?(p|div|ul|ol|li|br|hr)[^>]*>/gi," ").replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return e=e.startsWith("- ")?e.slice(2):e,e=e.length>t?e.substring(0,e.lastIndexOf(" ",t))+"...":e,e},j=(s,t)=>s.replace(/\{\{([^}]+)\}\}/g,(e,r)=>t[r]||"");var _=class _{static info(...t){_.isTestEnv||console.info(...t)}static warn(...t){_.isTestEnv||console.warn(...t)}static error(...t){_.isTestEnv||console.error(...t)}};_.isTestEnv=typeof process<"u"&&process.env.JEST_WORKER_ID!==void 0;var w=_;import{DevnetEntrypoint as me,MainnetEntrypoint as he,TestnetEntrypoint as ye}from"@multiversx/sdk-core";var H=class{constructor(t="warp-cache"){this.prefix=t}getKey(t){return`${this.prefix}:${t}`}get(t){try{let e=localStorage.getItem(this.getKey(t));if(!e)return null;let r=JSON.parse(e);return Date.now()>r.expiresAt?(localStorage.removeItem(this.getKey(t)),null):r.value}catch{return null}}set(t,e,r){let n={value:e,expiresAt:Date.now()+r*1e3};localStorage.setItem(this.getKey(t),JSON.stringify(n))}forget(t){localStorage.removeItem(this.getKey(t))}clear(){for(let t=0;t<localStorage.length;t++){let e=localStorage.key(t);e?.startsWith(this.prefix)&&localStorage.removeItem(e)}}};var N=class N{get(t){let e=N.cache.get(t);return e?Date.now()>e.expiresAt?(N.cache.delete(t),null):e.value:null}set(t,e,r){let n=Date.now()+r*1e3;N.cache.set(t,{value:e,expiresAt:n})}forget(t){N.cache.delete(t)}clear(){N.cache.clear()}};N.cache=new Map;var D=N;var Q={OneMinute:60,OneHour:60*60,OneDay:60*60*24,OneWeek:60*60*24*7,OneMonth:60*60*24*30,OneYear:60*60*24*365},B={Warp:s=>`warp:${s}`,WarpAbi:s=>`warp-abi:${s}`,LastWarpExecutionInputs:(s,t)=>`warp-exec-inputs:${s}:${t}`,RegistryInfo:s=>`registry-info:${s}`,Brand:s=>`brand:${s}`,ChainInfo:s=>`chain:${s}`,ChainInfos:()=>"chains"},V=class{constructor(t){this.strategy=this.selectStrategy(t)}selectStrategy(t){return t==="localStorage"?new H:t==="memory"?new D:typeof window<"u"&&window.localStorage?new H:new D}set(t,e,r){this.strategy.set(t,e,r)}get(t){return this.strategy.get(t)}forget(t){this.strategy.forget(t)}clear(){this.strategy.clear()}};import ge from"qr-code-styling";import{Address as bt,TransactionsFactoryConfig as ue,TransferTransactionsFactory as pe}from"@multiversx/sdk-core";import ce from"ajv";var G=class{constructor(t){this.config=t;this.config=t}async validate(t){let e=[];return e.push(...this.validateMaxOneValuePosition(t)),e.push(...this.validateVariableNamesAndResultNamesUppercase(t)),e.push(...this.validateAbiIsSetIfApplicable(t)),e.push(...await this.validateSchema(t)),{valid:e.length===0,errors:e}}validateMaxOneValuePosition(t){return t.actions.filter(r=>r.inputs?r.inputs.some(n=>n.position==="value"):!1).length>1?["Only one value position action is allowed"]:[]}validateVariableNamesAndResultNamesUppercase(t){let e=[],r=(n,i)=>{n&&Object.keys(n).forEach(a=>{a!==a.toUpperCase()&&e.push(`${i} name '${a}' must be uppercase`)})};return r(t.vars,"Variable"),r(t.results,"Result"),e}validateAbiIsSetIfApplicable(t){let e=t.actions.some(a=>a.type==="contract"),r=t.actions.some(a=>a.type==="query");if(!e&&!r)return[];let n=t.actions.some(a=>a.abi),i=Object.values(t.results||{}).some(a=>a.startsWith("out.")||a.startsWith("event."));return t.results&&!n&&i?["ABI is required when results are present for contract or query actions"]:[]}async validateSchema(t){try{let e=this.config.schema?.warp||v.LatestWarpSchemaUrl,n=await(await fetch(e)).json(),i=new ce,a=i.compile(n);return a(t)?[]:[`Schema validation failed: ${i.errorsText(a.errors)}`]}catch(e){return[`Schema validation failed: ${e instanceof Error?e.message:String(e)}`]}}};var z=class{constructor(t){this.pendingWarp={protocol:L("warp"),name:"",title:"",description:null,preview:"",actions:[]};this.config=t,this.cache=new V(t.cache?.type)}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=W(this.config),r=new ue({chainID:e.chainId}),n=new pe({config:r}),i=bt.newFromBech32(this.config.user.wallet),a=JSON.stringify(t),o=n.createTransactionForTransfer(i,{receiver:bt.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(a))});return o.gasLimit=o.gasLimit+BigInt(2e6),o}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.validate(r),r}async createFromTransaction(t,e=!1){let r=await this.createFromRaw(t.data.toString(),e);return r.meta={hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},r}async createFromTransactionHash(t,e){let r=B.Warp(t);if(e){let o=this.cache.get(r);if(o)return w.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),o}let n=W(this.config),a=y.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await a.getTransaction(t),c=await this.createFromTransaction(o);return e&&e.ttl&&c&&this.cache.set(r,c,e.ttl),c}catch(o){return w.error("WarpBuilder: Error creating from transaction hash",o),null}}setName(t){return this.pendingWarp.name=t,this}setTitle(t){return this.pendingWarp.title=t,this}setDescription(t){return this.pendingWarp.description=t,this}setPreview(t){return this.pendingWarp.preview=t,this}setActions(t){return this.pendingWarp.actions=t,this}addAction(t){return this.pendingWarp.actions.push(t),this}async build(){return this.ensure(this.pendingWarp.protocol,"protocol is required"),this.ensure(this.pendingWarp.name,"name is required"),this.ensure(this.pendingWarp.title,"title is required"),this.ensure(this.pendingWarp.actions.length>0,"actions are required"),await this.validate(this.pendingWarp),this.pendingWarp}getDescriptionPreview(t,e=100){return Wt(t,e)}ensure(t,e){if(!t)throw new Error(e)}async validate(t){let r=await new G(this.config).validate(t);if(!r.valid)throw new Error(r.errors.join(`
2
- `))}};var U=class{static async apply(t,e){let r=this.applyVars(t,e);return await this.applyGlobals(t,r)}static async applyGlobals(t,e){let r={...e};return r.actions=await Promise.all(r.actions.map(async n=>await this.applyActionGlobals(t,n))),r=await this.applyRootGlobals(r,t),r}static applyVars(t,e){if(!e?.vars)return e;let r=JSON.stringify(e),n=(i,a)=>{r=r.replace(new RegExp(`{{${i.toUpperCase()}}}`,"g"),a.toString())};return Object.entries(e.vars).forEach(([i,a])=>{if(typeof a!="string")n(i,a);else if(a.startsWith(`${l.Vars.Query}:`)){if(!t.currentUrl)throw new Error("WarpUtils: currentUrl config is required to prepare vars");let o=a.split(`${l.Vars.Query}:`)[1],c=new URLSearchParams(t.currentUrl.split("?")[1]).get(o);c&&n(i,c)}else if(a.startsWith(`${l.Vars.Env}:`)){let o=a.split(`${l.Vars.Env}:`)[1],c=t.vars?.[o];c&&n(i,c)}else a===l.Source.UserWallet&&t.user?.wallet?n(i,t.user.wallet):n(i,a)}),JSON.parse(r)}static async applyRootGlobals(t,e){let r=JSON.stringify(t),n={config:e,chain:W(e)};return Object.values(l.Globals).forEach(i=>{let a=i.Accessor(n);a!=null&&(r=r.replace(new RegExp(`{{${i.Placeholder}}}`,"g"),a.toString()))}),JSON.parse(r)}static async applyActionGlobals(t,e){let r=await y.getChainInfoForAction(t,e),n=JSON.stringify(e),i={config:t,chain:r};return Object.values(l.Globals).forEach(a=>{let o=a.Accessor(i);o!=null&&(n=n.replace(new RegExp(`{{${a.Placeholder}}}`,"g"),o.toString()))}),JSON.parse(n)}};import{AbiRegistry as vt,Address as R,AddressValue as nt,BytesValue as b,SmartContractTransactionsFactory as fe,TransactionsFactoryConfig as de}from"@multiversx/sdk-core/out";var rt={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"}],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"}]},ConfigView:{type:"struct",fields:[{name:"unit_price",type:"BigUint"},{name:"admins",type:"List<Address>"}]},InfoView:{type:"struct",fields:[{name:"hash",type:"bytes"},{name:"alias",type:"Option<bytes>"},{name:"trust",type:"bytes"},{name:"owner",type:"Address"},{name:"created_at",type:"u64"},{name:"upgraded_at",type:"u64"},{name:"brand",type:"Option<bytes>"},{name:"upgrade",type:"Option<bytes>"}]}}};var K=s=>({hash:s.hash.toString("hex"),alias:s.alias?.toString()||null,trust:s.trust.toString(),owner:s.owner.toString(),createdAt:s.created_at.toNumber(),upgradedAt:s.upgraded_at?.toNumber(),brand:s.brand?.toString("hex")||null,upgrade:s.upgrade?.toString("hex")||null}),It=s=>({unitPrice:BigInt(s.unit_price.toString()),admins:s.admins.map(t=>t.toBech32())});var q=class{constructor(t){this.config=t,this.cache=new V(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]}}async init(){await this.loadRegistryConfigs()}createWarpRegisterTransaction(t,e,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let n=R.newFromBech32(this.config.user.wallet),i=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,a=()=>e&&r?[b.fromHex(t),b.fromUTF8(e),b.fromHex(r)]:e?[b.fromHex(t),b.fromUTF8(e)]:[b.fromHex(t)];return this.getFactory().createTransactionForExecute(n,{contract:this.getRegistryContractAddress(),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:i(),arguments:a()})}createWarpUnregisterTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[b.fromHex(t)]})}createWarpUpgradeTransaction(t,e){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromUTF8(t),b.fromHex(e)]})}createWarpAliasSetTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromHex(t),b.fromUTF8(e)]})}createWarpVerifyTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[b.fromHex(t)]})}createWarpTransferOwnershipTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[b.fromHex(t),new nt(new R(e))]})}createBrandRegisterTransaction(t){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromHex(t)]})}createWarpBrandingTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromHex(t),b.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=B.RegistryInfo(t),n=e?this.cache.get(r):null;if(n)return w.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),n;let i=this.getRegistryContractAddress(),a=this.getController(),o=a.createQuery({contract:i,function:"getInfoByAlias",arguments:[b.fromUTF8(t)]}),c=await a.runQuery(o),[u]=a.parseQueryResponse(c),p=u?K(u):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=B.RegistryInfo(t);if(e){let f=this.cache.get(r);if(f)return w.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),f}let n=this.getRegistryContractAddress(),i=this.getController(),a=i.createQuery({contract:n,function:"getInfoByHash",arguments:[b.fromHex(t)]}),o=await i.runQuery(a),[c]=i.parseQueryResponse(o),u=c?K(c):null,p=u?.brand?await this.fetchBrand(u.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:u,brand:p},e.ttl),{registryInfo:u,brand:p}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),i=n.createQuery({contract:r,function:"getUserWarps",arguments:[new nt(new R(e))]}),a=await n.runQuery(i),[o]=n.parseQueryResponse(a);return o.map(K)}catch{return[]}}async getUserBrands(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),i=n.createQuery({contract:r,function:"getUserBrands",arguments:[new nt(new R(e))]}),a=await n.runQuery(i),[o]=n.parseQueryResponse(a),c=o.map(f=>f.toString("hex")),u={ttl:365*24*60*60};return(await Promise.all(c.map(f=>this.fetchBrand(f,u)))).filter(f=>f!==null)}catch{return[]}}async getChainInfos(t){let e=B.ChainInfos();if(t&&t.ttl){let u=this.cache.get(e);if(u)return w.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),u}let r=this.getRegistryContractAddress(),n=this.getController(),i=n.createQuery({contract:r,function:"getChains",arguments:[]}),a=await n.runQuery(i),[o]=n.parseQueryResponse(a),c=o.map(et);if(t&&t.ttl){for(let u of c)this.cache.set(B.ChainInfo(u.chain),u,t.ttl);this.cache.set(e,c,t.ttl)}return c}async getChainInfo(t,e){try{let r=B.ChainInfo(t),n=e?this.cache.get(r):null;if(n)return w.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),n;let i=this.getRegistryContractAddress(),a=this.getController(),o=a.createQuery({contract:i,function:"getChain",arguments:[b.fromUTF8(t)]}),c=await a.runQuery(o),[u]=a.parseQueryResponse(c),p=u?et(u):null;return e&&e.ttl&&p&&this.cache.set(r,p,e.ttl),p}catch{return null}}async fetchBrand(t,e){let r=B.Brand(t),n=e?this.cache.get(r):null;if(n)return w.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),n;let i=W(this.config),o=y.getChainEntrypoint(i,this.config.env).createNetworkProvider();try{let c=await o.getTransaction(t),u=JSON.parse(c.data.toString());return u.meta={hash:c.hash,creator:c.sender.bech32(),createdAt:new Date(c.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,u,e.ttl),u}catch{return null}}getRegistryContractAddress(){return R.newFromBech32(this.config.registry?.contract||v.Registry.Contract(this.config.env))}async loadRegistryConfigs(){let t=this.getRegistryContractAddress(),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),n=r?It(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=W(this.config),e=new de({chainID:t.chainId}),r=vt.create(rt);return new fe({config:e,abi:r})}getController(){let t=W(this.config),e=y.getChainEntrypoint(t,this.config.env),r=vt.create(rt);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.config.user?.wallet&&this.registryConfig.admins.includes(this.config.user.wallet)}};var J=class{constructor(t){this.config=t;this.config=t}isValid(t){return t.startsWith(l.HttpProtocolPrefix)?!!this.extractIdentifierInfoFromUrl(t):!1}async detectFromHtml(t){if(!t.length)return{match:!1,results:[]};let n=[...t.matchAll(/https?:\/\/[^\s"'<>]+/gi)].map(u=>u[0]).filter(u=>this.isValid(u)).map(u=>this.detect(u)),a=(await Promise.all(n)).filter(u=>u.match),o=a.length>0,c=a.map(u=>({url:u.url,warp:u.warp}));return{match:o,results:c}}async detect(t,e){let r={match:!1,url:t,warp:null,registryInfo:null,brand:null},n=t.startsWith(l.HttpProtocolPrefix)?this.extractIdentifierInfoFromUrl(t):y.getInfoFromPrefixedIdentifier(t);if(!n)return r;try{let{type:i,identifierBase:a}=n,o=new z(this.config),c=new q(this.config),u=null,p=null,f=null;if(i==="hash"){u=await o.createFromTransactionHash(a,e);let g=await c.getInfoByHash(a,e);p=g.registryInfo,f=g.brand}else if(i==="alias"){let g=await c.getInfoByAlias(a,e);p=g.registryInfo,f=g.brand,g.registryInfo&&(u=await o.createFromTransactionHash(g.registryInfo.hash,e))}let m=u?await U.apply(this.config,u):null;return m?{match:!0,url:t,warp:m,registryInfo:p,brand:f}:r}catch(i){return w.error("Error detecting warp link",i),r}}build(t,e){let r=this.config.clientUrl||v.DefaultClientUrl(this.config.env),n=t===l.IdentifierType.Alias?encodeURIComponent(e):encodeURIComponent(t+l.IdentifierParamSeparator+e);return v.SuperClientUrls.includes(r)?`${r}/${n}`:`${r}?${l.IdentifierParamName}=${n}`}buildFromPrefixedIdentifier(t){let e=y.getInfoFromPrefixedIdentifier(t);return e?this.build(e.type,e.identifierBase):""}generateQrCode(t,e,r=512,n="white",i="black",a="#23F7DD"){let o=this.build(t,e);return new ge({type:"svg",width:r,height:r,data:String(o),margin:16,qrOptions:{typeNumber:0,mode:"Byte",errorCorrectionLevel:"Q"},backgroundOptions:{color:n},dotsOptions:{type:"extra-rounded",color:i},cornersSquareOptions:{type:"extra-rounded",color:i},cornersDotOptions:{type:"square",color:i},imageOptions:{hideBackgroundDots:!0,imageSize:.4,margin:8},image:`data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 100 100" fill="${encodeURIComponent(a)}" xmlns="http://www.w3.org/2000/svg"><path d="M54.8383 50.0242L95 28.8232L88.2456 16L51.4717 30.6974C50.5241 31.0764 49.4759 31.0764 48.5283 30.6974L11.7544 16L5 28.8232L45.1616 50.0242L5 71.2255L11.7544 84.0488L48.5283 69.351C49.4759 68.9724 50.5241 68.9724 51.4717 69.351L88.2456 84.0488L95 71.2255L54.8383 50.0242Z"/></svg>`})}extractIdentifierInfoFromUrl(t){let e=new URL(t),r=v.SuperClientUrls.includes(e.origin),n=e.searchParams.get(l.IdentifierParamName),i=r&&!n?e.pathname.split("/")[1]:n;if(!i)return null;let a=decodeURIComponent(i);return y.getInfoFromPrefixedIdentifier(a)}};var we="https://",y=class{static getInfoFromPrefixedIdentifier(t){let e=decodeURIComponent(t),r=e.includes(l.IdentifierParamSeparator)?e:`${l.IdentifierType.Alias}${l.IdentifierParamSeparator}${e}`,[n,i]=r.split(l.IdentifierParamSeparator),a=i.split("?")[0];return{type:n,identifier:i,identifierBase:a}}static getNextInfo(t,e,r,n){let i=e.actions?.[r]?.next||e.next||null;if(!i)return null;if(i.startsWith(we))return[{identifier:null,url:i}];let[a,o]=i.split("?");if(!o)return[{identifier:a,url:this.buildNextUrl(a,t)}];let c=o.match(/{{([^}]+)\[\](\.[^}]+)?}}/g)||[];if(c.length===0){let d=j(o,{...e.vars,...n}),h=d?`${a}?${d}`:a;return[{identifier:h,url:this.buildNextUrl(h,t)}]}let u=c[0];if(!u)return[];let p=u.match(/{{([^[]+)\[\]/),f=p?p[1]:null;if(!f||n[f]===void 0)return[];let m=Array.isArray(n[f])?n[f]:[n[f]];if(m.length===0)return[];let g=c.filter(d=>d.includes(`{{${f}[]`)).map(d=>{let h=d.match(/\[\](\.[^}]+)?}}/),C=h&&h[1]||"";return{placeholder:d,field:C?C.slice(1):"",regex:new RegExp(d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g")}});return m.map(d=>{let h=o;for(let{regex:A,field:E}of g){let T=E?this.getNestedValue(d,E):d;if(T==null)return null;h=h.replace(A,T)}if(h.includes("{{")||h.includes("}}"))return null;let C=h?`${a}?${h}`:a;return{identifier:C,url:this.buildNextUrl(C,t)}}).filter(d=>d!==null)}static buildNextUrl(t,e){let[r,n]=t.split("?"),i=this.getInfoFromPrefixedIdentifier(r)||{type:"alias",identifier:r,identifierBase:r},o=new J(e).build(i.type,i.identifierBase);if(!n)return o;let c=new URL(o);return new URLSearchParams(n).forEach((u,p)=>c.searchParams.set(p,u)),c.toString().replace(/\/\?/,"?")}static getNestedValue(t,e){return e.split(".").reduce((r,n)=>r?.[n],t)}static async getChainInfoForAction(t,e){if(!e.chain)return W(t);let r=await new q(t).getChainInfo(e.chain,{ttl:Q.OneWeek});if(!r)throw new Error(`WarpActionExecutor: Chain info not found for ${e.chain}`);return r}static getChainEntrypoint(t,e){let r="warp-sdk",n="api";return e==="devnet"?new me(t.apiUrl,n,r):e==="testnet"?new ye(t.apiUrl,n,r):new he(t.apiUrl,n,r)}};var xt=class{constructor(t){this.pendingBrand={protocol:L("brand"),name:"",description:"",logo:""};this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("BrandBuilder: user address not set");let e=W(this.config),r=new Te({chainID:e.chainId}),n=new Ce({config:r}),i=At.newFromBech32(this.config.user.wallet),a=JSON.stringify(t);return n.createTransactionForNativeTokenTransfer(i,{receiver:At.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(a))})}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.ensureValidSchema(r),r}async createFromTransaction(t,e=!1){return await this.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=W(this.config),n=y.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let i=await n.getTransaction(t);return this.createFromTransaction(i)}catch(i){return w.error("BrandBuilder: Error creating from transaction hash",i),null}}setName(t){return this.pendingBrand.name=t,this}setDescription(t){return this.pendingBrand.description=t,this}setLogo(t){return this.pendingBrand.logo=t,this}setUrls(t){return this.pendingBrand.urls=t,this}setColors(t){return this.pendingBrand.colors=t,this}setCta(t){return this.pendingBrand.cta=t,this}async build(){return this.ensure(this.pendingBrand.name,"name is required"),this.ensure(this.pendingBrand.description,"description is required"),this.ensure(this.pendingBrand.logo,"logo is required"),await this.ensureValidSchema(this.pendingBrand),this.pendingBrand}ensure(t,e){if(!t)throw new Error(`Warp: ${e}`)}async ensureValidSchema(t){let e=this.config.schema?.brand||v.LatestBrandSchemaUrl,n=await(await fetch(e)).json(),i=new We,a=i.compile(n);if(!a(t))throw new Error(`BrandBuilder: schema validation failed: ${i.errorsText(a.errors)}`)}};import{Address as be,AddressValue as Ie,BigUIntType as ve,BigUIntValue as Bt,BooleanValue as Ae,BytesValue as xe,CodeMetadata as Be,CodeMetadataValue as Se,CompositeType as Ee,CompositeValue as Re,Field as it,FieldDefinition as at,List as Pe,NothingValue as Ve,OptionalValue as st,OptionValue as ot,StringValue as Ne,Struct as Ue,StructType as Fe,TokenIdentifierType as Oe,TokenIdentifierValue as St,U16Value as ke,U32Value as $e,U64Type as Le,U64Value as Et,U8Value as _e,VariadicValue as qe}from"@multiversx/sdk-core/out";var Fn=(s,t)=>s?ot.newProvided(s):t?ot.newMissingTyped(t):ot.newMissing(),On=(s,t)=>s?new st(s.getType(),s):t?new st(t):st.newMissing(),kn=s=>{if(s.length===0)throw new Error("Cannot create a list from an empty array");let t=s[0].getType();return new Pe(t,s)},$n=s=>qe.fromItems(...s),Ln=s=>{let t=s.map(e=>e.getType());return new Re(new Ee(...t),s)},_n=s=>Ne.fromUTF8(s),qn=s=>new _e(s),Hn=s=>new ke(s),Dn=s=>new $e(s),Mn=s=>new Et(s),jn=s=>new Bt(BigInt(s)),Qn=s=>new Ae(s),Gn=s=>new Ie(be.newFromBech32(s)),zn=s=>new St(s),Kn=s=>xe.fromHex(s),Jn=s=>new Ue(new Fe("EsdtTokenPayment",[new at("token_identifier","",new Oe),new at("token_nonce","",new Le),new at("amount","",new ve)]),[new it(new St(s.token.identifier),"token_identifier"),new it(new Et(BigInt(s.token.nonce)),"token_nonce"),new it(new Bt(BigInt(s.amount)),"amount")]),Xn=s=>new Se(Be.newFromBytes(Uint8Array.from(Buffer.from(s,"hex")))),Yn=()=>new Ve;import{Address as He,TransactionsFactoryConfig as De,TransferTransactionsFactory as Me}from"@multiversx/sdk-core";var X=class{constructor(t){this.cache=new V;this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=W(this.config),r=new De({chainID:e.chainId}),n=new Me({config:r}),i={protocol:L("abi"),content:t},a=He.newFromBech32(this.config.user.wallet),o=JSON.stringify(i),c=n.createTransactionForTransfer(a,{receiver:a,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return c.gasLimit=c.gasLimit+BigInt(2e6),c}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={hash:t.hash,creator:t.sender.bech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=B.WarpAbi(t);if(e){let o=this.cache.get(r);if(o)return w.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),o}let n=W(this.config),a=y.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await a.getTransaction(t),c=await this.createFromTransaction(o);return e&&e.ttl&&c&&this.cache.set(r,c,e.ttl),c}catch(o){return w.error("WarpAbiBuilder: Error creating from transaction hash",o),null}}};import{AbiRegistry as Tt,Address as Ct,ArgSerializer as ar,SmartContractTransactionsFactory as sr,Token as ie,TokenComputer as or,TokenTransfer as ae,TransactionsFactoryConfig as cr,TransferTransactionsFactory as ur}from"@multiversx/sdk-core";import{SmartContractTransactionsOutcomeParser as Ye,TransactionEventsParser as Ze,findEventsByFirstTopic as tr}from"@multiversx/sdk-core/out";import{Address as je,AddressType as Rt,AddressValue as Pt,BigUIntType as ct,BigUIntValue as ut,BooleanType as Vt,BooleanValue as Nt,BytesType as Ut,BytesValue as Ft,CodeMetadata as Qe,CodeMetadataType as Ot,CodeMetadataValue as kt,CompositeType as $t,CompositeValue as Lt,Field as pt,FieldDefinition as lt,List as _t,ListType as Ge,NothingValue as S,OptionalType as ze,OptionalValue as ft,OptionType as Ke,OptionValue as dt,StringType as qt,StringValue as Ht,Struct as Je,StructType as Dt,Token as Xe,TokenIdentifierType as gt,TokenIdentifierValue as mt,TokenTransfer as Mt,U16Type as jt,U16Value as Qt,U32Type as Gt,U32Value as zt,U64Type as ht,U64Value as yt,U8Type as Kt,U8Value as Jt,VariadicType as Xt,VariadicValue as Yt}from"@multiversx/sdk-core/out";var Zt=new RegExp(`${l.ArgParamsSeparator}(.*)`),O=class{nativeToString(t,e){return t==="esdt"&&e instanceof Mt?`esdt:${e.token.identifier}|${e.token.nonce.toString()}|${e.amount.toString()}`:`${t}:${e?.toString()??""}`}typedToString(t){if(t.hasClassOrSuperclass(dt.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(ft.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(_t.ClassName)){let e=t.getItems(),n=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[0])[0],i=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[1]);return`list:${n}:${i.join(",")}`}if(t.hasClassOrSuperclass(Yt.ClassName)){let e=t.getItems(),n=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[0])[0],i=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[1]);return`variadic:${n}:${i.join(",")}`}if(t.hasClassOrSuperclass(Lt.ClassName)){let e=t.getItems(),r=e.map(o=>this.typedToString(o).split(l.ArgParamsSeparator)[0]),n=e.map(o=>this.typedToString(o).split(l.ArgParamsSeparator)[1]),i=r.join(l.ArgCompositeSeparator),a=n.join(l.ArgCompositeSeparator);return`composite(${i}):${a}`}if(t.hasClassOrSuperclass(ut.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Jt.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(Qt.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(zt.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(yt.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Ht.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(Nt.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(Pt.ClassName))return`address:${t.valueOf().bech32()}`;if(t.hasClassOrSuperclass(mt.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(Ft.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(kt.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.stringToNative(e)}nativeToTyped(t,e){let r=this.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new $t(...e.split(l.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new qt;if(t==="uint8")return new Kt;if(t==="uint16")return new jt;if(t==="uint32")return new Gt;if(t==="uint64")return new ht;if(t==="biguint")return new ct;if(t==="bool")return new Vt;if(t==="address")return new Rt;if(t==="token")return new gt;if(t==="hex")return new Ut;if(t==="codemeta")return new Ot;if(t==="esdt"||t==="nft")return new Dt("EsdtTokenPayment",[new lt("token_identifier","",new gt),new lt("token_nonce","",new ht),new lt("amount","",new ct)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToNative(t){let e=t.split(l.ArgParamsSeparator),r=e[0],n=e.slice(1).join(l.ArgParamsSeparator);if(r==="null")return[r,null];if(r==="option"){let[i,a]=n.split(l.ArgParamsSeparator);return[`option:${i}`,a||null]}else if(r==="optional"){let[i,a]=n.split(l.ArgParamsSeparator);return[`optional:${i}`,a||null]}else if(r==="list"){let i=n.split(l.ArgParamsSeparator),a=i.slice(0,-1).join(l.ArgParamsSeparator),o=i[i.length-1],u=(o?o.split(","):[]).map(p=>this.stringToNative(`${a}:${p}`)[1]);return[`list:${a}`,u]}else if(r==="variadic"){let i=n.split(l.ArgParamsSeparator),a=i.slice(0,-1).join(l.ArgParamsSeparator),o=i[i.length-1],u=(o?o.split(","):[]).map(p=>this.stringToNative(`${a}:${p}`)[1]);return[`variadic:${a}`,u]}else if(r.startsWith("composite")){let i=r.match(/\(([^)]+)\)/)?.[1]?.split(l.ArgCompositeSeparator),o=n.split(l.ArgCompositeSeparator).map((c,u)=>this.stringToNative(`${i[u]}:${c}`)[1]);return[r,o]}else{if(r==="string")return[r,n];if(r==="uint8"||r==="uint16"||r==="uint32")return[r,Number(n)];if(r==="uint64"||r==="biguint")return[r,BigInt(n||0)];if(r==="bool")return[r,n==="true"];if(r==="address")return[r,n];if(r==="token")return[r,n];if(r==="hex")return[r,n];if(r==="codemeta")return[r,n];if(r==="esdt"){let[i,a,o]=n.split(l.ArgCompositeSeparator);return[r,new Mt({token:new Xe({identifier:i,nonce:BigInt(a)}),amount:BigInt(o)})]}}throw new Error(`WarpArgSerializer (stringToNative): Unsupported input type: ${r}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new S;if(e==="option"){let n=this.stringToTyped(r);return n instanceof S?dt.newMissingTyped(n.getType()):dt.newProvided(n)}if(e==="optional"){let n=this.stringToTyped(r);return n instanceof S?ft.newMissing():new ft(n.getType(),n)}if(e==="list"){let[n,i]=r.split(Zt,2),o=i.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new _t(this.nativeToType(n),o)}if(e==="variadic"){let[n,i]=r.split(Zt,2),o=i.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new Yt(new Xt(this.nativeToType(n)),o)}if(e.startsWith("composite")){let n=e.match(/\(([^)]+)\)/)?.[1],i=r.split(l.ArgCompositeSeparator),a=n.split(l.ArgCompositeSeparator),o=i.map((u,p)=>this.stringToTyped(`${a[p]}:${u}`)),c=o.map(u=>u.getType());return new Lt(new $t(...c),o)}if(e==="string")return r?Ht.fromUTF8(r):new S;if(e==="uint8")return r?new Jt(Number(r)):new S;if(e==="uint16")return r?new Qt(Number(r)):new S;if(e==="uint32")return r?new zt(Number(r)):new S;if(e==="uint64")return r?new yt(BigInt(r)):new S;if(e==="biguint")return r?new ut(BigInt(r)):new S;if(e==="bool")return r?new Nt(typeof r=="boolean"?r:r==="true"):new S;if(e==="address")return r?new Pt(je.newFromBech32(r)):new S;if(e==="token")return r?new mt(r):new S;if(e==="hex")return r?Ft.fromHex(r):new S;if(e==="codemeta")return new kt(Qe.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let n=r.split(l.ArgCompositeSeparator);return new Je(this.nativeToType("esdt"),[new pt(new mt(n[0]),"token_identifier"),new pt(new yt(BigInt(n[1])),"token_nonce"),new pt(new ut(BigInt(n[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof Ke)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof ze)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Ge)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Xt)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof qt)return"string";if(t instanceof Kt)return"uint8";if(t instanceof jt)return"uint16";if(t instanceof Gt)return"uint32";if(t instanceof ht)return"uint64";if(t instanceof ct)return"biguint";if(t instanceof Vt)return"bool";if(t instanceof Rt)return"address";if(t instanceof gt)return"token";if(t instanceof Ut)return"hex";if(t instanceof Ot)return"codemeta";if(t instanceof Dt&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var wt=s=>{if(s==="out")return 1;let t=s.match(/^out\[(\d+)\]/);return t?parseInt(t[1],10):(s.startsWith("out.")||s.startsWith("event."),null)},er=(s,t)=>t.reduce((e,r)=>e&&e[r]!==void 0?e[r]:null,s),te=async(s,t,e,r,n,i)=>{let a=[],o={};if(!t.results||e.type!=="contract")return{values:a,results:o};if(!Object.values(t.results).some(g=>g.includes("out")||g.includes("event"))){for(let[g,I]of Object.entries(t.results))o[g]=I;return{values:a,results:await Y(t,o,n,i)}}let u=await s.getAbiForAction(e),p=new Ze({abi:u}),m=new Ye({abi:u}).parseExecute({transactionOnNetwork:r,function:e.func||void 0});for(let[g,I]of Object.entries(t.results)){if(I.startsWith(l.Transform.Prefix))continue;if(I.startsWith("input.")){o[g]=I;continue}let d=wt(I);if(d!==null&&d!==n){o[g]=null;continue}let[h,C,A]=I.split(".");if(h==="event"){if(!C||isNaN(Number(A)))continue;let E=Number(A),T=tr(r,C),k=p.parseEvents({events:T})[0],P=Object.values(k)[E]||null;a.push(P),o[g]=P&&P.valueOf()}else if(h==="out"||h.startsWith("out[")){if(!C)continue;let E=Number(C),T=m.values[E-1]||null;A&&(T=T[A]||null),T&&typeof T=="object"&&(T="toFixed"in T?T.toFixed():T.valueOf()),a.push(T),o[g]=T&&T.valueOf()}else o[g]=I}return{values:a,results:await Y(t,o,n,i)}},ee=async(s,t,e,r)=>{let n=new O,i=t.map(u=>n.typedToString(u)),a=t.map(u=>n.typedToNative(u)[1]),o={};if(!s.results)return{values:i,results:o};let c=u=>{let p=u.split(".").slice(1).map(m=>parseInt(m)-1);if(p.length===0)return;let f=a[p[0]];for(let m=1;m<p.length;m++){if(f==null)return;f=f[p[m]]}return f};for(let[u,p]of Object.entries(s.results)){if(p.startsWith(l.Transform.Prefix))continue;let f=wt(p);if(f!==null&&f!==e){o[u]=null;continue}p.startsWith("out.")||p==="out"||p.startsWith("out[")?o[u]=c(p)||null:o[u]=p}return{values:i,results:await Y(s,o,e,r)}},re=async(s,t,e,r)=>{let n=[],i={};for(let[a,o]of Object.entries(s.results||{})){if(o.startsWith(l.Transform.Prefix))continue;let c=wt(o);if(c!==null&&c!==e){i[a]=null;continue}let[u,...p]=o.split(".");if(u==="out"||u.startsWith("out[")){let f=p.length===0?t?.data||t:er(t,p);n.push(f),i[a]=f}else i[a]=o}return{values:n,results:await Y(s,i,e,r)}};var Y=async(s,t,e,r)=>{if(!s.results)return t;let n={...t};return n=rr(n,s,e,r),n=await nr(s,n),n},rr=(s,t,e,r)=>{let n={...s},i=F(t,e)?.inputs||[],a=new O;for(let[o,c]of Object.entries(n))if(typeof c=="string"&&c.startsWith("input.")){let u=c.split(".")[1],p=i.findIndex(m=>m.as===u||m.name===u),f=p!==-1?r[p]?.value:null;n[o]=f?a.stringToNative(f)[1]:null}return n},nr=async(s,t)=>{if(!s.results)return t;let e={...t},r=Object.entries(s.results).filter(([,n])=>n.startsWith(l.Transform.Prefix)).map(([n,i])=>({key:n,code:i.substring(l.Transform.Prefix.length)}));for(let{key:n,code:i}of r)try{let{runInVm:a}=await import("./vm-JCVDACTR.mjs");e[n]=await a(i,e)}catch(a){w.error(`Transform error for result '${n}':`,a),e[n]=null}return e};var ir=[{id:"EGLD",name:"eGold",decimals:18},{id:"EGLD-000000",name:"eGold",decimals:18}],ne=s=>ir.find(t=>t.id===s)||null;var Z=class{constructor(t){this.config=t}async getContract(t,e){try{let i=await y.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:i.ownerAddress,verified:i.isVerified||!1}}catch(r){return w.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let i=await y.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:i.codeHash,abi:i.source.abi}}catch(r){return w.error("WarpContractLoader: getVerificationInfo error",r),null}}};var se=class{constructor(t){if(!t.currentUrl)throw new Error("WarpActionExecutor: currentUrl config not set");this.config=t,this.url=new URL(t.currentUrl),this.serializer=new O,this.contractLoader=new Z(t),this.cache=new V(t.cache?.type)}async createTransactionForExecute(t,e,r){let n=F(t,e);if(!this.config.user?.wallet)throw new Error("WarpActionExecutor: user address not set");let i=Ct.newFromBech32(this.config.user.wallet),a=await y.getChainInfoForAction(this.config,n),o=new cr({chainID:a.chainId}),{destination:c,args:u,value:p,transfers:f,data:m,resolvedInputs:g}=await this.getTxComponentsFromInputs(a,n,r,i),I=u.map(h=>this.serializer.stringToTyped(h)),d=null;if(n.type==="transfer")d=new ur({config:o}).createTransactionForTransfer(i,{receiver:c,nativeAmount:p,tokenTransfers:f,data:m?new Uint8Array(m):void 0});else if(n.type==="contract"&&c.isSmartContract())d=new sr({config:o}).createTransactionForExecute(i,{contract:c,function:"func"in n&&n.func||"",gasLimit:"gasLimit"in n?BigInt(n.gasLimit||0):0n,arguments:I,tokenTransfers:f,nativeTransferAmount:p});else{if(n.type==="query")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(n.type==="collect")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!d)throw new Error(`WarpActionExecutor: Invalid action type (${n.type})`);return this.cache.set(B.LastWarpExecutionInputs(t.meta?.hash||"",e),g,Q.OneWeek),d}async getTransactionExecutionResults(t,e,r){let n=await U.apply(this.config,t),i=F(n,e),a=this.cache.get(B.LastWarpExecutionInputs(t.meta?.hash||"",e))??[],{values:o,results:c}=await te(this,n,i,r,e,a),u=y.getNextInfo(this.config,n,e,c),p=this.getPreparedMessages(n,c);return{success:r.status.isSuccessful(),warp:n,action:e,user:this.config.user?.wallet||null,txHash:r.hash,next:u,values:o,results:c,messages:p}}async executeQuery(t,e,r){let n=F(t,e);if(!n)throw new Error("WarpActionExecutor: Action not found");if(!n.func)throw new Error("WarpActionExecutor: Function not found");let i=await y.getChainInfoForAction(this.config,n),a=await U.apply(this.config,t),o=await this.getAbiForAction(n),{args:c,resolvedInputs:u}=await this.getTxComponentsFromInputs(i,n,r),p=c.map(tt=>this.serializer.stringToTyped(tt)),f=y.getChainEntrypoint(i,this.config.env),m=Ct.newFromBech32(n.address),g=f.createSmartContractController(o),I=g.createQuery({contract:m,function:n.func,arguments:p}),d=await g.runQuery(I),h=d.returnCode==="ok",C=new ar,A=o.getEndpoint(d.function),E=d.returnDataParts.map(tt=>Buffer.from(tt)),T=C.buffersToValues(E,A.output),{values:k,results:P}=await ee(a,T,e,u),x=y.getNextInfo(this.config,a,e,P);return{success:h,warp:a,action:e,user:this.config.user?.wallet||null,txHash:null,next:x,values:k,results:P,messages:this.getPreparedMessages(a,P)}}async executeCollect(t,e,r,n){let i=F(t,e);if(!i)throw new Error("WarpActionExecutor: Action not found");let a=await y.getChainInfoForAction(this.config,i),o=await U.apply(this.config,t),c=await this.getResolvedInputs(a,i,r),u=this.getModifiedInputs(c),p=d=>{if(!d.value)return null;let h=this.serializer.stringToNative(d.value)[1];if(d.input.type==="biguint")return h.toString();if(d.input.type==="esdt"){let C=h;return{token:C.token.identifier,nonce:C.token.nonce.toString(),amount:C.amount.toString()}}else return h},f=new Headers;f.set("Content-Type","application/json"),f.set("Accept","application/json"),Object.entries(i.destination.headers||{}).forEach(([d,h])=>{f.set(d,h)});let m=Object.fromEntries(u.map(d=>[d.input.as||d.input.name,p(d)])),g=i.destination.method||"GET",I=g==="GET"?void 0:JSON.stringify({inputs:m,meta:n});try{let d=await fetch(i.destination.url,{method:g,headers:f,body:I}),h=await d.json(),{values:C,results:A}=await re(o,h,e,u),E=y.getNextInfo(this.config,o,e,A);return{success:d.ok,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:E,values:C,results:A,messages:this.getPreparedMessages(o,A)}}catch(d){return w.error("WarpActionExecutor: Error executing collect",d),{success:!1,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:null,values:[],results:{},messages:{}}}}async getTxComponentsFromInputs(t,e,r,n){let i=await this.getResolvedInputs(t,e,r),a=this.getModifiedInputs(i),o=a.find(x=>x.input.position==="receiver")?.value,c="address"in e?e.address:null,u=o?.split(":")[1]||c||n?.toBech32();if(!u)throw new Error("WarpActionExecutor: Destination/Receiver not provided");let p=Ct.newFromBech32(u),f=this.getPreparedArgs(e,a),m=a.find(x=>x.input.position==="value")?.value||null,g="value"in e?e.value:null,I=BigInt(m?.split(":")[1]||g||0),d=a.filter(x=>x.input.position==="transfer"&&x.value).map(x=>x.value),C=[...("transfers"in e?e.transfers:[])?.map(this.toTypedTransfer)||[],...d?.map(x=>this.serializer.stringToNative(x)[1])||[]],A=a.find(x=>x.input.position==="data")?.value,E="data"in e?e.data||"":null,T=A||E||null,k=T?this.serializer.stringToTyped(T).valueOf():null,P=k?Buffer.from(k):null;return{destination:p,args:f,value:I,transfers:C,data:P,resolvedInputs:a}}async getResolvedInputs(t,e,r){let n=e.inputs||[],i=await Promise.all(r.map(o=>this.preprocessInput(t,o))),a=(o,c)=>{if(o.source==="query"){let u=this.url.searchParams.get(o.name);return u?this.serializer.nativeToString(o.type,u):null}else return o.source===l.Source.UserWallet?this.config.user?.wallet?this.serializer.nativeToString("address",this.config.user.wallet):null:i[c]||null};return n.map((o,c)=>({input:o,value:a(o,c)}))}getModifiedInputs(t){return t.map((e,r)=>{if(e.input.modifier?.startsWith("scale:")){let[,n]=e.input.modifier.split(":");if(isNaN(Number(n))){let i=Number(t.find(c=>c.input.name===n)?.value?.split(":")[1]);if(!i)throw new Error(`WarpActionExecutor: Exponent value not found for input ${n}`);let a=e.value?.split(":")[1];if(!a)throw new Error("WarpActionExecutor: Scalable value not found");let o=M(a,+i);return{...e,value:`${e.input.type}:${o}`}}else{let i=e.value?.split(":")[1];if(!i)throw new Error("WarpActionExecutor: Scalable value not found");let a=M(i,+n);return{...e,value:`${e.input.type}:${a}`}}}else return e})}async preprocessInput(t,e){try{let[r,n]=e.split(l.ArgParamsSeparator,2);if(r==="esdt"){let[i,a,o,c]=n.split(l.ArgCompositeSeparator);if(c)return e;let u=new ie({identifier:i,nonce:BigInt(a)});if(!new or().isFungible(u))return e;let m=ne(i)?.decimals;if(m||(m=(await(await fetch(`${t.apiUrl}/tokens/${i}`)).json()).decimals),!m)throw new Error(`WarpActionExecutor: Decimals not found for token ${i}`);let g=new ae({token:u,amount:M(o,m)});return this.serializer.nativeToString(r,g)+l.ArgCompositeSeparator+m}return e}catch{return e}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);let e=W(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return Tt.create(r.abi)}getPreparedArgs(t,e){let r="args"in t?t.args||[]:[];return e.forEach(({input:n,value:i})=>{if(!i||!n.position?.startsWith("arg:"))return;let a=Number(n.position.split(":")[1])-1;r.splice(a,0,i)}),r}getPreparedMessages(t,e){let r=Object.entries(t.messages||{}).map(([n,i])=>[n,j(i,e)]);return Object.fromEntries(r)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith(l.IdentifierType.Hash)){let e=new X(this.config),r=t.abi.split(l.IdentifierParamSeparator)[1],n=await e.createFromTransactionHash(r);if(!n)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return Tt.create(n.content)}else{let r=await(await fetch(t.abi)).json();return Tt.create(r)}}toTypedTransfer(t){return new ae({token:new ie({identifier:t.token,nonce:BigInt(t.nonce||0)}),amount:BigInt(t.amount||0)})}};var oe=class{constructor(t){this.config=t}async search(t,e,r){if(!this.config.index?.url)throw new Error("WarpIndex: Index URL is not set");try{let n=await fetch(this.config.index?.url,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.index?.apiKey}`,...r},body:JSON.stringify({[this.config.index?.searchParamName||"search"]:t,...e})});if(!n.ok)throw new Error(`WarpIndex: search failed with status ${n.status}`);return(await n.json()).hits}catch(n){throw w.error("WarpIndex: Error searching for warps: ",n),n}}};export{xt as BrandBuilder,B as CacheKey,Q as CacheTtl,v as Config,X as WarpAbiBuilder,se as WarpActionExecutor,O as WarpArgSerializer,z as WarpBuilder,V as WarpCache,l as WarpConstants,Z as WarpContractLoader,oe as WarpIndex,U as WarpInterpolator,J as WarpLink,$ as WarpProtocolVersions,q as WarpRegistry,y as WarpUtils,G as WarpValidator,Gn as address,jn as biguint,Qn as boolean,Xn as codemeta,Ln as composite,Jn as esdt,gr as getChainExplorerUrl,L as getLatestProtocolIdentifier,W as getMainChainInfo,F as getWarpActionByIndex,Kn as hex,kn as list,Yn as nothing,Fn as option,On as optional,j as replacePlaceholders,M as shiftBigintBy,_n as string,Wt as toPreviewText,et as toTypedChainInfo,zn as token,Hn as u16,Dn as u32,Mn as u64,qn as u8,$n as variadic};
1
+ import"./chunk-3SAEGOMQ.mjs";import{Address as At,TransactionsFactoryConfig as We,TransferTransactionsFactory as Te}from"@multiversx/sdk-core";import Ce from"ajv";var l={HttpProtocolPrefix:"http",IdentifierParamName:"warp",IdentifierParamSeparator:":",IdentifierType:{Alias:"alias",Hash:"hash"},Source:{UserWallet:"user:wallet"},Globals:{UserWallet:{Placeholder:"USER_WALLET",Accessor:s=>s.config.user?.wallet},ChainApiUrl:{Placeholder:"CHAIN_API",Accessor:s=>s.chain.apiUrl},ChainExplorerUrl:{Placeholder:"CHAIN_EXPLORER",Accessor:s=>s.chain.explorerUrl}},Vars:{Query:"query",Env:"env"},ArgParamsSeparator:":",ArgCompositeSeparator:"|",Transform:{Prefix:"transform:"},Egld:{Identifier:"EGLD",EsdtIdentifier:"EGLD-000000",DisplayName:"eGold",Decimals:18}};var $={Warp:"2.0.1",Brand:"0.1.0",Abi:"0.1.0"},v={LatestWarpSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/v${$.Warp}.schema.json`,LatestBrandSchemaUrl:`https://raw.githubusercontent.com/vLeapGroup/warps-specs/refs/heads/main/schemas/brand/v${$.Brand}.schema.json`,DefaultClientUrl:s=>s==="devnet"?"https://devnet.usewarp.to":s==="testnet"?"https://testnet.usewarp.to":"https://usewarp.to",SuperClientUrls:["https://usewarp.to","https://testnet.usewarp.to","https://devnet.usewarp.to"],MainChain:{Name:"multiversx",DisplayName:"MultiversX",ApiUrl:s=>s==="devnet"?"https://devnet-api.multiversx.com":s==="testnet"?"https://testnet-api.multiversx.com":"https://api.multiversx.com",ExplorerUrl:s=>s==="devnet"?"https://devnet-explorer.multiversx.com":s==="testnet"?"https://testnet-explorer.multiversx.com":"https://explorer.multiversx.com",BlockTime:s=>6e3,AddressHrp:"erd",ChainId:s=>s==="devnet"?"D":s==="testnet"?"T":"1"},Registry:{Contract:s=>s==="devnet"?"erd1qqqqqqqqqqqqqpgqje2f99vr6r7sk54thg03c9suzcvwr4nfl3tsfkdl36":s==="testnet"?"####":"erd1qqqqqqqqqqqqqpgq3mrpj3u6q7tejv6d7eqhnyd27n9v5c5tl3ts08mffe"},AvailableActionInputSources:["field","query",l.Source.UserWallet],AvailableActionInputTypes:["string","uint8","uint16","uint32","uint64","biguint","boolean","address"],AvailableActionInputPositions:["receiver","value","transfer","arg:1","arg:2","arg:3","arg:4","arg:5","arg:6","arg:7","arg:8","arg:9","arg:10","data","ignore"]};var I=s=>({name:v.MainChain.Name,displayName:v.MainChain.DisplayName,chainId:v.MainChain.ChainId(s.env),blockTime:v.MainChain.BlockTime(s.env),addressHrp:v.MainChain.AddressHrp,apiUrl:v.MainChain.ApiUrl(s.env),explorerUrl:v.MainChain.ExplorerUrl(s.env)}),gr=(s,t)=>s.explorerUrl+(t?"/"+t:""),L=s=>{if(s==="warp")return`warp:${$.Warp}`;if(s==="brand")return`brand:${$.Brand}`;if(s==="abi")return`abi:${$.Abi}`;throw new Error(`getLatestProtocolIdentifier: Invalid protocol name: ${s}`)},F=(s,t)=>s?.actions[t-1],et=s=>({name:s.name.toString(),displayName:s.display_name.toString(),chainId:s.chain_id.toString(),blockTime:s.block_time.toNumber(),addressHrp:s.address_hrp.toString(),apiUrl:s.api_url.toString(),explorerUrl:s.explorer_url.toString()}),M=(s,t)=>{let e=s.toString(),[r,n=""]=e.split("."),i=Math.abs(t);if(t>0)return BigInt(r+n.padEnd(i,"0"));if(t<0){let a=r+n;if(i>=a.length)return 0n;let o=a.slice(0,-i)||"0";return BigInt(o)}else return e.includes(".")?BigInt(e.split(".")[0]):BigInt(e)},Ct=(s,t=100)=>{if(!s)return"";let e=s.replace(/<\/?(h[1-6])[^>]*>/gi," - ").replace(/<\/?(p|div|ul|ol|li|br|hr)[^>]*>/gi," ").replace(/<[^>]+>/g,"").replace(/\s+/g," ").trim();return e=e.startsWith("- ")?e.slice(2):e,e=e.length>t?e.substring(0,e.lastIndexOf(" ",t))+"...":e,e},j=(s,t)=>s.replace(/\{\{([^}]+)\}\}/g,(e,r)=>t[r]||"");var _=class _{static info(...t){_.isTestEnv||console.info(...t)}static warn(...t){_.isTestEnv||console.warn(...t)}static error(...t){_.isTestEnv||console.error(...t)}};_.isTestEnv=typeof process<"u"&&process.env.JEST_WORKER_ID!==void 0;var y=_;import{DevnetEntrypoint as me,MainnetEntrypoint as he,TestnetEntrypoint as ye}from"@multiversx/sdk-core";var D=class{constructor(t="warp-cache"){this.prefix=t}getKey(t){return`${this.prefix}:${t}`}get(t){try{let e=localStorage.getItem(this.getKey(t));if(!e)return null;let r=JSON.parse(e);return Date.now()>r.expiresAt?(localStorage.removeItem(this.getKey(t)),null):r.value}catch{return null}}set(t,e,r){let n={value:e,expiresAt:Date.now()+r*1e3};localStorage.setItem(this.getKey(t),JSON.stringify(n))}forget(t){localStorage.removeItem(this.getKey(t))}clear(){for(let t=0;t<localStorage.length;t++){let e=localStorage.key(t);e?.startsWith(this.prefix)&&localStorage.removeItem(e)}}};var N=class N{get(t){let e=N.cache.get(t);return e?Date.now()>e.expiresAt?(N.cache.delete(t),null):e.value:null}set(t,e,r){let n=Date.now()+r*1e3;N.cache.set(t,{value:e,expiresAt:n})}forget(t){N.cache.delete(t)}clear(){N.cache.clear()}};N.cache=new Map;var H=N;var Q={OneMinute:60,OneHour:60*60,OneDay:60*60*24,OneWeek:60*60*24*7,OneMonth:60*60*24*30,OneYear:60*60*24*365},B={Warp:s=>`warp:${s}`,WarpAbi:s=>`warp-abi:${s}`,LastWarpExecutionInputs:(s,t)=>`warp-exec-inputs:${s}:${t}`,RegistryInfo:s=>`registry-info:${s}`,Brand:s=>`brand:${s}`,ChainInfo:s=>`chain:${s}`,ChainInfos:()=>"chains"},V=class{constructor(t){this.strategy=this.selectStrategy(t)}selectStrategy(t){return t==="localStorage"?new D:t==="memory"?new H:typeof window<"u"&&window.localStorage?new D:new H}set(t,e,r){this.strategy.set(t,e,r)}get(t){return this.strategy.get(t)}forget(t){this.strategy.forget(t)}clear(){this.strategy.clear()}};import ge from"qr-code-styling";import{Address as It,TransactionsFactoryConfig as pe,TransferTransactionsFactory as ue}from"@multiversx/sdk-core";import ce from"ajv";var G=class{constructor(t){this.config=t;this.config=t}async validate(t){let e=[];return e.push(...this.validateMaxOneValuePosition(t)),e.push(...this.validateVariableNamesAndResultNamesUppercase(t)),e.push(...this.validateAbiIsSetIfApplicable(t)),e.push(...await this.validateSchema(t)),{valid:e.length===0,errors:e}}validateMaxOneValuePosition(t){return t.actions.filter(r=>r.inputs?r.inputs.some(n=>n.position==="value"):!1).length>1?["Only one value position action is allowed"]:[]}validateVariableNamesAndResultNamesUppercase(t){let e=[],r=(n,i)=>{n&&Object.keys(n).forEach(a=>{a!==a.toUpperCase()&&e.push(`${i} name '${a}' must be uppercase`)})};return r(t.vars,"Variable"),r(t.results,"Result"),e}validateAbiIsSetIfApplicable(t){let e=t.actions.some(a=>a.type==="contract"),r=t.actions.some(a=>a.type==="query");if(!e&&!r)return[];let n=t.actions.some(a=>a.abi),i=Object.values(t.results||{}).some(a=>a.startsWith("out.")||a.startsWith("event."));return t.results&&!n&&i?["ABI is required when results are present for contract or query actions"]:[]}async validateSchema(t){try{let e=this.config.schema?.warp||v.LatestWarpSchemaUrl,n=await(await fetch(e)).json(),i=new ce,a=i.compile(n);return a(t)?[]:[`Schema validation failed: ${i.errorsText(a.errors)}`]}catch(e){return[`Schema validation failed: ${e instanceof Error?e.message:String(e)}`]}}};var z=class{constructor(t){this.pendingWarp={protocol:L("warp"),name:"",title:"",description:null,preview:"",actions:[]};this.config=t,this.cache=new V(t.cache?.type)}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=I(this.config),r=new pe({chainID:e.chainId}),n=new ue({config:r}),i=It.newFromBech32(this.config.user.wallet),a=JSON.stringify(t),o=n.createTransactionForTransfer(i,{receiver:It.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(a))});return o.gasLimit=o.gasLimit+BigInt(2e6),o}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.validate(r),r}async createFromTransaction(t,e=!1){let r=await this.createFromRaw(t.data.toString(),e);return r.meta={hash:t.hash,creator:t.sender.toBech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},r}async createFromTransactionHash(t,e){let r=B.Warp(t);if(e){let o=this.cache.get(r);if(o)return y.info(`WarpBuilder (createFromTransactionHash): Warp found in cache: ${t}`),o}let n=I(this.config),a=w.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await a.getTransaction(t),c=await this.createFromTransaction(o);return e&&e.ttl&&c&&this.cache.set(r,c,e.ttl),c}catch(o){return y.error("WarpBuilder: Error creating from transaction hash",o),null}}setName(t){return this.pendingWarp.name=t,this}setTitle(t){return this.pendingWarp.title=t,this}setDescription(t){return this.pendingWarp.description=t,this}setPreview(t){return this.pendingWarp.preview=t,this}setActions(t){return this.pendingWarp.actions=t,this}addAction(t){return this.pendingWarp.actions.push(t),this}async build(){return this.ensure(this.pendingWarp.protocol,"protocol is required"),this.ensure(this.pendingWarp.name,"name is required"),this.ensure(this.pendingWarp.title,"title is required"),this.ensure(this.pendingWarp.actions.length>0,"actions are required"),await this.validate(this.pendingWarp),this.pendingWarp}getDescriptionPreview(t,e=100){return Ct(t,e)}ensure(t,e){if(!t)throw new Error(e)}async validate(t){let r=await new G(this.config).validate(t);if(!r.valid)throw new Error(r.errors.join(`
2
+ `))}};var U=class{static async apply(t,e){let r=this.applyVars(t,e);return await this.applyGlobals(t,r)}static async applyGlobals(t,e){let r={...e};return r.actions=await Promise.all(r.actions.map(async n=>await this.applyActionGlobals(t,n))),r=await this.applyRootGlobals(r,t),r}static applyVars(t,e){if(!e?.vars)return e;let r=JSON.stringify(e),n=(i,a)=>{r=r.replace(new RegExp(`{{${i.toUpperCase()}}}`,"g"),a.toString())};return Object.entries(e.vars).forEach(([i,a])=>{if(typeof a!="string")n(i,a);else if(a.startsWith(`${l.Vars.Query}:`)){if(!t.currentUrl)throw new Error("WarpUtils: currentUrl config is required to prepare vars");let o=a.split(`${l.Vars.Query}:`)[1],c=new URLSearchParams(t.currentUrl.split("?")[1]).get(o);c&&n(i,c)}else if(a.startsWith(`${l.Vars.Env}:`)){let o=a.split(`${l.Vars.Env}:`)[1],c=t.vars?.[o];c&&n(i,c)}else a===l.Source.UserWallet&&t.user?.wallet?n(i,t.user.wallet):n(i,a)}),JSON.parse(r)}static async applyRootGlobals(t,e){let r=JSON.stringify(t),n={config:e,chain:I(e)};return Object.values(l.Globals).forEach(i=>{let a=i.Accessor(n);a!=null&&(r=r.replace(new RegExp(`{{${i.Placeholder}}}`,"g"),a.toString()))}),JSON.parse(r)}static async applyActionGlobals(t,e){let r=await w.getChainInfoForAction(t,e),n=JSON.stringify(e),i={config:t,chain:r};return Object.values(l.Globals).forEach(a=>{let o=a.Accessor(i);o!=null&&(n=n.replace(new RegExp(`{{${a.Placeholder}}}`,"g"),o.toString()))}),JSON.parse(n)}};import{AbiRegistry as vt,Address as R,AddressValue as nt,BytesValue as b,SmartContractTransactionsFactory as fe,TransactionsFactoryConfig as de}from"@multiversx/sdk-core/out";var rt={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"}],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"}]},ConfigView:{type:"struct",fields:[{name:"unit_price",type:"BigUint"},{name:"admins",type:"List<Address>"}]},InfoView:{type:"struct",fields:[{name:"hash",type:"bytes"},{name:"alias",type:"Option<bytes>"},{name:"trust",type:"bytes"},{name:"owner",type:"Address"},{name:"created_at",type:"u64"},{name:"upgraded_at",type:"u64"},{name:"brand",type:"Option<bytes>"},{name:"upgrade",type:"Option<bytes>"}]}}};var K=s=>({hash:s.hash.toString("hex"),alias:s.alias?.toString()||null,trust:s.trust.toString(),owner:s.owner.toString(),createdAt:s.created_at.toNumber(),upgradedAt:s.upgraded_at?.toNumber(),brand:s.brand?.toString("hex")||null,upgrade:s.upgrade?.toString("hex")||null}),bt=s=>({unitPrice:BigInt(s.unit_price.toString()),admins:s.admins.map(t=>t.toBech32())});var q=class{constructor(t){this.config=t,this.cache=new V(t.cache?.type),this.registryConfig={unitPrice:BigInt(0),admins:[]}}async init(){await this.loadRegistryConfigs()}createWarpRegisterTransaction(t,e,r){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let n=R.newFromBech32(this.config.user.wallet),i=()=>this.isCurrentUserAdmin()?BigInt(0):e&&r?this.registryConfig.unitPrice*BigInt(3):e?this.registryConfig.unitPrice*BigInt(2):this.registryConfig.unitPrice,a=()=>e&&r?[b.fromHex(t),b.fromUTF8(e),b.fromHex(r)]:e?[b.fromHex(t),b.fromUTF8(e)]:[b.fromHex(t)];return this.getFactory().createTransactionForExecute(n,{contract:this.getRegistryContractAddress(),function:"registerWarp",gasLimit:BigInt(1e7),nativeTransferAmount:i(),arguments:a()})}createWarpUnregisterTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"unregisterWarp",gasLimit:BigInt(1e7),arguments:[b.fromHex(t)]})}createWarpUpgradeTransaction(t,e){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"upgradeWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromUTF8(t),b.fromHex(e)]})}createWarpAliasSetTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"setWarpAlias",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromHex(t),b.fromUTF8(e)]})}createWarpVerifyTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"verifyWarp",gasLimit:BigInt(1e7),arguments:[b.fromHex(t)]})}createWarpTransferOwnershipTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"transferOwnership",gasLimit:BigInt(1e7),arguments:[b.fromHex(t),new nt(new R(e))]})}createBrandRegisterTransaction(t){if(this.registryConfig.unitPrice===BigInt(0))throw new Error("WarpRegistry: config not loaded. forgot to call init()?");if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let e=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(e,{contract:this.getRegistryContractAddress(),function:"registerBrand",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromHex(t)]})}createWarpBrandingTransaction(t,e){if(!this.config.user?.wallet)throw new Error("WarpRegistry: user address not set");let r=R.newFromBech32(this.config.user.wallet);return this.getFactory().createTransactionForExecute(r,{contract:this.getRegistryContractAddress(),function:"brandWarp",gasLimit:BigInt(1e7),nativeTransferAmount:this.isCurrentUserAdmin()?void 0:this.registryConfig.unitPrice,arguments:[b.fromHex(t),b.fromHex(e)]})}async getInfoByAlias(t,e){try{let r=B.RegistryInfo(t),n=e?this.cache.get(r):null;if(n)return y.info(`WarpRegistry (getInfoByAlias): RegistryInfo found in cache: ${t}`),n;let i=this.getRegistryContractAddress(),a=this.getController(),o=a.createQuery({contract:i,function:"getInfoByAlias",arguments:[b.fromUTF8(t)]}),c=await a.runQuery(o),[p]=a.parseQueryResponse(c),u=p?K(p):null,f=u?.brand?await this.fetchBrand(u.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:u,brand:f},e.ttl),{registryInfo:u,brand:f}}catch{return{registryInfo:null,brand:null}}}async getInfoByHash(t,e){try{let r=B.RegistryInfo(t);if(e){let f=this.cache.get(r);if(f)return y.info(`WarpRegistry (getInfoByHash): RegistryInfo found in cache: ${t}`),f}let n=this.getRegistryContractAddress(),i=this.getController(),a=i.createQuery({contract:n,function:"getInfoByHash",arguments:[b.fromHex(t)]}),o=await i.runQuery(a),[c]=i.parseQueryResponse(o),p=c?K(c):null,u=p?.brand?await this.fetchBrand(p.brand):null;return e&&e.ttl&&this.cache.set(r,{registryInfo:p,brand:u},e.ttl),{registryInfo:p,brand:u}}catch{return{registryInfo:null,brand:null}}}async getUserWarpRegistryInfos(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),i=n.createQuery({contract:r,function:"getUserWarps",arguments:[new nt(new R(e))]}),a=await n.runQuery(i),[o]=n.parseQueryResponse(a);return o.map(K)}catch{return[]}}async getUserBrands(t){try{let e=t||this.config.user?.wallet;if(!e)throw new Error("WarpRegistry: user address not set");let r=this.getRegistryContractAddress(),n=this.getController(),i=n.createQuery({contract:r,function:"getUserBrands",arguments:[new nt(new R(e))]}),a=await n.runQuery(i),[o]=n.parseQueryResponse(a),c=o.map(f=>f.toString("hex")),p={ttl:365*24*60*60};return(await Promise.all(c.map(f=>this.fetchBrand(f,p)))).filter(f=>f!==null)}catch{return[]}}async getChainInfos(t){let e=B.ChainInfos();if(t&&t.ttl){let p=this.cache.get(e);if(p)return y.info("WarpRegistry (getChainInfos): ChainInfos found in cache"),p}let r=this.getRegistryContractAddress(),n=this.getController(),i=n.createQuery({contract:r,function:"getChains",arguments:[]}),a=await n.runQuery(i),[o]=n.parseQueryResponse(a),c=o.map(et);if(t&&t.ttl){for(let p of c)this.cache.set(B.ChainInfo(p.chain),p,t.ttl);this.cache.set(e,c,t.ttl)}return c}async getChainInfo(t,e){try{let r=B.ChainInfo(t),n=e?this.cache.get(r):null;if(n)return y.info(`WarpRegistry (getChainInfo): ChainInfo found in cache: ${t}`),n;let i=this.getRegistryContractAddress(),a=this.getController(),o=a.createQuery({contract:i,function:"getChain",arguments:[b.fromUTF8(t)]}),c=await a.runQuery(o),[p]=a.parseQueryResponse(c),u=p?et(p):null;return e&&e.ttl&&u&&this.cache.set(r,u,e.ttl),u}catch{return null}}async fetchBrand(t,e){let r=B.Brand(t),n=e?this.cache.get(r):null;if(n)return y.info(`WarpRegistry (fetchBrand): Brand found in cache: ${t}`),n;let i=I(this.config),o=w.getChainEntrypoint(i,this.config.env).createNetworkProvider();try{let c=await o.getTransaction(t),p=JSON.parse(c.data.toString());return p.meta={hash:c.hash,creator:c.sender.bech32(),createdAt:new Date(c.timestamp*1e3).toISOString()},e&&e.ttl&&this.cache.set(r,p,e.ttl),p}catch{return null}}getRegistryContractAddress(){return R.newFromBech32(this.config.registry?.contract||v.Registry.Contract(this.config.env))}async loadRegistryConfigs(){let t=this.getRegistryContractAddress(),e=this.getController(),[r]=await e.query({contract:t,function:"getConfig",arguments:[]}),n=r?bt(r):null;this.registryConfig=n||{unitPrice:BigInt(0),admins:[]}}getFactory(){let t=I(this.config),e=new de({chainID:t.chainId}),r=vt.create(rt);return new fe({config:e,abi:r})}getController(){let t=I(this.config),e=w.getChainEntrypoint(t,this.config.env),r=vt.create(rt);return e.createSmartContractController(r)}isCurrentUserAdmin(){return!!this.config.user?.wallet&&this.registryConfig.admins.includes(this.config.user.wallet)}};var J=class{constructor(t){this.config=t;this.config=t}isValid(t){return t.startsWith(l.HttpProtocolPrefix)?!!this.extractIdentifierInfoFromUrl(t):!1}async detectFromHtml(t){if(!t.length)return{match:!1,results:[]};let n=[...t.matchAll(/https?:\/\/[^\s"'<>]+/gi)].map(p=>p[0]).filter(p=>this.isValid(p)).map(p=>this.detect(p)),a=(await Promise.all(n)).filter(p=>p.match),o=a.length>0,c=a.map(p=>({url:p.url,warp:p.warp}));return{match:o,results:c}}async detect(t,e){let r={match:!1,url:t,warp:null,registryInfo:null,brand:null},n=t.startsWith(l.HttpProtocolPrefix)?this.extractIdentifierInfoFromUrl(t):w.getInfoFromPrefixedIdentifier(t);if(!n)return r;try{let{type:i,identifierBase:a}=n,o=new z(this.config),c=new q(this.config),p=null,u=null,f=null;if(i==="hash"){p=await o.createFromTransactionHash(a,e);let g=await c.getInfoByHash(a,e);u=g.registryInfo,f=g.brand}else if(i==="alias"){let g=await c.getInfoByAlias(a,e);u=g.registryInfo,f=g.brand,g.registryInfo&&(p=await o.createFromTransactionHash(g.registryInfo.hash,e))}let m=p?await U.apply(this.config,p):null;return m?{match:!0,url:t,warp:m,registryInfo:u,brand:f}:r}catch(i){return y.error("Error detecting warp link",i),r}}build(t,e){let r=this.config.clientUrl||v.DefaultClientUrl(this.config.env),n=t===l.IdentifierType.Alias?encodeURIComponent(e):encodeURIComponent(t+l.IdentifierParamSeparator+e);return v.SuperClientUrls.includes(r)?`${r}/${n}`:`${r}?${l.IdentifierParamName}=${n}`}buildFromPrefixedIdentifier(t){let e=w.getInfoFromPrefixedIdentifier(t);return e?this.build(e.type,e.identifierBase):""}generateQrCode(t,e,r=512,n="white",i="black",a="#23F7DD"){let o=this.build(t,e);return new ge({type:"svg",width:r,height:r,data:String(o),margin:16,qrOptions:{typeNumber:0,mode:"Byte",errorCorrectionLevel:"Q"},backgroundOptions:{color:n},dotsOptions:{type:"extra-rounded",color:i},cornersSquareOptions:{type:"extra-rounded",color:i},cornersDotOptions:{type:"square",color:i},imageOptions:{hideBackgroundDots:!0,imageSize:.4,margin:8},image:`data:image/svg+xml;utf8,<svg width="16" height="16" viewBox="0 0 100 100" fill="${encodeURIComponent(a)}" xmlns="http://www.w3.org/2000/svg"><path d="M54.8383 50.0242L95 28.8232L88.2456 16L51.4717 30.6974C50.5241 31.0764 49.4759 31.0764 48.5283 30.6974L11.7544 16L5 28.8232L45.1616 50.0242L5 71.2255L11.7544 84.0488L48.5283 69.351C49.4759 68.9724 50.5241 68.9724 51.4717 69.351L88.2456 84.0488L95 71.2255L54.8383 50.0242Z"/></svg>`})}extractIdentifierInfoFromUrl(t){let e=new URL(t),r=v.SuperClientUrls.includes(e.origin),n=e.searchParams.get(l.IdentifierParamName),i=r&&!n?e.pathname.split("/")[1]:n;if(!i)return null;let a=decodeURIComponent(i);return w.getInfoFromPrefixedIdentifier(a)}};var we="https://",w=class{static getInfoFromPrefixedIdentifier(t){let e=decodeURIComponent(t),r=e.includes(l.IdentifierParamSeparator)?e:`${l.IdentifierType.Alias}${l.IdentifierParamSeparator}${e}`,[n,i]=r.split(l.IdentifierParamSeparator),a=i.split("?")[0];return{type:n,identifier:i,identifierBase:a}}static getNextInfo(t,e,r,n){let i=e.actions?.[r]?.next||e.next||null;if(!i)return null;if(i.startsWith(we))return[{identifier:null,url:i}];let[a,o]=i.split("?");if(!o)return[{identifier:a,url:this.buildNextUrl(a,t)}];let c=o.match(/{{([^}]+)\[\](\.[^}]+)?}}/g)||[];if(c.length===0){let d=j(o,{...e.vars,...n}),h=d?`${a}?${d}`:a;return[{identifier:h,url:this.buildNextUrl(h,t)}]}let p=c[0];if(!p)return[];let u=p.match(/{{([^[]+)\[\]/),f=u?u[1]:null;if(!f||n[f]===void 0)return[];let m=Array.isArray(n[f])?n[f]:[n[f]];if(m.length===0)return[];let g=c.filter(d=>d.includes(`{{${f}[]`)).map(d=>{let h=d.match(/\[\](\.[^}]+)?}}/),T=h&&h[1]||"";return{placeholder:d,field:T?T.slice(1):"",regex:new RegExp(d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g")}});return m.map(d=>{let h=o;for(let{regex:A,field:E}of g){let W=E?this.getNestedValue(d,E):d;if(W==null)return null;h=h.replace(A,W)}if(h.includes("{{")||h.includes("}}"))return null;let T=h?`${a}?${h}`:a;return{identifier:T,url:this.buildNextUrl(T,t)}}).filter(d=>d!==null)}static buildNextUrl(t,e){let[r,n]=t.split("?"),i=this.getInfoFromPrefixedIdentifier(r)||{type:"alias",identifier:r,identifierBase:r},o=new J(e).build(i.type,i.identifierBase);if(!n)return o;let c=new URL(o);return new URLSearchParams(n).forEach((p,u)=>c.searchParams.set(u,p)),c.toString().replace(/\/\?/,"?")}static getNestedValue(t,e){return e.split(".").reduce((r,n)=>r?.[n],t)}static async getChainInfoForAction(t,e){if(!e.chain)return I(t);let r=await new q(t).getChainInfo(e.chain,{ttl:Q.OneWeek});if(!r)throw new Error(`WarpActionExecutor: Chain info not found for ${e.chain}`);return r}static getChainEntrypoint(t,e){let r="warp-sdk",n="api";return e==="devnet"?new me(t.apiUrl,n,r):e==="testnet"?new ye(t.apiUrl,n,r):new he(t.apiUrl,n,r)}};var xt=class{constructor(t){this.pendingBrand={protocol:L("brand"),name:"",description:"",logo:""};this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("BrandBuilder: user address not set");let e=I(this.config),r=new We({chainID:e.chainId}),n=new Te({config:r}),i=At.newFromBech32(this.config.user.wallet),a=JSON.stringify(t);return n.createTransactionForNativeTokenTransfer(i,{receiver:At.newFromBech32(this.config.user.wallet),nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(a))})}async createFromRaw(t,e=!0){let r=JSON.parse(t);return e&&await this.ensureValidSchema(r),r}async createFromTransaction(t,e=!1){return await this.createFromRaw(t.data.toString(),e)}async createFromTransactionHash(t){let e=I(this.config),n=w.getChainEntrypoint(e,this.config.env).createNetworkProvider();try{let i=await n.getTransaction(t);return this.createFromTransaction(i)}catch(i){return y.error("BrandBuilder: Error creating from transaction hash",i),null}}setName(t){return this.pendingBrand.name=t,this}setDescription(t){return this.pendingBrand.description=t,this}setLogo(t){return this.pendingBrand.logo=t,this}setUrls(t){return this.pendingBrand.urls=t,this}setColors(t){return this.pendingBrand.colors=t,this}setCta(t){return this.pendingBrand.cta=t,this}async build(){return this.ensure(this.pendingBrand.name,"name is required"),this.ensure(this.pendingBrand.description,"description is required"),this.ensure(this.pendingBrand.logo,"logo is required"),await this.ensureValidSchema(this.pendingBrand),this.pendingBrand}ensure(t,e){if(!t)throw new Error(`Warp: ${e}`)}async ensureValidSchema(t){let e=this.config.schema?.brand||v.LatestBrandSchemaUrl,n=await(await fetch(e)).json(),i=new Ce,a=i.compile(n);if(!a(t))throw new Error(`BrandBuilder: schema validation failed: ${i.errorsText(a.errors)}`)}};import{Address as Ie,AddressValue as be,BigUIntType as ve,BigUIntValue as Bt,BooleanValue as Ae,BytesValue as xe,CodeMetadata as Be,CodeMetadataValue as Se,CompositeType as Ee,CompositeValue as Re,Field as it,FieldDefinition as at,List as Pe,NothingValue as Ve,OptionalValue as st,OptionValue as ot,StringValue as Ne,Struct as Ue,StructType as Fe,TokenIdentifierType as Oe,TokenIdentifierValue as St,U16Value as ke,U32Value as $e,U64Type as Le,U64Value as Et,U8Value as _e,VariadicValue as qe}from"@multiversx/sdk-core/out";var Fn=(s,t)=>s?ot.newProvided(s):t?ot.newMissingTyped(t):ot.newMissing(),On=(s,t)=>s?new st(s.getType(),s):t?new st(t):st.newMissing(),kn=s=>{if(s.length===0)throw new Error("Cannot create a list from an empty array");let t=s[0].getType();return new Pe(t,s)},$n=s=>qe.fromItems(...s),Ln=s=>{let t=s.map(e=>e.getType());return new Re(new Ee(...t),s)},_n=s=>Ne.fromUTF8(s),qn=s=>new _e(s),Dn=s=>new ke(s),Hn=s=>new $e(s),Mn=s=>new Et(s),jn=s=>new Bt(BigInt(s)),Qn=s=>new Ae(s),Gn=s=>new be(Ie.newFromBech32(s)),zn=s=>new St(s),Kn=s=>xe.fromHex(s),Jn=s=>new Ue(new Fe("EsdtTokenPayment",[new at("token_identifier","",new Oe),new at("token_nonce","",new Le),new at("amount","",new ve)]),[new it(new St(s.token.identifier),"token_identifier"),new it(new Et(BigInt(s.token.nonce)),"token_nonce"),new it(new Bt(BigInt(s.amount)),"amount")]),Xn=s=>new Se(Be.newFromBytes(Uint8Array.from(Buffer.from(s,"hex")))),Yn=()=>new Ve;import{Address as De,TransactionsFactoryConfig as He,TransferTransactionsFactory as Me}from"@multiversx/sdk-core";var X=class{constructor(t){this.cache=new V;this.config=t}createInscriptionTransaction(t){if(!this.config.user?.wallet)throw new Error("WarpBuilder: user address not set");let e=I(this.config),r=new He({chainID:e.chainId}),n=new Me({config:r}),i={protocol:L("abi"),content:t},a=De.newFromBech32(this.config.user.wallet),o=JSON.stringify(i),c=n.createTransactionForTransfer(a,{receiver:a,nativeAmount:BigInt(0),data:Uint8Array.from(Buffer.from(o))});return c.gasLimit=c.gasLimit+BigInt(2e6),c}async createFromRaw(t){return JSON.parse(t)}async createFromTransaction(t){let e=await this.createFromRaw(t.data.toString());return e.meta={hash:t.hash,creator:t.sender.bech32(),createdAt:new Date(t.timestamp*1e3).toISOString()},e}async createFromTransactionHash(t,e){let r=B.WarpAbi(t);if(e){let o=this.cache.get(r);if(o)return y.info(`WarpAbiBuilder (createFromTransactionHash): Warp abi found in cache: ${t}`),o}let n=I(this.config),a=w.getChainEntrypoint(n,this.config.env).createNetworkProvider();try{let o=await a.getTransaction(t),c=await this.createFromTransaction(o);return e&&e.ttl&&c&&this.cache.set(r,c,e.ttl),c}catch(o){return y.error("WarpAbiBuilder: Error creating from transaction hash",o),null}}};import{AbiRegistry as Wt,Address as Tt,ArgSerializer as ar,SmartContractTransactionsFactory as sr,Token as ie,TokenComputer as or,TokenTransfer as ae,TransactionsFactoryConfig as cr,TransferTransactionsFactory as pr}from"@multiversx/sdk-core";import{SmartContractTransactionsOutcomeParser as Ye,TransactionEventsParser as Ze,findEventsByFirstTopic as tr}from"@multiversx/sdk-core/out";import{Address as je,AddressType as Rt,AddressValue as Pt,BigUIntType as ct,BigUIntValue as pt,BooleanType as Vt,BooleanValue as Nt,BytesType as Ut,BytesValue as Ft,CodeMetadata as Qe,CodeMetadataType as Ot,CodeMetadataValue as kt,CompositeType as $t,CompositeValue as Lt,Field as ut,FieldDefinition as lt,List as _t,ListType as Ge,NothingValue as S,OptionalType as ze,OptionalValue as ft,OptionType as Ke,OptionValue as dt,StringType as qt,StringValue as Dt,Struct as Je,StructType as Ht,Token as Xe,TokenIdentifierType as gt,TokenIdentifierValue as mt,TokenTransfer as Mt,U16Type as jt,U16Value as Qt,U32Type as Gt,U32Value as zt,U64Type as ht,U64Value as yt,U8Type as Kt,U8Value as Jt,VariadicType as Xt,VariadicValue as Yt}from"@multiversx/sdk-core/out";var Zt=new RegExp(`${l.ArgParamsSeparator}(.*)`),O=class{nativeToString(t,e){return t==="esdt"&&e instanceof Mt?`esdt:${e.token.identifier}|${e.token.nonce.toString()}|${e.amount.toString()}`:`${t}:${e?.toString()??""}`}typedToString(t){if(t.hasClassOrSuperclass(dt.ClassName))return t.isSet()?`option:${this.typedToString(t.getTypedValue())}`:"option:null";if(t.hasClassOrSuperclass(ft.ClassName))return t.isSet()?`optional:${this.typedToString(t.getTypedValue())}`:"optional:null";if(t.hasClassOrSuperclass(_t.ClassName)){let e=t.getItems(),n=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[0])[0],i=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[1]);return`list:${n}:${i.join(",")}`}if(t.hasClassOrSuperclass(Yt.ClassName)){let e=t.getItems(),n=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[0])[0],i=e.map(a=>this.typedToString(a).split(l.ArgParamsSeparator)[1]);return`variadic:${n}:${i.join(",")}`}if(t.hasClassOrSuperclass(Lt.ClassName)){let e=t.getItems(),r=e.map(o=>this.typedToString(o).split(l.ArgParamsSeparator)[0]),n=e.map(o=>this.typedToString(o).split(l.ArgParamsSeparator)[1]),i=r.join(l.ArgCompositeSeparator),a=n.join(l.ArgCompositeSeparator);return`composite(${i}):${a}`}if(t.hasClassOrSuperclass(pt.ClassName)||t.getType().getName()==="BigUint")return`biguint:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Jt.ClassName))return`uint8:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(Qt.ClassName))return`uint16:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(zt.ClassName))return`uint32:${t.valueOf().toNumber()}`;if(t.hasClassOrSuperclass(yt.ClassName))return`uint64:${BigInt(t.valueOf().toFixed())}`;if(t.hasClassOrSuperclass(Dt.ClassName))return`string:${t.valueOf()}`;if(t.hasClassOrSuperclass(Nt.ClassName))return`bool:${t.valueOf()}`;if(t.hasClassOrSuperclass(Pt.ClassName))return`address:${t.valueOf().bech32()}`;if(t.hasClassOrSuperclass(mt.ClassName))return`token:${t.valueOf()}`;if(t.hasClassOrSuperclass(Ft.ClassName))return`hex:${t.valueOf().toString("hex")}`;if(t.hasClassOrSuperclass(kt.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.stringToNative(e)}nativeToTyped(t,e){let r=this.nativeToString(t,e);return this.stringToTyped(r)}nativeToType(t){if(t.startsWith("composite")){let e=t.match(/\(([^)]+)\)/)?.[1];return new $t(...e.split(l.ArgCompositeSeparator).map(r=>this.nativeToType(r)))}if(t==="string")return new qt;if(t==="uint8")return new Kt;if(t==="uint16")return new jt;if(t==="uint32")return new Gt;if(t==="uint64")return new ht;if(t==="biguint")return new ct;if(t==="bool")return new Vt;if(t==="address")return new Rt;if(t==="token")return new gt;if(t==="hex")return new Ut;if(t==="codemeta")return new Ot;if(t==="esdt"||t==="nft")return new Ht("EsdtTokenPayment",[new lt("token_identifier","",new gt),new lt("token_nonce","",new ht),new lt("amount","",new ct)]);throw new Error(`WarpArgSerializer (nativeToType): Unsupported input type: ${t}`)}stringToNative(t){let e=t.split(l.ArgParamsSeparator),r=e[0],n=e.slice(1).join(l.ArgParamsSeparator);if(r==="null")return[r,null];if(r==="option"){let[i,a]=n.split(l.ArgParamsSeparator);return[`option:${i}`,a||null]}else if(r==="optional"){let[i,a]=n.split(l.ArgParamsSeparator);return[`optional:${i}`,a||null]}else if(r==="list"){let i=n.split(l.ArgParamsSeparator),a=i.slice(0,-1).join(l.ArgParamsSeparator),o=i[i.length-1],p=(o?o.split(","):[]).map(u=>this.stringToNative(`${a}:${u}`)[1]);return[`list:${a}`,p]}else if(r==="variadic"){let i=n.split(l.ArgParamsSeparator),a=i.slice(0,-1).join(l.ArgParamsSeparator),o=i[i.length-1],p=(o?o.split(","):[]).map(u=>this.stringToNative(`${a}:${u}`)[1]);return[`variadic:${a}`,p]}else if(r.startsWith("composite")){let i=r.match(/\(([^)]+)\)/)?.[1]?.split(l.ArgCompositeSeparator),o=n.split(l.ArgCompositeSeparator).map((c,p)=>this.stringToNative(`${i[p]}:${c}`)[1]);return[r,o]}else{if(r==="string")return[r,n];if(r==="uint8"||r==="uint16"||r==="uint32")return[r,Number(n)];if(r==="uint64"||r==="biguint")return[r,BigInt(n||0)];if(r==="bool")return[r,n==="true"];if(r==="address")return[r,n];if(r==="token")return[r,n];if(r==="hex")return[r,n];if(r==="codemeta")return[r,n];if(r==="esdt"){let[i,a,o]=n.split(l.ArgCompositeSeparator);return[r,new Mt({token:new Xe({identifier:i,nonce:BigInt(a)}),amount:BigInt(o)})]}}throw new Error(`WarpArgSerializer (stringToNative): Unsupported input type: ${r}`)}stringToTyped(t){let[e,r]=t.split(/:(.*)/,2);if(e==="null"||e===null)return new S;if(e==="option"){let n=this.stringToTyped(r);return n instanceof S?dt.newMissingTyped(n.getType()):dt.newProvided(n)}if(e==="optional"){let n=this.stringToTyped(r);return n instanceof S?ft.newMissing():new ft(n.getType(),n)}if(e==="list"){let[n,i]=r.split(Zt,2),o=i.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new _t(this.nativeToType(n),o)}if(e==="variadic"){let[n,i]=r.split(Zt,2),o=i.split(",").map(c=>this.stringToTyped(`${n}:${c}`));return new Yt(new Xt(this.nativeToType(n)),o)}if(e.startsWith("composite")){let n=e.match(/\(([^)]+)\)/)?.[1],i=r.split(l.ArgCompositeSeparator),a=n.split(l.ArgCompositeSeparator),o=i.map((p,u)=>this.stringToTyped(`${a[u]}:${p}`)),c=o.map(p=>p.getType());return new Lt(new $t(...c),o)}if(e==="string")return r?Dt.fromUTF8(r):new S;if(e==="uint8")return r?new Jt(Number(r)):new S;if(e==="uint16")return r?new Qt(Number(r)):new S;if(e==="uint32")return r?new zt(Number(r)):new S;if(e==="uint64")return r?new yt(BigInt(r)):new S;if(e==="biguint")return r?new pt(BigInt(r)):new S;if(e==="bool")return r?new Nt(typeof r=="boolean"?r:r==="true"):new S;if(e==="address")return r?new Pt(je.newFromBech32(r)):new S;if(e==="token")return r?new mt(r):new S;if(e==="hex")return r?Ft.fromHex(r):new S;if(e==="codemeta")return new kt(Qe.newFromBytes(Uint8Array.from(Buffer.from(r,"hex"))));if(e==="esdt"){let n=r.split(l.ArgCompositeSeparator);return new Je(this.nativeToType("esdt"),[new ut(new mt(n[0]),"token_identifier"),new ut(new yt(BigInt(n[1])),"token_nonce"),new ut(new pt(BigInt(n[2])),"amount")])}throw new Error(`WarpArgSerializer (stringToTyped): Unsupported input type: ${e}`)}typeToString(t){if(t instanceof Ke)return"option:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof ze)return"optional:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Ge)return"list:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof Xt)return"variadic:"+this.typeToString(t.getFirstTypeParameter());if(t instanceof qt)return"string";if(t instanceof Kt)return"uint8";if(t instanceof jt)return"uint16";if(t instanceof Gt)return"uint32";if(t instanceof ht)return"uint64";if(t instanceof ct)return"biguint";if(t instanceof Vt)return"bool";if(t instanceof Rt)return"address";if(t instanceof gt)return"token";if(t instanceof Ut)return"hex";if(t instanceof Ot)return"codemeta";if(t instanceof Ht&&t.getClassName()==="EsdtTokenPayment")return"esdt";throw new Error(`WarpArgSerializer (typeToString): Unsupported input type: ${t.getClassName()}`)}};var wt=s=>{if(s==="out")return 1;let t=s.match(/^out\[(\d+)\]/);return t?parseInt(t[1],10):(s.startsWith("out.")||s.startsWith("event."),null)},er=(s,t)=>t.reduce((e,r)=>e&&e[r]!==void 0?e[r]:null,s),te=async(s,t,e,r,n,i)=>{let a=[],o={};if(!t.results||e.type!=="contract")return{values:a,results:o};if(!Object.values(t.results).some(g=>g.includes("out")||g.includes("event"))){for(let[g,C]of Object.entries(t.results))o[g]=C;return{values:a,results:await Y(t,o,n,i)}}let p=await s.getAbiForAction(e),u=new Ze({abi:p}),m=new Ye({abi:p}).parseExecute({transactionOnNetwork:r,function:e.func||void 0});for(let[g,C]of Object.entries(t.results)){if(C.startsWith(l.Transform.Prefix))continue;if(C.startsWith("input.")){o[g]=C;continue}let d=wt(C);if(d!==null&&d!==n){o[g]=null;continue}let[h,T,A]=C.split(".");if(h==="event"){if(!T||isNaN(Number(A)))continue;let E=Number(A),W=tr(r,T),k=u.parseEvents({events:W})[0],P=Object.values(k)[E]||null;a.push(P),o[g]=P&&P.valueOf()}else if(h==="out"||h.startsWith("out[")){if(!T)continue;let E=Number(T),W=m.values[E-1]||null;A&&(W=W[A]||null),W&&typeof W=="object"&&(W="toFixed"in W?W.toFixed():W.valueOf()),a.push(W),o[g]=W&&W.valueOf()}else o[g]=C}return{values:a,results:await Y(t,o,n,i)}},ee=async(s,t,e,r)=>{let n=new O,i=t.map(p=>n.typedToString(p)),a=t.map(p=>n.typedToNative(p)[1]),o={};if(!s.results)return{values:i,results:o};let c=p=>{let u=p.split(".").slice(1).map(m=>parseInt(m)-1);if(u.length===0)return;let f=a[u[0]];for(let m=1;m<u.length;m++){if(f==null)return;f=f[u[m]]}return f};for(let[p,u]of Object.entries(s.results)){if(u.startsWith(l.Transform.Prefix))continue;let f=wt(u);if(f!==null&&f!==e){o[p]=null;continue}u.startsWith("out.")||u==="out"||u.startsWith("out[")?o[p]=c(u)||null:o[p]=u}return{values:i,results:await Y(s,o,e,r)}},re=async(s,t,e,r)=>{let n=[],i={};for(let[a,o]of Object.entries(s.results||{})){if(o.startsWith(l.Transform.Prefix))continue;let c=wt(o);if(c!==null&&c!==e){i[a]=null;continue}let[p,...u]=o.split(".");if(p==="out"||p.startsWith("out[")){let f=u.length===0?t?.data||t:er(t,u);n.push(f),i[a]=f}else i[a]=o}return{values:n,results:await Y(s,i,e,r)}};var Y=async(s,t,e,r)=>{if(!s.results)return t;let n={...t};return n=rr(n,s,e,r),n=await nr(s,n),n},rr=(s,t,e,r)=>{let n={...s},i=F(t,e)?.inputs||[],a=new O;for(let[o,c]of Object.entries(n))if(typeof c=="string"&&c.startsWith("input.")){let p=c.split(".")[1],u=i.findIndex(m=>m.as===p||m.name===p),f=u!==-1?r[u]?.value:null;n[o]=f?a.stringToNative(f)[1]:null}return n},nr=async(s,t)=>{if(!s.results)return t;let e={...t},r=Object.entries(s.results).filter(([,n])=>n.startsWith(l.Transform.Prefix)).map(([n,i])=>({key:n,code:i.substring(l.Transform.Prefix.length)}));for(let{key:n,code:i}of r)try{let{runInVm:a}=await import("./vm-JCVDACTR.mjs");e[n]=await a(i,e)}catch(a){y.error(`Transform error for result '${n}':`,a),e[n]=null}return e};var ir=[{id:"EGLD",name:"eGold",decimals:18},{id:"EGLD-000000",name:"eGold",decimals:18}],ne=s=>ir.find(t=>t.id===s)||null;var Z=class{constructor(t){this.config=t}async getContract(t,e){try{let i=await w.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}`);return{address:t,owner:i.ownerAddress,verified:i.isVerified||!1}}catch(r){return y.error("WarpContractLoader: getContract error",r),null}}async getVerificationInfo(t,e){try{let i=await w.getChainEntrypoint(e,this.config.env).createNetworkProvider().doGetGeneric(`accounts/${t}/verification`);return{codeHash:i.codeHash,abi:i.source.abi}}catch(r){return y.error("WarpContractLoader: getVerificationInfo error",r),null}}};var se=class{constructor(t){if(!t.currentUrl)throw new Error("WarpActionExecutor: currentUrl config not set");this.config=t,this.url=new URL(t.currentUrl),this.serializer=new O,this.contractLoader=new Z(t),this.cache=new V(t.cache?.type)}async createTransactionForExecute(t,e,r){let n=F(t,e);if(!this.config.user?.wallet)throw new Error("WarpActionExecutor: user address not set");let i=Tt.newFromBech32(this.config.user.wallet),a=await w.getChainInfoForAction(this.config,n),o=new cr({chainID:a.chainId}),{destination:c,args:p,value:u,transfers:f,data:m,resolvedInputs:g}=await this.getTxComponentsFromInputs(a,n,r,i),C=p.map(h=>this.serializer.stringToTyped(h)),d=null;if(n.type==="transfer")d=new pr({config:o}).createTransactionForTransfer(i,{receiver:c,nativeAmount:u,tokenTransfers:f,data:m?new Uint8Array(m):void 0});else if(n.type==="contract"&&c.isSmartContract())d=new sr({config:o}).createTransactionForExecute(i,{contract:c,function:"func"in n&&n.func||"",gasLimit:"gasLimit"in n?BigInt(n.gasLimit||0):0n,arguments:C,tokenTransfers:f,nativeTransferAmount:u});else{if(n.type==="query")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeQuery instead");if(n.type==="collect")throw new Error("WarpActionExecutor: Invalid action type for createTransactionForExecute; Use executeCollect instead")}if(!d)throw new Error(`WarpActionExecutor: Invalid action type (${n.type})`);return this.cache.set(B.LastWarpExecutionInputs(t.meta?.hash||"",e),g,Q.OneWeek),d}async getTransactionExecutionResults(t,e,r){let n=await U.apply(this.config,t),i=F(n,e),a=this.cache.get(B.LastWarpExecutionInputs(t.meta?.hash||"",e))??[],{values:o,results:c}=await te(this,n,i,r,e,a),p=w.getNextInfo(this.config,n,e,c),u=this.getPreparedMessages(n,c);return{success:r.status.isSuccessful(),warp:n,action:e,user:this.config.user?.wallet||null,txHash:r.hash,next:p,values:o,results:c,messages:u}}async executeQuery(t,e,r){let n=F(t,e);if(!n)throw new Error("WarpActionExecutor: Action not found");if(!n.func)throw new Error("WarpActionExecutor: Function not found");let i=await w.getChainInfoForAction(this.config,n),a=await U.apply(this.config,t),o=await this.getAbiForAction(n),{args:c,resolvedInputs:p}=await this.getTxComponentsFromInputs(i,n,r),u=c.map(tt=>this.serializer.stringToTyped(tt)),f=w.getChainEntrypoint(i,this.config.env),m=Tt.newFromBech32(n.address),g=f.createSmartContractController(o),C=g.createQuery({contract:m,function:n.func,arguments:u}),d=await g.runQuery(C),h=d.returnCode==="ok",T=new ar,A=o.getEndpoint(d.function),E=d.returnDataParts.map(tt=>Buffer.from(tt)),W=T.buffersToValues(E,A.output),{values:k,results:P}=await ee(a,W,e,p),x=w.getNextInfo(this.config,a,e,P);return{success:h,warp:a,action:e,user:this.config.user?.wallet||null,txHash:null,next:x,values:k,results:P,messages:this.getPreparedMessages(a,P)}}async executeCollect(t,e,r,n){let i=F(t,e);if(!i)throw new Error("WarpActionExecutor: Action not found");let a=await w.getChainInfoForAction(this.config,i),o=await U.apply(this.config,t),c=await this.getResolvedInputs(a,i,r),p=this.getModifiedInputs(c),u=d=>{if(!d.value)return null;let h=this.serializer.stringToNative(d.value)[1];if(d.input.type==="biguint")return h.toString();if(d.input.type==="esdt"){let T=h;return{token:T.token.identifier,nonce:T.token.nonce.toString(),amount:T.amount.toString()}}else return h},f=new Headers;f.set("Content-Type","application/json"),f.set("Accept","application/json"),Object.entries(i.destination.headers||{}).forEach(([d,h])=>{f.set(d,h)});let m=Object.fromEntries(p.map(d=>[d.input.as||d.input.name,u(d)])),g=i.destination.method||"GET",C=g==="GET"?void 0:JSON.stringify({inputs:m,meta:n});y.info("Executing collect",{url:i.destination.url,method:g,headers:f,body:C});try{let d=await fetch(i.destination.url,{method:g,headers:f,body:C}),h=await d.json(),{values:T,results:A}=await re(o,h,e,p),E=w.getNextInfo(this.config,o,e,A);return{success:d.ok,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:E,values:T,results:{...A,_DATA:h},messages:this.getPreparedMessages(o,A)}}catch(d){return y.error("WarpActionExecutor: Error executing collect",d),{success:!1,warp:o,action:e,user:this.config.user?.wallet||null,txHash:null,next:null,values:[],results:{_DATA:d},messages:{}}}}async getTxComponentsFromInputs(t,e,r,n){let i=await this.getResolvedInputs(t,e,r),a=this.getModifiedInputs(i),o=a.find(x=>x.input.position==="receiver")?.value,c="address"in e?e.address:null,p=o?.split(":")[1]||c||n?.toBech32();if(!p)throw new Error("WarpActionExecutor: Destination/Receiver not provided");let u=Tt.newFromBech32(p),f=this.getPreparedArgs(e,a),m=a.find(x=>x.input.position==="value")?.value||null,g="value"in e?e.value:null,C=BigInt(m?.split(":")[1]||g||0),d=a.filter(x=>x.input.position==="transfer"&&x.value).map(x=>x.value),T=[...("transfers"in e?e.transfers:[])?.map(this.toTypedTransfer)||[],...d?.map(x=>this.serializer.stringToNative(x)[1])||[]],A=a.find(x=>x.input.position==="data")?.value,E="data"in e?e.data||"":null,W=A||E||null,k=W?this.serializer.stringToTyped(W).valueOf():null,P=k?Buffer.from(k):null;return{destination:u,args:f,value:C,transfers:T,data:P,resolvedInputs:a}}async getResolvedInputs(t,e,r){let n=e.inputs||[],i=await Promise.all(r.map(o=>this.preprocessInput(t,o))),a=(o,c)=>{if(o.source==="query"){let p=this.url.searchParams.get(o.name);return p?this.serializer.nativeToString(o.type,p):null}else return o.source===l.Source.UserWallet?this.config.user?.wallet?this.serializer.nativeToString("address",this.config.user.wallet):null:i[c]||null};return n.map((o,c)=>({input:o,value:a(o,c)}))}getModifiedInputs(t){return t.map((e,r)=>{if(e.input.modifier?.startsWith("scale:")){let[,n]=e.input.modifier.split(":");if(isNaN(Number(n))){let i=Number(t.find(c=>c.input.name===n)?.value?.split(":")[1]);if(!i)throw new Error(`WarpActionExecutor: Exponent value not found for input ${n}`);let a=e.value?.split(":")[1];if(!a)throw new Error("WarpActionExecutor: Scalable value not found");let o=M(a,+i);return{...e,value:`${e.input.type}:${o}`}}else{let i=e.value?.split(":")[1];if(!i)throw new Error("WarpActionExecutor: Scalable value not found");let a=M(i,+n);return{...e,value:`${e.input.type}:${a}`}}}else return e})}async preprocessInput(t,e){try{let[r,n]=e.split(l.ArgParamsSeparator,2);if(r==="esdt"){let[i,a,o,c]=n.split(l.ArgCompositeSeparator);if(c)return e;let p=new ie({identifier:i,nonce:BigInt(a)});if(!new or().isFungible(p))return e;let m=ne(i)?.decimals;if(m||(m=(await(await fetch(`${t.apiUrl}/tokens/${i}`)).json()).decimals),!m)throw new Error(`WarpActionExecutor: Decimals not found for token ${i}`);let g=new ae({token:p,amount:M(o,m)});return this.serializer.nativeToString(r,g)+l.ArgCompositeSeparator+m}return e}catch{return e}}async getAbiForAction(t){if(t.abi)return await this.fetchAbi(t);let e=I(this.config),r=await this.contractLoader.getVerificationInfo(t.address,e);if(!r)throw new Error("WarpActionExecutor: Verification info not found");return Wt.create(r.abi)}getPreparedArgs(t,e){let r="args"in t?t.args||[]:[];return e.forEach(({input:n,value:i})=>{if(!i||!n.position?.startsWith("arg:"))return;let a=Number(n.position.split(":")[1])-1;r.splice(a,0,i)}),r}getPreparedMessages(t,e){let r=Object.entries(t.messages||{}).map(([n,i])=>[n,j(i,e)]);return Object.fromEntries(r)}async fetchAbi(t){if(!t.abi)throw new Error("WarpActionExecutor: ABI not found");if(t.abi.startsWith(l.IdentifierType.Hash)){let e=new X(this.config),r=t.abi.split(l.IdentifierParamSeparator)[1],n=await e.createFromTransactionHash(r);if(!n)throw new Error(`WarpActionExecutor: ABI not found for hash: ${t.abi}`);return Wt.create(n.content)}else{let r=await(await fetch(t.abi)).json();return Wt.create(r)}}toTypedTransfer(t){return new ae({token:new ie({identifier:t.token,nonce:BigInt(t.nonce||0)}),amount:BigInt(t.amount||0)})}};var oe=class{constructor(t){this.config=t}async search(t,e,r){if(!this.config.index?.url)throw new Error("WarpIndex: Index URL is not set");try{let n=await fetch(this.config.index?.url,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.index?.apiKey}`,...r},body:JSON.stringify({[this.config.index?.searchParamName||"search"]:t,...e})});if(!n.ok)throw new Error(`WarpIndex: search failed with status ${n.status}`);return(await n.json()).hits}catch(n){throw y.error("WarpIndex: Error searching for warps: ",n),n}}};export{xt as BrandBuilder,B as CacheKey,Q as CacheTtl,X as WarpAbiBuilder,se as WarpActionExecutor,O as WarpArgSerializer,z as WarpBuilder,V as WarpCache,v as WarpConfig,l as WarpConstants,Z as WarpContractLoader,oe as WarpIndex,U as WarpInterpolator,J as WarpLink,$ as WarpProtocolVersions,q as WarpRegistry,w as WarpUtils,G as WarpValidator,Gn as address,jn as biguint,Qn as boolean,Xn as codemeta,Ln as composite,Jn as esdt,gr as getChainExplorerUrl,L as getLatestProtocolIdentifier,I as getMainChainInfo,F as getWarpActionByIndex,Kn as hex,kn as list,Yn as nothing,Fn as option,On as optional,j as replacePlaceholders,M as shiftBigintBy,_n as string,Ct as toPreviewText,et as toTypedChainInfo,zn as token,Dn as u16,Hn as u32,Mn as u64,qn as u8,$n as variadic};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps",
3
- "version": "2.3.0-alpha.7",
3
+ "version": "3.0.0-alpha.10",
4
4
  "description": "",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",