@layerzerolabs/lz-utilities 3.0.7 → 3.0.8

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @layerzerolabs/lz-utilities
2
2
 
3
+ ## 3.0.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 1cd5e8e: support READ library
8
+ - Updated dependencies [1cd5e8e]
9
+ - @layerzerolabs/lz-definitions@3.0.8
10
+
3
11
  ## 3.0.7
4
12
 
5
13
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -338,7 +338,14 @@ function getLogger() {
338
338
  }
339
339
  if (process.env.NODE_ENV === "test") ;
340
340
  function findDeployment(deployments, nameOrAddress, options) {
341
- const retval = deployments.find((deployment) => {
341
+ const retval = tryFindDeployment(deployments, nameOrAddress, options);
342
+ if (retval === void 0) {
343
+ throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`);
344
+ }
345
+ return retval;
346
+ }
347
+ function tryFindDeployment(deployments, nameOrAddress, options) {
348
+ return deployments.find((deployment) => {
342
349
  let hasMatchingNameOrAddress = deployment.name === nameOrAddress;
343
350
  if (!hasMatchingNameOrAddress && ethers.ethers.utils.isAddress(nameOrAddress)) {
344
351
  hasMatchingNameOrAddress = ethers.ethers.utils.getAddress(deployment.address) === ethers.ethers.utils.getAddress(nameOrAddress);
@@ -358,10 +365,6 @@ function findDeployment(deployments, nameOrAddress, options) {
358
365
  }
359
366
  return hasMatchingNameOrAddress && hasMatchingChain && hasMatchingNetwork && hasMatchingEndpoint && hasMatchingSource;
360
367
  });
361
- if (retval === void 0) {
362
- throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`);
363
- }
364
- return retval;
365
368
  }
366
369
  var contractCache = {};
367
370
  function deploymentToEvmContract(deployment, provider) {
@@ -645,5 +648,6 @@ exports.safeMap = safeMap;
645
648
  exports.sequence = sequence;
646
649
  exports.sleep = sleep;
647
650
  exports.trim0x = trim0x;
651
+ exports.tryFindDeployment = tryFindDeployment;
648
652
  //# sourceMappingURL=out.js.map
649
653
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/pad.ts","../src/types.ts","../src/format.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts","../src/assert.ts","../src/promise.ts","../src/array.ts","../src/enum.ts","../src/generic.ts","../src/findup.ts","../src/loader.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace","createRequire","require"],"mappings":";AAAA,OAAO,UAA8B;AACrC,OAAOA,WAAU;;;ACDjB,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,kBAAkB;AAC9B,SAAS,cAAc;AAEvB,SAAS,iBAAiB;;;ACKnB,IAAM,8BAAN,cAA0C,MAAM;AAAA,EAEnD,YAAY,EAAE,MAAM,YAAY,KAAK,GAAgE;AACjG;AAAA,MACI,GAAG,KAAK,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,KAC7B,MAAM,CAAC,EACP,YAAY,CAAC,UAAU,IAAI,2BAA2B,UAAU;AAAA,IACzE;AANJ,SAAS,OAAO;AAAA,EAOhB;AACJ;AAWO,SAAS,OACZ,YACA,EAAE,KAAK,OAAO,GAAG,IAAgB,CAAC,GACd;AACpB,MAAI,OAAO,eAAe,UAAU;AAChC,WAAO,OAAO,YAAY,EAAE,KAAK,KAAK,CAAC;AAAA,EAC3C;AACA,SAAO,SAAS,YAAY,EAAE,KAAK,KAAK,CAAC;AAC7C;AAEA,SAAS,OAAO,KAAU,EAAE,KAAK,OAAO,GAAG,IAAgB,CAAC,GAAQ;AAChE,MAAI,SAAS;AAAM,WAAO;AAC1B,QAAM,QAAQ,IAAI,QAAQ,MAAM,EAAE;AAClC,MAAI,MAAM,SAAS,OAAO;AACtB,UAAM,IAAI,4BAA4B;AAAA,MAClC,MAAM,KAAK,KAAK,MAAM,SAAS,CAAC;AAAA,MAChC,YAAY;AAAA,MACZ,MAAM;AAAA,IACV,CAAC;AAEL,SAAO,KAAK,MAAM,QAAQ,UAAU,WAAW,UAAU,EAAE,OAAO,GAAG,GAAG,CAAC;AAC7E;AAEA,SAAS,SAAS,OAAc,EAAE,KAAK,OAAO,GAAG,IAAgB,CAAC,GAAU;AACxE,MAAI,SAAS;AAAM,WAAO;AAC1B,MAAI,MAAM,SAAS;AACf,UAAM,IAAI,4BAA4B;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,YAAY;AAAA,MACZ,MAAM;AAAA,IACV,CAAC;AACL,QAAM,cAAc,IAAI,WAAW,IAAI;AACvC,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC3B,UAAM,SAAS,QAAQ;AACvB,gBAAY,SAAS,IAAI,OAAO,IAAI,CAAC,IAAI,MAAM,SAAS,IAAI,MAAM,SAAS,IAAI,CAAC;AAAA,EACpF;AACA,SAAO;AACX;;;ACtDO,SAAS,MAAM,OAA6B;AAC/C,SAAO,mBAAmB,KAAK,KAAK;AACxC;AAOO,SAAS,OAAO,OAA8B;AACjD,SAAO,mBAAmB,KAAK,KAAK;AACxC;;;ACjBO,SAAS,WAAW,OAA2B;AAClD,SAAO,OAAO,QAAQ,KAAK,CAAC,EAAE,QAAQ,QAAQ,EAAE;AACpD;AAQO,SAAS,WAAW,KAAyB;AAChD,SAAO,SAAS,GAAG;AACvB;AAOO,SAAS,OAAO,KAAqB;AACxC,SAAO,IAAI,QAAQ,QAAQ,EAAE;AACjC;AAOO,SAAS,SAAS,KAAkB;AACvC,MAAI,CAAC,MAAM,GAAG,GAAG;AACb,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACxC;AACA,QAAM,QAAQ,OAAO,GAAG;AACxB,QAAM,SAAS,KAAK,KAAK;AACzB,SAAO;AACX;AAQO,SAAS,YAAY,OAAwB;AAChD,SAAO,MAAM,KAAK;AACtB;AAEA,SAAS,UAAU,OAAmE;AAClF,MAAI,iBAAiB,YAAY;AAC7B,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,UAAU,UAAU;AAC3B,QAAI,MAAM,MAAM,mBAAmB,GAAG;AAClC,YAAM,MAAM,MAAM,QAAQ,QAAQ,EAAE;AACpC,YAAM,MAAM,IAAI,SAAS,KAAM,IAAI,SAAS,KAAK;AACjD,aAAO,WAAW,KAAK,OAAO,KAAK,IAAI,SAAS,KAAK,GAAG,GAAG,KAAK,CAAC;AAAA,IACrE;AACA,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACxC;AAEA,MAAI,OAAO,UAAU,UAAU;AAC3B,QAAI,QAAQ,GAAG;AACX,YAAM,IAAI,MAAM,6BAA6B;AAAA,IACjD;AACA,UAAM,YAAY,CAAC;AACnB,WAAO,QAAQ,GAAG;AACd,gBAAU,KAAK,QAAQ,GAAI;AAC3B,gBAAU;AAAA,IACd;AACA,WAAO,IAAI,WAAW,UAAU,QAAQ,CAAC;AAAA,EAC7C;AAEA,MAAI,OAAO,WAAW,eAAe,OAAO,SAAS,KAAK,GAAG;AACzD,WAAO,IAAI,WAAW,KAAK;AAAA,EAC/B;AAEA,MAAI,OAAO,UAAU,UAAU;AAC3B,UAAM,MAAM,MAAM,SAAS,EAAE;AAC7B,WAAO,UAAU,GAAG;AAAA,EACxB;AAEA,QAAM,IAAI,MAAM,kBAAkB;AACtC;AAOO,SAAS,SAAS,OAAuD,MAA2B;AACvG,QAAM,QAAQ,UAAU,KAAK;AAC7B,MAAI,SAAS,QAAW;AACpB,WAAO;AAAA,EACX;AACA,SAAO,OAAO,OAAO,EAAE,KAAK,CAAC;AACjC;AAKO,SAAS,QAAQ,OAA4D;AAChF,MAAI,OAAO,UAAU,YAAY,oBAAoB,KAAK,KAAK,GAAG;AAC9D,UAAM,SAAS,OAAO,OAAO,KAAK;AAClC,WAAO;AAAA,EACX;AAEA,QAAM,QAAQ,SAAS,KAAK;AAC5B,QAAM,MAAM,OAAO,KAAK,KAAK,EAAE,SAAS,KAAK;AAC7C,SAAO,SAAS,GAAG;AACvB;;;AHrGO,SAAS,cAAc,WAAsB,SAAiB,QAAgB,OAAuB;AAaxG,UAAQ,WAAW;AAAA,IACf,KAAK,UAAU;AAEX,aAAO,aAAa,OAAO,KAAK,MAAM,IAAI,KAAK;AAAA,IACnD,KAAK,UAAU;AAEX,aAAO,cAAc,OAAO,KAAK,MAAM,KAAK,KAAK;AAAA,IACrD,KAAK,UAAU;AAEX,aAAO,cAAc,OAAO,KAAK,MAAM;AAAA,IAC3C;AACI,YAAM,IAAI,MAAM,sBAAsB,SAAS,EAAE;AAAA,EACzD;AACJ;AAEO,SAAS,0BAA0B,UAAkBA,QAAO,oBAAqC;AACpG,QAAM,SAAS,OAAO,OAAO,aAAa,UAAUA,KAAI;AACxD,SAAO;AAAA,IACH;AAAA,IACA,MAAAA;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO;AAAA,EACpB;AACJ;AAEO,SAAS,4BAA4B,UAAkBA,QAAO,uBAAwC;AAEzG,MAAI,CAAO,mBAAa,YAAYA,KAAI,GAAG;AACvC,UAAM,IAAI,MAAM,4BAA4BA,KAAI,EAAE;AAAA,EACtD;AACA,QAAM,qBAAqB,SACtB,KAAK,EACL,MAAM,KAAK,EACX,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,EAChC,KAAK,GAAG;AACb;AACI,UAAM,EAAE,IAAI,IAAU,iBAAWA,OAAM,OAAO,QAAc,yBAAmB,kBAAkB,CAAC,CAAC,CAAC;AACpG,UAAM,UAAU,IAAU,mBAAa,IAAI,WAAW,GAAG,CAAC,EAAE,mBAAmB;AAC/E,WAAO;AAAA,MACH;AAAA,MACA,MAAAA;AAAA,MACA,YAAY,QAAQ;AAAA,MACpB,SAAS,QAAQ;AAAA,IACrB;AAAA,EACJ;AACJ;AAEO,SAAS,6BAA6B,UAAkBA,QAAO,qBAAsC;AACxG,QAAM,CAAC,GAAG,UAAU,SAAS,IAAI,KAAK,IAAIA,MAAK,MAAM,MAAM,GAAG,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,CAAC;AAC9F,QAAM,qBAAqB,SACtB,KAAK,EACL,MAAM,KAAK,EACX,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,EAChC,KAAK,GAAG;AACb,QAAM,MAAM,IAAI,YAAY;AAAA,IACxB,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACD;AACI,WAAO;AAAA,MACH;AAAA,MACA,MAAAA;AAAA,MACA,YAAY,IAAI,WAAW,SAAS,KAAK;AAAA,MACzC,SAAS,IAAI;AAAA,IACjB;AAAA,EACJ;AACJ;AAEO,SAAS,6BAA6B,UAAkBA,QAAO,oBAAqC;AACvG,QAAM,OAAa,yBAAmB,UAAU,EAAE;AAClD,QAAM,UAAU,QAAQ,SAAsB,wBAAWA,OAAM,KAAK,SAAS,KAAK,CAAC,EAAE,GAAG;AACxF,SAAO;AAAA,IACH;AAAA,IACA,MAAAA;AAAA,IACA,YAAY,OAAO,MAAM,QAAQ,QAAQ,SAAS;AAAA,IAClD,SAAS,QAAQ,UAAU,SAAS;AAAA,EACxC;AACJ;AAEO,SAAS,uBAAuB,WAAsB,UAAkBA,OAAgC;AAC3G,UAAQ,WAAW;AAAA,IACf,KAAK,UAAU;AACX,aAAO,0BAA0B,UAAUA,KAAI;AAAA,IACnD,KAAK,UAAU;AACX,aAAO,4BAA4B,UAAUA,KAAI;AAAA,IACrD,KAAK,UAAU;AACX,aAAO,6BAA6B,UAAUA,KAAI;AAAA,IACtD,KAAK,UAAU;AACX,aAAO,6BAA6B,UAAUA,KAAI;AAAA,IACtD;AACI,YAAM,IAAI,MAAM,sBAAsB,SAAS,EAAE;AAAA,EACzD;AACJ;;;AI7HA,YAAY,aAAa;AACzB,SAAS,QAAQ,cAAc;AAE/B,IAAI,SAA6B;AAIjC,SAAS,gBAAoC;AACzC,QAAM,WAAW,MAAM;AACvB,QAAM,kBAAkB;AACxB,QAAM,SAAS,IAAI,MAAM,EAAE;AAC3B,QAAM,kBAAkB;AACxB,SAAO;AACX;AAGO,SAAS,sBAAgE;AAC5E,QAAM,YAAuB,CAAC;AAC9B,SAAO,SAAyB,MAAc,OAAgB;AAC1D,QAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,aAAO;AAAA,IACX;AAGA,WAAO,UAAU,SAAS,KAAK,UAAU,GAAG,EAAE,MAAM,MAAM;AACtD,gBAAU,IAAI;AAAA,IAClB;AACA,QAAI,UAAU,SAAS,KAAK,GAAG;AAC3B,aAAO;AAAA,IACX;AACA,cAAU,KAAK,KAAK;AACpB,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,kBAAkB,MAAsB;AAC7C,aAAW,WAAW,CAAC,sBAAsB,mBAAmB,GAAG;AAC/D,UAAM,IAAI,KAAK,MAAM,OAAO;AAC5B,QAAI,MAAM,MAAM;AACZ;AAAA,IACJ;AACA,UAAM,CAAC,EAAE,YAAY,IAAI;AACzB,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,IAAM,YAAY,OAAO;AAAA,EACrB,CAAC,SAQK;AACF,QAAI,KAAK,MAAM,YAAY,MAAM,WAAW,KAAK,MAAM,YAAY,MAAM,QAAQ;AAC7E,aAAO,GAAG,KAAK,SAAS,IAAI,KAAK,MAAM,YAAY,CAAC,KAAK,KAAK,OAAO;AAAA,IACzE;AACA,UAAM,QAAQ,cAAc,KAAK;AAEjC,UAAM,aAAa,MAAM,MAAM,IAAI;AACnC,UAAM,QACF,WAAW,UAAU,CAAC,SAAS;AAC3B,aAAO,KAAK,MAAM,kBAAkB;AAAA,IACxC,CAAC,IAAI;AAET,QAAI,WAAW;AACf,QAAI,WAAW,SAAS,OAAO;AAC3B,YAAM,OAAO,WAAW,KAAK;AAC7B,iBAAW,kBAAkB,IAAI;AAAA,IACrC;AAEA,UAAM,UAAoB,CAAC;AAC3B,QAAI,aAAa,aAAa;AAC1B,cAAQ,KAAK,QAAQ;AAAA,IACzB;AAEA,UAAM,EAAE,QAAQ,QAAAC,QAAO,IAAI,KAAK,YAAY,CAAC;AAC7C,UAAM,SAAS,WAAW,OAAO,IAAI;AACrC,UAAM,QACF,OAAO,KAAK,YAAY,WAClB,KAAK,UACL,KAAK,UAAU,KAAK,SAAS,oBAAoB,GAAG,MAAM;AACpE,UAAM,UAAUA,YAAW,SAAYA,QAAO,QAAQ,OAAO,KAAK,IAAI;AAEtE,WAAO,CAAC,GAAG,SAAS,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,SAAS,IAAI,KAAK,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAAA,EAC5G;AACJ;AAEA,IAAM,eAAe,OAAO;AAAA,EACxB,OAAO,UAAU,EAAE,QAAQ,oBAAoB,CAAC;AAAA,EAChD,OAAO,MAAM;AAAA,EACb,OAAO,SAAS,EAAE,YAAY,CAAC,SAAS,aAAa,SAAS,EAAE,CAAC;AAAA,EACjE;AAAA,EACA,OAAO,SAAS;AAAA,IACZ,KAAK;AAAA,EACT,CAAC;AACL;AAEO,SAAS,WAAW,OAAqB;AAC5C,MAAI,CAAC,QAAQ;AACT,aAASC,cAAa,KAAK;AAAA,EAC/B;AACJ;AAEO,SAASA,cAAa,OAAuB;AAChD,QAAMC,UAAiB,qBAAa;AAAA,IAChC;AAAA,IACA,QAAQ;AAAA,IACR,YAAY,CAAC,IAAY,mBAAW,QAAQ,CAAC;AAAA,EACjD,CAAC;AACD,SAAOA;AACX;AAEO,SAAS,YAAoB;AAChC,aAAW,QAAQ,IAAI,UAAU,MAAM;AACvC,MAAI,CAAC,QAAQ;AACT,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC/C;AACA,SAAO;AACX;AAEA,IAAM,gBAEF,CAAC;AAEL,IAAI,QAAQ,IAAI,aAAa,QAAQ;AACjC,gBAAc,sBAAsB;AACxC;;;AClIA,SAAS,UAAAC,eAAc;AAEvB;AAAA,EAKI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAiCA,SAAS,eACZ,aACA,eACA,SACU;AACV,QAAM,SAAS,YAAY,KAAK,CAAC,eAAe;AAC5C,QAAI,2BAA2B,WAAW,SAAS;AACnD,QAAI,CAAC,4BAA4BA,QAAO,MAAM,UAAU,aAAa,GAAG;AACpE,iCACIA,QAAO,MAAM,WAAW,WAAW,OAAO,MAAMA,QAAO,MAAM,WAAW,aAAa;AAAA,IAC7F;AACA,UAAM,mBAAmB,QAAQ,SAAS,QAAQ,QAAQ,UAAU,eAAe,WAAW,OAAO;AACrG,UAAM,qBAAqB,QAAQ,YAAY,UAAa,QAAQ,YAAY,WAAW;AAC3F,UAAM,oBAAoB,QAAQ,WAAW,UAAa,QAAQ,WAAW,WAAW;AACxF,QAAI,sBAAsB;AAC1B,QAAI,QAAQ,cAAc,MAAM;AAC5B,YAAM,sBAAsB,WAAW,mBAAmB,IAAI,CAAC,MAAM;AACjE,YAAI,6BAA6B,WAAW,SAAS,CAAC,GAAG;AACrD,iBAAO,oBAAoB,WAAW,SAAS,CAAC;AAAA,QACpD;AACA,eAAO;AAAA,MACX,CAAC;AACD,4BAAsB,oBAAoB,SAAS,QAAQ,UAAU;AAAA,IACzE;AACA,WACI,4BACA,oBACA,sBACA,uBACA;AAAA,EAER,CAAC;AAED,MAAI,WAAW,QAAW;AACtB,UAAM,IAAI,MAAM,yBAAyB,aAAa,YAAY,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,EAC/F;AACA,SAAO;AACX;AAGA,IAAM,gBAA8B,CAAC;AAC9B,SAAS,wBACZ,YACA,UACC;AACD,QAAM,MAAM,GAAG,WAAW,OAAO,IAAI,WAAW,OAAO;AACvD,MAAI,EAAE,OAAO,gBAAgB;AACzB,QAAI,WAAW,QAAQ,UAAa,WAAW,aAAa,QAAW;AACnE,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC9D;AACA,UAAM,WAAW,IAAIA,QAAO,gBAAgB,WAAW,KAAK,WAAW,QAAQ;AAC/E,kBAAc,GAAG,IAAI,SAAS,OAAO,WAAW,OAAO;AAAA,EAC3D;AACA,MAAI,CAAC,UAAU;AACX,WAAO,cAAc,GAAG;AAAA,EAC5B;AACA,SAAO,cAAc,GAAG,EAAE,QAAQ,QAAQ;AAC9C;AAEO,SAAS,aACZ,UACA,aACA,eACA,SACC;AACD,QAAM,aAAa,eAAe,aAAa,eAAe,OAAO;AACrE,QAAM,SAAS,wBAA2B,YAAY,QAAQ;AAC9D,SAAO;AACX;;;AC/GA,SAAS,qBAAqB;AAMvB,SAAS,QAAQJ,OAAsB;AAC1C,QAAM,QAAQA,MAAK,MAAM,2BAA2B;AACpD,QAAM,CAAC,EAAE,QAAQ,IAAI,SAAS,CAAC;AAC/B,QAAMK,WAAU,OAAO,aAAa,cAAc,WAAWL;AAC7D,SAAOK;AACX;AAEA,SAASC,eAAc,kBAAkB,UAA8B;AACnE,QAAM,WAAW,MAAM;AACvB,QAAM,kBAAkB;AACxB,QAAM,SAAS,IAAI,MAAM,EAAE;AAC3B,QAAM,kBAAkB;AACxB,SAAO;AACX;AAEA,SAAS,YAAgC;AACrC,QAAM,SAASA,eAAc,EAAE,KAAK,IAAI,MAAM,IAAI;AAMlD,MAAI,MAAM,SAAS,IAAI,IAAI,IAAI,GAAG;AAC9B,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,IAAI,KAAK,MAAM,qBAAqB;AAC1C,QAAI,GAAG;AACH,aAAO,EAAE,CAAC;AAAA,IACd;AAAA,EACJ;AACA,SAAO;AACX;AAQO,SAAS,QAAQ,aAAqB,gBAAiC;AAC1E,MAAI,mBAAmB,QAAW;AAC9B,qBAAiB,UAAU;AAC3B,QAAI,mBAAmB,QAAW;AAC9B,uBAAiB;AAAA,IACrB;AAAA,EACJ;AAEA,QAAM,WAAW,cAAc,cAAc,EAAE,QAAQ,GAAG,WAAW,eAAe;AACpF,QAAM,cAAc,QAAQ,QAAQ;AAMpC,SAAO,YAAY,QAAQ,4DAA4D,EAAE;AAC7F;;;AC5DO,SAAS,OAAO,WAAoB,SAAqC;AAC5E,MAAI,CAAC,WAAW;AACZ,UAAM,IAAI,MAAM,qBAAqB,WAAW,oBAAoB,EAAE;AAAA,EAC1E;AACJ;AASO,SAAS,WAAiB,OAAU,IAA4B,SAA0C;AAC7G,MAAI,CAAC,GAAG,KAAK,GAAG;AACZ,UAAM,IAAI,MAAM,wBAAwB,WAAW,iBAAiB,EAAE;AAAA,EAC1E;AACJ;AAEO,SAAS,cAAiB,OAAW,SAAmD;AAC3F,MAAI,UAAU,UAAa,UAAU,MAAM;AACvC,UAAM,IAAI,MAAM,WAAW,4BAA4B;AAAA,EAC3D;AACJ;AAEO,SAAS,OAAa,OAAU,IAA4B,SAAqB;AACpF,MAAI,CAAC,GAAG,KAAK,GAAG;AACZ,UAAM,IAAI,MAAM,wBAAwB,WAAW,iBAAiB,EAAE;AAAA,EAC1E;AACA,SAAO;AACX;AAGO,SAAS,WAAc,OAAoC;AAAC;;;ACC5D,IAAM,WAAW,OAAU,UAAmC;AACjE,QAAM,YAAiB,CAAC;AAExB,aAAW,QAAQ,OAAO;AACtB,cAAU,KAAK,MAAM,KAAK,CAAC;AAAA,EAC/B;AAEA,SAAO;AACX;AAUO,IAAM,WAAW,OAAU,UAAmC,QAAQ,IAAI,MAAM,IAAI,OAAO,SAAS,KAAK,CAAC,CAAC;AAa3G,IAAM,QAAQ,OAAU,UAAiC;AAC5D,SAAO,MAAM,WAAW,GAAG,yCAAyC;AAEpE,MAAI;AAEJ,aAAW,QAAQ,OAAO;AACtB,QAAI;AACA,aAAO,MAAM,KAAK;AAAA,IACtB,SAAS,OAAO;AACZ,kBAAY;AAAA,IAChB;AAAA,EACJ;AAEA,QAAM;AACV;AASO,IAAM,eACT,IAAuC,cACvC,UAAU,UACN,MAAM,UAAU,IAAI,CAAC,YAAY,YAAY,QAAQ,GAAG,KAAK,CAAC,CAAC;;;ACtFhE,SAAS,QAAc,UAAe,YAAqE;AAC9G,QAAM,SAAc,CAAC;AACrB,MAAI;AACA,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,YAAM,KAAK,WAAW,SAAS,CAAC,GAAG,CAAC;AACpC,aAAO,KAAK,EAAE;AAAA,IAClB;AACA,WAAO,CAAC,QAAQ,MAAS;AAAA,EAC7B,SAAS,GAAG;AACR,WAAO,CAAC,QAAQ,CAAU;AAAA,EAC9B;AACJ;;;ACSO,SAAS,OAAyB,UAAa,OAAoC;AACtF,QAAM,aAAa,OAAO,OAAO,QAAQ;AAEzC,MAAI,WAAW,SAAS,KAAK,GAAG;AAC5B,WAAO;AAAA,EACX,OAAO;AACH,UAAM,IAAI,MAAM,uBAAuB,KAAK,EAAE;AAAA,EAClD;AACJ;;;ACqBO,SAAS,sBAAyB,KAAqB,OAA0B;AAEpF,SAAO,MAAM,MAAM,CAACN,UAAS;AACzB,UAAM,OAAOA,MAAK,MAAM,GAAG;AAC3B,QAAI,UAAe;AAEnB,eAAW,OAAO,MAAM;AACpB,UAAI,YAAY,UAAa,OAAO,SAAS;AACzC,kBAAU,QAAQ,GAAG;AAAA,MACzB,OAAO;AACH,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,CAAC;AAEL;;;ACvEA,YAAY,QAAQ;AACpB,YAAY,UAAU;AAQf,SAAS,OAAO,KAAa,cAAkC;AAClE,MAAI,aAAa;AACjB,SAAO,eAAe,KAAK;AACvB,UAAM,WAAc,eAAY,UAAU;AAC1C,UAAM,aAAa,SAAS,OAAO,CAAC,SAAS,aAAa,SAAS,IAAI,CAAC;AACxE,QAAI,WAAW,SAAS,GAAG;AACvB,aAAO,WAAW,IAAI,CAAC,SAAc,UAAK,YAAY,IAAI,CAAC;AAAA,IAC/D;AACA,iBAAkB,aAAQ,UAAU;AAAA,EACxC;AACA,SAAO,CAAC;AACZ;;;ACpBA,SAAS,iBAAAO,sBAAqB;AAevB,SAAS,SAAS,gBAA8B;AAGnD,QAAM,aAAa;AACnB,QAAMC,WAAUD,eAAc,cAAc;AAC5C,QAAM,aAAaC,SAAQ,QAAQ,UAAU;AAG7C,QAAM,SAASA,SAAQ,UAAU;AAGjC,SAAO,SAAS;AAAA,IACZ,eAAe;AAAA,IACf,WAAW;AAAA,EACf,CAAC;AACL;AAgBO,SAAS,WAAW,UAAkB,gBAA6B;AACtE,MAAI,SAAS,SAAS,KAAK,GAAG;AAC1B,aAAS,cAAc;AAAA,EAC3B;AAEA,QAAMA,WAAUD,eAAc,cAAc;AAC5C,QAAM,aAAaC,SAAQ,QAAQ,QAAQ;AAC3C,SAAOA,SAAQ,UAAU;AAC7B;;;AdpCA,SAAS,QAAQ,kBAAkB;AAI5B,IAAML,UAAS,UAAU;AAEhC,eAAsB,MAAM,SAAgC;AACxD,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,OAAO,CAAC;AAC/D;AAEO,SAAS,yBAAyB,KAAuC;AAC5E,QAAM,OAAO,WAAW,aAAa,EAAE,IAAI,CAAC;AAC5C,MAAI,SAAS;AAAW,WAAO;AAE/B,QAAM,MAAM,WAAW,qBAAqB,EAAE,IAAI,CAAC;AACnD,MAAI,QAAQ;AAAW,WAAO;AAG9B,QAAM,OAAO,WAAW,kBAAkB,EAAE,IAAI,CAAC;AACjD,MAAI,SAAS;AAAW,WAAO;AAE/B,QAAM,IAAI,MAAM,uCAAuC;AAC3D;AAEO,SAAS,kBAAkB,KAAsB;AACpD,QAAM,OAAO,WAAW,aAAa,EAAE,IAAI,CAAC;AAC5C,MAAI,SAAS;AAAW,WAAOH,MAAK,QAAQ,IAAI;AAEhD,QAAM,MAAM,WAAW,qBAAqB,EAAE,IAAI,CAAC;AACnD,MAAI,QAAQ;AAAW,WAAOA,MAAK,QAAQ,GAAG;AAE9C,QAAM,OAAO,WAAW,kBAAkB,EAAE,IAAI,CAAC;AACjD,MAAI,SAAS;AAAW,WAAOA,MAAK,QAAQ,IAAI;AAEhD,QAAM,IAAI,MAAM,8DAA8D;AAClF;AAEA,eAAsB,uBAClB,MACA,MACA,SACAA,OACgB;AAChB,SAAO,IAAI,QAAQ,CAAC,SAAS,YAAY;AACrC,UAAM,UAA0B;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAAA;AAAA,MACA,QAAQ;AAAA,IACZ;AAEA,UAAM,UAAU,KAAK,QAAQ,SAAS,CAAC,cAAc;AACjD,cAAQ,IAAI;AAAA,IAChB,CAAC;AAED,YAAQ,GAAG,SAAS,CAAC,SAAS;AAC1B,cAAQ,KAAK;AAAA,IACjB,CAAC;AAED,YAAQ,IAAI;AAAA,EAChB,CAAC;AACL;AAEO,SAAS,eAAe,KAI7B;AAEE,QAAM,IAAI,IAAI,MAAM,oDAAoD;AACxE,MAAI,GAAG,QAAQ,SAAS,QAAW;AAC/B,UAAM,IAAI,MAAM,eAAe,GAAG,EAAE;AAAA,EACxC;AAEA,SAAO;AAAA,IACH,QAAQ,EAAE,OAAO;AAAA,IACjB,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,EACnB;AACJ","sourcesContent":["import http, { RequestOptions } from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\nexport * from './promise'\nexport * from './types'\nexport * from './assert'\nexport * from './array'\nexport * from './enum'\nexport * from './pad'\nexport * from './format'\nexport * from './generic'\nexport * from './findup'\nexport * from './loader'\n\nimport { sync as findUpSync } from 'find-up'\n\nimport { getLogger } from './logger'\n\nexport const logger = getLogger()\n\nexport async function sleep(timeout: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string): 'yarn' | 'npm' | 'pnpm' {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string): string {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport async function isHttpServiceReachable(\n host: string,\n port: number,\n timeout: number,\n path?: string\n): Promise<boolean> {\n return new Promise((resolve, _reject) => {\n const options: RequestOptions = {\n host,\n port,\n timeout,\n path,\n method: 'HEAD',\n }\n\n const request = http.request(options, (_response) => {\n resolve(true)\n })\n\n request.on('error', (_err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (m?.groups?.host === undefined) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n","import { Keypair } from '@solana/web3.js'\nimport { MnemonicKey } from '@initia/initia.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nimport { hexlify, trim0x } from './format'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, trim0x(hexlify(bip39.mnemonicToSeedSync(normalizeMnemonics))))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getInitiaAccountFromMnemonic(mnemonic: string, path = \"m/44'/118'/0'/0/0\"): AccountMnemonic {\n const [_, coinType, account, __, index] = path.match(/\\d+/g)?.map(Number) ?? [44, 118, 0, 0, 0]\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n const key = new MnemonicKey({\n mnemonic: normalizeMnemonics,\n coinType,\n account,\n index,\n })\n {\n return {\n mnemonic,\n path,\n privateKey: key.privateKey.toString('hex'),\n address: key.accAddress,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.INITIA:\n return getInitiaAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import { Bytes, Hex } from './types'\n\ninterface PadOptions {\n dir?: 'left' | 'right' | undefined\n size?: number | null | undefined\n}\nexport type PadReturnType<value extends Bytes | Hex> = value extends Hex ? Hex : Bytes\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n name: 'SizeExceedsPaddingSizeError'\n}\n\nexport class SizeExceedsPaddingSizeError extends Error {\n override name = 'SizeExceedsPaddingSizeError'\n constructor({ size, targetSize, type }: { size: number; targetSize: number; type: 'hex' | 'bytes' }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize})`\n )\n }\n}\n\n/**\n * Pads a hexadecimal string or byte array to a specified size.\n *\n * @param hexOrBytes - The hexadecimal string or byte array to pad.\n * @param options - The padding options.\n * @param options.dir - The direction of the padding. Defaults to undefined.\n * @param options.size - The size to pad to. Defaults to 32.\n * @returns The padded hexadecimal string or byte array.\n */\nexport function padify<value extends Bytes | Hex>(\n hexOrBytes: value,\n { dir, size = 32 }: PadOptions = {}\n): PadReturnType<value> {\n if (typeof hexOrBytes === 'string') {\n return padHex(hexOrBytes, { dir, size }) as PadReturnType<value>\n }\n return padBytes(hexOrBytes, { dir, size }) as PadReturnType<value>\n}\n\nfunction padHex(hex: Hex, { dir, size = 32 }: PadOptions = {}): Hex {\n if (size === null) return hex\n const value = hex.replace('0x', '')\n if (value.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(value.length / 2),\n targetSize: size,\n type: 'hex',\n })\n\n return `0x${value[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}`\n}\n\nfunction padBytes(bytes: Bytes, { dir, size = 32 }: PadOptions = {}): Bytes {\n if (size === null) return bytes\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] = bytes[padEnd ? i : bytes.length - i - 1]\n }\n return paddedBytes\n}\n","/**\n * Type representing a hexadecimal string prefixed with '0x'.\n */\nexport type Hex = `0x${string}`\n\n/**\n * Type representing a hash string prefixed with '0x'.\n */\nexport type Hash = `0x${string}`\n\n/**\n * Checks if a given string is a valid hexadecimal string.\n * @param value - The string to check.\n * @returns True if the string is a valid hexadecimal string, false otherwise.\n */\nexport function isHex(value: string): value is Hex {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Checks if a given string is a valid hash string.\n * @param value - The string to check.\n * @returns True if the string is a valid hash string, false otherwise.\n */\nexport function isHash(value: string): value is Hash {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Represents a byte array.\n */\nexport type Bytes = Uint8Array\n","import { padify } from './pad'\nimport { Hex, isHex } from './types'\n\n/**\n * A function to convert Uint8Array to hex string\n * @deprecated use `hexlify` instead\n * @param bytes Uint8Array\n * @returns hex string without 0x prefix, e.g., '0102030405'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return trim0x(hexlify(bytes)).replace(/^0x/i, '')\n}\n\n/**\n * A function to convert hex string to Uint8Array\n * @deprecated use `arrayify` instead\n * @param hex hex string, e.g., '0x0102030405' or '0102030405'\n * @returns Uint8Array\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return arrayify(hex)\n}\n\n/**\n * A function to trim the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string without 0x prefix\n */\nexport function trim0x(hex: string): string {\n return hex.replace(/^0x/i, '')\n}\n\n/**\n * A function to ensure the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string with 0x prefix\n */\nexport function ensure0x(hex: string): Hex {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const value = trim0x(hex)\n const retval = `0x${value}`\n return retval as Hex\n}\n\n/**\n * A function to check if a string is a hex string\n * @deprecated use `isHex` instead\n * @param value\n * @returns\n */\nexport function isHexString(value: string): boolean {\n return isHex(value)\n}\n\nfunction _arrayify(value: string | number | Uint8Array | Buffer | bigint): Uint8Array {\n if (value instanceof Uint8Array) {\n return value\n }\n\n if (typeof value === 'string') {\n if (value.match(/^(0x)?[0-9A-F]*$/i)) {\n const hex = value.replace(/^0x/i, '')\n const len = hex.length + 1 - ((hex.length + 1) % 2)\n return Uint8Array.from(Buffer.from(hex.padStart(len, '0'), 'hex'))\n }\n throw new Error('Invalid hex string')\n }\n\n if (typeof value === 'number') {\n if (value < 0) {\n throw new Error('Number must be non-negative')\n }\n const byteArray = []\n while (value > 0) {\n byteArray.push(value & 0xff)\n value >>= 8\n }\n return new Uint8Array(byteArray.reverse())\n }\n\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n return new Uint8Array(value)\n }\n\n if (typeof value === 'bigint') {\n const hex = value.toString(16)\n return _arrayify(hex)\n }\n\n throw new Error('unsupported type')\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to Uint8Array\n * @param value - the value to convert\n * @param size - the size of the Uint8Array to return, if not specified, the size of the input will be returned\n */\nexport function arrayify(value: string | number | Uint8Array | Buffer | bigint, size?: number): Uint8Array {\n const bytes = _arrayify(value)\n if (size === undefined) {\n return bytes\n }\n return padify(bytes, { size })\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to hex string\n */\nexport function hexlify(value: string | number | Uint8Array | Buffer | bigint): Hex {\n if (typeof value === 'string' && /^(0x)?[0-9A-F]*$/i.test(value)) {\n const retval = '0x' + trim0x(value)\n return retval as Hex\n }\n\n const bytes = arrayify(value)\n const hex = Buffer.from(bytes).toString('hex')\n return ensure0x(hex)\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger | undefined = undefined\n\nexport { Logger }\n\nfunction getStackTrace(): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer(): (key: string, value: unknown) => unknown {\n const ancestors: unknown[] = []\n return function (this: unknown, _key: string, value: unknown) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf(\n (info: {\n level: string\n message: string\n timestamp?: string\n metadata?: {\n pretty?: boolean\n format?: string\n }\n }) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() ?? ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const { pretty, format } = info.metadata ?? {}\n const spaces = pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string'\n ? info.message\n : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const message = format !== undefined ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n }\n)\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string): void {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n if (!logger) {\n throw new Error('Logger is not initialized')\n }\n return logger\n}\n\nconst exportsObject: {\n getCircularReplacer?: (key: unknown, value: unknown) => unknown\n} = {}\n\nif (process.env.NODE_ENV === 'test') {\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n isNetworkEndpointIdSupported,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @todo Use Partial<EndpointSpec> instead of options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment {\n const retval = deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = options.chain == null || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = options.network === undefined || options.network === deployment.network\n const hasMatchingSource = options.source === undefined || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId != null) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) => {\n if (isNetworkEndpointIdSupported(deployment.network, v)) {\n return networkToEndpointId(deployment.network, v)\n }\n return undefined\n })\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n\n if (retval === undefined) {\n throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`)\n }\n return retval\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!(key in contractCache)) {\n if (deployment.abi === undefined || deployment.bytecode === undefined) {\n throw new Error('Deployment does not have ABI or bytecode')\n }\n const Contract = new ethers.ContractFactory(deployment.abi, deployment.bytecode)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n\nexport function findContract<T extends ethers.Contract>(\n provider: ethers.providers.Provider | undefined,\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): T {\n const deployment = findDeployment(deployments, nameOrAddress, options)\n const retval = deploymentToEvmContract<T>(deployment, provider)\n return retval\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string): string {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match ?? []\n const dirname = typeof basePath !== 'undefined' ? basePath : path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n return undefined\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string): string {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n","export function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(`Assertion Error: ${message ?? 'condition is false'}`)\n }\n}\n\n/**\n * assertType\n * assertType can be used to assert that a value is of a certain type, and without naming a new variable explicitly.\n * @param value\n * @param fn\n * @param message\n */\nexport function assertType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): asserts value is T & M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n}\n\nexport function assertDefined<T>(value?: T, message?: string): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(message ?? 'Value is undefined or null')\n }\n}\n\nexport function asType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n return value\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function assumeType<T>(value: unknown): asserts value is T {}\n","// This file copy from repo:devtools and is located in packages/devtools/src/common/promise.ts\n\nimport { assert } from './assert'\n\n/**\n * Generic type for a hybrid (sync / async) factory\n * that generates an instance of `TOutput` based on arguments of type `TInput`\n *\n * `TInput` represents the list of all function arguments that need to be passed to the factory:\n *\n * ```typescript\n * const mySyncFactory: Factory<[number, boolean], string> = (num: number, bool: boolean): string => \"hello\"\n *\n * const mySyncFactory: Factory<[], string> = async () => \"hello\"\n * ```\n *\n * The hybrid aspect just makes it easier for implementers - if the logic is synchronous,\n * this type will not force any extra `async`.\n */\nexport type Factory<TInput extends unknown[], TOutput> = (...input: TInput) => TOutput | Promise<TOutput>\n\n/**\n * Helper type for argumentless factories a.k.a. tasks\n */\ntype Task<T> = Factory<[], T>\n\n/**\n * Executes tasks in sequence, waiting for each one to finish before starting the next one\n *\n * Will resolve with the output of all tasks or reject with the first rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const sequence = async <T>(tasks: Task<T>[]): Promise<T[]> => {\n const collector: T[] = []\n\n for (const task of tasks) {\n collector.push(await task())\n }\n\n return collector\n}\n\n/**\n * Executes tasks in parallel\n *\n * Will resolve with the output of all tasks or reject with the any rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const parallel = async <T>(tasks: Task<T>[]): Promise<T[]> => Promise.all(tasks.map(async (task) => task()))\n\n/**\n * Executes tasks in a sequence until one resolves.\n *\n * Will resolve with the output of the first task that resolves\n * or reject with the last rejection.\n *\n * Will reject immediatelly if no tasks have been passed\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T>}\n */\nexport const first = async <T>(tasks: Task<T>[]): Promise<T> => {\n assert(tasks.length !== 0, `Must have at least one task for first()`)\n\n let lastError: unknown\n\n for (const task of tasks) {\n try {\n return await task()\n } catch (error) {\n lastError = error\n }\n }\n\n throw lastError\n}\n\n/**\n * Helper utility for currying first() - creating a function\n * that behaves like first() but accepts arguments that will be passed to the factory functions\n *\n * @param {Factory<TInput, TOutput>[]} factories\n * @returns {Factory<TInput, TOutput>}\n */\nexport const firstFactory =\n <TInput extends unknown[], TOutput>(...factories: Factory<TInput, TOutput>[]): Factory<TInput, TOutput> =>\n async (...input) =>\n first(factories.map((factory) => async () => factory(...input)))\n\n/**\n * Represents a type that excludes promises.\n * If the input type is a promise, the resulting type is `never`.\n * Otherwise, it is the same as the input type.\n */\nexport type NonPromise<T> = T extends Promise<unknown> ? never : T\n","/**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @returns\n */\nexport function safeMap<T, R>(elements: T[], callbackfn: (item: T, index: number) => R): [R[], Error | undefined] {\n const result: R[] = []\n try {\n for (let i = 0; i < elements.length; i++) {\n const rv = callbackfn(elements[i], i)\n result.push(rv)\n }\n return [result, undefined]\n } catch (e) {\n return [result, e as Error]\n }\n}\n","/**\n * Converts a string or number value to a corresponding enum value.\n * @param enumType - The enum object.\n * @param value - The value to convert.\n * @returns The converted enum value.\n * @throws Error if the value is not a valid enum value.\n * @example\n * // Usage\n * enum Color {\n * Red = 'red',\n * Green = 'green',\n * Blue = 'blue'\n * }\n *\n * const color: Color = asEnum(Color, 'red');\n * expect(color).toBe(Color.Red);\n *\n * enum Direction {\n * Up = 1,\n * Down,\n * }\n *\n * const direction: Direction = asEnum(Direction, 1);\n * expect(direction).toBe(Direction.Up);\n */\nexport function asEnum<T extends object>(enumType: T, value: string | number): T[keyof T] {\n const enumValues = Object.values(enumType)\n\n if (enumValues.includes(value)) {\n return value as T[keyof T]\n } else {\n throw new Error(`Invalid enum value: ${value}`)\n }\n}\n","/**\n * Represents a type that allows partial modification of all properties in a given object type.\n * This type is similar to the built-in `Partial` type in TypeScript.\n * However, it supports deep partial modification, allowing partial modification of nested object properties.\n *\n * @typeparam T - The object type to be partially modified.\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\n/**\n * Represents a type that makes all properties of the given type required deeply.\n *\n * This utility type recursively makes all properties of the given type required, including nested properties.\n * If a property is already required, it remains unchanged.\n *\n * @typeParam T - The type to make all properties required.\n * @returns A new type with all properties required.\n *\n * @example\n * ```typescript\n * type Person = {\n * name?: string;\n * age?: number;\n * address?: {\n * street?: string;\n * city?: string;\n * };\n * };\n *\n * type RequiredPerson = DeepRequired<Person>;\n * // Result: {\n * // name: string;\n * // age: number;\n * // address: {\n * // street: string;\n * // city: string;\n * // };\n * // }\n * ```\n */\nexport type DeepRequired<T> = {\n [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P]\n}\n\n/**\n * Checks if an object has all the required properties specified by the given paths.\n *\n * @template T - The type of the object.\n * @param {DeepPartial<T>} obj - The object to check.\n * @param {string[]} paths - The paths of the required properties.\n * @returns {boolean} - Returns true if the object has all the required properties, otherwise returns false.\n */\nexport function hasRequiredProperties<T>(obj: DeepPartial<T>, paths: string[]): boolean {\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n return paths.every((path) => {\n const keys = path.split('.')\n let current: any = obj\n\n for (const key of keys) {\n if (current !== undefined && key in current) {\n current = current[key]\n } else {\n return false\n }\n }\n\n return true\n })\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n}\n\n/**\n * Retrieves the nested keys of an object type.\n *\n * @typeParam T - The object type.\n * @returns The union of all nested keys in the object type.\n *\n * @example\n * // Given the following object type:\n * type Person = {\n * name: string;\n * age: number;\n * address: {\n * street: string;\n * city: string;\n * };\n * };\n *\n * // The `NestedKeys` type will return the following union type:\n * // \"name\" | \"age\" | \"address\" | \"address.street\" | \"address.city\"\n * type AllKeys = NestedKeys<Person>;\n */\nexport type NestedKeys<T> = {\n [K in keyof T]: T[K] extends object ? K | `${K & string}.${NestedKeys<T[K]> & string}` : K\n}[keyof T]\n\n/**\n * Creates a new type that includes only the properties from the input type `T` that are required and not nullable.\n *\n * @typeParam T - The input type.\n * @returns A new type that includes only the required and non-nullable properties from `T`.\n *\n * @example\n * // Define a type with optional and nullable properties\n * type Person = {\n * name?: string;\n * age?: number | null;\n * email: string;\n * };\n *\n * // Create a new type with only the required and non-nullable properties from `Person`\n * type RequiredPerson = RequiredOnly<Person>;\n *\n * // `RequiredPerson` will be:\n * // {\n * // email: string;\n * // }\n */\nexport type RequiredOnly<T> = {\n [K in keyof T as Required<T>[K] extends NonNullable<Required<T>[K]> ? K : never]: T[K]\n}\n\n/**\n * `AtLeast` ensures that at least the specified keys `K` of the type `T` are required,\n * while the rest of the properties are optional.\n *\n * @template T - The original type.\n * @template K - The keys of `T` that should be required.\n *\n * @example\n * interface User {\n * id: string;\n * name: string;\n * email?: string;\n * age?: number;\n * }\n *\n * // At least 'id' and 'name' are required, the rest are optional\n * const user: AtLeast<User, 'email'> = {\n * id: '123',\n * name: 'Alice',\n * email: 'alice@example.com'\n * // age are optional\n * };\n */\nexport type AtLeast<T, K extends keyof T> = Partial<T> & RequiredOnly<T> & Required<Pick<T, K>>\n\n/**\n * RequireAtLeastOne helps create a type where at least one of the properties of an interface (can be any property) is required to exist.\n * https://learn.microsoft.com/en-us/javascript/api/@azure/keyvault-certificates/requireatleastone?view=azure-node-latest\n */\nexport type RequireAtLeastOne<T> = {\n [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>\n}[keyof T]\n","import * as fs from 'fs'\nimport * as path from 'path'\n\n/**\n * Finds files in the current directory and its parent directories.\n * @param cwd The current working directory.\n * @param expectations The expected file names.\n * @returns An array of file paths that match the expectations.\n */\nexport function findUp(cwd: string, expectations: string[]): string[] {\n let currentDir = cwd\n while (currentDir !== '/') {\n const dirFiles = fs.readdirSync(currentDir)\n const foundFiles = dirFiles.filter((file) => expectations.includes(file))\n if (foundFiles.length > 0) {\n return foundFiles.map((file) => path.join(currentDir, file))\n }\n currentDir = path.dirname(currentDir)\n }\n return []\n}\n","import { createRequire } from 'module'\n\n/**\n * Enables TypeScript support for the specified file or module.\n *\n * @param relativeToPath - The path relative to which the TypeScript module should be resolved.\n * @returns void\n *\n * @remarks\n * This function enables TypeScript support by registering the 'ts-node' module and configuring it with the provided options.\n * The 'ts-node' module allows for on-the-fly TypeScript transpilation without the need for a separate build step.\n *\n * @example\n * enableTS(process.cwd());\n */\nexport function enableTS(relativeToPath: string): void {\n // WARNING: require('ts-node') will cause '[ERROR] Unterminated template (867:31) [plugin commonjs]' in some cases\n // this error can be eliminated by assigning the name to a variable and require that variable\n const moduleName = 'ts-node'\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(moduleName)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const tsnode = require(modulePath)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n tsnode.register({\n transpileOnly: true,\n typeCheck: false,\n })\n}\n\n/**\n * Loads a JavaScript or TypeScript module.\n *\n * @param fileName - The name of the file to load.\n * @param relativeToPath - The path relative to which the file should be resolved.\n * @returns The loaded module.\n *\n * @example\n * // Load a JavaScript module\n * const myModule = loadJSorTS('myModule.js', '/path/to/file.js');\n *\n * // Load a TypeScript module\n * const myModule = loadJSorTS('myModule.ts', '/path/to/file.js');\n */\nexport function loadJSorTS(fileName: string, relativeToPath: string): any {\n if (fileName.endsWith('.ts')) {\n enableTS(relativeToPath)\n }\n\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(fileName)\n return require(modulePath)\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/pad.ts","../src/types.ts","../src/format.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts","../src/assert.ts","../src/promise.ts","../src/array.ts","../src/enum.ts","../src/generic.ts","../src/findup.ts","../src/loader.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace","createRequire","require"],"mappings":"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","sourcesContent":["import http, { RequestOptions } from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\nexport * from './promise'\nexport * from './types'\nexport * from './assert'\nexport * from './array'\nexport * from './enum'\nexport * from './pad'\nexport * from './format'\nexport * from './generic'\nexport * from './findup'\nexport * from './loader'\n\nimport { sync as findUpSync } from 'find-up'\n\nimport { getLogger } from './logger'\n\nexport const logger = getLogger()\n\nexport async function sleep(timeout: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string): 'yarn' | 'npm' | 'pnpm' {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string): string {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport async function isHttpServiceReachable(\n host: string,\n port: number,\n timeout: number,\n path?: string\n): Promise<boolean> {\n return new Promise((resolve, _reject) => {\n const options: RequestOptions = {\n host,\n port,\n timeout,\n path,\n method: 'HEAD',\n }\n\n const request = http.request(options, (_response) => {\n resolve(true)\n })\n\n request.on('error', (_err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (m?.groups?.host === undefined) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n","import { Keypair } from '@solana/web3.js'\nimport { MnemonicKey } from '@initia/initia.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nimport { hexlify, trim0x } from './format'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, trim0x(hexlify(bip39.mnemonicToSeedSync(normalizeMnemonics))))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getInitiaAccountFromMnemonic(mnemonic: string, path = \"m/44'/118'/0'/0/0\"): AccountMnemonic {\n const [_, coinType, account, __, index] = path.match(/\\d+/g)?.map(Number) ?? [44, 118, 0, 0, 0]\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n const key = new MnemonicKey({\n mnemonic: normalizeMnemonics,\n coinType,\n account,\n index,\n })\n {\n return {\n mnemonic,\n path,\n privateKey: key.privateKey.toString('hex'),\n address: key.accAddress,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.INITIA:\n return getInitiaAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import { Bytes, Hex } from './types'\n\ninterface PadOptions {\n dir?: 'left' | 'right' | undefined\n size?: number | null | undefined\n}\nexport type PadReturnType<value extends Bytes | Hex> = value extends Hex ? Hex : Bytes\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n name: 'SizeExceedsPaddingSizeError'\n}\n\nexport class SizeExceedsPaddingSizeError extends Error {\n override name = 'SizeExceedsPaddingSizeError'\n constructor({ size, targetSize, type }: { size: number; targetSize: number; type: 'hex' | 'bytes' }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize})`\n )\n }\n}\n\n/**\n * Pads a hexadecimal string or byte array to a specified size.\n *\n * @param hexOrBytes - The hexadecimal string or byte array to pad.\n * @param options - The padding options.\n * @param options.dir - The direction of the padding. Defaults to undefined.\n * @param options.size - The size to pad to. Defaults to 32.\n * @returns The padded hexadecimal string or byte array.\n */\nexport function padify<value extends Bytes | Hex>(\n hexOrBytes: value,\n { dir, size = 32 }: PadOptions = {}\n): PadReturnType<value> {\n if (typeof hexOrBytes === 'string') {\n return padHex(hexOrBytes, { dir, size }) as PadReturnType<value>\n }\n return padBytes(hexOrBytes, { dir, size }) as PadReturnType<value>\n}\n\nfunction padHex(hex: Hex, { dir, size = 32 }: PadOptions = {}): Hex {\n if (size === null) return hex\n const value = hex.replace('0x', '')\n if (value.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(value.length / 2),\n targetSize: size,\n type: 'hex',\n })\n\n return `0x${value[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}`\n}\n\nfunction padBytes(bytes: Bytes, { dir, size = 32 }: PadOptions = {}): Bytes {\n if (size === null) return bytes\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] = bytes[padEnd ? i : bytes.length - i - 1]\n }\n return paddedBytes\n}\n","/**\n * Type representing a hexadecimal string prefixed with '0x'.\n */\nexport type Hex = `0x${string}`\n\n/**\n * Type representing a hash string prefixed with '0x'.\n */\nexport type Hash = `0x${string}`\n\n/**\n * Checks if a given string is a valid hexadecimal string.\n * @param value - The string to check.\n * @returns True if the string is a valid hexadecimal string, false otherwise.\n */\nexport function isHex(value: string): value is Hex {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Checks if a given string is a valid hash string.\n * @param value - The string to check.\n * @returns True if the string is a valid hash string, false otherwise.\n */\nexport function isHash(value: string): value is Hash {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Represents a byte array.\n */\nexport type Bytes = Uint8Array\n","import { padify } from './pad'\nimport { Hex, isHex } from './types'\n\n/**\n * A function to convert Uint8Array to hex string\n * @deprecated use `hexlify` instead\n * @param bytes Uint8Array\n * @returns hex string without 0x prefix, e.g., '0102030405'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return trim0x(hexlify(bytes)).replace(/^0x/i, '')\n}\n\n/**\n * A function to convert hex string to Uint8Array\n * @deprecated use `arrayify` instead\n * @param hex hex string, e.g., '0x0102030405' or '0102030405'\n * @returns Uint8Array\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return arrayify(hex)\n}\n\n/**\n * A function to trim the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string without 0x prefix\n */\nexport function trim0x(hex: string): string {\n return hex.replace(/^0x/i, '')\n}\n\n/**\n * A function to ensure the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string with 0x prefix\n */\nexport function ensure0x(hex: string): Hex {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const value = trim0x(hex)\n const retval = `0x${value}`\n return retval as Hex\n}\n\n/**\n * A function to check if a string is a hex string\n * @deprecated use `isHex` instead\n * @param value\n * @returns\n */\nexport function isHexString(value: string): boolean {\n return isHex(value)\n}\n\nfunction _arrayify(value: string | number | Uint8Array | Buffer | bigint): Uint8Array {\n if (value instanceof Uint8Array) {\n return value\n }\n\n if (typeof value === 'string') {\n if (value.match(/^(0x)?[0-9A-F]*$/i)) {\n const hex = value.replace(/^0x/i, '')\n const len = hex.length + 1 - ((hex.length + 1) % 2)\n return Uint8Array.from(Buffer.from(hex.padStart(len, '0'), 'hex'))\n }\n throw new Error('Invalid hex string')\n }\n\n if (typeof value === 'number') {\n if (value < 0) {\n throw new Error('Number must be non-negative')\n }\n const byteArray = []\n while (value > 0) {\n byteArray.push(value & 0xff)\n value >>= 8\n }\n return new Uint8Array(byteArray.reverse())\n }\n\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n return new Uint8Array(value)\n }\n\n if (typeof value === 'bigint') {\n const hex = value.toString(16)\n return _arrayify(hex)\n }\n\n throw new Error('unsupported type')\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to Uint8Array\n * @param value - the value to convert\n * @param size - the size of the Uint8Array to return, if not specified, the size of the input will be returned\n */\nexport function arrayify(value: string | number | Uint8Array | Buffer | bigint, size?: number): Uint8Array {\n const bytes = _arrayify(value)\n if (size === undefined) {\n return bytes\n }\n return padify(bytes, { size })\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to hex string\n */\nexport function hexlify(value: string | number | Uint8Array | Buffer | bigint): Hex {\n if (typeof value === 'string' && /^(0x)?[0-9A-F]*$/i.test(value)) {\n const retval = '0x' + trim0x(value)\n return retval as Hex\n }\n\n const bytes = arrayify(value)\n const hex = Buffer.from(bytes).toString('hex')\n return ensure0x(hex)\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger | undefined = undefined\n\nexport { Logger }\n\nfunction getStackTrace(): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer(): (key: string, value: unknown) => unknown {\n const ancestors: unknown[] = []\n return function (this: unknown, _key: string, value: unknown) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf(\n (info: {\n level: string\n message: string\n timestamp?: string\n metadata?: {\n pretty?: boolean\n format?: string\n }\n }) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() ?? ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const { pretty, format } = info.metadata ?? {}\n const spaces = pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string'\n ? info.message\n : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const message = format !== undefined ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n }\n)\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string): void {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n if (!logger) {\n throw new Error('Logger is not initialized')\n }\n return logger\n}\n\nconst exportsObject: {\n getCircularReplacer?: (key: unknown, value: unknown) => unknown\n} = {}\n\nif (process.env.NODE_ENV === 'test') {\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n isNetworkEndpointIdSupported,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @todo Use Partial<EndpointSpec> instead of options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment {\n const retval = tryFindDeployment(deployments, nameOrAddress, options)\n if (retval === undefined) {\n throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`)\n }\n return retval\n}\n\nexport function tryFindDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment | undefined {\n return deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = options.chain == null || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = options.network === undefined || options.network === deployment.network\n const hasMatchingSource = options.source === undefined || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId != null) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) => {\n if (isNetworkEndpointIdSupported(deployment.network, v)) {\n return networkToEndpointId(deployment.network, v)\n }\n return undefined\n })\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!(key in contractCache)) {\n if (deployment.abi === undefined || deployment.bytecode === undefined) {\n throw new Error('Deployment does not have ABI or bytecode')\n }\n const Contract = new ethers.ContractFactory(deployment.abi, deployment.bytecode)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n\nexport function findContract<T extends ethers.Contract>(\n provider: ethers.providers.Provider | undefined,\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): T {\n const deployment = findDeployment(deployments, nameOrAddress, options)\n const retval = deploymentToEvmContract<T>(deployment, provider)\n return retval\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string): string {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match ?? []\n const dirname = typeof basePath !== 'undefined' ? basePath : path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n return undefined\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string): string {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n","export function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(`Assertion Error: ${message ?? 'condition is false'}`)\n }\n}\n\n/**\n * assertType\n * assertType can be used to assert that a value is of a certain type, and without naming a new variable explicitly.\n * @param value\n * @param fn\n * @param message\n */\nexport function assertType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): asserts value is T & M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n}\n\nexport function assertDefined<T>(value?: T, message?: string): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(message ?? 'Value is undefined or null')\n }\n}\n\nexport function asType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n return value\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function assumeType<T>(value: unknown): asserts value is T {}\n","// This file copy from repo:devtools and is located in packages/devtools/src/common/promise.ts\n\nimport { assert } from './assert'\n\n/**\n * Generic type for a hybrid (sync / async) factory\n * that generates an instance of `TOutput` based on arguments of type `TInput`\n *\n * `TInput` represents the list of all function arguments that need to be passed to the factory:\n *\n * ```typescript\n * const mySyncFactory: Factory<[number, boolean], string> = (num: number, bool: boolean): string => \"hello\"\n *\n * const mySyncFactory: Factory<[], string> = async () => \"hello\"\n * ```\n *\n * The hybrid aspect just makes it easier for implementers - if the logic is synchronous,\n * this type will not force any extra `async`.\n */\nexport type Factory<TInput extends unknown[], TOutput> = (...input: TInput) => TOutput | Promise<TOutput>\n\n/**\n * Helper type for argumentless factories a.k.a. tasks\n */\ntype Task<T> = Factory<[], T>\n\n/**\n * Executes tasks in sequence, waiting for each one to finish before starting the next one\n *\n * Will resolve with the output of all tasks or reject with the first rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const sequence = async <T>(tasks: Task<T>[]): Promise<T[]> => {\n const collector: T[] = []\n\n for (const task of tasks) {\n collector.push(await task())\n }\n\n return collector\n}\n\n/**\n * Executes tasks in parallel\n *\n * Will resolve with the output of all tasks or reject with the any rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const parallel = async <T>(tasks: Task<T>[]): Promise<T[]> => Promise.all(tasks.map(async (task) => task()))\n\n/**\n * Executes tasks in a sequence until one resolves.\n *\n * Will resolve with the output of the first task that resolves\n * or reject with the last rejection.\n *\n * Will reject immediatelly if no tasks have been passed\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T>}\n */\nexport const first = async <T>(tasks: Task<T>[]): Promise<T> => {\n assert(tasks.length !== 0, `Must have at least one task for first()`)\n\n let lastError: unknown\n\n for (const task of tasks) {\n try {\n return await task()\n } catch (error) {\n lastError = error\n }\n }\n\n throw lastError\n}\n\n/**\n * Helper utility for currying first() - creating a function\n * that behaves like first() but accepts arguments that will be passed to the factory functions\n *\n * @param {Factory<TInput, TOutput>[]} factories\n * @returns {Factory<TInput, TOutput>}\n */\nexport const firstFactory =\n <TInput extends unknown[], TOutput>(...factories: Factory<TInput, TOutput>[]): Factory<TInput, TOutput> =>\n async (...input) =>\n first(factories.map((factory) => async () => factory(...input)))\n\n/**\n * Represents a type that excludes promises.\n * If the input type is a promise, the resulting type is `never`.\n * Otherwise, it is the same as the input type.\n */\nexport type NonPromise<T> = T extends Promise<unknown> ? never : T\n","/**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @returns\n */\nexport function safeMap<T, R>(elements: T[], callbackfn: (item: T, index: number) => R): [R[], Error | undefined] {\n const result: R[] = []\n try {\n for (let i = 0; i < elements.length; i++) {\n const rv = callbackfn(elements[i], i)\n result.push(rv)\n }\n return [result, undefined]\n } catch (e) {\n return [result, e as Error]\n }\n}\n","/**\n * Converts a string or number value to a corresponding enum value.\n * @param enumType - The enum object.\n * @param value - The value to convert.\n * @returns The converted enum value.\n * @throws Error if the value is not a valid enum value.\n * @example\n * // Usage\n * enum Color {\n * Red = 'red',\n * Green = 'green',\n * Blue = 'blue'\n * }\n *\n * const color: Color = asEnum(Color, 'red');\n * expect(color).toBe(Color.Red);\n *\n * enum Direction {\n * Up = 1,\n * Down,\n * }\n *\n * const direction: Direction = asEnum(Direction, 1);\n * expect(direction).toBe(Direction.Up);\n */\nexport function asEnum<T extends object>(enumType: T, value: string | number): T[keyof T] {\n const enumValues = Object.values(enumType)\n\n if (enumValues.includes(value)) {\n return value as T[keyof T]\n } else {\n throw new Error(`Invalid enum value: ${value}`)\n }\n}\n","/**\n * Represents a type that allows partial modification of all properties in a given object type.\n * This type is similar to the built-in `Partial` type in TypeScript.\n * However, it supports deep partial modification, allowing partial modification of nested object properties.\n *\n * @typeparam T - The object type to be partially modified.\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\n/**\n * Represents a type that makes all properties of the given type required deeply.\n *\n * This utility type recursively makes all properties of the given type required, including nested properties.\n * If a property is already required, it remains unchanged.\n *\n * @typeParam T - The type to make all properties required.\n * @returns A new type with all properties required.\n *\n * @example\n * ```typescript\n * type Person = {\n * name?: string;\n * age?: number;\n * address?: {\n * street?: string;\n * city?: string;\n * };\n * };\n *\n * type RequiredPerson = DeepRequired<Person>;\n * // Result: {\n * // name: string;\n * // age: number;\n * // address: {\n * // street: string;\n * // city: string;\n * // };\n * // }\n * ```\n */\nexport type DeepRequired<T> = {\n [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P]\n}\n\n/**\n * Checks if an object has all the required properties specified by the given paths.\n *\n * @template T - The type of the object.\n * @param {DeepPartial<T>} obj - The object to check.\n * @param {string[]} paths - The paths of the required properties.\n * @returns {boolean} - Returns true if the object has all the required properties, otherwise returns false.\n */\nexport function hasRequiredProperties<T>(obj: DeepPartial<T>, paths: string[]): boolean {\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n return paths.every((path) => {\n const keys = path.split('.')\n let current: any = obj\n\n for (const key of keys) {\n if (current !== undefined && key in current) {\n current = current[key]\n } else {\n return false\n }\n }\n\n return true\n })\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n}\n\n/**\n * Retrieves the nested keys of an object type.\n *\n * @typeParam T - The object type.\n * @returns The union of all nested keys in the object type.\n *\n * @example\n * // Given the following object type:\n * type Person = {\n * name: string;\n * age: number;\n * address: {\n * street: string;\n * city: string;\n * };\n * };\n *\n * // The `NestedKeys` type will return the following union type:\n * // \"name\" | \"age\" | \"address\" | \"address.street\" | \"address.city\"\n * type AllKeys = NestedKeys<Person>;\n */\nexport type NestedKeys<T> = {\n [K in keyof T]: T[K] extends object ? K | `${K & string}.${NestedKeys<T[K]> & string}` : K\n}[keyof T]\n\n/**\n * Creates a new type that includes only the properties from the input type `T` that are required and not nullable.\n *\n * @typeParam T - The input type.\n * @returns A new type that includes only the required and non-nullable properties from `T`.\n *\n * @example\n * // Define a type with optional and nullable properties\n * type Person = {\n * name?: string;\n * age?: number | null;\n * email: string;\n * };\n *\n * // Create a new type with only the required and non-nullable properties from `Person`\n * type RequiredPerson = RequiredOnly<Person>;\n *\n * // `RequiredPerson` will be:\n * // {\n * // email: string;\n * // }\n */\nexport type RequiredOnly<T> = {\n [K in keyof T as Required<T>[K] extends NonNullable<Required<T>[K]> ? K : never]: T[K]\n}\n\n/**\n * `AtLeast` ensures that at least the specified keys `K` of the type `T` are required,\n * while the rest of the properties are optional.\n *\n * @template T - The original type.\n * @template K - The keys of `T` that should be required.\n *\n * @example\n * interface User {\n * id: string;\n * name: string;\n * email?: string;\n * age?: number;\n * }\n *\n * // At least 'id' and 'name' are required, the rest are optional\n * const user: AtLeast<User, 'email'> = {\n * id: '123',\n * name: 'Alice',\n * email: 'alice@example.com'\n * // age are optional\n * };\n */\nexport type AtLeast<T, K extends keyof T> = Partial<T> & RequiredOnly<T> & Required<Pick<T, K>>\n\n/**\n * RequireAtLeastOne helps create a type where at least one of the properties of an interface (can be any property) is required to exist.\n * https://learn.microsoft.com/en-us/javascript/api/@azure/keyvault-certificates/requireatleastone?view=azure-node-latest\n */\nexport type RequireAtLeastOne<T> = {\n [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>\n}[keyof T]\n","import * as fs from 'fs'\nimport * as path from 'path'\n\n/**\n * Finds files in the current directory and its parent directories.\n * @param cwd The current working directory.\n * @param expectations The expected file names.\n * @returns An array of file paths that match the expectations.\n */\nexport function findUp(cwd: string, expectations: string[]): string[] {\n let currentDir = cwd\n while (currentDir !== '/') {\n const dirFiles = fs.readdirSync(currentDir)\n const foundFiles = dirFiles.filter((file) => expectations.includes(file))\n if (foundFiles.length > 0) {\n return foundFiles.map((file) => path.join(currentDir, file))\n }\n currentDir = path.dirname(currentDir)\n }\n return []\n}\n","import { createRequire } from 'module'\n\n/**\n * Enables TypeScript support for the specified file or module.\n *\n * @param relativeToPath - The path relative to which the TypeScript module should be resolved.\n * @returns void\n *\n * @remarks\n * This function enables TypeScript support by registering the 'ts-node' module and configuring it with the provided options.\n * The 'ts-node' module allows for on-the-fly TypeScript transpilation without the need for a separate build step.\n *\n * @example\n * enableTS(process.cwd());\n */\nexport function enableTS(relativeToPath: string): void {\n // WARNING: require('ts-node') will cause '[ERROR] Unterminated template (867:31) [plugin commonjs]' in some cases\n // this error can be eliminated by assigning the name to a variable and require that variable\n const moduleName = 'ts-node'\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(moduleName)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const tsnode = require(modulePath)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n tsnode.register({\n transpileOnly: true,\n typeCheck: false,\n })\n}\n\n/**\n * Loads a JavaScript or TypeScript module.\n *\n * @param fileName - The name of the file to load.\n * @param relativeToPath - The path relative to which the file should be resolved.\n * @returns The loaded module.\n *\n * @example\n * // Load a JavaScript module\n * const myModule = loadJSorTS('myModule.js', '/path/to/file.js');\n *\n * // Load a TypeScript module\n * const myModule = loadJSorTS('myModule.ts', '/path/to/file.js');\n */\nexport function loadJSorTS(fileName: string, relativeToPath: string): any {\n if (fileName.endsWith('.ts')) {\n enableTS(relativeToPath)\n }\n\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(fileName)\n return require(modulePath)\n}\n"]}
package/dist/index.d.mts CHANGED
@@ -52,6 +52,12 @@ declare function findDeployment(deployments: Deployment[], nameOrAddress: string
52
52
  network?: Network;
53
53
  endpointId?: EndpointId;
54
54
  }): Deployment;
55
+ declare function tryFindDeployment(deployments: Deployment[], nameOrAddress: string, options: {
56
+ chain?: Chain;
57
+ source?: string;
58
+ network?: Network;
59
+ endpointId?: EndpointId;
60
+ }): Deployment | undefined;
55
61
  declare function deploymentToEvmContract<T extends ethers.Contract>(deployment: Deployment, provider?: ethers.providers.Provider): T;
56
62
  declare function findContract<T extends ethers.Contract>(provider: ethers.providers.Provider | undefined, deployments: Deployment[], nameOrAddress: string, options: {
57
63
  chain?: Chain;
@@ -465,4 +471,4 @@ declare function extractUrlInfo(url: string): {
465
471
  port: string;
466
472
  };
467
473
 
468
- export { type AccountMnemonic, type AtLeast, type Bytes, type DeepPartial, type DeepRequired, type Deployment, type Factory, type Hash, type Hex, type NestedKeys, type NonPromise, type PadReturnType, type RequireAtLeastOne, type RequiredOnly, SizeExceedsPaddingSizeError, type SizeExceedsPaddingSizeErrorType, arrayify, asEnum, asType, assert, assertDefined, assertType, assumeType, bytesToHex, createLogger, deploymentToEvmContract, dirname, enableTS, ensure0x, extractUrlInfo, findContract, findDeployment, findUp, first, firstFactory, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getInitiaAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, hasRequiredProperties, hexToBytes, hexlify, initLogger, isHash, isHex, isHexString, isHttpServiceReachable, loadJSorTS, logger, padify, parallel, pkgroot, safeMap, sequence, sleep, trim0x };
474
+ export { type AccountMnemonic, type AtLeast, type Bytes, type DeepPartial, type DeepRequired, type Deployment, type Factory, type Hash, type Hex, type NestedKeys, type NonPromise, type PadReturnType, type RequireAtLeastOne, type RequiredOnly, SizeExceedsPaddingSizeError, type SizeExceedsPaddingSizeErrorType, arrayify, asEnum, asType, assert, assertDefined, assertType, assumeType, bytesToHex, createLogger, deploymentToEvmContract, dirname, enableTS, ensure0x, extractUrlInfo, findContract, findDeployment, findUp, first, firstFactory, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getInitiaAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, hasRequiredProperties, hexToBytes, hexlify, initLogger, isHash, isHex, isHexString, isHttpServiceReachable, loadJSorTS, logger, padify, parallel, pkgroot, safeMap, sequence, sleep, trim0x, tryFindDeployment };
package/dist/index.d.ts CHANGED
@@ -52,6 +52,12 @@ declare function findDeployment(deployments: Deployment[], nameOrAddress: string
52
52
  network?: Network;
53
53
  endpointId?: EndpointId;
54
54
  }): Deployment;
55
+ declare function tryFindDeployment(deployments: Deployment[], nameOrAddress: string, options: {
56
+ chain?: Chain;
57
+ source?: string;
58
+ network?: Network;
59
+ endpointId?: EndpointId;
60
+ }): Deployment | undefined;
55
61
  declare function deploymentToEvmContract<T extends ethers.Contract>(deployment: Deployment, provider?: ethers.providers.Provider): T;
56
62
  declare function findContract<T extends ethers.Contract>(provider: ethers.providers.Provider | undefined, deployments: Deployment[], nameOrAddress: string, options: {
57
63
  chain?: Chain;
@@ -465,4 +471,4 @@ declare function extractUrlInfo(url: string): {
465
471
  port: string;
466
472
  };
467
473
 
468
- export { type AccountMnemonic, type AtLeast, type Bytes, type DeepPartial, type DeepRequired, type Deployment, type Factory, type Hash, type Hex, type NestedKeys, type NonPromise, type PadReturnType, type RequireAtLeastOne, type RequiredOnly, SizeExceedsPaddingSizeError, type SizeExceedsPaddingSizeErrorType, arrayify, asEnum, asType, assert, assertDefined, assertType, assumeType, bytesToHex, createLogger, deploymentToEvmContract, dirname, enableTS, ensure0x, extractUrlInfo, findContract, findDeployment, findUp, first, firstFactory, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getInitiaAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, hasRequiredProperties, hexToBytes, hexlify, initLogger, isHash, isHex, isHexString, isHttpServiceReachable, loadJSorTS, logger, padify, parallel, pkgroot, safeMap, sequence, sleep, trim0x };
474
+ export { type AccountMnemonic, type AtLeast, type Bytes, type DeepPartial, type DeepRequired, type Deployment, type Factory, type Hash, type Hex, type NestedKeys, type NonPromise, type PadReturnType, type RequireAtLeastOne, type RequiredOnly, SizeExceedsPaddingSizeError, type SizeExceedsPaddingSizeErrorType, arrayify, asEnum, asType, assert, assertDefined, assertType, assumeType, bytesToHex, createLogger, deploymentToEvmContract, dirname, enableTS, ensure0x, extractUrlInfo, findContract, findDeployment, findUp, first, firstFactory, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getInitiaAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, hasRequiredProperties, hexToBytes, hexlify, initLogger, isHash, isHex, isHexString, isHttpServiceReachable, loadJSorTS, logger, padify, parallel, pkgroot, safeMap, sequence, sleep, trim0x, tryFindDeployment };
package/dist/index.mjs CHANGED
@@ -311,7 +311,14 @@ function getLogger() {
311
311
  }
312
312
  if (process.env.NODE_ENV === "test") ;
313
313
  function findDeployment(deployments, nameOrAddress, options) {
314
- const retval = deployments.find((deployment) => {
314
+ const retval = tryFindDeployment(deployments, nameOrAddress, options);
315
+ if (retval === void 0) {
316
+ throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`);
317
+ }
318
+ return retval;
319
+ }
320
+ function tryFindDeployment(deployments, nameOrAddress, options) {
321
+ return deployments.find((deployment) => {
315
322
  let hasMatchingNameOrAddress = deployment.name === nameOrAddress;
316
323
  if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {
317
324
  hasMatchingNameOrAddress = ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress);
@@ -331,10 +338,6 @@ function findDeployment(deployments, nameOrAddress, options) {
331
338
  }
332
339
  return hasMatchingNameOrAddress && hasMatchingChain && hasMatchingNetwork && hasMatchingEndpoint && hasMatchingSource;
333
340
  });
334
- if (retval === void 0) {
335
- throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`);
336
- }
337
- return retval;
338
341
  }
339
342
  var contractCache = {};
340
343
  function deploymentToEvmContract(deployment, provider) {
@@ -567,6 +570,6 @@ function extractUrlInfo(url) {
567
570
  };
568
571
  }
569
572
 
570
- export { SizeExceedsPaddingSizeError, arrayify, asEnum, asType, assert, assertDefined, assertType, assumeType, bytesToHex, createLogger2 as createLogger, deploymentToEvmContract, dirname, enableTS, ensure0x, extractUrlInfo, findContract, findDeployment, findUp, first, firstFactory, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getInitiaAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, hasRequiredProperties, hexToBytes, hexlify, initLogger, isHash, isHex, isHexString, isHttpServiceReachable, loadJSorTS, logger2 as logger, padify, parallel, pkgroot, safeMap, sequence, sleep, trim0x };
573
+ export { SizeExceedsPaddingSizeError, arrayify, asEnum, asType, assert, assertDefined, assertType, assumeType, bytesToHex, createLogger2 as createLogger, deploymentToEvmContract, dirname, enableTS, ensure0x, extractUrlInfo, findContract, findDeployment, findUp, first, firstFactory, getAptosAccountFromMnemonic, getBIP044Path, getCircularReplacer, getEvmAccountFromMnemonic, getInitiaAccountFromMnemonic, getKeypairFromMnemonic, getLogger, getProjectPackageManager, getProjectRootDir, getSolanaAccountFromMnemonic, hasRequiredProperties, hexToBytes, hexlify, initLogger, isHash, isHex, isHexString, isHttpServiceReachable, loadJSorTS, logger2 as logger, padify, parallel, pkgroot, safeMap, sequence, sleep, trim0x, tryFindDeployment };
571
574
  //# sourceMappingURL=out.js.map
572
575
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/pad.ts","../src/types.ts","../src/format.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts","../src/assert.ts","../src/promise.ts","../src/array.ts","../src/enum.ts","../src/generic.ts","../src/findup.ts","../src/loader.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace","createRequire","require"],"mappings":"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","sourcesContent":["import http, { RequestOptions } from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\nexport * from './promise'\nexport * from './types'\nexport * from './assert'\nexport * from './array'\nexport * from './enum'\nexport * from './pad'\nexport * from './format'\nexport * from './generic'\nexport * from './findup'\nexport * from './loader'\n\nimport { sync as findUpSync } from 'find-up'\n\nimport { getLogger } from './logger'\n\nexport const logger = getLogger()\n\nexport async function sleep(timeout: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string): 'yarn' | 'npm' | 'pnpm' {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string): string {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport async function isHttpServiceReachable(\n host: string,\n port: number,\n timeout: number,\n path?: string\n): Promise<boolean> {\n return new Promise((resolve, _reject) => {\n const options: RequestOptions = {\n host,\n port,\n timeout,\n path,\n method: 'HEAD',\n }\n\n const request = http.request(options, (_response) => {\n resolve(true)\n })\n\n request.on('error', (_err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (m?.groups?.host === undefined) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n","import { Keypair } from '@solana/web3.js'\nimport { MnemonicKey } from '@initia/initia.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nimport { hexlify, trim0x } from './format'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, trim0x(hexlify(bip39.mnemonicToSeedSync(normalizeMnemonics))))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getInitiaAccountFromMnemonic(mnemonic: string, path = \"m/44'/118'/0'/0/0\"): AccountMnemonic {\n const [_, coinType, account, __, index] = path.match(/\\d+/g)?.map(Number) ?? [44, 118, 0, 0, 0]\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n const key = new MnemonicKey({\n mnemonic: normalizeMnemonics,\n coinType,\n account,\n index,\n })\n {\n return {\n mnemonic,\n path,\n privateKey: key.privateKey.toString('hex'),\n address: key.accAddress,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.INITIA:\n return getInitiaAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import { Bytes, Hex } from './types'\n\ninterface PadOptions {\n dir?: 'left' | 'right' | undefined\n size?: number | null | undefined\n}\nexport type PadReturnType<value extends Bytes | Hex> = value extends Hex ? Hex : Bytes\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n name: 'SizeExceedsPaddingSizeError'\n}\n\nexport class SizeExceedsPaddingSizeError extends Error {\n override name = 'SizeExceedsPaddingSizeError'\n constructor({ size, targetSize, type }: { size: number; targetSize: number; type: 'hex' | 'bytes' }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize})`\n )\n }\n}\n\n/**\n * Pads a hexadecimal string or byte array to a specified size.\n *\n * @param hexOrBytes - The hexadecimal string or byte array to pad.\n * @param options - The padding options.\n * @param options.dir - The direction of the padding. Defaults to undefined.\n * @param options.size - The size to pad to. Defaults to 32.\n * @returns The padded hexadecimal string or byte array.\n */\nexport function padify<value extends Bytes | Hex>(\n hexOrBytes: value,\n { dir, size = 32 }: PadOptions = {}\n): PadReturnType<value> {\n if (typeof hexOrBytes === 'string') {\n return padHex(hexOrBytes, { dir, size }) as PadReturnType<value>\n }\n return padBytes(hexOrBytes, { dir, size }) as PadReturnType<value>\n}\n\nfunction padHex(hex: Hex, { dir, size = 32 }: PadOptions = {}): Hex {\n if (size === null) return hex\n const value = hex.replace('0x', '')\n if (value.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(value.length / 2),\n targetSize: size,\n type: 'hex',\n })\n\n return `0x${value[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}`\n}\n\nfunction padBytes(bytes: Bytes, { dir, size = 32 }: PadOptions = {}): Bytes {\n if (size === null) return bytes\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] = bytes[padEnd ? i : bytes.length - i - 1]\n }\n return paddedBytes\n}\n","/**\n * Type representing a hexadecimal string prefixed with '0x'.\n */\nexport type Hex = `0x${string}`\n\n/**\n * Type representing a hash string prefixed with '0x'.\n */\nexport type Hash = `0x${string}`\n\n/**\n * Checks if a given string is a valid hexadecimal string.\n * @param value - The string to check.\n * @returns True if the string is a valid hexadecimal string, false otherwise.\n */\nexport function isHex(value: string): value is Hex {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Checks if a given string is a valid hash string.\n * @param value - The string to check.\n * @returns True if the string is a valid hash string, false otherwise.\n */\nexport function isHash(value: string): value is Hash {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Represents a byte array.\n */\nexport type Bytes = Uint8Array\n","import { padify } from './pad'\nimport { Hex, isHex } from './types'\n\n/**\n * A function to convert Uint8Array to hex string\n * @deprecated use `hexlify` instead\n * @param bytes Uint8Array\n * @returns hex string without 0x prefix, e.g., '0102030405'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return trim0x(hexlify(bytes)).replace(/^0x/i, '')\n}\n\n/**\n * A function to convert hex string to Uint8Array\n * @deprecated use `arrayify` instead\n * @param hex hex string, e.g., '0x0102030405' or '0102030405'\n * @returns Uint8Array\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return arrayify(hex)\n}\n\n/**\n * A function to trim the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string without 0x prefix\n */\nexport function trim0x(hex: string): string {\n return hex.replace(/^0x/i, '')\n}\n\n/**\n * A function to ensure the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string with 0x prefix\n */\nexport function ensure0x(hex: string): Hex {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const value = trim0x(hex)\n const retval = `0x${value}`\n return retval as Hex\n}\n\n/**\n * A function to check if a string is a hex string\n * @deprecated use `isHex` instead\n * @param value\n * @returns\n */\nexport function isHexString(value: string): boolean {\n return isHex(value)\n}\n\nfunction _arrayify(value: string | number | Uint8Array | Buffer | bigint): Uint8Array {\n if (value instanceof Uint8Array) {\n return value\n }\n\n if (typeof value === 'string') {\n if (value.match(/^(0x)?[0-9A-F]*$/i)) {\n const hex = value.replace(/^0x/i, '')\n const len = hex.length + 1 - ((hex.length + 1) % 2)\n return Uint8Array.from(Buffer.from(hex.padStart(len, '0'), 'hex'))\n }\n throw new Error('Invalid hex string')\n }\n\n if (typeof value === 'number') {\n if (value < 0) {\n throw new Error('Number must be non-negative')\n }\n const byteArray = []\n while (value > 0) {\n byteArray.push(value & 0xff)\n value >>= 8\n }\n return new Uint8Array(byteArray.reverse())\n }\n\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n return new Uint8Array(value)\n }\n\n if (typeof value === 'bigint') {\n const hex = value.toString(16)\n return _arrayify(hex)\n }\n\n throw new Error('unsupported type')\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to Uint8Array\n * @param value - the value to convert\n * @param size - the size of the Uint8Array to return, if not specified, the size of the input will be returned\n */\nexport function arrayify(value: string | number | Uint8Array | Buffer | bigint, size?: number): Uint8Array {\n const bytes = _arrayify(value)\n if (size === undefined) {\n return bytes\n }\n return padify(bytes, { size })\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to hex string\n */\nexport function hexlify(value: string | number | Uint8Array | Buffer | bigint): Hex {\n if (typeof value === 'string' && /^(0x)?[0-9A-F]*$/i.test(value)) {\n const retval = '0x' + trim0x(value)\n return retval as Hex\n }\n\n const bytes = arrayify(value)\n const hex = Buffer.from(bytes).toString('hex')\n return ensure0x(hex)\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger | undefined = undefined\n\nexport { Logger }\n\nfunction getStackTrace(): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer(): (key: string, value: unknown) => unknown {\n const ancestors: unknown[] = []\n return function (this: unknown, _key: string, value: unknown) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf(\n (info: {\n level: string\n message: string\n timestamp?: string\n metadata?: {\n pretty?: boolean\n format?: string\n }\n }) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() ?? ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const { pretty, format } = info.metadata ?? {}\n const spaces = pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string'\n ? info.message\n : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const message = format !== undefined ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n }\n)\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string): void {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n if (!logger) {\n throw new Error('Logger is not initialized')\n }\n return logger\n}\n\nconst exportsObject: {\n getCircularReplacer?: (key: unknown, value: unknown) => unknown\n} = {}\n\nif (process.env.NODE_ENV === 'test') {\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n isNetworkEndpointIdSupported,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @todo Use Partial<EndpointSpec> instead of options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment {\n const retval = deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = options.chain == null || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = options.network === undefined || options.network === deployment.network\n const hasMatchingSource = options.source === undefined || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId != null) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) => {\n if (isNetworkEndpointIdSupported(deployment.network, v)) {\n return networkToEndpointId(deployment.network, v)\n }\n return undefined\n })\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n\n if (retval === undefined) {\n throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`)\n }\n return retval\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!(key in contractCache)) {\n if (deployment.abi === undefined || deployment.bytecode === undefined) {\n throw new Error('Deployment does not have ABI or bytecode')\n }\n const Contract = new ethers.ContractFactory(deployment.abi, deployment.bytecode)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n\nexport function findContract<T extends ethers.Contract>(\n provider: ethers.providers.Provider | undefined,\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): T {\n const deployment = findDeployment(deployments, nameOrAddress, options)\n const retval = deploymentToEvmContract<T>(deployment, provider)\n return retval\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string): string {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match ?? []\n const dirname = typeof basePath !== 'undefined' ? basePath : path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n return undefined\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string): string {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n","export function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(`Assertion Error: ${message ?? 'condition is false'}`)\n }\n}\n\n/**\n * assertType\n * assertType can be used to assert that a value is of a certain type, and without naming a new variable explicitly.\n * @param value\n * @param fn\n * @param message\n */\nexport function assertType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): asserts value is T & M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n}\n\nexport function assertDefined<T>(value?: T, message?: string): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(message ?? 'Value is undefined or null')\n }\n}\n\nexport function asType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n return value\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function assumeType<T>(value: unknown): asserts value is T {}\n","// This file copy from repo:devtools and is located in packages/devtools/src/common/promise.ts\n\nimport { assert } from './assert'\n\n/**\n * Generic type for a hybrid (sync / async) factory\n * that generates an instance of `TOutput` based on arguments of type `TInput`\n *\n * `TInput` represents the list of all function arguments that need to be passed to the factory:\n *\n * ```typescript\n * const mySyncFactory: Factory<[number, boolean], string> = (num: number, bool: boolean): string => \"hello\"\n *\n * const mySyncFactory: Factory<[], string> = async () => \"hello\"\n * ```\n *\n * The hybrid aspect just makes it easier for implementers - if the logic is synchronous,\n * this type will not force any extra `async`.\n */\nexport type Factory<TInput extends unknown[], TOutput> = (...input: TInput) => TOutput | Promise<TOutput>\n\n/**\n * Helper type for argumentless factories a.k.a. tasks\n */\ntype Task<T> = Factory<[], T>\n\n/**\n * Executes tasks in sequence, waiting for each one to finish before starting the next one\n *\n * Will resolve with the output of all tasks or reject with the first rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const sequence = async <T>(tasks: Task<T>[]): Promise<T[]> => {\n const collector: T[] = []\n\n for (const task of tasks) {\n collector.push(await task())\n }\n\n return collector\n}\n\n/**\n * Executes tasks in parallel\n *\n * Will resolve with the output of all tasks or reject with the any rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const parallel = async <T>(tasks: Task<T>[]): Promise<T[]> => Promise.all(tasks.map(async (task) => task()))\n\n/**\n * Executes tasks in a sequence until one resolves.\n *\n * Will resolve with the output of the first task that resolves\n * or reject with the last rejection.\n *\n * Will reject immediatelly if no tasks have been passed\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T>}\n */\nexport const first = async <T>(tasks: Task<T>[]): Promise<T> => {\n assert(tasks.length !== 0, `Must have at least one task for first()`)\n\n let lastError: unknown\n\n for (const task of tasks) {\n try {\n return await task()\n } catch (error) {\n lastError = error\n }\n }\n\n throw lastError\n}\n\n/**\n * Helper utility for currying first() - creating a function\n * that behaves like first() but accepts arguments that will be passed to the factory functions\n *\n * @param {Factory<TInput, TOutput>[]} factories\n * @returns {Factory<TInput, TOutput>}\n */\nexport const firstFactory =\n <TInput extends unknown[], TOutput>(...factories: Factory<TInput, TOutput>[]): Factory<TInput, TOutput> =>\n async (...input) =>\n first(factories.map((factory) => async () => factory(...input)))\n\n/**\n * Represents a type that excludes promises.\n * If the input type is a promise, the resulting type is `never`.\n * Otherwise, it is the same as the input type.\n */\nexport type NonPromise<T> = T extends Promise<unknown> ? never : T\n","/**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @returns\n */\nexport function safeMap<T, R>(elements: T[], callbackfn: (item: T, index: number) => R): [R[], Error | undefined] {\n const result: R[] = []\n try {\n for (let i = 0; i < elements.length; i++) {\n const rv = callbackfn(elements[i], i)\n result.push(rv)\n }\n return [result, undefined]\n } catch (e) {\n return [result, e as Error]\n }\n}\n","/**\n * Converts a string or number value to a corresponding enum value.\n * @param enumType - The enum object.\n * @param value - The value to convert.\n * @returns The converted enum value.\n * @throws Error if the value is not a valid enum value.\n * @example\n * // Usage\n * enum Color {\n * Red = 'red',\n * Green = 'green',\n * Blue = 'blue'\n * }\n *\n * const color: Color = asEnum(Color, 'red');\n * expect(color).toBe(Color.Red);\n *\n * enum Direction {\n * Up = 1,\n * Down,\n * }\n *\n * const direction: Direction = asEnum(Direction, 1);\n * expect(direction).toBe(Direction.Up);\n */\nexport function asEnum<T extends object>(enumType: T, value: string | number): T[keyof T] {\n const enumValues = Object.values(enumType)\n\n if (enumValues.includes(value)) {\n return value as T[keyof T]\n } else {\n throw new Error(`Invalid enum value: ${value}`)\n }\n}\n","/**\n * Represents a type that allows partial modification of all properties in a given object type.\n * This type is similar to the built-in `Partial` type in TypeScript.\n * However, it supports deep partial modification, allowing partial modification of nested object properties.\n *\n * @typeparam T - The object type to be partially modified.\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\n/**\n * Represents a type that makes all properties of the given type required deeply.\n *\n * This utility type recursively makes all properties of the given type required, including nested properties.\n * If a property is already required, it remains unchanged.\n *\n * @typeParam T - The type to make all properties required.\n * @returns A new type with all properties required.\n *\n * @example\n * ```typescript\n * type Person = {\n * name?: string;\n * age?: number;\n * address?: {\n * street?: string;\n * city?: string;\n * };\n * };\n *\n * type RequiredPerson = DeepRequired<Person>;\n * // Result: {\n * // name: string;\n * // age: number;\n * // address: {\n * // street: string;\n * // city: string;\n * // };\n * // }\n * ```\n */\nexport type DeepRequired<T> = {\n [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P]\n}\n\n/**\n * Checks if an object has all the required properties specified by the given paths.\n *\n * @template T - The type of the object.\n * @param {DeepPartial<T>} obj - The object to check.\n * @param {string[]} paths - The paths of the required properties.\n * @returns {boolean} - Returns true if the object has all the required properties, otherwise returns false.\n */\nexport function hasRequiredProperties<T>(obj: DeepPartial<T>, paths: string[]): boolean {\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n return paths.every((path) => {\n const keys = path.split('.')\n let current: any = obj\n\n for (const key of keys) {\n if (current !== undefined && key in current) {\n current = current[key]\n } else {\n return false\n }\n }\n\n return true\n })\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n}\n\n/**\n * Retrieves the nested keys of an object type.\n *\n * @typeParam T - The object type.\n * @returns The union of all nested keys in the object type.\n *\n * @example\n * // Given the following object type:\n * type Person = {\n * name: string;\n * age: number;\n * address: {\n * street: string;\n * city: string;\n * };\n * };\n *\n * // The `NestedKeys` type will return the following union type:\n * // \"name\" | \"age\" | \"address\" | \"address.street\" | \"address.city\"\n * type AllKeys = NestedKeys<Person>;\n */\nexport type NestedKeys<T> = {\n [K in keyof T]: T[K] extends object ? K | `${K & string}.${NestedKeys<T[K]> & string}` : K\n}[keyof T]\n\n/**\n * Creates a new type that includes only the properties from the input type `T` that are required and not nullable.\n *\n * @typeParam T - The input type.\n * @returns A new type that includes only the required and non-nullable properties from `T`.\n *\n * @example\n * // Define a type with optional and nullable properties\n * type Person = {\n * name?: string;\n * age?: number | null;\n * email: string;\n * };\n *\n * // Create a new type with only the required and non-nullable properties from `Person`\n * type RequiredPerson = RequiredOnly<Person>;\n *\n * // `RequiredPerson` will be:\n * // {\n * // email: string;\n * // }\n */\nexport type RequiredOnly<T> = {\n [K in keyof T as Required<T>[K] extends NonNullable<Required<T>[K]> ? K : never]: T[K]\n}\n\n/**\n * `AtLeast` ensures that at least the specified keys `K` of the type `T` are required,\n * while the rest of the properties are optional.\n *\n * @template T - The original type.\n * @template K - The keys of `T` that should be required.\n *\n * @example\n * interface User {\n * id: string;\n * name: string;\n * email?: string;\n * age?: number;\n * }\n *\n * // At least 'id' and 'name' are required, the rest are optional\n * const user: AtLeast<User, 'email'> = {\n * id: '123',\n * name: 'Alice',\n * email: 'alice@example.com'\n * // age are optional\n * };\n */\nexport type AtLeast<T, K extends keyof T> = Partial<T> & RequiredOnly<T> & Required<Pick<T, K>>\n\n/**\n * RequireAtLeastOne helps create a type where at least one of the properties of an interface (can be any property) is required to exist.\n * https://learn.microsoft.com/en-us/javascript/api/@azure/keyvault-certificates/requireatleastone?view=azure-node-latest\n */\nexport type RequireAtLeastOne<T> = {\n [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>\n}[keyof T]\n","import * as fs from 'fs'\nimport * as path from 'path'\n\n/**\n * Finds files in the current directory and its parent directories.\n * @param cwd The current working directory.\n * @param expectations The expected file names.\n * @returns An array of file paths that match the expectations.\n */\nexport function findUp(cwd: string, expectations: string[]): string[] {\n let currentDir = cwd\n while (currentDir !== '/') {\n const dirFiles = fs.readdirSync(currentDir)\n const foundFiles = dirFiles.filter((file) => expectations.includes(file))\n if (foundFiles.length > 0) {\n return foundFiles.map((file) => path.join(currentDir, file))\n }\n currentDir = path.dirname(currentDir)\n }\n return []\n}\n","import { createRequire } from 'module'\n\n/**\n * Enables TypeScript support for the specified file or module.\n *\n * @param relativeToPath - The path relative to which the TypeScript module should be resolved.\n * @returns void\n *\n * @remarks\n * This function enables TypeScript support by registering the 'ts-node' module and configuring it with the provided options.\n * The 'ts-node' module allows for on-the-fly TypeScript transpilation without the need for a separate build step.\n *\n * @example\n * enableTS(process.cwd());\n */\nexport function enableTS(relativeToPath: string): void {\n // WARNING: require('ts-node') will cause '[ERROR] Unterminated template (867:31) [plugin commonjs]' in some cases\n // this error can be eliminated by assigning the name to a variable and require that variable\n const moduleName = 'ts-node'\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(moduleName)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const tsnode = require(modulePath)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n tsnode.register({\n transpileOnly: true,\n typeCheck: false,\n })\n}\n\n/**\n * Loads a JavaScript or TypeScript module.\n *\n * @param fileName - The name of the file to load.\n * @param relativeToPath - The path relative to which the file should be resolved.\n * @returns The loaded module.\n *\n * @example\n * // Load a JavaScript module\n * const myModule = loadJSorTS('myModule.js', '/path/to/file.js');\n *\n * // Load a TypeScript module\n * const myModule = loadJSorTS('myModule.ts', '/path/to/file.js');\n */\nexport function loadJSorTS(fileName: string, relativeToPath: string): any {\n if (fileName.endsWith('.ts')) {\n enableTS(relativeToPath)\n }\n\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(fileName)\n return require(modulePath)\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/account.ts","../src/pad.ts","../src/types.ts","../src/format.ts","../src/logger.ts","../src/deployment.ts","../src/path.ts","../src/assert.ts","../src/promise.ts","../src/array.ts","../src/enum.ts","../src/generic.ts","../src/findup.ts","../src/loader.ts"],"names":["path","format","createLogger","logger","ethers","dirname","getStackTrace","createRequire","require"],"mappings":"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","sourcesContent":["import http, { RequestOptions } from 'http'\nimport path from 'path'\n\nexport * from './account'\nexport * from './logger'\nexport * from './deployment'\nexport * from './path'\nexport * from './promise'\nexport * from './types'\nexport * from './assert'\nexport * from './array'\nexport * from './enum'\nexport * from './pad'\nexport * from './format'\nexport * from './generic'\nexport * from './findup'\nexport * from './loader'\n\nimport { sync as findUpSync } from 'find-up'\n\nimport { getLogger } from './logger'\n\nexport const logger = getLogger()\n\nexport async function sleep(timeout: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, timeout))\n}\n\nexport function getProjectPackageManager(cwd?: string): 'yarn' | 'npm' | 'pnpm' {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return 'yarn'\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return 'npm'\n\n // pnpm\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return 'pnpm'\n\n throw new Error('Cannot find package.json or yarn.lock')\n}\n\nexport function getProjectRootDir(cwd?: string): string {\n const yarn = findUpSync('yarn.lock', { cwd })\n if (yarn !== undefined) return path.dirname(yarn)\n\n const npm = findUpSync('package-lock.json', { cwd })\n if (npm !== undefined) return path.dirname(npm)\n\n const pnpm = findUpSync('pnpm-lock.yaml', { cwd })\n if (pnpm !== undefined) return path.dirname(pnpm)\n\n throw new Error('Cannot find yarn.lock or package-lock.json or pnpm-lock.yaml')\n}\n\nexport async function isHttpServiceReachable(\n host: string,\n port: number,\n timeout: number,\n path?: string\n): Promise<boolean> {\n return new Promise((resolve, _reject) => {\n const options: RequestOptions = {\n host,\n port,\n timeout,\n path,\n method: 'HEAD',\n }\n\n const request = http.request(options, (_response) => {\n resolve(true)\n })\n\n request.on('error', (_err) => {\n resolve(false)\n })\n\n request.end()\n })\n}\n\nexport function extractUrlInfo(url: string): {\n schema: 'http' | 'https'\n host: string\n port: string\n} {\n //TODO: handle the default port for http and https(443, 80)\n const m = url.match(/(?<schema>http|https):\\/\\/(?<host>.*):(?<port>\\d+)/)\n if (m?.groups?.host === undefined) {\n throw new Error(`Invalid url ${url}`)\n }\n\n return {\n schema: m.groups.schema as 'http' | 'https',\n host: m.groups.host,\n port: m.groups.port,\n }\n}\n","import { Keypair } from '@solana/web3.js'\nimport { MnemonicKey } from '@initia/initia.js'\nimport * as aptos from 'aptos'\nimport * as bip39 from 'bip39'\nimport * as ed25519HdKey from 'ed25519-hd-key'\nimport { ethers } from 'ethers'\n\nimport { ChainType } from '@layerzerolabs/lz-definitions'\n\nimport { hexlify, trim0x } from './format'\n\nexport interface AccountMnemonic {\n mnemonic: string\n path: string\n privateKey?: string\n address?: string\n}\n\nexport function getBIP044Path(chainType: ChainType, account: number, change: number, index: number): string {\n // CAUTION: the path format is different for each chain\n // https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\n //\n // The \"m/44'/637'/0'/0'/0'\" path is known as a hardened derivation path, while the \"m/44'/637'/0'/0/0\" path is a non-hardened derivation path.\n // The technical benefit of using a hardened derivation path is enhanced security.\n // In BIP32, a hardened derivation is denoted by an apostrophe ('), which indicates that the child private key should be derived in a way\n // that makes it computationally infeasible to derive the parent private key from it. This additional level of security\n // protects the mnemonic phrase and its derived private keys even if one of the derived private keys is compromised.\n // By using a hardened derivation path, like \"m/44'/637'/0'/0'/0'\", each level of the path requires a unique private key derivation,\n // making it more difficult to infer the parent private key from the child private key. This is particularly important when dealing with\n // hierarchical deterministic wallets, as it helps protect funds across multiple accounts or purposes.\n\n switch (chainType) {\n case ChainType.EVM:\n // https://github.com/ethers-io/ethers.js/blob/main/src.ts/wallet/hdwallet.ts\n return `m/44'/60'/${account}'/${change}/${index}`\n case ChainType.APTOS:\n // https://github.com/aptos-labs/aptos-core/blob/main/ecosystem/typescript/sdk/src/aptos_account.ts\n return `m/44'/637'/${account}'/${change}'/${index}'`\n case ChainType.SOLANA:\n // https://github.com/solana-labs/solana/blob/master/sdk/src/derivation_path.rs\n return `m/44'/501'/${account}'/${change}'`\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n\nexport function getEvmAccountFromMnemonic(mnemonic: string, path = \"m/44'/60'/0'/0/0\"): AccountMnemonic {\n const wallet = ethers.Wallet.fromMnemonic(mnemonic, path)\n return {\n mnemonic,\n path,\n privateKey: wallet.privateKey,\n address: wallet.address,\n }\n}\n\nexport function getAptosAccountFromMnemonic(mnemonic: string, path = \"m/44'/637'/0'/0'/0'\"): AccountMnemonic {\n //https://aptos.dev/guides/building-your-own-wallet/#creating-an-aptos-account\n if (!aptos.AptosAccount.isValidPath(path)) {\n throw new Error(`Invalid derivation path: ${path}`)\n }\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n {\n const { key } = aptos.derivePath(path, trim0x(hexlify(bip39.mnemonicToSeedSync(normalizeMnemonics))))\n const account = new aptos.AptosAccount(new Uint8Array(key)).toPrivateKeyObject()\n return {\n mnemonic,\n path,\n privateKey: account.privateKeyHex,\n address: account.address,\n }\n }\n}\n\nexport function getInitiaAccountFromMnemonic(mnemonic: string, path = \"m/44'/118'/0'/0/0\"): AccountMnemonic {\n const [_, coinType, account, __, index] = path.match(/\\d+/g)?.map(Number) ?? [44, 118, 0, 0, 0]\n const normalizeMnemonics = mnemonic\n .trim()\n .split(/\\s+/)\n .map((part) => part.toLowerCase())\n .join(' ')\n const key = new MnemonicKey({\n mnemonic: normalizeMnemonics,\n coinType,\n account,\n index,\n })\n {\n return {\n mnemonic,\n path,\n privateKey: key.privateKey.toString('hex'),\n address: key.accAddress,\n }\n }\n}\n\nexport function getSolanaAccountFromMnemonic(mnemonic: string, path = \"m/44'/501'/0'/0'\"): AccountMnemonic {\n const seed = bip39.mnemonicToSeedSync(mnemonic, '') // (mnemonic, password)\n const keyPair = Keypair.fromSeed(ed25519HdKey.derivePath(path, seed.toString('hex')).key)\n return {\n mnemonic,\n path,\n privateKey: ethers.utils.hexlify(keyPair.secretKey),\n address: keyPair.publicKey.toBase58(),\n }\n}\n\nexport function getKeypairFromMnemonic(chainType: ChainType, mnemonic: string, path?: string): AccountMnemonic {\n switch (chainType) {\n case ChainType.EVM:\n return getEvmAccountFromMnemonic(mnemonic, path)\n case ChainType.APTOS:\n return getAptosAccountFromMnemonic(mnemonic, path)\n case ChainType.INITIA:\n return getInitiaAccountFromMnemonic(mnemonic, path)\n case ChainType.SOLANA:\n return getSolanaAccountFromMnemonic(mnemonic, path)\n default:\n throw new Error(`Unsupported chain: ${chainType}`)\n }\n}\n","import { Bytes, Hex } from './types'\n\ninterface PadOptions {\n dir?: 'left' | 'right' | undefined\n size?: number | null | undefined\n}\nexport type PadReturnType<value extends Bytes | Hex> = value extends Hex ? Hex : Bytes\n\nexport type SizeExceedsPaddingSizeErrorType = SizeExceedsPaddingSizeError & {\n name: 'SizeExceedsPaddingSizeError'\n}\n\nexport class SizeExceedsPaddingSizeError extends Error {\n override name = 'SizeExceedsPaddingSizeError'\n constructor({ size, targetSize, type }: { size: number; targetSize: number; type: 'hex' | 'bytes' }) {\n super(\n `${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize})`\n )\n }\n}\n\n/**\n * Pads a hexadecimal string or byte array to a specified size.\n *\n * @param hexOrBytes - The hexadecimal string or byte array to pad.\n * @param options - The padding options.\n * @param options.dir - The direction of the padding. Defaults to undefined.\n * @param options.size - The size to pad to. Defaults to 32.\n * @returns The padded hexadecimal string or byte array.\n */\nexport function padify<value extends Bytes | Hex>(\n hexOrBytes: value,\n { dir, size = 32 }: PadOptions = {}\n): PadReturnType<value> {\n if (typeof hexOrBytes === 'string') {\n return padHex(hexOrBytes, { dir, size }) as PadReturnType<value>\n }\n return padBytes(hexOrBytes, { dir, size }) as PadReturnType<value>\n}\n\nfunction padHex(hex: Hex, { dir, size = 32 }: PadOptions = {}): Hex {\n if (size === null) return hex\n const value = hex.replace('0x', '')\n if (value.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(value.length / 2),\n targetSize: size,\n type: 'hex',\n })\n\n return `0x${value[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}`\n}\n\nfunction padBytes(bytes: Bytes, { dir, size = 32 }: PadOptions = {}): Bytes {\n if (size === null) return bytes\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n })\n const paddedBytes = new Uint8Array(size)\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right'\n paddedBytes[padEnd ? i : size - i - 1] = bytes[padEnd ? i : bytes.length - i - 1]\n }\n return paddedBytes\n}\n","/**\n * Type representing a hexadecimal string prefixed with '0x'.\n */\nexport type Hex = `0x${string}`\n\n/**\n * Type representing a hash string prefixed with '0x'.\n */\nexport type Hash = `0x${string}`\n\n/**\n * Checks if a given string is a valid hexadecimal string.\n * @param value - The string to check.\n * @returns True if the string is a valid hexadecimal string, false otherwise.\n */\nexport function isHex(value: string): value is Hex {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Checks if a given string is a valid hash string.\n * @param value - The string to check.\n * @returns True if the string is a valid hash string, false otherwise.\n */\nexport function isHash(value: string): value is Hash {\n return /^(0x)?[0-9A-F]+/i.test(value)\n}\n\n/**\n * Represents a byte array.\n */\nexport type Bytes = Uint8Array\n","import { padify } from './pad'\nimport { Hex, isHex } from './types'\n\n/**\n * A function to convert Uint8Array to hex string\n * @deprecated use `hexlify` instead\n * @param bytes Uint8Array\n * @returns hex string without 0x prefix, e.g., '0102030405'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return trim0x(hexlify(bytes)).replace(/^0x/i, '')\n}\n\n/**\n * A function to convert hex string to Uint8Array\n * @deprecated use `arrayify` instead\n * @param hex hex string, e.g., '0x0102030405' or '0102030405'\n * @returns Uint8Array\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return arrayify(hex)\n}\n\n/**\n * A function to trim the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string without 0x prefix\n */\nexport function trim0x(hex: string): string {\n return hex.replace(/^0x/i, '')\n}\n\n/**\n * A function to ensure the prefix 0x from a hex string\n * @param hex hex string\n * @returns hex string with 0x prefix\n */\nexport function ensure0x(hex: string): Hex {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const value = trim0x(hex)\n const retval = `0x${value}`\n return retval as Hex\n}\n\n/**\n * A function to check if a string is a hex string\n * @deprecated use `isHex` instead\n * @param value\n * @returns\n */\nexport function isHexString(value: string): boolean {\n return isHex(value)\n}\n\nfunction _arrayify(value: string | number | Uint8Array | Buffer | bigint): Uint8Array {\n if (value instanceof Uint8Array) {\n return value\n }\n\n if (typeof value === 'string') {\n if (value.match(/^(0x)?[0-9A-F]*$/i)) {\n const hex = value.replace(/^0x/i, '')\n const len = hex.length + 1 - ((hex.length + 1) % 2)\n return Uint8Array.from(Buffer.from(hex.padStart(len, '0'), 'hex'))\n }\n throw new Error('Invalid hex string')\n }\n\n if (typeof value === 'number') {\n if (value < 0) {\n throw new Error('Number must be non-negative')\n }\n const byteArray = []\n while (value > 0) {\n byteArray.push(value & 0xff)\n value >>= 8\n }\n return new Uint8Array(byteArray.reverse())\n }\n\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n return new Uint8Array(value)\n }\n\n if (typeof value === 'bigint') {\n const hex = value.toString(16)\n return _arrayify(hex)\n }\n\n throw new Error('unsupported type')\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to Uint8Array\n * @param value - the value to convert\n * @param size - the size of the Uint8Array to return, if not specified, the size of the input will be returned\n */\nexport function arrayify(value: string | number | Uint8Array | Buffer | bigint, size?: number): Uint8Array {\n const bytes = _arrayify(value)\n if (size === undefined) {\n return bytes\n }\n return padify(bytes, { size })\n}\n\n/**\n * A function to convert a string|number|Uint8Array|Buffer|BigInt to hex string\n */\nexport function hexlify(value: string | number | Uint8Array | Buffer | bigint): Hex {\n if (typeof value === 'string' && /^(0x)?[0-9A-F]*$/i.test(value)) {\n const retval = '0x' + trim0x(value)\n return retval as Hex\n }\n\n const bytes = arrayify(value)\n const hex = Buffer.from(bytes).toString('hex')\n return ensure0x(hex)\n}\n","import * as winston from 'winston'\nimport { Logger, format } from 'winston'\n\nlet logger: Logger | undefined = undefined\n\nexport { Logger }\n\nfunction getStackTrace(): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value\nexport function getCircularReplacer(): (key: string, value: unknown) => unknown {\n const ancestors: unknown[] = []\n return function (this: unknown, _key: string, value: unknown) {\n if (typeof value !== 'object' || value === null) {\n return value\n }\n // `this` is the object that value is contained in,\n // i.e., its direct parent.\n while (ancestors.length > 0 && ancestors.at(-1) !== this) {\n ancestors.pop()\n }\n if (ancestors.includes(value)) {\n return '[Circular]'\n }\n ancestors.push(value)\n return value\n }\n}\n\nfunction extractCallerInfo(line: string): string {\n for (const pattern of [/\\((.*?:\\d+:\\d+)\\)$/, /at (.*?:\\d+:\\d+)$/]) {\n const m = line.match(pattern)\n if (m === null) {\n continue\n }\n const [, fileInfoLine] = m\n return fileInfoLine\n }\n return '<unknown>'\n}\n\nconst logFormat = format.printf(\n (info: {\n level: string\n message: string\n timestamp?: string\n metadata?: {\n pretty?: boolean\n format?: string\n }\n }) => {\n if (info.level.toUpperCase() !== 'ERROR' && info.level.toUpperCase() !== 'WARN') {\n return `${info.timestamp} ${info.level.toUpperCase()}: ${info.message}`\n }\n const stack = getStackTrace() ?? ''\n\n const stackLines = stack.split('\\n')\n const index =\n stackLines.findIndex((line) => {\n return line.match(/create-logger.js/)\n }) + 1\n\n let fileInfo = '<unknown>'\n if (stackLines.length > index) {\n const line = stackLines[index]\n fileInfo = extractCallerInfo(line)\n }\n\n const formats: string[] = []\n if (fileInfo !== '<unknown>') {\n formats.push(fileInfo)\n }\n\n const { pretty, format } = info.metadata ?? {}\n const spaces = pretty === true ? 2 : undefined\n const value =\n typeof info.message === 'string'\n ? info.message\n : JSON.stringify(info.message, getCircularReplacer(), spaces)\n const message = format !== undefined ? format.replace(/%s/g, value) : value\n\n return [...formats, message].map((x) => `${info.timestamp} ${info.level.toUpperCase()}: ${x}`).join('\\n')\n }\n)\n\nconst loggerFormat = format.combine(\n format.timestamp({ format: 'YY-MM-DD HH:mm:ss' }),\n format.splat(),\n format.metadata({ fillExcept: ['level', 'timestamp', 'message'] }),\n logFormat,\n format.colorize({\n all: true,\n })\n)\n\nexport function initLogger(level: string): void {\n if (!logger) {\n logger = createLogger(level)\n }\n}\n\nexport function createLogger(level: string): Logger {\n const logger = winston.createLogger({\n level,\n format: loggerFormat,\n transports: [new winston.transports.Console()],\n })\n return logger\n}\n\nexport function getLogger(): Logger {\n initLogger(process.env.LZ_LOG ?? 'info')\n if (!logger) {\n throw new Error('Logger is not initialized')\n }\n return logger\n}\n\nconst exportsObject: {\n getCircularReplacer?: (key: unknown, value: unknown) => unknown\n} = {}\n\nif (process.env.NODE_ENV === 'test') {\n exportsObject.getCircularReplacer = getCircularReplacer\n}\nexport default exportsObject\n","import { ethers } from 'ethers'\n\nimport {\n Chain,\n EndpointId,\n EndpointVersion,\n Network,\n isNetworkEndpointIdSupported,\n networkToChain,\n networkToEndpointId,\n} from '@layerzerolabs/lz-definitions'\n\nexport interface Deployment {\n /** Name of the contract deployment. */\n name: string\n\n /** Optional endpoint identifier. */\n compatibleVersions: EndpointVersion[]\n\n /** Network of deployment. */\n network: Network\n\n /** Optional contract source. */\n source?: string\n\n /** Address of deployed contract. */\n address: string\n\n /** Optional contract ABI. */\n abi?: string\n\n /** Optional contract bytecode. */\n bytecode?: string\n}\n\n/**\n * Find the matching deployments based on the given options\n * @todo Use Partial<EndpointSpec> instead of options\n * @param deployments list of deployments\n * @param nameOrAddress contract name\n * @param options options to match against\n * @returns Deployment\n */\nexport function findDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment {\n const retval = tryFindDeployment(deployments, nameOrAddress, options)\n if (retval === undefined) {\n throw new Error(`Deployment not found: ${nameOrAddress} options:${JSON.stringify(options)}`)\n }\n return retval\n}\n\nexport function tryFindDeployment(\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): Deployment | undefined {\n return deployments.find((deployment) => {\n let hasMatchingNameOrAddress = deployment.name === nameOrAddress\n if (!hasMatchingNameOrAddress && ethers.utils.isAddress(nameOrAddress)) {\n hasMatchingNameOrAddress =\n ethers.utils.getAddress(deployment.address) === ethers.utils.getAddress(nameOrAddress)\n }\n const hasMatchingChain = options.chain == null || options.chain === networkToChain(deployment.network)\n const hasMatchingNetwork = options.network === undefined || options.network === deployment.network\n const hasMatchingSource = options.source === undefined || options.source === deployment.source\n let hasMatchingEndpoint = true\n if (options.endpointId != null) {\n const compatibleEndpoints = deployment.compatibleVersions.map((v) => {\n if (isNetworkEndpointIdSupported(deployment.network, v)) {\n return networkToEndpointId(deployment.network, v)\n }\n return undefined\n })\n hasMatchingEndpoint = compatibleEndpoints.includes(options.endpointId)\n }\n return (\n hasMatchingNameOrAddress &&\n hasMatchingChain &&\n hasMatchingNetwork &&\n hasMatchingEndpoint &&\n hasMatchingSource\n )\n })\n}\n\ntype ContractType = { [key in string]: ethers.Contract }\nconst contractCache: ContractType = {}\nexport function deploymentToEvmContract<T extends ethers.Contract>(\n deployment: Deployment,\n provider?: ethers.providers.Provider\n): T {\n const key = `${deployment.network}-${deployment.address}`\n if (!(key in contractCache)) {\n if (deployment.abi === undefined || deployment.bytecode === undefined) {\n throw new Error('Deployment does not have ABI or bytecode')\n }\n const Contract = new ethers.ContractFactory(deployment.abi, deployment.bytecode)\n contractCache[key] = Contract.attach(deployment.address)\n }\n if (!provider) {\n return contractCache[key] as T\n }\n return contractCache[key].connect(provider) as T\n}\n\nexport function findContract<T extends ethers.Contract>(\n provider: ethers.providers.Provider | undefined,\n deployments: Deployment[],\n nameOrAddress: string,\n options: { chain?: Chain; source?: string; network?: Network; endpointId?: EndpointId }\n): T {\n const deployment = findDeployment(deployments, nameOrAddress, options)\n const retval = deploymentToEvmContract<T>(deployment, provider)\n return retval\n}\n","import { createRequire } from 'module'\n/**\n * A function to return dirname of a path\n * @param path\n * @returns\n */\nexport function dirname(path: string): string {\n const match = path.match(/(.*)([\\\\/][^\\\\/]+)[/\\\\]?$/)\n const [, basePath] = match ?? []\n const dirname = typeof basePath !== 'undefined' ? basePath : path\n return dirname\n}\n\nfunction getStackTrace(stackTraceLimit = Infinity): string | undefined {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = stackTraceLimit\n const retval = new Error().stack\n Error.stackTraceLimit = oldLimit\n return retval\n}\n\nfunction getCaller(): string | undefined {\n const lines = (getStackTrace(10) ?? '').split('\\n')\n // Error:\n // at getStackTrace\n // at getCaller\n // at <caller of getCaller>\n // at <expected caller>\n if (lines.length > 1 + 1 + 1 + 1) {\n const line = lines[4]\n const m = line.match(/^.*\\(([^:]*)[^)]*\\)/)\n if (m) {\n return m[1]\n }\n }\n return undefined\n}\n\n/**\n * return the root path of a package\n * @param packageName\n * @param relativeToPath\n * @returns\n */\nexport function pkgroot(packageName: string, relativeToPath?: string): string {\n if (relativeToPath === undefined) {\n relativeToPath = getCaller()\n if (relativeToPath === undefined) {\n relativeToPath = __filename\n }\n }\n\n const filepath = createRequire(relativeToPath).resolve(`${packageName}/package.json`)\n const packagePath = dirname(filepath)\n // https://github.com/yarnpkg/berry/blob/f67dda88fe9d0a892c44af923cbbc50bfe454e0e/packages/docusaurus/docs/advanced/03-pnp/pnp-spec.md\n // In order to properly represent packages listing peer dependencies, Yarn relies on a concept\n // called Virtual Packages. Their most notable property is that they all have different paths\n // (so that Node.js instantiates them as many times as needed), while still being baked by the\n // same concrete folder on disk.\n return packagePath.replace(/.yarn\\/([^/]*\\/)?(__virtual__|\\$\\$virtual)\\/[^/]*\\/\\d*\\//, '')\n}\n","export function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(`Assertion Error: ${message ?? 'condition is false'}`)\n }\n}\n\n/**\n * assertType\n * assertType can be used to assert that a value is of a certain type, and without naming a new variable explicitly.\n * @param value\n * @param fn\n * @param message\n */\nexport function assertType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): asserts value is T & M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n}\n\nexport function assertDefined<T>(value?: T, message?: string): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(message ?? 'Value is undefined or null')\n }\n}\n\nexport function asType<T, M>(value: T, fn: (v: unknown) => v is M, message?: string): M {\n if (!fn(value)) {\n throw new Error(`Expected value to be ${message ?? 'of correct type'}`)\n }\n return value\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function assumeType<T>(value: unknown): asserts value is T {}\n","// This file copy from repo:devtools and is located in packages/devtools/src/common/promise.ts\n\nimport { assert } from './assert'\n\n/**\n * Generic type for a hybrid (sync / async) factory\n * that generates an instance of `TOutput` based on arguments of type `TInput`\n *\n * `TInput` represents the list of all function arguments that need to be passed to the factory:\n *\n * ```typescript\n * const mySyncFactory: Factory<[number, boolean], string> = (num: number, bool: boolean): string => \"hello\"\n *\n * const mySyncFactory: Factory<[], string> = async () => \"hello\"\n * ```\n *\n * The hybrid aspect just makes it easier for implementers - if the logic is synchronous,\n * this type will not force any extra `async`.\n */\nexport type Factory<TInput extends unknown[], TOutput> = (...input: TInput) => TOutput | Promise<TOutput>\n\n/**\n * Helper type for argumentless factories a.k.a. tasks\n */\ntype Task<T> = Factory<[], T>\n\n/**\n * Executes tasks in sequence, waiting for each one to finish before starting the next one\n *\n * Will resolve with the output of all tasks or reject with the first rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const sequence = async <T>(tasks: Task<T>[]): Promise<T[]> => {\n const collector: T[] = []\n\n for (const task of tasks) {\n collector.push(await task())\n }\n\n return collector\n}\n\n/**\n * Executes tasks in parallel\n *\n * Will resolve with the output of all tasks or reject with the any rejection.\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T[]>}\n */\nexport const parallel = async <T>(tasks: Task<T>[]): Promise<T[]> => Promise.all(tasks.map(async (task) => task()))\n\n/**\n * Executes tasks in a sequence until one resolves.\n *\n * Will resolve with the output of the first task that resolves\n * or reject with the last rejection.\n *\n * Will reject immediatelly if no tasks have been passed\n *\n * @param {Task<T>[]} tasks\n * @returns {Promise<T>}\n */\nexport const first = async <T>(tasks: Task<T>[]): Promise<T> => {\n assert(tasks.length !== 0, `Must have at least one task for first()`)\n\n let lastError: unknown\n\n for (const task of tasks) {\n try {\n return await task()\n } catch (error) {\n lastError = error\n }\n }\n\n throw lastError\n}\n\n/**\n * Helper utility for currying first() - creating a function\n * that behaves like first() but accepts arguments that will be passed to the factory functions\n *\n * @param {Factory<TInput, TOutput>[]} factories\n * @returns {Factory<TInput, TOutput>}\n */\nexport const firstFactory =\n <TInput extends unknown[], TOutput>(...factories: Factory<TInput, TOutput>[]): Factory<TInput, TOutput> =>\n async (...input) =>\n first(factories.map((factory) => async () => factory(...input)))\n\n/**\n * Represents a type that excludes promises.\n * If the input type is a promise, the resulting type is `never`.\n * Otherwise, it is the same as the input type.\n */\nexport type NonPromise<T> = T extends Promise<unknown> ? never : T\n","/**\n * Calls a defined callback function on each element of an array, and returns an array that contains the results.\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\n * @returns\n */\nexport function safeMap<T, R>(elements: T[], callbackfn: (item: T, index: number) => R): [R[], Error | undefined] {\n const result: R[] = []\n try {\n for (let i = 0; i < elements.length; i++) {\n const rv = callbackfn(elements[i], i)\n result.push(rv)\n }\n return [result, undefined]\n } catch (e) {\n return [result, e as Error]\n }\n}\n","/**\n * Converts a string or number value to a corresponding enum value.\n * @param enumType - The enum object.\n * @param value - The value to convert.\n * @returns The converted enum value.\n * @throws Error if the value is not a valid enum value.\n * @example\n * // Usage\n * enum Color {\n * Red = 'red',\n * Green = 'green',\n * Blue = 'blue'\n * }\n *\n * const color: Color = asEnum(Color, 'red');\n * expect(color).toBe(Color.Red);\n *\n * enum Direction {\n * Up = 1,\n * Down,\n * }\n *\n * const direction: Direction = asEnum(Direction, 1);\n * expect(direction).toBe(Direction.Up);\n */\nexport function asEnum<T extends object>(enumType: T, value: string | number): T[keyof T] {\n const enumValues = Object.values(enumType)\n\n if (enumValues.includes(value)) {\n return value as T[keyof T]\n } else {\n throw new Error(`Invalid enum value: ${value}`)\n }\n}\n","/**\n * Represents a type that allows partial modification of all properties in a given object type.\n * This type is similar to the built-in `Partial` type in TypeScript.\n * However, it supports deep partial modification, allowing partial modification of nested object properties.\n *\n * @typeparam T - The object type to be partially modified.\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]\n}\n\n/**\n * Represents a type that makes all properties of the given type required deeply.\n *\n * This utility type recursively makes all properties of the given type required, including nested properties.\n * If a property is already required, it remains unchanged.\n *\n * @typeParam T - The type to make all properties required.\n * @returns A new type with all properties required.\n *\n * @example\n * ```typescript\n * type Person = {\n * name?: string;\n * age?: number;\n * address?: {\n * street?: string;\n * city?: string;\n * };\n * };\n *\n * type RequiredPerson = DeepRequired<Person>;\n * // Result: {\n * // name: string;\n * // age: number;\n * // address: {\n * // street: string;\n * // city: string;\n * // };\n * // }\n * ```\n */\nexport type DeepRequired<T> = {\n [P in keyof T]-?: T[P] extends object ? DeepRequired<T[P]> : T[P]\n}\n\n/**\n * Checks if an object has all the required properties specified by the given paths.\n *\n * @template T - The type of the object.\n * @param {DeepPartial<T>} obj - The object to check.\n * @param {string[]} paths - The paths of the required properties.\n * @returns {boolean} - Returns true if the object has all the required properties, otherwise returns false.\n */\nexport function hasRequiredProperties<T>(obj: DeepPartial<T>, paths: string[]): boolean {\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n return paths.every((path) => {\n const keys = path.split('.')\n let current: any = obj\n\n for (const key of keys) {\n if (current !== undefined && key in current) {\n current = current[key]\n } else {\n return false\n }\n }\n\n return true\n })\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */\n}\n\n/**\n * Retrieves the nested keys of an object type.\n *\n * @typeParam T - The object type.\n * @returns The union of all nested keys in the object type.\n *\n * @example\n * // Given the following object type:\n * type Person = {\n * name: string;\n * age: number;\n * address: {\n * street: string;\n * city: string;\n * };\n * };\n *\n * // The `NestedKeys` type will return the following union type:\n * // \"name\" | \"age\" | \"address\" | \"address.street\" | \"address.city\"\n * type AllKeys = NestedKeys<Person>;\n */\nexport type NestedKeys<T> = {\n [K in keyof T]: T[K] extends object ? K | `${K & string}.${NestedKeys<T[K]> & string}` : K\n}[keyof T]\n\n/**\n * Creates a new type that includes only the properties from the input type `T` that are required and not nullable.\n *\n * @typeParam T - The input type.\n * @returns A new type that includes only the required and non-nullable properties from `T`.\n *\n * @example\n * // Define a type with optional and nullable properties\n * type Person = {\n * name?: string;\n * age?: number | null;\n * email: string;\n * };\n *\n * // Create a new type with only the required and non-nullable properties from `Person`\n * type RequiredPerson = RequiredOnly<Person>;\n *\n * // `RequiredPerson` will be:\n * // {\n * // email: string;\n * // }\n */\nexport type RequiredOnly<T> = {\n [K in keyof T as Required<T>[K] extends NonNullable<Required<T>[K]> ? K : never]: T[K]\n}\n\n/**\n * `AtLeast` ensures that at least the specified keys `K` of the type `T` are required,\n * while the rest of the properties are optional.\n *\n * @template T - The original type.\n * @template K - The keys of `T` that should be required.\n *\n * @example\n * interface User {\n * id: string;\n * name: string;\n * email?: string;\n * age?: number;\n * }\n *\n * // At least 'id' and 'name' are required, the rest are optional\n * const user: AtLeast<User, 'email'> = {\n * id: '123',\n * name: 'Alice',\n * email: 'alice@example.com'\n * // age are optional\n * };\n */\nexport type AtLeast<T, K extends keyof T> = Partial<T> & RequiredOnly<T> & Required<Pick<T, K>>\n\n/**\n * RequireAtLeastOne helps create a type where at least one of the properties of an interface (can be any property) is required to exist.\n * https://learn.microsoft.com/en-us/javascript/api/@azure/keyvault-certificates/requireatleastone?view=azure-node-latest\n */\nexport type RequireAtLeastOne<T> = {\n [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>\n}[keyof T]\n","import * as fs from 'fs'\nimport * as path from 'path'\n\n/**\n * Finds files in the current directory and its parent directories.\n * @param cwd The current working directory.\n * @param expectations The expected file names.\n * @returns An array of file paths that match the expectations.\n */\nexport function findUp(cwd: string, expectations: string[]): string[] {\n let currentDir = cwd\n while (currentDir !== '/') {\n const dirFiles = fs.readdirSync(currentDir)\n const foundFiles = dirFiles.filter((file) => expectations.includes(file))\n if (foundFiles.length > 0) {\n return foundFiles.map((file) => path.join(currentDir, file))\n }\n currentDir = path.dirname(currentDir)\n }\n return []\n}\n","import { createRequire } from 'module'\n\n/**\n * Enables TypeScript support for the specified file or module.\n *\n * @param relativeToPath - The path relative to which the TypeScript module should be resolved.\n * @returns void\n *\n * @remarks\n * This function enables TypeScript support by registering the 'ts-node' module and configuring it with the provided options.\n * The 'ts-node' module allows for on-the-fly TypeScript transpilation without the need for a separate build step.\n *\n * @example\n * enableTS(process.cwd());\n */\nexport function enableTS(relativeToPath: string): void {\n // WARNING: require('ts-node') will cause '[ERROR] Unterminated template (867:31) [plugin commonjs]' in some cases\n // this error can be eliminated by assigning the name to a variable and require that variable\n const moduleName = 'ts-node'\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(moduleName)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const tsnode = require(modulePath)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n tsnode.register({\n transpileOnly: true,\n typeCheck: false,\n })\n}\n\n/**\n * Loads a JavaScript or TypeScript module.\n *\n * @param fileName - The name of the file to load.\n * @param relativeToPath - The path relative to which the file should be resolved.\n * @returns The loaded module.\n *\n * @example\n * // Load a JavaScript module\n * const myModule = loadJSorTS('myModule.js', '/path/to/file.js');\n *\n * // Load a TypeScript module\n * const myModule = loadJSorTS('myModule.ts', '/path/to/file.js');\n */\nexport function loadJSorTS(fileName: string, relativeToPath: string): any {\n if (fileName.endsWith('.ts')) {\n enableTS(relativeToPath)\n }\n\n const require = createRequire(relativeToPath)\n const modulePath = require.resolve(fileName)\n return require(modulePath)\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/lz-utilities",
3
- "version": "3.0.7",
3
+ "version": "3.0.8",
4
4
  "license": "BUSL-1.1",
5
5
  "exports": {
6
6
  "types": "./dist/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "@ethersproject/bytes": "^5.7.0",
23
23
  "@ethersproject/providers": "^5.7.0",
24
24
  "@initia/initia.js": "^0.2.11",
25
- "@layerzerolabs/lz-definitions": "^3.0.7",
25
+ "@layerzerolabs/lz-definitions": "^3.0.8",
26
26
  "@noble/hashes": "^1.3.2",
27
27
  "@noble/secp256k1": "^1.7.1",
28
28
  "@solana/web3.js": "^1.92.1",
@@ -38,8 +38,8 @@
38
38
  },
39
39
  "devDependencies": {
40
40
  "@jest/globals": "^29.7.0",
41
- "@layerzerolabs/tsup-config-next": "^3.0.7",
42
- "@layerzerolabs/typescript-config-next": "^3.0.7",
41
+ "@layerzerolabs/tsup-config-next": "^3.0.8",
42
+ "@layerzerolabs/typescript-config-next": "^3.0.8",
43
43
  "@types/glob": "^8.1.0",
44
44
  "@types/jest": "^29.5.10",
45
45
  "@types/node": "^20.10.5",