@lidofinance/lsv-cli 1.7.0 → 1.9.0

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 (202) hide show
  1. package/README.md +9 -1
  2. package/dist/abi/defi-wrapper/GenericStrategy.d.ts +308 -0
  3. package/dist/abi/defi-wrapper/GenericStrategy.js +409 -0
  4. package/dist/abi/defi-wrapper/GenericStrategy.js.map +1 -0
  5. package/dist/abi/defi-wrapper/MellowStrategy.d.ts +429 -0
  6. package/dist/abi/defi-wrapper/MellowStrategy.js +892 -0
  7. package/dist/abi/defi-wrapper/MellowStrategy.js.map +1 -0
  8. package/dist/abi/defi-wrapper/index.d.ts +2 -0
  9. package/dist/abi/defi-wrapper/index.js +2 -0
  10. package/dist/abi/defi-wrapper/index.js.map +1 -1
  11. package/dist/abi/defi-wrapper/sources.d.ts +103 -0
  12. package/dist/abi/defi-wrapper/sources.js +104 -0
  13. package/dist/abi/defi-wrapper/sources.js.map +1 -0
  14. package/dist/configs/constants.d.ts +7 -1
  15. package/dist/configs/deployed.d.ts +5 -0
  16. package/dist/configs/deployed.js +20 -2
  17. package/dist/configs/deployed.js.map +1 -1
  18. package/dist/configs/envs.js +2 -0
  19. package/dist/configs/envs.js.map +1 -1
  20. package/dist/contracts/defi-wrapper/generic-strategy.d.ts +5 -0
  21. package/dist/contracts/defi-wrapper/generic-strategy.js +12 -0
  22. package/dist/contracts/defi-wrapper/generic-strategy.js.map +1 -0
  23. package/dist/contracts/defi-wrapper/index.d.ts +1 -0
  24. package/dist/contracts/defi-wrapper/index.js +1 -0
  25. package/dist/contracts/defi-wrapper/index.js.map +1 -1
  26. package/dist/features/defi-wrapper/defi-wrapper-factory.d.ts +3 -0
  27. package/dist/features/defi-wrapper/defi-wrapper-factory.js +4 -1
  28. package/dist/features/defi-wrapper/defi-wrapper-factory.js.map +1 -1
  29. package/dist/features/defi-wrapper/index.d.ts +1 -0
  30. package/dist/features/defi-wrapper/index.js +1 -0
  31. package/dist/features/defi-wrapper/index.js.map +1 -1
  32. package/dist/features/defi-wrapper/pool-info.d.ts +18 -1
  33. package/dist/features/defi-wrapper/pool-info.js +47 -3
  34. package/dist/features/defi-wrapper/pool-info.js.map +1 -1
  35. package/dist/features/defi-wrapper/timelock-roles.d.ts +5 -0
  36. package/dist/features/defi-wrapper/timelock-roles.js +43 -0
  37. package/dist/features/defi-wrapper/timelock-roles.js.map +1 -0
  38. package/dist/features/defi-wrapper/timelock.d.ts +8929 -8
  39. package/dist/features/defi-wrapper/timelock.js +83 -52
  40. package/dist/features/defi-wrapper/timelock.js.map +1 -1
  41. package/dist/features/defi-wrapper/verify-contracts.d.ts +20 -0
  42. package/dist/features/defi-wrapper/verify-contracts.js +145 -0
  43. package/dist/features/defi-wrapper/verify-contracts.js.map +1 -0
  44. package/dist/features/utils/try-fetch.js +2 -0
  45. package/dist/features/utils/try-fetch.js.map +1 -1
  46. package/dist/programs/account/write.js +2 -1
  47. package/dist/programs/account/write.js.map +1 -1
  48. package/dist/programs/defi-wrapper/contracts/factory/write.js +77 -6
  49. package/dist/programs/defi-wrapper/contracts/factory/write.js.map +1 -1
  50. package/dist/programs/defi-wrapper/contracts/index.d.ts +1 -0
  51. package/dist/programs/defi-wrapper/contracts/index.js +1 -0
  52. package/dist/programs/defi-wrapper/contracts/index.js.map +1 -1
  53. package/dist/programs/defi-wrapper/contracts/strategy/config.d.ts +3 -0
  54. package/dist/programs/defi-wrapper/contracts/strategy/config.js +40 -0
  55. package/dist/programs/defi-wrapper/contracts/strategy/config.js.map +1 -0
  56. package/dist/programs/defi-wrapper/contracts/strategy/index.d.ts +3 -0
  57. package/dist/programs/defi-wrapper/contracts/strategy/index.js +4 -0
  58. package/dist/programs/defi-wrapper/contracts/strategy/index.js.map +1 -0
  59. package/dist/programs/defi-wrapper/contracts/strategy/main.d.ts +1 -0
  60. package/dist/programs/defi-wrapper/contracts/strategy/main.js +6 -0
  61. package/dist/programs/defi-wrapper/contracts/strategy/main.js.map +1 -0
  62. package/dist/programs/defi-wrapper/contracts/strategy/read.d.ts +1 -0
  63. package/dist/programs/defi-wrapper/contracts/strategy/read.js +30 -0
  64. package/dist/programs/defi-wrapper/contracts/strategy/read.js.map +1 -0
  65. package/dist/programs/defi-wrapper/contracts/strategy/write.d.ts +1 -0
  66. package/dist/programs/defi-wrapper/contracts/strategy/write.js +34 -0
  67. package/dist/programs/defi-wrapper/contracts/strategy/write.js.map +1 -0
  68. package/dist/programs/defi-wrapper/contracts/stv-steth-pool/write.js +25 -21
  69. package/dist/programs/defi-wrapper/contracts/stv-steth-pool/write.js.map +1 -1
  70. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/write.js +3 -4
  71. package/dist/programs/defi-wrapper/contracts/withdrawal-queue/write.js.map +1 -1
  72. package/dist/programs/defi-wrapper/use-cases/distributor/write.js +1 -0
  73. package/dist/programs/defi-wrapper/use-cases/distributor/write.js.map +1 -1
  74. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.js +25 -7
  75. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/read.js.map +1 -1
  76. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.js +195 -17
  77. package/dist/programs/defi-wrapper/use-cases/timelock-governance/common/write.js.map +1 -1
  78. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.js +3 -3
  79. package/dist/programs/defi-wrapper/use-cases/timelock-governance/dashboard/write.js.map +1 -1
  80. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.d.ts +1 -0
  81. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.js +1 -0
  82. package/dist/programs/defi-wrapper/use-cases/timelock-governance/index.js.map +1 -1
  83. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.js +4 -4
  84. package/dist/programs/defi-wrapper/use-cases/timelock-governance/pool/write.js.map +1 -1
  85. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.js +3 -3
  86. package/dist/programs/defi-wrapper/use-cases/timelock-governance/proxy/write.js.map +1 -1
  87. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/index.d.ts +2 -0
  88. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/index.js +3 -0
  89. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/index.js.map +1 -0
  90. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/main.d.ts +1 -0
  91. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/main.js +6 -0
  92. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/main.js.map +1 -0
  93. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/write.d.ts +1 -0
  94. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/write.js +57 -0
  95. package/dist/programs/defi-wrapper/use-cases/timelock-governance/strategy/write.js.map +1 -0
  96. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.js +4 -4
  97. package/dist/programs/defi-wrapper/use-cases/timelock-governance/withdrawal-queue/write.js.map +1 -1
  98. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/read.js +32 -11
  99. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/read.js.map +1 -1
  100. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/write.js +14 -12
  101. package/dist/programs/defi-wrapper/use-cases/wrapper-operations/write.js.map +1 -1
  102. package/dist/programs/use-cases/consolidation/write.js +2 -0
  103. package/dist/programs/use-cases/consolidation/write.js.map +1 -1
  104. package/dist/providers/wallet.d.ts +2936 -8456
  105. package/dist/providers/wallet.js +74 -2
  106. package/dist/providers/wallet.js.map +1 -1
  107. package/dist/tests/integration/gas-estimation.test.d.ts +1 -0
  108. package/dist/tests/integration/gas-estimation.test.js +76 -0
  109. package/dist/tests/integration/gas-estimation.test.js.map +1 -0
  110. package/dist/tests/integration/helpers/test-client.d.ts +2071 -5761
  111. package/dist/tests/utils/arguments-security.test.d.ts +1 -0
  112. package/dist/tests/utils/arguments-security.test.js +34 -0
  113. package/dist/tests/utils/arguments-security.test.js.map +1 -0
  114. package/dist/tests/utils/arguments.test.js +2 -20
  115. package/dist/tests/utils/arguments.test.js.map +1 -1
  116. package/dist/tests/utils/cache-security.test.d.ts +1 -0
  117. package/dist/tests/utils/cache-security.test.js +62 -0
  118. package/dist/tests/utils/cache-security.test.js.map +1 -0
  119. package/dist/tests/utils/contract-write-stateoverride.test.d.ts +1 -0
  120. package/dist/tests/utils/contract-write-stateoverride.test.js +135 -0
  121. package/dist/tests/utils/contract-write-stateoverride.test.js.map +1 -0
  122. package/dist/tests/utils/data-validators.test.js +21 -5
  123. package/dist/tests/utils/data-validators.test.js.map +1 -1
  124. package/dist/tests/utils/deployed-security.test.d.ts +1 -0
  125. package/dist/tests/utils/deployed-security.test.js +51 -0
  126. package/dist/tests/utils/deployed-security.test.js.map +1 -0
  127. package/dist/tests/utils/get-confirmations.test.d.ts +1 -0
  128. package/dist/tests/utils/get-confirmations.test.js +40 -0
  129. package/dist/tests/utils/get-confirmations.test.js.map +1 -0
  130. package/dist/tests/utils/ipfs-security.test.d.ts +1 -0
  131. package/dist/tests/utils/ipfs-security.test.js +232 -0
  132. package/dist/tests/utils/ipfs-security.test.js.map +1 -0
  133. package/dist/tests/utils/ipfs.test.js +8 -8
  134. package/dist/tests/utils/ipfs.test.js.map +1 -1
  135. package/dist/tests/utils/parse-abi-arguments.test.d.ts +1 -0
  136. package/dist/tests/utils/parse-abi-arguments.test.js +399 -0
  137. package/dist/tests/utils/parse-abi-arguments.test.js.map +1 -0
  138. package/dist/tests/utils/public-client-gas-estimation.test.d.ts +1 -0
  139. package/dist/tests/utils/public-client-gas-estimation.test.js +231 -0
  140. package/dist/tests/utils/public-client-gas-estimation.test.js.map +1 -0
  141. package/dist/tests/utils/rate-limit-security.test.d.ts +1 -0
  142. package/dist/tests/utils/rate-limit-security.test.js +82 -0
  143. package/dist/tests/utils/rate-limit-security.test.js.map +1 -0
  144. package/dist/tests/utils/salt.test.d.ts +1 -0
  145. package/dist/tests/utils/salt.test.js +20 -0
  146. package/dist/tests/utils/salt.test.js.map +1 -0
  147. package/dist/tests/utils/stream-helpers.d.ts +1 -0
  148. package/dist/tests/utils/stream-helpers.js +11 -0
  149. package/dist/tests/utils/stream-helpers.js.map +1 -0
  150. package/dist/utils/arguments.d.ts +2 -7
  151. package/dist/utils/arguments.js +21 -17
  152. package/dist/utils/arguments.js.map +1 -1
  153. package/dist/utils/cache.js +15 -13
  154. package/dist/utils/cache.js.map +1 -1
  155. package/dist/utils/data-validators.d.ts +3 -2
  156. package/dist/utils/data-validators.js +8 -11
  157. package/dist/utils/data-validators.js.map +1 -1
  158. package/dist/utils/env.d.ts +1 -0
  159. package/dist/utils/env.js +8 -0
  160. package/dist/utils/env.js.map +1 -0
  161. package/dist/utils/fetch-cl.js +2 -1
  162. package/dist/utils/fetch-cl.js.map +1 -1
  163. package/dist/utils/index.d.ts +6 -5
  164. package/dist/utils/index.js +6 -5
  165. package/dist/utils/index.js.map +1 -1
  166. package/dist/utils/ipfs.d.ts +4 -2
  167. package/dist/utils/ipfs.js +93 -11
  168. package/dist/utils/ipfs.js.map +1 -1
  169. package/dist/utils/logging/console.d.ts +1 -0
  170. package/dist/utils/logging/console.js +23 -2
  171. package/dist/utils/logging/console.js.map +1 -1
  172. package/dist/utils/parse-abi-arguments.d.ts +24 -0
  173. package/dist/utils/parse-abi-arguments.js +159 -0
  174. package/dist/utils/parse-abi-arguments.js.map +1 -0
  175. package/dist/utils/prompts/account.d.ts +1 -0
  176. package/dist/utils/prompts/account.js +13 -0
  177. package/dist/utils/prompts/account.js.map +1 -0
  178. package/dist/utils/prompts/index.d.ts +3 -0
  179. package/dist/utils/prompts/index.js +3 -0
  180. package/dist/utils/prompts/index.js.map +1 -1
  181. package/dist/utils/prompts/strategy.d.ts +15398 -0
  182. package/dist/utils/prompts/strategy.js +10 -0
  183. package/dist/utils/prompts/strategy.js.map +1 -0
  184. package/dist/utils/prompts/timelock-roles.d.ts +1 -0
  185. package/dist/utils/prompts/timelock-roles.js +13 -0
  186. package/dist/utils/prompts/timelock-roles.js.map +1 -0
  187. package/dist/utils/rate-limit.d.ts +6 -0
  188. package/dist/utils/rate-limit.js +22 -5
  189. package/dist/utils/rate-limit.js.map +1 -1
  190. package/dist/utils/salt.d.ts +3 -0
  191. package/dist/utils/salt.js +8 -0
  192. package/dist/utils/salt.js.map +1 -0
  193. package/dist/utils/transactions/tx-private-key.d.ts +2 -1
  194. package/dist/utils/transactions/tx-private-key.js +5 -8
  195. package/dist/utils/transactions/tx-private-key.js.map +1 -1
  196. package/dist/utils/transactions/tx-wc.js +3 -7
  197. package/dist/utils/transactions/tx-wc.js.map +1 -1
  198. package/dist/utils/transactions/utils.d.ts +1 -0
  199. package/dist/utils/transactions/utils.js +12 -0
  200. package/dist/utils/transactions/utils.js.map +1 -1
  201. package/dist/version/index.js +1 -1
  202. package/package.json +10 -9
@@ -1,19 +1,20 @@
1
+ export * from './arguments.js';
2
+ export * from './salt.js';
1
3
  export * from './get-value.js';
2
4
  export * from './data-validators.js';
3
5
  export * from './resolve-path.js';
4
6
  export * from './sleep.js';
5
7
  export * from './error-handler.js';
8
+ export * from './get-commands.js';
9
+ export * from './logging/index.js';
10
+ export * from './spinner/index.js';
6
11
  export * from './transactions/index.js';
7
12
  export * from './proof/index.js';
13
+ export * from './get-deposit-data-root.js';
8
14
  export * from './prompts/index.js';
9
- export * from './spinner/index.js';
10
15
  export * from './read-programs-by-abi.js';
11
- export * from './get-commands.js';
12
- export * from './get-deposit-data-root.js';
13
- export * from './arguments.js';
14
16
  export * from './report/index.js';
15
17
  export * from './health/index.js';
16
- export * from './logging/index.js';
17
18
  export * from './fetch-cl.js';
18
19
  export * from './ipfs.js';
19
20
  export * from './commands/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
@@ -1,20 +1,22 @@
1
1
  import { CID, Version } from 'multiformats/cid';
2
2
  export declare const IPFS_GATEWAY = "https://ipfs.io/ipfs";
3
+ export declare const DEFAULT_IPFS_MAX_CONTENT_BYTES: number;
3
4
  export type BigNumberType = 'bigint' | 'string';
4
5
  export type ReportFetchArgs = {
5
6
  cid: string;
6
7
  gateway?: string;
7
8
  bigNumberType?: BigNumberType;
9
+ maxBytes?: number;
8
10
  };
9
11
  export declare const fetchIPFS: <T>(args: ReportFetchArgs, cache?: boolean) => Promise<T>;
10
12
  export declare const fetchIPFSDirect: <T>(args: ReportFetchArgs) => Promise<T>;
11
13
  export declare const fetchIPFSBuffer: (args: ReportFetchArgs) => Promise<Uint8Array>;
12
14
  export declare const calculateIPFSAddCID: (fileContent: Uint8Array, version?: Version) => Promise<CID>;
13
- export declare const fetchIPFSDirectAndVerify: <T>(cid: string, gateway?: string) => Promise<{
15
+ export declare const fetchIPFSDirectAndVerify: <T>(cid: string, gateway?: string, maxBytes?: number) => Promise<{
14
16
  json: T;
15
17
  fileContent: Uint8Array;
16
18
  }>;
17
- export declare const fetchIPFSWithCacheAndVerify: <T>(cid: string, gateway?: string) => Promise<T>;
19
+ export declare const fetchIPFSWithCacheAndVerify: <T>(cid: string, gateway?: string, maxBytes?: number) => Promise<T>;
18
20
  type PinToIPFSArgs = {
19
21
  uploadUrl: string;
20
22
  uploadAuthorization?: string;
@@ -5,25 +5,92 @@ import jsonBigInt from 'json-bigint';
5
5
  import fs from 'node:fs/promises';
6
6
  import path from 'node:path';
7
7
  import { logInfo, logTable } from './logging/console.js';
8
+ import { assertSafeUrl } from './data-validators.js';
9
+ import { parseEnvInt } from './env.js';
8
10
  export const IPFS_GATEWAY = 'https://ipfs.io/ipfs';
11
+ // Max IPFS content size — guards against OOM from an oversized CID.
12
+ // Override: maxBytes arg > IPFS_MAX_CONTENT_BYTES env > this default.
13
+ export const DEFAULT_IPFS_MAX_CONTENT_BYTES = 20 * 1024 * 1024;
9
14
  const IPFS_CACHE_DIR = path.resolve('ipfs-cache');
15
+ // arg > env > default
16
+ const resolveMaxBytes = (override) => {
17
+ if (typeof override === 'number' &&
18
+ Number.isFinite(override) &&
19
+ override > 0) {
20
+ return override;
21
+ }
22
+ return Math.max(1, parseEnvInt(process.env.IPFS_MAX_CONTENT_BYTES, DEFAULT_IPFS_MAX_CONTENT_BYTES));
23
+ };
24
+ // Cheap pre-check. Header may be absent or lie — streaming is the real limit.
25
+ const assertContentLengthWithinLimit = (response, maxBytes) => {
26
+ const declared = Number(response.headers?.get('content-length'));
27
+ if (Number.isFinite(declared) && declared > maxBytes) {
28
+ throw new Error(`IPFS content too large: ${declared} bytes exceeds limit of ${maxBytes} bytes`);
29
+ }
30
+ };
31
+ // Join collected byte chunks into a single buffer.
32
+ const concatChunks = (chunks, total) => {
33
+ const out = new Uint8Array(total);
34
+ let offset = 0;
35
+ for (const chunk of chunks) {
36
+ out.set(chunk, offset);
37
+ offset += chunk.byteLength;
38
+ }
39
+ return out;
40
+ };
41
+ // Read in chunks, abort once total exceeds maxBytes (before full buffering).
42
+ const streamBodyWithLimit = async (body, maxBytes) => {
43
+ const reader = body.getReader();
44
+ const chunks = [];
45
+ let total = 0;
46
+ try {
47
+ while (true) {
48
+ const { done, value } = await reader.read();
49
+ if (done)
50
+ break;
51
+ if (!value)
52
+ continue;
53
+ total += value.byteLength;
54
+ if (total > maxBytes) {
55
+ await reader.cancel();
56
+ throw new Error(`IPFS content exceeds size limit of ${maxBytes} bytes`);
57
+ }
58
+ chunks.push(value);
59
+ }
60
+ }
61
+ finally {
62
+ reader.releaseLock?.();
63
+ }
64
+ return concatChunks(chunks, total);
65
+ };
66
+ // Streaming is the real limit; Content-Length is just an early reject.
67
+ // Fail closed if there's no body — a real fetch always has one for content.
68
+ const readBodyWithLimit = async (response, maxBytes) => {
69
+ assertContentLengthWithinLimit(response, maxBytes);
70
+ if (!response.body) {
71
+ throw new Error('IPFS response has no readable body');
72
+ }
73
+ return streamBodyWithLimit(response.body, maxBytes);
74
+ };
10
75
  export const fetchIPFS = async (args, cache = true) => {
11
- const { cid, gateway = IPFS_GATEWAY } = args;
76
+ const { cid, gateway = IPFS_GATEWAY, maxBytes } = args;
12
77
  if (cache)
13
- return fetchIPFSWithCacheAndVerify(cid, gateway);
14
- const { json } = await fetchIPFSDirectAndVerify(cid, gateway);
78
+ return fetchIPFSWithCacheAndVerify(cid, gateway, maxBytes);
79
+ const { json } = await fetchIPFSDirectAndVerify(cid, gateway, maxBytes);
15
80
  return json;
16
81
  };
17
82
  // Fetching content by CID through IPFS gateway
18
83
  export const fetchIPFSDirect = async (args) => {
19
84
  const { cid, gateway = IPFS_GATEWAY, bigNumberType = 'string' } = args;
85
+ assertSafeUrl(gateway, 'IPFS gateway');
86
+ const maxBytes = resolveMaxBytes(args.maxBytes);
20
87
  const ipfsUrl = `${gateway}/${cid}`;
21
88
  logInfo('Fetching content from', ipfsUrl);
22
89
  const response = await fetch(ipfsUrl);
23
90
  if (!response.ok) {
24
91
  throw new Error(`Failed to fetch IPFS content: ${response.statusText}`);
25
92
  }
26
- const raw = await response.text();
93
+ const raw = new TextDecoder().decode(await readBodyWithLimit(response, maxBytes));
27
94
  const params = bigNumberType === 'bigint'
28
95
  ? { useNativeBigInt: true }
29
96
  : { storeAsString: true };
@@ -33,14 +100,15 @@ export const fetchIPFSDirect = async (args) => {
33
100
  // Fetching buffer content by CID through IPFS gateway
34
101
  export const fetchIPFSBuffer = async (args) => {
35
102
  const { cid, gateway = IPFS_GATEWAY } = args;
103
+ assertSafeUrl(gateway, 'IPFS gateway');
104
+ const maxBytes = resolveMaxBytes(args.maxBytes);
36
105
  const ipfsUrl = `${gateway}/${cid}`;
37
106
  logInfo('Fetching content from', ipfsUrl);
38
107
  const response = await fetch(ipfsUrl);
39
108
  if (!response.ok) {
40
109
  throw new Error(`Failed to fetch IPFS content: ${response.statusText}`);
41
110
  }
42
- const buffer = await response.arrayBuffer();
43
- return new Uint8Array(buffer);
111
+ return readBodyWithLimit(response, maxBytes);
44
112
  };
45
113
  // Recalculate CID using full UnixFS logic (like `ipfs add`)
46
114
  export const calculateIPFSAddCID = async (fileContent, version = 0) => {
@@ -60,9 +128,15 @@ export const calculateIPFSAddCID = async (fileContent, version = 0) => {
60
128
  return lastCid;
61
129
  };
62
130
  // Downloading file from IPFS and checking its integrity
63
- export const fetchIPFSDirectAndVerify = async (cid, gateway = IPFS_GATEWAY) => {
64
- const originalCID = CID.parse(cid);
65
- const fileContent = await fetchIPFSBuffer({ cid, gateway });
131
+ export const fetchIPFSDirectAndVerify = async (cid, gateway = IPFS_GATEWAY, maxBytes) => {
132
+ let originalCID;
133
+ try {
134
+ originalCID = CID.parse(cid);
135
+ }
136
+ catch {
137
+ throw new Error(`Invalid IPFS CID: ${cid}`);
138
+ }
139
+ const fileContent = await fetchIPFSBuffer({ cid, gateway, maxBytes });
66
140
  const calculatedCID = await calculateIPFSAddCID(fileContent, originalCID.version);
67
141
  if (!calculatedCID.equals(originalCID)) {
68
142
  throw new Error(`❌ File hash mismatch! Expected ${originalCID}, but got ${calculatedCID}`);
@@ -83,7 +157,14 @@ export const fetchIPFSDirectAndVerify = async (cid, gateway = IPFS_GATEWAY) => {
83
157
  json,
84
158
  };
85
159
  };
86
- export const fetchIPFSWithCacheAndVerify = async (cid, gateway = IPFS_GATEWAY) => {
160
+ export const fetchIPFSWithCacheAndVerify = async (cid, gateway = IPFS_GATEWAY, maxBytes) => {
161
+ assertSafeUrl(gateway, 'IPFS gateway');
162
+ try {
163
+ CID.parse(cid);
164
+ }
165
+ catch {
166
+ throw new Error(`Invalid IPFS CID: ${cid}`);
167
+ }
87
168
  await fs.mkdir(IPFS_CACHE_DIR, { recursive: true });
88
169
  const cacheFile = path.join(IPFS_CACHE_DIR, `${cid}.json`);
89
170
  try {
@@ -93,12 +174,13 @@ export const fetchIPFSWithCacheAndVerify = async (cid, gateway = IPFS_GATEWAY) =
93
174
  }
94
175
  catch {
95
176
  // Not in cache, fetch from IPFS
96
- const { json } = await fetchIPFSDirectAndVerify(cid, gateway);
177
+ const { json } = await fetchIPFSDirectAndVerify(cid, gateway, maxBytes);
97
178
  await fs.writeFile(cacheFile, JSON.stringify(json), 'utf8');
98
179
  return json;
99
180
  }
100
181
  };
101
182
  export const pinToIPFS = async ({ fileContent, fileName = 'file.json', uploadAuthorization, uploadUrl, }) => {
183
+ assertSafeUrl(uploadUrl, 'IPFS upload URL');
102
184
  const blob = new Blob([fileContent]);
103
185
  const file = new File([blob], fileName, {
104
186
  type: 'application/json',
@@ -1 +1 @@
1
- {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../utils/ipfs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../utils/ipfs.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ type CreateTableArgs = {
4
4
  data?: (VerticalTableRow | HorizontalTableRow | CrossTableRow)[];
5
5
  params?: TableConstructorOptions;
6
6
  csvPath?: string;
7
+ explorerBaseUrl?: string;
7
8
  };
8
9
  export declare const openJsonLogging: () => void;
9
10
  export declare const closeJsonLogging: () => void;
@@ -2,6 +2,8 @@ import Table from 'cli-table3';
2
2
  import { program } from '../../command/index.js';
3
3
  import { getColoredLog, TABLE_PARAMS } from './constants.js';
4
4
  import { exportCsv } from '../csv-file.js';
5
+ import { isAddress } from 'viem';
6
+ import { CHAIN_CACHE } from '../../configs/deployed.js';
5
7
  const bigIntStringify = (value) => {
6
8
  return JSON.stringify(value, (_key, value) => {
7
9
  if (typeof value === 'bigint') {
@@ -62,8 +64,12 @@ export const createConsole = (headMessage, type = 'info') => {
62
64
  }
63
65
  };
64
66
  };
67
+ const createEtherscanAddressTerminalLink = (address, scanBaseUrl) => {
68
+ const url = `${scanBaseUrl}/address/${address}`;
69
+ return `\u001B]8;;${url}\u0007${address}\u001B]8;;\u0007`;
70
+ };
65
71
  const createTable = (headMessage) => (args) => {
66
- const { data, params, csvPath } = args;
72
+ const { data, params, csvPath, explorerBaseUrl = CHAIN_CACHE.currentChain?.blockExplorers.default.url, } = args;
67
73
  if (headMessage && !program.opts().json)
68
74
  console.info(`\n${getColoredLog(headMessage, headMessage + ':')}`);
69
75
  if (!data)
@@ -78,7 +84,22 @@ const createTable = (headMessage) => (args) => {
78
84
  }
79
85
  else {
80
86
  const table = new Table({ ...TABLE_PARAMS, ...params });
81
- table.push(...data);
87
+ let dataToRender = data;
88
+ if (explorerBaseUrl) {
89
+ dataToRender = data.map((row) => {
90
+ if (Array.isArray(row)) {
91
+ row = row.map((cell) => {
92
+ if (typeof cell === 'string' &&
93
+ isAddress(cell, { strict: false })) {
94
+ return createEtherscanAddressTerminalLink(cell, explorerBaseUrl);
95
+ }
96
+ return cell;
97
+ });
98
+ }
99
+ return row;
100
+ });
101
+ }
102
+ table.push(...dataToRender);
82
103
  console.info(table.toString());
83
104
  }
84
105
  if (csvPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../utils/logging/console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../utils/logging/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AbiFunction } from 'viem';
2
+ /**
3
+ * Parses an array of raw string arguments into typed values
4
+ * according to the given ABI function definition.
5
+ *
6
+ * @param methodAbi - The viem `AbiFunction` describing the target method.
7
+ * @param args - Raw string arguments in the same order as `methodAbi.inputs`.
8
+ * @returns Typed argument array ready to pass to viem's `encodeFunctionData`.
9
+ * @throws If the argument count doesn't match or any value fails to parse.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * import { parseAbi } from "viem";
14
+ * import { parseAbiArguments } from "./parseAbiArguments";
15
+ *
16
+ * const [method] = parseAbi(["function transfer(address to, uint256 amount)"]);
17
+ * const args = parseAbiArguments(method, [
18
+ * "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
19
+ * "1000000000000000000",
20
+ * ]);
21
+ * // => ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", 1000000000000000000n]
22
+ * ```
23
+ */
24
+ export declare const parseAbiArguments: (methodAbi: AbiFunction, args: string[]) => unknown[];
@@ -0,0 +1,159 @@
1
+ import { isAddress, isHex, size as hexSize } from 'viem';
2
+ /**
3
+ * Parses a single string value into a typed value based on its Solidity ABI type.
4
+ * Uses viem's `isAddress` and `isHex` for validation.
5
+ * Throws a descriptive error if parsing fails.
6
+ */
7
+ const toArgString = (v) => typeof v === 'string' ? v : JSON.stringify(v);
8
+ const parseAbiArgument = (param, value) => {
9
+ const { type } = param;
10
+ try {
11
+ // --- address ---
12
+ if (type === 'address') {
13
+ if (!isAddress(value)) {
14
+ throw new Error(`Invalid address: "${value}"`);
15
+ }
16
+ return value;
17
+ }
18
+ // --- bool ---
19
+ if (type === 'bool') {
20
+ if (value === 'true')
21
+ return true;
22
+ if (value === 'false')
23
+ return false;
24
+ throw new Error(`Invalid bool value: "${value}". Expected "true" or "false"`);
25
+ }
26
+ // --- uint / int ---
27
+ if (/^(uint|int)\d*$/.test(type)) {
28
+ const n = BigInt(value);
29
+ if (type.startsWith('uint') && n < 0n) {
30
+ throw new Error(`Unsigned integer cannot be negative: "${value}"`);
31
+ }
32
+ return n;
33
+ }
34
+ // --- bytes1 … bytes32 (fixed-size) ---
35
+ const fixedBytesMatch = type.match(/^bytes(\d+)$/);
36
+ if (fixedBytesMatch) {
37
+ const expectedSize = Number.parseInt(fixedBytesMatch[1], 10);
38
+ if (!isHex(value)) {
39
+ throw new Error(`Invalid hex for ${type}: "${value}"`);
40
+ }
41
+ const actualSize = hexSize(value);
42
+ if (actualSize !== expectedSize) {
43
+ throw new Error(`Expected ${expectedSize} bytes for ${type}, got ${actualSize}`);
44
+ }
45
+ return value;
46
+ }
47
+ // --- bytes (dynamic) ---
48
+ if (type === 'bytes') {
49
+ if (!isHex(value)) {
50
+ throw new Error(`Invalid hex for bytes: "${value}"`);
51
+ }
52
+ return value;
53
+ }
54
+ // --- string ---
55
+ if (type === 'string') {
56
+ return value;
57
+ }
58
+ // --- fixed-size array, e.g. uint256[3] ---
59
+ const fixedArrayMatch = type.match(/^(.+)\[(\d+)\]$/);
60
+ if (fixedArrayMatch) {
61
+ const innerType = fixedArrayMatch[1];
62
+ const expectedLength = Number.parseInt(fixedArrayMatch[2], 10);
63
+ const parsed = JSON.parse(value);
64
+ if (!Array.isArray(parsed)) {
65
+ throw new TypeError(`Expected a JSON array for ${type}, got: "${value}"`);
66
+ }
67
+ if (parsed.length !== expectedLength) {
68
+ throw new Error(`Expected array of length ${expectedLength} for ${type}, got length ${parsed.length}`);
69
+ }
70
+ return parsed.map((item, i) => parseAbiArgument({ ...param, type: innerType, name: `${param.name}[${i}]` }, toArgString(item)));
71
+ }
72
+ // --- dynamic array, e.g. uint256[] ---
73
+ const dynamicArrayMatch = type.match(/^(.+)\[\]$/);
74
+ if (dynamicArrayMatch) {
75
+ const innerType = dynamicArrayMatch[1];
76
+ const parsed = JSON.parse(value);
77
+ if (!Array.isArray(parsed)) {
78
+ throw new TypeError(`Expected a JSON array for ${type}, got: "${value}"`);
79
+ }
80
+ return parsed.map((item, i) => parseAbiArgument({ ...param, type: innerType, name: `${param.name}[${i}]` }, toArgString(item)));
81
+ }
82
+ // --- tuple (struct) ---
83
+ if (type === 'tuple') {
84
+ const tupleParam = param;
85
+ if (!tupleParam.components || tupleParam.components.length === 0) {
86
+ throw new Error(`Tuple parameter "${param.name}" has no components defined in ABI`);
87
+ }
88
+ let parsed;
89
+ try {
90
+ parsed = JSON.parse(value);
91
+ }
92
+ catch {
93
+ throw new Error(`Invalid JSON for tuple "${param.name}": "${value}"`);
94
+ }
95
+ // Accept array representation
96
+ if (Array.isArray(parsed)) {
97
+ if (parsed.length !== tupleParam.components.length) {
98
+ throw new Error(`Tuple "${param.name}" expects ${tupleParam.components.length} fields, got ${parsed.length}`);
99
+ }
100
+ return tupleParam.components.reduce((acc, comp, i) => {
101
+ acc[comp.name ?? i] = parseAbiArgument(comp, toArgString(parsed[i]));
102
+ return acc;
103
+ }, {});
104
+ }
105
+ // Accept object representation
106
+ if (typeof parsed === 'object' && parsed !== null) {
107
+ return tupleParam.components.reduce((acc, comp) => {
108
+ const key = comp.name;
109
+ if (!key) {
110
+ throw new Error(`Tuple component has no name`);
111
+ }
112
+ if (!(key in parsed)) {
113
+ throw new Error(`Missing field "${key}" in tuple "${param.name}"`);
114
+ }
115
+ acc[key] = parseAbiArgument(comp, toArgString(parsed[key]));
116
+ return acc;
117
+ }, {});
118
+ }
119
+ throw new Error(`Invalid value for tuple "${param.name}": expected JSON object or array`);
120
+ }
121
+ throw new Error(`Unsupported ABI type: "${type}"`);
122
+ }
123
+ catch (err) {
124
+ if (err instanceof Error && !err.message.startsWith(`[param:`)) {
125
+ throw new Error(`[param: "${param.name ?? '<unnamed>'}", type: "${type}"] ${err.message}`);
126
+ }
127
+ throw err;
128
+ }
129
+ };
130
+ /**
131
+ * Parses an array of raw string arguments into typed values
132
+ * according to the given ABI function definition.
133
+ *
134
+ * @param methodAbi - The viem `AbiFunction` describing the target method.
135
+ * @param args - Raw string arguments in the same order as `methodAbi.inputs`.
136
+ * @returns Typed argument array ready to pass to viem's `encodeFunctionData`.
137
+ * @throws If the argument count doesn't match or any value fails to parse.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * import { parseAbi } from "viem";
142
+ * import { parseAbiArguments } from "./parseAbiArguments";
143
+ *
144
+ * const [method] = parseAbi(["function transfer(address to, uint256 amount)"]);
145
+ * const args = parseAbiArguments(method, [
146
+ * "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
147
+ * "1000000000000000000",
148
+ * ]);
149
+ * // => ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", 1000000000000000000n]
150
+ * ```
151
+ */
152
+ export const parseAbiArguments = (methodAbi, args) => {
153
+ const { inputs } = methodAbi;
154
+ if (args.length !== inputs.length) {
155
+ throw new Error(`Argument count mismatch for "${methodAbi.name}": expected ${inputs.length}, got ${args.length}`);
156
+ }
157
+ return inputs.map((input, i) => parseAbiArgument(input, args[i]));
158
+ };
159
+ //# sourceMappingURL=parse-abi-arguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-abi-arguments.js","sourceRoot":"","sources":["../../utils/parse-abi-arguments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const promptAccount: (accountInput: string | undefined, message: string) => Promise<`0x${string}`>;
@@ -0,0 +1,13 @@
1
+ import { addressPrompt, stringToAddress } from '../index.js';
2
+ export const promptAccount = async (accountInput, message) => {
3
+ let account;
4
+ if (!accountInput) {
5
+ const accountPrompt = await addressPrompt(message, 'account');
6
+ account = stringToAddress(accountPrompt.account);
7
+ }
8
+ else {
9
+ account = stringToAddress(accountInput);
10
+ }
11
+ return account;
12
+ };
13
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../utils/prompts/account.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,YAAgC,EAChC,OAAe,EACf,EAAE;IACF,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9D,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -4,3 +4,6 @@ export * from './vault.js';
4
4
  export * from './operations.js';
5
5
  export * from './confirmations.js';
6
6
  export * from './mint-burn/index.js';
7
+ export * from './strategy.js';
8
+ export * from './account.js';
9
+ export * from './timelock-roles.js';
@@ -4,4 +4,7 @@ export * from './vault.js';
4
4
  export * from './operations.js';
5
5
  export * from './confirmations.js';
6
6
  export * from './mint-burn/index.js';
7
+ export * from './strategy.js';
8
+ export * from './account.js';
9
+ export * from './timelock-roles.js';
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utils/prompts/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../utils/prompts/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}