@hyperlane-xyz/utils 3.9.0 → 3.10.1-beta0

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.
Files changed (120) hide show
  1. package/README.md +20 -0
  2. package/dist/addresses.d.ts +42 -0
  3. package/dist/addresses.d.ts.map +1 -0
  4. package/dist/addresses.js +292 -0
  5. package/dist/addresses.js.map +1 -0
  6. package/dist/addresses.test.d.ts +2 -0
  7. package/dist/addresses.test.d.ts.map +1 -0
  8. package/dist/addresses.test.js +44 -0
  9. package/dist/addresses.test.js.map +1 -0
  10. package/dist/amount.d.ts +45 -0
  11. package/dist/amount.d.ts.map +1 -0
  12. package/dist/amount.js +114 -0
  13. package/dist/amount.js.map +1 -0
  14. package/dist/amount.test.d.ts +2 -0
  15. package/dist/amount.test.d.ts.map +1 -0
  16. package/dist/amount.test.js +46 -0
  17. package/dist/amount.test.js.map +1 -0
  18. package/dist/arrays.d.ts +8 -0
  19. package/dist/arrays.d.ts.map +1 -0
  20. package/dist/arrays.js +11 -0
  21. package/dist/arrays.js.map +1 -0
  22. package/dist/async.d.ts +56 -0
  23. package/dist/async.d.ts.map +1 -0
  24. package/dist/async.js +110 -0
  25. package/dist/async.js.map +1 -0
  26. package/dist/base58.d.ts +5 -0
  27. package/dist/base58.d.ts.map +1 -0
  28. package/dist/base58.js +15 -0
  29. package/dist/base58.js.map +1 -0
  30. package/dist/base64.d.ts +3 -0
  31. package/dist/base64.d.ts.map +1 -0
  32. package/dist/base64.js +25 -0
  33. package/dist/base64.js.map +1 -0
  34. package/dist/big-numbers.d.ts +50 -0
  35. package/dist/big-numbers.d.ts.map +1 -0
  36. package/dist/big-numbers.js +80 -0
  37. package/dist/big-numbers.js.map +1 -0
  38. package/dist/big-numbers.test.d.ts +2 -0
  39. package/dist/big-numbers.test.d.ts.map +1 -0
  40. package/dist/big-numbers.test.js +96 -0
  41. package/dist/big-numbers.test.js.map +1 -0
  42. package/dist/calldata.d.ts +3 -0
  43. package/dist/calldata.d.ts.map +1 -0
  44. package/dist/calldata.js +4 -0
  45. package/dist/calldata.js.map +1 -0
  46. package/dist/checkpoints.d.ts +5 -0
  47. package/dist/checkpoints.d.ts.map +1 -0
  48. package/dist/checkpoints.js +24 -0
  49. package/dist/checkpoints.js.map +1 -0
  50. package/dist/domains.d.ts +2 -0
  51. package/dist/domains.d.ts.map +1 -0
  52. package/dist/domains.js +6 -0
  53. package/dist/domains.js.map +1 -0
  54. package/dist/env.d.ts +2 -0
  55. package/dist/env.d.ts.map +1 -0
  56. package/dist/env.js +11 -0
  57. package/dist/env.js.map +1 -0
  58. package/dist/ids.d.ts +20 -0
  59. package/dist/ids.d.ts.map +1 -0
  60. package/dist/ids.js +42 -0
  61. package/dist/ids.js.map +1 -0
  62. package/dist/index.d.ts +23 -23
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +23 -142
  65. package/dist/index.js.map +1 -1
  66. package/dist/logging.d.ts +21 -0
  67. package/dist/logging.d.ts.map +1 -0
  68. package/dist/logging.js +91 -0
  69. package/dist/logging.js.map +1 -0
  70. package/dist/math.d.ts +5 -0
  71. package/dist/math.d.ts.map +1 -0
  72. package/dist/math.js +18 -0
  73. package/dist/math.js.map +1 -0
  74. package/dist/messages.d.ts +21 -0
  75. package/dist/messages.d.ts.map +1 -0
  76. package/dist/messages.js +52 -0
  77. package/dist/messages.js.map +1 -0
  78. package/dist/multisig.d.ts +4 -0
  79. package/dist/multisig.d.ts.map +1 -0
  80. package/dist/multisig.js +53 -0
  81. package/dist/multisig.js.map +1 -0
  82. package/dist/objects.d.ts +19 -0
  83. package/dist/objects.d.ts.map +1 -0
  84. package/dist/objects.js +95 -0
  85. package/dist/objects.js.map +1 -0
  86. package/dist/sets.d.ts +4 -0
  87. package/dist/sets.d.ts.map +1 -0
  88. package/dist/sets.js +24 -0
  89. package/dist/sets.js.map +1 -0
  90. package/dist/src/base64.js +2 -2
  91. package/dist/src/base64.js.map +1 -1
  92. package/dist/src/env.d.ts +1 -1
  93. package/dist/src/env.d.ts.map +1 -1
  94. package/dist/src/env.js +2 -2
  95. package/dist/src/env.js.map +1 -1
  96. package/dist/src/logging.d.ts +19 -5
  97. package/dist/src/logging.d.ts.map +1 -1
  98. package/dist/src/logging.js +79 -34
  99. package/dist/src/logging.js.map +1 -1
  100. package/dist/strings.d.ts +7 -0
  101. package/dist/strings.d.ts.map +1 -0
  102. package/dist/strings.js +43 -0
  103. package/dist/strings.js.map +1 -0
  104. package/dist/typeof.d.ts +3 -0
  105. package/dist/typeof.d.ts.map +1 -0
  106. package/dist/typeof.js +7 -0
  107. package/dist/typeof.js.map +1 -0
  108. package/dist/types.d.ts +88 -0
  109. package/dist/types.d.ts.map +1 -0
  110. package/dist/types.js +22 -0
  111. package/dist/types.js.map +1 -0
  112. package/dist/validation.d.ts +2 -0
  113. package/dist/validation.d.ts.map +1 -0
  114. package/dist/validation.js +6 -0
  115. package/dist/validation.js.map +1 -0
  116. package/dist/validator.d.ts +17 -0
  117. package/dist/validator.d.ts.map +1 -0
  118. package/dist/validator.js +43 -0
  119. package/dist/validator.js.map +1 -0
  120. package/package.json +14 -8
@@ -0,0 +1,21 @@
1
+ import { BigNumber } from 'ethers';
2
+ import { Address, Domain, HexString, ParsedMessage } from './types.js';
3
+ /**
4
+ * JS Implementation of solidity/contracts/libs/Message.sol#formatMessage
5
+ * @returns Hex string of the packed message
6
+ */
7
+ export declare const formatMessage: (version: number | BigNumber, nonce: number | BigNumber, originDomain: Domain, senderAddr: Address, destinationDomain: Domain, recipientAddr: Address, body: HexString) => HexString;
8
+ /**
9
+ * Get ID given message bytes
10
+ * @param message Hex string of the packed message (see formatMessage)
11
+ * @returns Hex string of message id
12
+ */
13
+ export declare function messageId(message: HexString): HexString;
14
+ /**
15
+ * Parse a serialized Hyperlane message from raw bytes.
16
+ *
17
+ * @param message
18
+ * @returns
19
+ */
20
+ export declare function parseMessage(message: string): ParsedMessage;
21
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,QAAQ,CAAC;AAGlD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,aAAa,YACf,MAAM,GAAG,SAAS,SACpB,MAAM,GAAG,SAAS,gBACX,MAAM,cACR,OAAO,qBACA,MAAM,iBACV,OAAO,QAChB,SAAS,KACd,SAgBF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAkB3D"}
@@ -0,0 +1,52 @@
1
+ import { ethers, utils } from 'ethers';
2
+ import { addressToBytes32 } from './addresses.js';
3
+ /**
4
+ * JS Implementation of solidity/contracts/libs/Message.sol#formatMessage
5
+ * @returns Hex string of the packed message
6
+ */
7
+ export const formatMessage = (version, nonce, originDomain, senderAddr, destinationDomain, recipientAddr, body) => {
8
+ senderAddr = addressToBytes32(senderAddr);
9
+ recipientAddr = addressToBytes32(recipientAddr);
10
+ return ethers.utils.solidityPack(['uint8', 'uint32', 'uint32', 'bytes32', 'uint32', 'bytes32', 'bytes'], [
11
+ version,
12
+ nonce,
13
+ originDomain,
14
+ senderAddr,
15
+ destinationDomain,
16
+ recipientAddr,
17
+ body,
18
+ ]);
19
+ };
20
+ /**
21
+ * Get ID given message bytes
22
+ * @param message Hex string of the packed message (see formatMessage)
23
+ * @returns Hex string of message id
24
+ */
25
+ export function messageId(message) {
26
+ return ethers.utils.solidityKeccak256(['bytes'], [message]);
27
+ }
28
+ /**
29
+ * Parse a serialized Hyperlane message from raw bytes.
30
+ *
31
+ * @param message
32
+ * @returns
33
+ */
34
+ export function parseMessage(message) {
35
+ const VERSION_OFFSET = 0;
36
+ const NONCE_OFFSET = 1;
37
+ const ORIGIN_OFFSET = 5;
38
+ const SENDER_OFFSET = 9;
39
+ const DESTINATION_OFFSET = 41;
40
+ const RECIPIENT_OFFSET = 45;
41
+ const BODY_OFFSET = 77;
42
+ const buf = Buffer.from(utils.arrayify(message));
43
+ const version = buf.readUint8(VERSION_OFFSET);
44
+ const nonce = buf.readUInt32BE(NONCE_OFFSET);
45
+ const origin = buf.readUInt32BE(ORIGIN_OFFSET);
46
+ const sender = utils.hexlify(buf.slice(SENDER_OFFSET, DESTINATION_OFFSET));
47
+ const destination = buf.readUInt32BE(DESTINATION_OFFSET);
48
+ const recipient = utils.hexlify(buf.slice(RECIPIENT_OFFSET, BODY_OFFSET));
49
+ const body = utils.hexlify(buf.slice(BODY_OFFSET));
50
+ return { version, nonce, origin, sender, destination, recipient, body };
51
+ }
52
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA2B,EAC3B,KAAyB,EACzB,YAAoB,EACpB,UAAmB,EACnB,iBAAyB,EACzB,aAAsB,EACtB,IAAe,EACJ,EAAE;IACb,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1C,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEhD,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,CAC9B,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EACtE;QACE,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,iBAAiB;QACjB,aAAa;QACb,IAAI;KACL,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,OAAkB;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,cAAc,GAAG,CAAC,CAAC;IACzB,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAC5B,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ParsedLegacyMultisigIsmMetadata } from './types.js';
2
+ export declare const parseLegacyMultisigIsmMetadata: (metadata: string) => ParsedLegacyMultisigIsmMetadata;
3
+ export declare const formatLegacyMultisigIsmMetadata: (metadata: ParsedLegacyMultisigIsmMetadata) => string;
4
+ //# sourceMappingURL=multisig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../src/multisig.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE7D,eAAO,MAAM,8BAA8B,aAC/B,MAAM,KACf,+BA4CF,CAAC;AAEF,eAAO,MAAM,+BAA+B,aAChC,+BAA+B,KACxC,MAqBF,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { BigNumber } from 'bignumber.js';
2
+ import { utils } from 'ethers';
3
+ import { addressToBytes32 } from './addresses.js';
4
+ export const parseLegacyMultisigIsmMetadata = (metadata) => {
5
+ const MERKLE_ROOT_OFFSET = 0;
6
+ const MERKLE_INDEX_OFFSET = 32;
7
+ const ORIGIN_MAILBOX_OFFSET = 36;
8
+ const MERKLE_PROOF_OFFSET = 68;
9
+ const THRESHOLD_OFFSET = 1092;
10
+ const SIGNATURES_OFFSET = 1093;
11
+ const SIGNATURE_LENGTH = 65;
12
+ const buf = Buffer.from(utils.arrayify(metadata));
13
+ const checkpointRoot = utils.hexlify(buf.slice(MERKLE_ROOT_OFFSET, MERKLE_INDEX_OFFSET));
14
+ const checkpointIndex = BigNumber(utils.hexlify(buf.slice(MERKLE_INDEX_OFFSET, ORIGIN_MAILBOX_OFFSET))).toNumber();
15
+ const originMailbox = utils.hexlify(buf.slice(ORIGIN_MAILBOX_OFFSET, MERKLE_PROOF_OFFSET));
16
+ const parseBytesArray = (start, count, size) => {
17
+ return [...Array(count).keys()].map((i) => utils.hexlify(buf.slice(start + size * i, start + size * (i + 1))));
18
+ };
19
+ const proof = parseBytesArray(MERKLE_PROOF_OFFSET, 32, 32);
20
+ const threshold = BigNumber(utils.hexlify(buf.slice(THRESHOLD_OFFSET, SIGNATURES_OFFSET))).toNumber();
21
+ const signatures = parseBytesArray(SIGNATURES_OFFSET, threshold, SIGNATURE_LENGTH);
22
+ const VALIDATORS_OFFSET = SIGNATURES_OFFSET + threshold * SIGNATURE_LENGTH;
23
+ const addressesCount = buf.slice(VALIDATORS_OFFSET).length / 32;
24
+ const validators = parseBytesArray(VALIDATORS_OFFSET, addressesCount, 32);
25
+ return {
26
+ checkpointRoot,
27
+ checkpointIndex,
28
+ originMailbox,
29
+ proof,
30
+ signatures,
31
+ validators,
32
+ };
33
+ };
34
+ export const formatLegacyMultisigIsmMetadata = (metadata) => {
35
+ return utils.solidityPack([
36
+ 'bytes32',
37
+ 'uint32',
38
+ 'bytes32',
39
+ 'bytes32[32]',
40
+ 'uint8',
41
+ 'bytes',
42
+ 'address[]',
43
+ ], [
44
+ metadata.checkpointRoot,
45
+ metadata.checkpointIndex,
46
+ addressToBytes32(metadata.originMailbox),
47
+ metadata.proof,
48
+ metadata.signatures.length,
49
+ utils.hexConcat(metadata.signatures),
50
+ metadata.validators,
51
+ ]);
52
+ };
53
+ //# sourceMappingURL=multisig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisig.js","sourceRoot":"","sources":["../src/multisig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare function isObject(item: any): any;
2
+ export declare function deepEquals(v1: any, v2: any): boolean;
3
+ export declare function deepCopy(v: any): any;
4
+ export type ValueOf<T> = T[keyof T];
5
+ export declare function objKeys<T extends string | number>(obj: Record<T, any>): T[];
6
+ export declare function objLength(obj: Record<any, any>): number;
7
+ export declare function isObjEmpty(obj: Record<any, any>): boolean;
8
+ export declare function objMapEntries<M extends Record<K, I>, K extends keyof M, O, I = ValueOf<M>>(obj: M, func: (k: K, v: I) => O): [K, O][];
9
+ export declare function objMap<M extends Record<K, I>, K extends keyof M, O, I = ValueOf<M>>(obj: M, func: (k: K, v: I) => O): Record<K, O>;
10
+ export declare function objFilter<K extends string, I, O extends I>(obj: Record<K, I>, func: (k: K, v: I) => v is O): Record<K, O>;
11
+ export declare function promiseObjAll<K extends string, V>(obj: {
12
+ [key in K]: Promise<V>;
13
+ }): Promise<Record<K, V>>;
14
+ export declare function pick<K extends string, V = any>(obj: Record<K, V>, keys: K[]): Record<K, V>;
15
+ export declare function objMerge(a: Record<string, any>, b: Record<string, any>, max_depth?: number): any;
16
+ export declare function invertKeysAndValues(data: any): any;
17
+ export declare function arrayToObject(keys: Array<string>, val?: boolean): Record<string, boolean>;
18
+ export declare function stringifyObject(object: object, format?: 'json' | 'yaml', space?: number): string;
19
+ //# sourceMappingURL=objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../src/objects.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,OAEjC;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,WAE1C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,OAE9B;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAGpC,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAE3E;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,UAE9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,WAE/C;AAED,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,EACD,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAE3C;AAGD,wBAAgB,MAAM,CACpB,CAAC,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,EACD,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAE/C;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,EACxD,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACjB,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAC3B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAId;AAGD,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE;KACrD,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAKxB;AAGD,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,gBAS3E;AAID,wBAAgB,QAAQ,CACtB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtB,SAAS,SAAK,GACb,GAAG,CAsBL;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,OAI5C;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,UAAO,2BAK5D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,GAAG,MAAe,EAChC,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAQR"}
@@ -0,0 +1,95 @@
1
+ import { stringify as yamlStringify } from 'yaml';
2
+ import { ethersBigNumberSerializer } from './logging.js';
3
+ export function isObject(item) {
4
+ return item && typeof item === 'object' && !Array.isArray(item);
5
+ }
6
+ export function deepEquals(v1, v2) {
7
+ return JSON.stringify(v1) === JSON.stringify(v2);
8
+ }
9
+ export function deepCopy(v) {
10
+ return JSON.parse(JSON.stringify(v));
11
+ }
12
+ // Useful for maintaining type safety when using Object.keys
13
+ export function objKeys(obj) {
14
+ return Object.keys(obj);
15
+ }
16
+ export function objLength(obj) {
17
+ return Object.keys(obj).length;
18
+ }
19
+ export function isObjEmpty(obj) {
20
+ return objLength(obj) === 0;
21
+ }
22
+ export function objMapEntries(obj, func) {
23
+ return Object.entries(obj).map(([k, v]) => [k, func(k, v)]);
24
+ }
25
+ // Map over the values of the object
26
+ export function objMap(obj, func) {
27
+ return Object.fromEntries(objMapEntries(obj, func));
28
+ }
29
+ export function objFilter(obj, func) {
30
+ return Object.fromEntries(Object.entries(obj).filter(([k, v]) => func(k, v)));
31
+ }
32
+ // promiseObjectAll :: {k: Promise a} -> Promise {k: a}
33
+ export function promiseObjAll(obj) {
34
+ const promiseList = Object.entries(obj).map(([name, promise]) => promise.then((result) => [name, result]));
35
+ return Promise.all(promiseList).then(Object.fromEntries);
36
+ }
37
+ // Get the subset of the object from key list
38
+ export function pick(obj, keys) {
39
+ const ret = {};
40
+ const objKeys = Object.keys(obj);
41
+ for (const key of keys) {
42
+ if (objKeys.includes(key)) {
43
+ ret[key] = obj[key];
44
+ }
45
+ }
46
+ return ret;
47
+ }
48
+ // Recursively merges b into a
49
+ // Where there are conflicts, b takes priority over a
50
+ export function objMerge(a, b, max_depth = 10) {
51
+ if (max_depth === 0) {
52
+ throw new Error('objMerge tried to go too deep');
53
+ }
54
+ if (isObject(a) && isObject(b)) {
55
+ const ret = {};
56
+ const aKeys = new Set(Object.keys(a));
57
+ const bKeys = new Set(Object.keys(b));
58
+ const allKeys = new Set([...aKeys, ...bKeys]);
59
+ for (const key of allKeys.values()) {
60
+ if (aKeys.has(key) && bKeys.has(key)) {
61
+ ret[key] = objMerge(a[key], b[key], max_depth - 1);
62
+ }
63
+ else if (aKeys.has(key)) {
64
+ ret[key] = a[key];
65
+ }
66
+ else {
67
+ ret[key] = b[key];
68
+ }
69
+ }
70
+ return ret;
71
+ }
72
+ else {
73
+ return b ? b : a;
74
+ }
75
+ }
76
+ export function invertKeysAndValues(data) {
77
+ return Object.fromEntries(Object.entries(data).map(([key, value]) => [value, key]));
78
+ }
79
+ // Returns an object with the keys as values from an array and value set to true
80
+ export function arrayToObject(keys, val = true) {
81
+ return keys.reduce((result, k) => {
82
+ result[k] = val;
83
+ return result;
84
+ }, {});
85
+ }
86
+ export function stringifyObject(object, format = 'yaml', space) {
87
+ // run through JSON first because ethersBigNumberSerializer does not play nice with yamlStringify
88
+ // so we fix up in JSON, then parse and if required return yaml on processed JSON after
89
+ const json = JSON.stringify(object, ethersBigNumberSerializer, space);
90
+ if (format === 'json') {
91
+ return json;
92
+ }
93
+ return yamlStringify(JSON.parse(json), null, space);
94
+ }
95
+ //# sourceMappingURL=objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../src/objects.ts"],"names":[],"mappings":"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"}
package/dist/sets.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare function difference<T>(a: Set<T>, b: Set<T>): Set<T>;
2
+ export declare function symmetricDifference<T>(a: Set<T>, b: Set<T>): Set<T>;
3
+ export declare function setEquality<T>(a: Set<T>, b: Set<T>): boolean;
4
+ //# sourceMappingURL=sets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sets.d.ts","sourceRoot":"","sources":["../src/sets.ts"],"names":[],"mappings":"AACA,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,UAMjD;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,UAU1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,WAElD"}
package/dist/sets.js ADDED
@@ -0,0 +1,24 @@
1
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#implementing_basic_set_operations
2
+ export function difference(a, b) {
3
+ const _difference = new Set(a);
4
+ for (const elem of b) {
5
+ _difference.delete(elem);
6
+ }
7
+ return _difference;
8
+ }
9
+ export function symmetricDifference(a, b) {
10
+ const _difference = new Set(a);
11
+ for (const elem of b) {
12
+ if (_difference.has(elem)) {
13
+ _difference.delete(elem);
14
+ }
15
+ else {
16
+ _difference.add(elem);
17
+ }
18
+ }
19
+ return _difference;
20
+ }
21
+ export function setEquality(a, b) {
22
+ return symmetricDifference(a, b).size === 0;
23
+ }
24
+ //# sourceMappingURL=sets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sets.js","sourceRoot":"","sources":["../src/sets.ts"],"names":[],"mappings":"AAAA,yHAAyH;AACzH,MAAM,UAAU,UAAU,CAAI,CAAS,EAAE,CAAS;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACrB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAI,CAAS,EAAE,CAAS;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,CAAS,EAAE,CAAS;IACjD,OAAO,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;AAC9C,CAAC"}
@@ -9,7 +9,7 @@ function toBase64(data) {
9
9
  return btoa(JSON.stringify(data));
10
10
  }
11
11
  catch (error) {
12
- (0, logging_1.log)('Unable to serialize + encode data to base64', data);
12
+ logging_1.rootLogger.error('Unable to serialize + encode data to base64', data);
13
13
  return undefined;
14
14
  }
15
15
  }
@@ -22,7 +22,7 @@ function fromBase64(data) {
22
22
  return JSON.parse(atob(msg));
23
23
  }
24
24
  catch (error) {
25
- (0, logging_1.log)('Unable to decode + deserialize data from base64', data);
25
+ logging_1.rootLogger.error('Unable to decode + deserialize data from base64', data);
26
26
  return undefined;
27
27
  }
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/base64.ts"],"names":[],"mappings":";;;AAAA,uCAAgC;AAEhC,SAAgB,QAAQ,CAAC,IAAS;IAChC,IAAI;QACF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;KACnC;IAAC,OAAO,KAAK,EAAE;QACd,IAAA,aAAG,EAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AARD,4BAQC;AAED,SAAgB,UAAU,CAAI,IAAuB;IACnD,IAAI;QACF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9B;IAAC,OAAO,KAAK,EAAE;QACd,IAAA,aAAG,EAAC,iDAAiD,EAAE,IAAI,CAAC,CAAC;QAC7D,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AATD,gCASC"}
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/base64.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AAEvC,SAAgB,QAAQ,CAAC,IAAS;IAChC,IAAI;QACF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;KACnC;IAAC,OAAO,KAAK,EAAE;QACd,oBAAU,CAAC,KAAK,CAAC,6CAA6C,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AARD,4BAQC;AAED,SAAgB,UAAU,CAAI,IAAuB;IACnD,IAAI;QACF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9B;IAAC,OAAO,KAAK,EAAE;QACd,oBAAU,CAAC,KAAK,CAAC,iDAAiD,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AATD,gCASC"}
package/dist/src/env.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare function safelyAccessEnvVar(name: string): string | undefined;
1
+ export declare function safelyAccessEnvVar(name: string, toLowerCase?: boolean): string | undefined;
2
2
  //# sourceMappingURL=env.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,sBAM9C"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,UAAQ,sBAMnE"}
package/dist/src/env.js CHANGED
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.safelyAccessEnvVar = void 0;
4
4
  // Should be used instead of referencing process directly in case we don't
5
5
  // run in node.js
6
- function safelyAccessEnvVar(name) {
6
+ function safelyAccessEnvVar(name, toLowerCase = false) {
7
7
  try {
8
- return process.env[name];
8
+ return toLowerCase ? process.env[name]?.toLowerCase() : process.env[name];
9
9
  }
10
10
  catch (error) {
11
11
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AAC1E,iBAAiB;AACjB,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,IAAI;QACF,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC1B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAND,gDAMC"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AAC1E,iBAAiB;AACjB,SAAgB,kBAAkB,CAAC,IAAY,EAAE,WAAW,GAAG,KAAK;IAClE,IAAI;QACF,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC3E;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAND,gDAMC"}
@@ -1,6 +1,20 @@
1
- export declare function trace(message: string, data?: any): void;
2
- export declare function debug(message: string, data?: any): void;
3
- export declare function log(message: string, data?: any): void;
4
- export declare function warn(message: string, data?: any): void;
5
- export declare function error(message: string, data?: any): void;
1
+ import { LevelWithSilent, Logger, pino } from 'pino';
2
+ export declare enum LogLevel {
3
+ Debug = "debug",
4
+ Info = "info",
5
+ Warn = "warn",
6
+ Error = "error",
7
+ Off = "off"
8
+ }
9
+ export declare function getLogLevel(): pino.LevelWithSilent;
10
+ export declare enum LogFormat {
11
+ Pretty = "pretty",
12
+ JSON = "json"
13
+ }
14
+ export declare function getLogFormat(): LogFormat;
15
+ export declare let rootLogger: Logger<never>;
16
+ export declare function getRootLogger(): Logger<never>;
17
+ export declare function configureRootLogger(newLogFormat: LogFormat, newLogLevel: LogLevel): Logger<never>;
18
+ export declare function setRootLogger(logger: Logger): Logger<never>;
19
+ export declare function createHyperlanePinoLogger(logLevel: LevelWithSilent, logFormat: LogFormat): Logger<never>;
6
20
  //# sourceMappingURL=logging.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAcA,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,QAEhD;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,QAEhD;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,QAE9C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,QAE/C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,QAEhD"}
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AASrD,oBAAY,QAAQ;IAClB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ;AAYD,wBAAgB,WAAW,yBAE1B;AAED,oBAAY,SAAS;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAQD,wBAAgB,YAAY,cAE3B;AAGD,eAAO,IAAI,UAAU,eAAiD,CAAC;AAEvE,wBAAgB,aAAa,kBAE5B;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,QAAQ,iBAMtB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,iBAG3C;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,SAAS,iBA2BrB"}
@@ -1,44 +1,89 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.error = exports.warn = exports.log = exports.debug = exports.trace = void 0;
3
+ exports.createHyperlanePinoLogger = exports.setRootLogger = exports.configureRootLogger = exports.getRootLogger = exports.rootLogger = exports.getLogFormat = exports.LogFormat = exports.getLogLevel = exports.LogLevel = void 0;
4
+ const pino_1 = require("pino");
4
5
  const env_1 = require("./env");
5
- const ENV_LOG_LEVEL = ((0, env_1.safelyAccessEnvVar)('LOG_LEVEL') ?? 'debug').toLowerCase();
6
- const LOG_TRACE = ENV_LOG_LEVEL == 'trace';
7
- const LOG_DEBUG = LOG_TRACE || ENV_LOG_LEVEL == 'debug';
8
- const LOG_INFO = LOG_DEBUG || ENV_LOG_LEVEL == 'info';
9
- const LOG_WARN = LOG_INFO || ENV_LOG_LEVEL == 'warn';
10
- const LOG_ERROR = LOG_WARN || ENV_LOG_LEVEL == 'error';
11
- function trace(message, data) {
12
- if (LOG_TRACE)
13
- logWithFunction(console.trace, 'trace', message, data);
6
+ // Level and format here should correspond with the agent options as much as possible
7
+ // https://docs.hyperlane.xyz/docs/operate/config-reference#logfmt
8
+ // A custom enum definition because pino does not export an enum
9
+ // and because we use 'off' instead of 'silent' to match the agent options
10
+ var LogLevel;
11
+ (function (LogLevel) {
12
+ LogLevel["Debug"] = "debug";
13
+ LogLevel["Info"] = "info";
14
+ LogLevel["Warn"] = "warn";
15
+ LogLevel["Error"] = "error";
16
+ LogLevel["Off"] = "off";
17
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
18
+ let logLevel = toPinoLevel((0, env_1.safelyAccessEnvVar)('LOG_LEVEL', true)) || 'info';
19
+ function toPinoLevel(level) {
20
+ if (level && pino_1.pino.levels.values[level])
21
+ return level;
22
+ // For backwards compat and also to match agent level options
23
+ else if (level === 'none' || level === 'off')
24
+ return 'silent';
25
+ else
26
+ return undefined;
14
27
  }
15
- exports.trace = trace;
16
- function debug(message, data) {
17
- if (LOG_DEBUG)
18
- logWithFunction(console.debug, 'debug', message, data);
28
+ function getLogLevel() {
29
+ return logLevel;
19
30
  }
20
- exports.debug = debug;
21
- function log(message, data) {
22
- if (LOG_INFO)
23
- logWithFunction(console.log, 'info', message, data);
31
+ exports.getLogLevel = getLogLevel;
32
+ var LogFormat;
33
+ (function (LogFormat) {
34
+ LogFormat["Pretty"] = "pretty";
35
+ LogFormat["JSON"] = "json";
36
+ })(LogFormat || (exports.LogFormat = LogFormat = {}));
37
+ let logFormat = LogFormat.JSON;
38
+ const envLogFormat = (0, env_1.safelyAccessEnvVar)('LOG_FORMAT', true);
39
+ if (envLogFormat && Object.values(LogFormat).includes(envLogFormat))
40
+ logFormat = envLogFormat;
41
+ function getLogFormat() {
42
+ return logFormat;
24
43
  }
25
- exports.log = log;
26
- function warn(message, data) {
27
- if (LOG_WARN)
28
- logWithFunction(console.warn, 'warn', message, data);
44
+ exports.getLogFormat = getLogFormat;
45
+ // Note, for brevity and convenience, the rootLogger is exported directly
46
+ exports.rootLogger = createHyperlanePinoLogger(logLevel, logFormat);
47
+ function getRootLogger() {
48
+ return exports.rootLogger;
29
49
  }
30
- exports.warn = warn;
31
- function error(message, data) {
32
- if (LOG_ERROR)
33
- logWithFunction(console.error, 'error', message, data);
50
+ exports.getRootLogger = getRootLogger;
51
+ function configureRootLogger(newLogFormat, newLogLevel) {
52
+ logFormat = newLogFormat;
53
+ logLevel = toPinoLevel(newLogLevel) || logLevel;
54
+ exports.rootLogger = createHyperlanePinoLogger(logLevel, logFormat);
55
+ return exports.rootLogger;
34
56
  }
35
- exports.error = error;
36
- function logWithFunction(logFn, level, message, data) {
37
- const fullLog = {
38
- ...data,
39
- level,
40
- message,
41
- };
42
- logFn(JSON.stringify(fullLog));
57
+ exports.configureRootLogger = configureRootLogger;
58
+ function setRootLogger(logger) {
59
+ exports.rootLogger = logger;
60
+ return exports.rootLogger;
43
61
  }
62
+ exports.setRootLogger = setRootLogger;
63
+ function createHyperlanePinoLogger(logLevel, logFormat) {
64
+ return (0, pino_1.pino)({
65
+ level: logLevel,
66
+ name: 'hyperlane',
67
+ formatters: {
68
+ // Remove pino's default bindings of hostname but keep pid
69
+ bindings: (defaultBindings) => ({ pid: defaultBindings.pid }),
70
+ },
71
+ hooks: {
72
+ logMethod(inputArgs, method, level) {
73
+ // Pino has no simple way of setting custom log shapes and they
74
+ // recommend against using pino-pretty in production so when
75
+ // pretty is enabled we circumvent pino and log directly to console
76
+ if (logFormat === LogFormat.Pretty &&
77
+ level >= pino_1.pino.levels.values[logLevel]) {
78
+ // eslint-disable-next-line no-console
79
+ console.log(...inputArgs);
80
+ // Then return null to prevent pino from logging
81
+ return null;
82
+ }
83
+ return method.apply(this, inputArgs);
84
+ },
85
+ },
86
+ });
87
+ }
88
+ exports.createHyperlanePinoLogger = createHyperlanePinoLogger;
44
89
  //# sourceMappingURL=logging.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":";;;AAAA,+BAA2C;AAK3C,MAAM,aAAa,GAAG,CACpB,IAAA,wBAAkB,EAAC,WAAW,CAAC,IAAI,OAAO,CAC3C,CAAC,WAAW,EAAe,CAAC;AAC7B,MAAM,SAAS,GAAG,aAAa,IAAI,OAAO,CAAC;AAC3C,MAAM,SAAS,GAAG,SAAS,IAAI,aAAa,IAAI,OAAO,CAAC;AACxD,MAAM,QAAQ,GAAG,SAAS,IAAI,aAAa,IAAI,MAAM,CAAC;AACtD,MAAM,QAAQ,GAAG,QAAQ,IAAI,aAAa,IAAI,MAAM,CAAC;AACrD,MAAM,SAAS,GAAG,QAAQ,IAAI,aAAa,IAAI,OAAO,CAAC;AAEvD,SAAgB,KAAK,CAAC,OAAe,EAAE,IAAU;IAC/C,IAAI,SAAS;QAAE,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAFD,sBAEC;AAED,SAAgB,KAAK,CAAC,OAAe,EAAE,IAAU;IAC/C,IAAI,SAAS;QAAE,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAFD,sBAEC;AAED,SAAgB,GAAG,CAAC,OAAe,EAAE,IAAU;IAC7C,IAAI,QAAQ;QAAE,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AAFD,kBAEC;AAED,SAAgB,IAAI,CAAC,OAAe,EAAE,IAAU;IAC9C,IAAI,QAAQ;QAAE,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrE,CAAC;AAFD,oBAEC;AAED,SAAgB,KAAK,CAAC,OAAe,EAAE,IAAU;IAC/C,IAAI,SAAS;QAAE,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAFD,sBAEC;AAED,SAAS,eAAe,CACtB,KAAmC,EACnC,KAAgB,EAChB,OAAe,EACf,IAAU;IAEV,MAAM,OAAO,GAAG;QACd,GAAG,IAAI;QACP,KAAK;QACL,OAAO;KACR,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ export declare function toTitleCase(str: string): string;
3
+ export declare function sanitizeString(str: string): string;
4
+ export declare function trimToLength(value: string, maxLength: number): string;
5
+ export declare function streamToString(stream: NodeJS.ReadableStream): Promise<string>;
6
+ export declare function errorToString(error: any, maxLength?: number): string;
7
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";AAAA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,UAItC;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,UAGzC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAM5D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAS7E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,SAAM,UAOxD"}
@@ -0,0 +1,43 @@
1
+ export function toTitleCase(str) {
2
+ return str.replace(/\w\S*/g, (txt) => {
3
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
4
+ });
5
+ }
6
+ // Only allows letters and numbers
7
+ const alphanumericRgex = /[^a-zA-Z0-9]/gi;
8
+ export function sanitizeString(str) {
9
+ if (!str || typeof str !== 'string')
10
+ return '';
11
+ return str.replaceAll(alphanumericRgex, '').toLowerCase();
12
+ }
13
+ export function trimToLength(value, maxLength) {
14
+ if (!value)
15
+ return '';
16
+ const trimmed = value.trim();
17
+ return trimmed.length > maxLength
18
+ ? trimmed.substring(0, maxLength) + '...'
19
+ : trimmed;
20
+ }
21
+ export function streamToString(stream) {
22
+ return new Promise((resolve, reject) => {
23
+ const chunks = [];
24
+ stream
25
+ .setEncoding('utf8')
26
+ .on('data', (chunk) => chunks.push(chunk))
27
+ .on('error', (err) => reject(err))
28
+ .on('end', () => resolve(String.prototype.concat(...chunks)));
29
+ });
30
+ }
31
+ export function errorToString(error, maxLength = 300) {
32
+ if (!error)
33
+ return 'Unknown Error';
34
+ if (typeof error === 'string')
35
+ return trimToLength(error, maxLength);
36
+ if (typeof error === 'number')
37
+ return `Error code: ${error}`;
38
+ const details = error.message || error.reason || error;
39
+ if (typeof details === 'string')
40
+ return trimToLength(details, maxLength);
41
+ return trimToLength(JSON.stringify(details), maxLength);
42
+ }
43
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QACnC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kCAAkC;AAClC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAC1C,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/C,OAAO,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,SAAiB;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,SAAS;QAC/B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK;QACzC,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA6B;IAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM;aACH,WAAW,CAAC,MAAM,CAAC;aACnB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACzC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACjC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAU,EAAE,SAAS,GAAG,GAAG;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,eAAe,KAAK,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;IACvD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzE,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function isNullish<T>(val: T): val is T extends null | undefined ? T : never;
2
+ export declare function isNumeric(value: string | number): boolean;
3
+ //# sourceMappingURL=typeof.d.ts.map