@0xsequence/catapult 1.1.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 (393) hide show
  1. package/.eslintrc.json +29 -0
  2. package/.github/workflows/ci.yml +181 -0
  3. package/CONCEPT.md +24 -0
  4. package/README.md +772 -0
  5. package/contracts/checked-call.huff +65 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +16 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/common.d.ts +11 -0
  11. package/dist/commands/common.d.ts.map +1 -0
  12. package/dist/commands/common.js +73 -0
  13. package/dist/commands/common.js.map +1 -0
  14. package/dist/commands/dry.d.ts +3 -0
  15. package/dist/commands/dry.d.ts.map +1 -0
  16. package/dist/commands/dry.js +171 -0
  17. package/dist/commands/dry.js.map +1 -0
  18. package/dist/commands/etherscan.d.ts +3 -0
  19. package/dist/commands/etherscan.d.ts.map +1 -0
  20. package/dist/commands/etherscan.js +323 -0
  21. package/dist/commands/etherscan.js.map +1 -0
  22. package/dist/commands/index.d.ts +6 -0
  23. package/dist/commands/index.d.ts.map +1 -0
  24. package/dist/commands/index.js +22 -0
  25. package/dist/commands/index.js.map +1 -0
  26. package/dist/commands/list.d.ts +3 -0
  27. package/dist/commands/list.d.ts.map +1 -0
  28. package/dist/commands/list.js +259 -0
  29. package/dist/commands/list.js.map +1 -0
  30. package/dist/commands/run.d.ts +3 -0
  31. package/dist/commands/run.d.ts.map +1 -0
  32. package/dist/commands/run.js +96 -0
  33. package/dist/commands/run.js.map +1 -0
  34. package/dist/commands/utils.d.ts +3 -0
  35. package/dist/commands/utils.d.ts.map +1 -0
  36. package/dist/commands/utils.js +46 -0
  37. package/dist/commands/utils.js.map +1 -0
  38. package/dist/index.d.ts +4 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +58 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/lib/__tests__/deployer-events.spec.d.ts +2 -0
  43. package/dist/lib/__tests__/deployer-events.spec.d.ts.map +1 -0
  44. package/dist/lib/__tests__/deployer-events.spec.js +260 -0
  45. package/dist/lib/__tests__/deployer-events.spec.js.map +1 -0
  46. package/dist/lib/__tests__/deployer.spec.d.ts +2 -0
  47. package/dist/lib/__tests__/deployer.spec.d.ts.map +1 -0
  48. package/dist/lib/__tests__/deployer.spec.js +884 -0
  49. package/dist/lib/__tests__/deployer.spec.js.map +1 -0
  50. package/dist/lib/__tests__/network-utils.spec.d.ts +2 -0
  51. package/dist/lib/__tests__/network-utils.spec.d.ts.map +1 -0
  52. package/dist/lib/__tests__/network-utils.spec.js +140 -0
  53. package/dist/lib/__tests__/network-utils.spec.js.map +1 -0
  54. package/dist/lib/contracts/__tests__/repository.spec.d.ts +2 -0
  55. package/dist/lib/contracts/__tests__/repository.spec.d.ts.map +1 -0
  56. package/dist/lib/contracts/__tests__/repository.spec.js +321 -0
  57. package/dist/lib/contracts/__tests__/repository.spec.js.map +1 -0
  58. package/dist/lib/contracts/repository.d.ts +27 -0
  59. package/dist/lib/contracts/repository.d.ts.map +1 -0
  60. package/dist/lib/contracts/repository.js +241 -0
  61. package/dist/lib/contracts/repository.js.map +1 -0
  62. package/dist/lib/core/__tests__/engine.spec.d.ts +2 -0
  63. package/dist/lib/core/__tests__/engine.spec.d.ts.map +1 -0
  64. package/dist/lib/core/__tests__/engine.spec.js +1212 -0
  65. package/dist/lib/core/__tests__/engine.spec.js.map +1 -0
  66. package/dist/lib/core/__tests__/graph.spec.d.ts +2 -0
  67. package/dist/lib/core/__tests__/graph.spec.d.ts.map +1 -0
  68. package/dist/lib/core/__tests__/graph.spec.js +116 -0
  69. package/dist/lib/core/__tests__/graph.spec.js.map +1 -0
  70. package/dist/lib/core/__tests__/json-integration.spec.d.ts +2 -0
  71. package/dist/lib/core/__tests__/json-integration.spec.d.ts.map +1 -0
  72. package/dist/lib/core/__tests__/json-integration.spec.js +300 -0
  73. package/dist/lib/core/__tests__/json-integration.spec.js.map +1 -0
  74. package/dist/lib/core/__tests__/loader.spec.d.ts +2 -0
  75. package/dist/lib/core/__tests__/loader.spec.d.ts.map +1 -0
  76. package/dist/lib/core/__tests__/loader.spec.js +288 -0
  77. package/dist/lib/core/__tests__/loader.spec.js.map +1 -0
  78. package/dist/lib/core/__tests__/multi-platform-verification.spec.d.ts +2 -0
  79. package/dist/lib/core/__tests__/multi-platform-verification.spec.d.ts.map +1 -0
  80. package/dist/lib/core/__tests__/multi-platform-verification.spec.js +342 -0
  81. package/dist/lib/core/__tests__/multi-platform-verification.spec.js.map +1 -0
  82. package/dist/lib/core/__tests__/resolver.spec.d.ts +2 -0
  83. package/dist/lib/core/__tests__/resolver.spec.d.ts.map +1 -0
  84. package/dist/lib/core/__tests__/resolver.spec.js +1367 -0
  85. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -0
  86. package/dist/lib/core/__tests__/static-action.spec.d.ts +2 -0
  87. package/dist/lib/core/__tests__/static-action.spec.d.ts.map +1 -0
  88. package/dist/lib/core/__tests__/static-action.spec.js +136 -0
  89. package/dist/lib/core/__tests__/static-action.spec.js.map +1 -0
  90. package/dist/lib/core/context.d.ts +29 -0
  91. package/dist/lib/core/context.d.ts.map +1 -0
  92. package/dist/lib/core/context.js +88 -0
  93. package/dist/lib/core/context.js.map +1 -0
  94. package/dist/lib/core/engine.d.ts +25 -0
  95. package/dist/lib/core/engine.d.ts.map +1 -0
  96. package/dist/lib/core/engine.js +1191 -0
  97. package/dist/lib/core/engine.js.map +1 -0
  98. package/dist/lib/core/graph.d.ts +18 -0
  99. package/dist/lib/core/graph.d.ts.map +1 -0
  100. package/dist/lib/core/graph.js +158 -0
  101. package/dist/lib/core/graph.js.map +1 -0
  102. package/dist/lib/core/loader.d.ts +25 -0
  103. package/dist/lib/core/loader.d.ts.map +1 -0
  104. package/dist/lib/core/loader.js +248 -0
  105. package/dist/lib/core/loader.js.map +1 -0
  106. package/dist/lib/core/resolver.d.ts +20 -0
  107. package/dist/lib/core/resolver.d.ts.map +1 -0
  108. package/dist/lib/core/resolver.js +307 -0
  109. package/dist/lib/core/resolver.js.map +1 -0
  110. package/dist/lib/deployer.d.ts +39 -0
  111. package/dist/lib/deployer.d.ts.map +1 -0
  112. package/dist/lib/deployer.js +533 -0
  113. package/dist/lib/deployer.js.map +1 -0
  114. package/dist/lib/events/__tests__/event-system.spec.d.ts +2 -0
  115. package/dist/lib/events/__tests__/event-system.spec.d.ts.map +1 -0
  116. package/dist/lib/events/__tests__/event-system.spec.js +256 -0
  117. package/dist/lib/events/__tests__/event-system.spec.js.map +1 -0
  118. package/dist/lib/events/cli-adapter.d.ts +13 -0
  119. package/dist/lib/events/cli-adapter.d.ts.map +1 -0
  120. package/dist/lib/events/cli-adapter.js +244 -0
  121. package/dist/lib/events/cli-adapter.js.map +1 -0
  122. package/dist/lib/events/emitter.d.ts +11 -0
  123. package/dist/lib/events/emitter.d.ts.map +1 -0
  124. package/dist/lib/events/emitter.js +29 -0
  125. package/dist/lib/events/emitter.js.map +1 -0
  126. package/dist/lib/events/index.d.ts +4 -0
  127. package/dist/lib/events/index.d.ts.map +1 -0
  128. package/dist/lib/events/index.js +20 -0
  129. package/dist/lib/events/index.js.map +1 -0
  130. package/dist/lib/events/types.d.ts +368 -0
  131. package/dist/lib/events/types.d.ts.map +1 -0
  132. package/dist/lib/events/types.js +3 -0
  133. package/dist/lib/events/types.js.map +1 -0
  134. package/dist/lib/index.d.ts +5 -0
  135. package/dist/lib/index.d.ts.map +1 -0
  136. package/dist/lib/index.js +44 -0
  137. package/dist/lib/index.js.map +1 -0
  138. package/dist/lib/network-loader.d.ts +3 -0
  139. package/dist/lib/network-loader.d.ts.map +1 -0
  140. package/dist/lib/network-loader.js +80 -0
  141. package/dist/lib/network-loader.js.map +1 -0
  142. package/dist/lib/network-match.d.ts +3 -0
  143. package/dist/lib/network-match.d.ts.map +1 -0
  144. package/dist/lib/network-match.js +62 -0
  145. package/dist/lib/network-match.js.map +1 -0
  146. package/dist/lib/network-utils.d.ts +4 -0
  147. package/dist/lib/network-utils.d.ts.map +1 -0
  148. package/dist/lib/network-utils.js +39 -0
  149. package/dist/lib/network-utils.js.map +1 -0
  150. package/dist/lib/parsers/__tests__/buildinfo.spec.d.ts +2 -0
  151. package/dist/lib/parsers/__tests__/buildinfo.spec.d.ts.map +1 -0
  152. package/dist/lib/parsers/__tests__/buildinfo.spec.js +132 -0
  153. package/dist/lib/parsers/__tests__/buildinfo.spec.js.map +1 -0
  154. package/dist/lib/parsers/__tests__/job.spec.d.ts +2 -0
  155. package/dist/lib/parsers/__tests__/job.spec.d.ts.map +1 -0
  156. package/dist/lib/parsers/__tests__/job.spec.js +318 -0
  157. package/dist/lib/parsers/__tests__/job.spec.js.map +1 -0
  158. package/dist/lib/parsers/__tests__/template.spec.d.ts +2 -0
  159. package/dist/lib/parsers/__tests__/template.spec.d.ts.map +1 -0
  160. package/dist/lib/parsers/__tests__/template.spec.js +126 -0
  161. package/dist/lib/parsers/__tests__/template.spec.js.map +1 -0
  162. package/dist/lib/parsers/artifact/__tests__/artifact.spec.d.ts +2 -0
  163. package/dist/lib/parsers/artifact/__tests__/artifact.spec.d.ts.map +1 -0
  164. package/dist/lib/parsers/artifact/__tests__/artifact.spec.js +128 -0
  165. package/dist/lib/parsers/artifact/__tests__/artifact.spec.js.map +1 -0
  166. package/dist/lib/parsers/artifact/foundry-1.2.d.ts +3 -0
  167. package/dist/lib/parsers/artifact/foundry-1.2.d.ts.map +1 -0
  168. package/dist/lib/parsers/artifact/foundry-1.2.js +82 -0
  169. package/dist/lib/parsers/artifact/foundry-1.2.js.map +1 -0
  170. package/dist/lib/parsers/artifact/index.d.ts +3 -0
  171. package/dist/lib/parsers/artifact/index.d.ts.map +1 -0
  172. package/dist/lib/parsers/artifact/index.js +17 -0
  173. package/dist/lib/parsers/artifact/index.js.map +1 -0
  174. package/dist/lib/parsers/artifact/types.d.ts +3 -0
  175. package/dist/lib/parsers/artifact/types.d.ts.map +1 -0
  176. package/dist/lib/parsers/artifact/types.js +3 -0
  177. package/dist/lib/parsers/artifact/types.js.map +1 -0
  178. package/dist/lib/parsers/buildinfo.d.ts +5 -0
  179. package/dist/lib/parsers/buildinfo.d.ts.map +1 -0
  180. package/dist/lib/parsers/buildinfo.js +85 -0
  181. package/dist/lib/parsers/buildinfo.js.map +1 -0
  182. package/dist/lib/parsers/constants.d.ts +4 -0
  183. package/dist/lib/parsers/constants.d.ts.map +1 -0
  184. package/dist/lib/parsers/constants.js +45 -0
  185. package/dist/lib/parsers/constants.js.map +1 -0
  186. package/dist/lib/parsers/index.d.ts +5 -0
  187. package/dist/lib/parsers/index.d.ts.map +1 -0
  188. package/dist/lib/parsers/index.js +21 -0
  189. package/dist/lib/parsers/index.js.map +1 -0
  190. package/dist/lib/parsers/job.d.ts +3 -0
  191. package/dist/lib/parsers/job.d.ts.map +1 -0
  192. package/dist/lib/parsers/job.js +74 -0
  193. package/dist/lib/parsers/job.js.map +1 -0
  194. package/dist/lib/parsers/template.d.ts +3 -0
  195. package/dist/lib/parsers/template.d.ts.map +1 -0
  196. package/dist/lib/parsers/template.js +91 -0
  197. package/dist/lib/parsers/template.js.map +1 -0
  198. package/dist/lib/std/templates/assured-deployment.yaml +45 -0
  199. package/dist/lib/std/templates/erc-2470.yaml +67 -0
  200. package/dist/lib/std/templates/min-balance.yaml +32 -0
  201. package/dist/lib/std/templates/nano-universal-deployer.yaml +59 -0
  202. package/dist/lib/std/templates/raw-erc-2470.yaml +59 -0
  203. package/dist/lib/std/templates/raw-nano-universal-deployer.yaml +51 -0
  204. package/dist/lib/std/templates/raw-sequence-universal-deployer-2.yaml +48 -0
  205. package/dist/lib/std/templates/sequence-universal-deployer-2.yaml +57 -0
  206. package/dist/lib/types/__tests__/json-request-action.spec.d.ts +2 -0
  207. package/dist/lib/types/__tests__/json-request-action.spec.d.ts.map +1 -0
  208. package/dist/lib/types/__tests__/json-request-action.spec.js +219 -0
  209. package/dist/lib/types/__tests__/json-request-action.spec.js.map +1 -0
  210. package/dist/lib/types/__tests__/read-json-value.spec.d.ts +2 -0
  211. package/dist/lib/types/__tests__/read-json-value.spec.d.ts.map +1 -0
  212. package/dist/lib/types/__tests__/read-json-value.spec.js +233 -0
  213. package/dist/lib/types/__tests__/read-json-value.spec.js.map +1 -0
  214. package/dist/lib/types/actions.d.ts +74 -0
  215. package/dist/lib/types/actions.d.ts.map +1 -0
  216. package/dist/lib/types/actions.js +18 -0
  217. package/dist/lib/types/actions.js.map +1 -0
  218. package/dist/lib/types/artifacts.d.ts +15 -0
  219. package/dist/lib/types/artifacts.d.ts.map +1 -0
  220. package/dist/lib/types/artifacts.js +3 -0
  221. package/dist/lib/types/artifacts.js.map +1 -0
  222. package/dist/lib/types/buildinfo.d.ts +112 -0
  223. package/dist/lib/types/buildinfo.d.ts.map +1 -0
  224. package/dist/lib/types/buildinfo.js +3 -0
  225. package/dist/lib/types/buildinfo.js.map +1 -0
  226. package/dist/lib/types/conditions.d.ts +17 -0
  227. package/dist/lib/types/conditions.d.ts.map +1 -0
  228. package/dist/lib/types/conditions.js +21 -0
  229. package/dist/lib/types/conditions.js.map +1 -0
  230. package/dist/lib/types/contracts.d.ts +14 -0
  231. package/dist/lib/types/contracts.d.ts.map +1 -0
  232. package/dist/lib/types/contracts.js +3 -0
  233. package/dist/lib/types/contracts.js.map +1 -0
  234. package/dist/lib/types/definitions.d.ts +51 -0
  235. package/dist/lib/types/definitions.d.ts.map +1 -0
  236. package/dist/lib/types/definitions.js +3 -0
  237. package/dist/lib/types/definitions.js.map +1 -0
  238. package/dist/lib/types/index.d.ts +9 -0
  239. package/dist/lib/types/index.d.ts.map +1 -0
  240. package/dist/lib/types/index.js +25 -0
  241. package/dist/lib/types/index.js.map +1 -0
  242. package/dist/lib/types/network.d.ts +9 -0
  243. package/dist/lib/types/network.d.ts.map +1 -0
  244. package/dist/lib/types/network.js +3 -0
  245. package/dist/lib/types/network.js.map +1 -0
  246. package/dist/lib/types/project.d.ts +5 -0
  247. package/dist/lib/types/project.d.ts.map +1 -0
  248. package/dist/lib/types/project.js +3 -0
  249. package/dist/lib/types/project.js.map +1 -0
  250. package/dist/lib/types/task.d.ts +9 -0
  251. package/dist/lib/types/task.d.ts.map +1 -0
  252. package/dist/lib/types/task.js +3 -0
  253. package/dist/lib/types/task.js.map +1 -0
  254. package/dist/lib/types/values.d.ts +78 -0
  255. package/dist/lib/types/values.d.ts.map +1 -0
  256. package/dist/lib/types/values.js +3 -0
  257. package/dist/lib/types/values.js.map +1 -0
  258. package/dist/lib/utils/validation.d.ts +5 -0
  259. package/dist/lib/utils/validation.d.ts.map +1 -0
  260. package/dist/lib/utils/validation.js +77 -0
  261. package/dist/lib/utils/validation.js.map +1 -0
  262. package/dist/lib/validation/contract-references.d.ts +12 -0
  263. package/dist/lib/validation/contract-references.d.ts.map +1 -0
  264. package/dist/lib/validation/contract-references.js +112 -0
  265. package/dist/lib/validation/contract-references.js.map +1 -0
  266. package/dist/lib/validation/index.d.ts +1 -0
  267. package/dist/lib/validation/index.d.ts.map +1 -0
  268. package/dist/lib/validation/index.js +2 -0
  269. package/dist/lib/validation/index.js.map +1 -0
  270. package/dist/lib/verification/__tests__/etherscan.spec.d.ts +2 -0
  271. package/dist/lib/verification/__tests__/etherscan.spec.d.ts.map +1 -0
  272. package/dist/lib/verification/__tests__/etherscan.spec.js +565 -0
  273. package/dist/lib/verification/__tests__/etherscan.spec.js.map +1 -0
  274. package/dist/lib/verification/__tests__/sourcify.spec.d.ts +2 -0
  275. package/dist/lib/verification/__tests__/sourcify.spec.d.ts.map +1 -0
  276. package/dist/lib/verification/__tests__/sourcify.spec.js +212 -0
  277. package/dist/lib/verification/__tests__/sourcify.spec.js.map +1 -0
  278. package/dist/lib/verification/etherscan.d.ts +56 -0
  279. package/dist/lib/verification/etherscan.d.ts.map +1 -0
  280. package/dist/lib/verification/etherscan.js +340 -0
  281. package/dist/lib/verification/etherscan.js.map +1 -0
  282. package/dist/lib/verification/sourcify.d.ts +12 -0
  283. package/dist/lib/verification/sourcify.d.ts.map +1 -0
  284. package/dist/lib/verification/sourcify.js +227 -0
  285. package/dist/lib/verification/sourcify.js.map +1 -0
  286. package/eslint.config.js +48 -0
  287. package/examples/jobs/guards-v1.yaml +17 -0
  288. package/examples/jobs/sequence-seq-0001-patch.yaml +59 -0
  289. package/examples/jobs/sequence-v1.yaml +59 -0
  290. package/examples/templates/sequence-factory-v1.yaml +56 -0
  291. package/jest.config.js +25 -0
  292. package/package.json +68 -0
  293. package/src/cli.ts +17 -0
  294. package/src/commands/common.ts +61 -0
  295. package/src/commands/dry.ts +208 -0
  296. package/src/commands/etherscan.ts +360 -0
  297. package/src/commands/index.ts +5 -0
  298. package/src/commands/list.ts +249 -0
  299. package/src/commands/run.ts +136 -0
  300. package/src/commands/utils.ts +52 -0
  301. package/src/index.ts +67 -0
  302. package/src/lib/__tests__/deployer-events.spec.ts +338 -0
  303. package/src/lib/__tests__/deployer.spec.ts +1204 -0
  304. package/src/lib/__tests__/network-utils.spec.ts +181 -0
  305. package/src/lib/artifacts/__tests__/fixtures/contract1.json +19 -0
  306. package/src/lib/artifacts/__tests__/fixtures/contract2.json +19 -0
  307. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +19 -0
  308. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +18 -0
  309. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +8 -0
  310. package/src/lib/artifacts/__tests__/fixtures/readme.txt +2 -0
  311. package/src/lib/contracts/__tests__/repository.spec.ts +344 -0
  312. package/src/lib/contracts/repository.ts +313 -0
  313. package/src/lib/core/__tests__/engine.spec.ts +1514 -0
  314. package/src/lib/core/__tests__/graph.spec.ts +125 -0
  315. package/src/lib/core/__tests__/json-integration.spec.ts +360 -0
  316. package/src/lib/core/__tests__/loader.spec.ts +334 -0
  317. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +406 -0
  318. package/src/lib/core/__tests__/resolver.spec.ts +1693 -0
  319. package/src/lib/core/__tests__/static-action.spec.ts +172 -0
  320. package/src/lib/core/context.ts +127 -0
  321. package/src/lib/core/engine.ts +1531 -0
  322. package/src/lib/core/graph.ts +252 -0
  323. package/src/lib/core/loader.ts +263 -0
  324. package/src/lib/core/resolver.ts +498 -0
  325. package/src/lib/deployer.ts +768 -0
  326. package/src/lib/events/__tests__/event-system.spec.ts +343 -0
  327. package/src/lib/events/cli-adapter.ts +325 -0
  328. package/src/lib/events/emitter.ts +62 -0
  329. package/src/lib/events/index.ts +3 -0
  330. package/src/lib/events/types.ts +469 -0
  331. package/src/lib/index.ts +14 -0
  332. package/src/lib/network-loader.ts +59 -0
  333. package/src/lib/network-utils.ts +64 -0
  334. package/src/lib/parsers/__tests__/buildinfo.spec.ts +122 -0
  335. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +62 -0
  336. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +2 -0
  337. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +89 -0
  338. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +17 -0
  339. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +63 -0
  340. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +4 -0
  341. package/src/lib/parsers/__tests__/job.spec.ts +335 -0
  342. package/src/lib/parsers/__tests__/template.spec.ts +111 -0
  343. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +117 -0
  344. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +5 -0
  345. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +67 -0
  346. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +5 -0
  347. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +11 -0
  348. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +5 -0
  349. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +4 -0
  350. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +11 -0
  351. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +11 -0
  352. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +40 -0
  353. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +7 -0
  354. package/src/lib/parsers/artifact/foundry-1.2.ts +72 -0
  355. package/src/lib/parsers/artifact/index.ts +27 -0
  356. package/src/lib/parsers/artifact/types.ts +9 -0
  357. package/src/lib/parsers/buildinfo.ts +127 -0
  358. package/src/lib/parsers/constants.ts +56 -0
  359. package/src/lib/parsers/index.ts +5 -0
  360. package/src/lib/parsers/job.ts +101 -0
  361. package/src/lib/parsers/template.ts +131 -0
  362. package/src/lib/std/templates/assured-deployment.yaml +45 -0
  363. package/src/lib/std/templates/erc-2470.yaml +67 -0
  364. package/src/lib/std/templates/min-balance.yaml +32 -0
  365. package/src/lib/std/templates/nano-universal-deployer.yaml +59 -0
  366. package/src/lib/std/templates/raw-erc-2470.yaml +59 -0
  367. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +51 -0
  368. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +48 -0
  369. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +57 -0
  370. package/src/lib/types/__tests__/json-request-action.spec.ts +243 -0
  371. package/src/lib/types/__tests__/read-json-value.spec.ts +264 -0
  372. package/src/lib/types/actions.ts +127 -0
  373. package/src/lib/types/artifacts.ts +21 -0
  374. package/src/lib/types/buildinfo.ts +116 -0
  375. package/src/lib/types/conditions.ts +50 -0
  376. package/src/lib/types/contracts.ts +23 -0
  377. package/src/lib/types/definitions.ts +68 -0
  378. package/src/lib/types/index.ts +8 -0
  379. package/src/lib/types/network.ts +22 -0
  380. package/src/lib/types/project.ts +9 -0
  381. package/src/lib/types/task.ts +9 -0
  382. package/src/lib/types/values.ts +116 -0
  383. package/src/lib/utils/validation.ts +116 -0
  384. package/src/lib/validation/contract-references.ts +210 -0
  385. package/src/lib/validation/index.ts +1 -0
  386. package/src/lib/verification/__tests__/etherscan.spec.ts +710 -0
  387. package/src/lib/verification/__tests__/sourcify.spec.ts +288 -0
  388. package/src/lib/verification/etherscan.ts +546 -0
  389. package/src/lib/verification/sourcify.ts +248 -0
  390. package/test_validation/artifacts/TestContract.json +9 -0
  391. package/test_validation/jobs/test-missing.yaml +16 -0
  392. package/test_validation/networks.yaml +3 -0
  393. package/tsconfig.json +36 -0
@@ -0,0 +1,62 @@
1
+ import { EventEmitter } from 'events'
2
+ import { DeploymentEvent } from './types'
3
+
4
+ /**
5
+ * Type-safe event emitter for deployment events.
6
+ * Extends Node.js EventEmitter with typed event methods.
7
+ */
8
+ export class DeploymentEventEmitter extends EventEmitter {
9
+ /**
10
+ * Emits a deployment event with automatic timestamp injection.
11
+ */
12
+ public emitEvent(event: any): void {
13
+ const fullEvent = {
14
+ ...event,
15
+ timestamp: new Date()
16
+ }
17
+
18
+ // Emit on both the specific event type and a general 'event' channel
19
+ this.emit(event.type, fullEvent)
20
+ this.emit('event', fullEvent)
21
+ }
22
+
23
+ /**
24
+ * Type-safe event listener registration.
25
+ */
26
+ public onEvent<T extends DeploymentEvent>(
27
+ eventType: T['type'],
28
+ listener: (event: T) => void
29
+ ): this {
30
+ return this.on(eventType, listener)
31
+ }
32
+
33
+ /**
34
+ * Listen to all events.
35
+ */
36
+ public onAnyEvent(listener: (event: DeploymentEvent) => void): this {
37
+ return this.on('event', listener)
38
+ }
39
+
40
+ /**
41
+ * One-time event listener.
42
+ */
43
+ public onceEvent<T extends DeploymentEvent>(
44
+ eventType: T['type'],
45
+ listener: (event: T) => void
46
+ ): this {
47
+ return this.once(eventType, listener)
48
+ }
49
+
50
+ /**
51
+ * Remove event listener.
52
+ */
53
+ public offEvent<T extends DeploymentEvent>(
54
+ eventType: T['type'],
55
+ listener: (event: T) => void
56
+ ): this {
57
+ return this.off(eventType, listener)
58
+ }
59
+ }
60
+
61
+ // Singleton instance for global access
62
+ export const deploymentEvents = new DeploymentEventEmitter()
@@ -0,0 +1,3 @@
1
+ export * from './types'
2
+ export * from './emitter'
3
+ export * from './cli-adapter'
@@ -0,0 +1,469 @@
1
+ /**
2
+ * Event system for structured logging throughout the deployment process.
3
+ * Replaces direct console.log calls with rich, structured events.
4
+ */
5
+
6
+ export interface BaseEvent {
7
+ type: string
8
+ timestamp: Date
9
+ level: 'info' | 'warn' | 'error' | 'debug'
10
+ }
11
+
12
+ // Deployment lifecycle events
13
+ export interface DeploymentStartedEvent extends BaseEvent {
14
+ type: 'deployment_started'
15
+ level: 'info'
16
+ data: {
17
+ projectRoot: string
18
+ }
19
+ }
20
+
21
+ export interface DeploymentCompletedEvent extends BaseEvent {
22
+ type: 'deployment_completed'
23
+ level: 'info'
24
+ }
25
+
26
+ export interface DeploymentFailedEvent extends BaseEvent {
27
+ type: 'deployment_failed'
28
+ level: 'error'
29
+ data: {
30
+ error: string
31
+ stack?: string
32
+ }
33
+ }
34
+
35
+ // Project loading events
36
+ export interface ProjectLoadingStartedEvent extends BaseEvent {
37
+ type: 'project_loading_started'
38
+ level: 'info'
39
+ data: {
40
+ projectRoot: string
41
+ }
42
+ }
43
+
44
+ export interface ProjectLoadedEvent extends BaseEvent {
45
+ type: 'project_loaded'
46
+ level: 'info'
47
+ data: {
48
+ jobCount: number
49
+ templateCount: number
50
+ }
51
+ }
52
+
53
+ // Execution plan events
54
+ export interface ExecutionPlanEvent extends BaseEvent {
55
+ type: 'execution_plan'
56
+ level: 'info'
57
+ data: {
58
+ targetNetworks: Array<{
59
+ name: string
60
+ chainId: number
61
+ }>
62
+ jobExecutionOrder: string[]
63
+ }
64
+ }
65
+
66
+ // Job execution events
67
+ export interface JobStartedEvent extends BaseEvent {
68
+ type: 'job_started'
69
+ level: 'info'
70
+ data: {
71
+ jobName: string
72
+ jobVersion: string
73
+ networkName: string
74
+ chainId: number
75
+ }
76
+ }
77
+
78
+ export interface JobCompletedEvent extends BaseEvent {
79
+ type: 'job_completed'
80
+ level: 'info'
81
+ data: {
82
+ jobName: string
83
+ networkName: string
84
+ chainId: number
85
+ }
86
+ }
87
+
88
+ export interface JobSkippedEvent extends BaseEvent {
89
+ type: 'job_skipped'
90
+ level: 'warn'
91
+ data: {
92
+ jobName: string
93
+ networkName: string
94
+ reason: string
95
+ }
96
+ }
97
+
98
+ // Action execution events
99
+ export interface ActionStartedEvent extends BaseEvent {
100
+ type: 'action_started'
101
+ level: 'info'
102
+ data: {
103
+ actionName: string
104
+ jobName: string
105
+ }
106
+ }
107
+
108
+ export interface ActionSkippedEvent extends BaseEvent {
109
+ type: 'action_skipped'
110
+ level: 'info'
111
+ data: {
112
+ actionName: string
113
+ reason: string
114
+ }
115
+ }
116
+
117
+ export interface ActionCompletedEvent extends BaseEvent {
118
+ type: 'action_completed'
119
+ level: 'info'
120
+ data: {
121
+ actionName: string
122
+ result: string
123
+ }
124
+ }
125
+
126
+ export interface ActionFailedEvent extends BaseEvent {
127
+ type: 'action_failed'
128
+ level: 'error'
129
+ data: {
130
+ message: string
131
+ }
132
+ }
133
+
134
+ export interface ActionInfoEvent extends BaseEvent {
135
+ type: 'action_info'
136
+ level: 'debug'
137
+ data: {
138
+ message: string
139
+ }
140
+ }
141
+
142
+ export interface DebugInfoEvent extends BaseEvent {
143
+ type: 'debug_info'
144
+ level: 'debug'
145
+ data: {
146
+ message: string
147
+ }
148
+ }
149
+
150
+ // Template execution events
151
+ export interface TemplateEnteredEvent extends BaseEvent {
152
+ type: 'template_entered'
153
+ level: 'debug'
154
+ data: {
155
+ templateName: string
156
+ }
157
+ }
158
+
159
+ export interface TemplateExitedEvent extends BaseEvent {
160
+ type: 'template_exited'
161
+ level: 'debug'
162
+ data: {
163
+ templateName: string
164
+ }
165
+ }
166
+
167
+ export interface TemplateSetupStartedEvent extends BaseEvent {
168
+ type: 'template_setup_started'
169
+ level: 'debug'
170
+ data: {
171
+ templateName: string
172
+ }
173
+ }
174
+
175
+ export interface TemplateSetupCompletedEvent extends BaseEvent {
176
+ type: 'template_setup_completed'
177
+ level: 'debug'
178
+ data: {
179
+ templateName: string
180
+ }
181
+ }
182
+
183
+ export interface TemplateSetupSkippedEvent extends BaseEvent {
184
+ type: 'template_setup_skipped'
185
+ level: 'info'
186
+ data: {
187
+ templateName: string
188
+ reason: string
189
+ }
190
+ }
191
+
192
+ export interface TemplateSkippedEvent extends BaseEvent {
193
+ type: 'template_skipped'
194
+ level: 'info'
195
+ data: {
196
+ templateName: string
197
+ reason: string
198
+ }
199
+ }
200
+
201
+ // Transaction events
202
+ export interface PrimitiveActionEvent extends BaseEvent {
203
+ type: 'primitive_action'
204
+ level: 'debug'
205
+ data: {
206
+ actionType: string
207
+ }
208
+ }
209
+
210
+ export interface TransactionSentEvent extends BaseEvent {
211
+ type: 'transaction_sent'
212
+ level: 'info'
213
+ data: {
214
+ to: string
215
+ value: string
216
+ dataPreview: string
217
+ txHash: string
218
+ }
219
+ }
220
+
221
+ export interface TransactionConfirmedEvent extends BaseEvent {
222
+ type: 'transaction_confirmed'
223
+ level: 'info'
224
+ data: {
225
+ txHash: string
226
+ blockNumber: number
227
+ }
228
+ }
229
+
230
+ // Contract lifecycle events
231
+ export interface ContractCreatedEvent extends BaseEvent {
232
+ type: 'contract_created'
233
+ level: 'info'
234
+ data: {
235
+ contractAddress: string
236
+ txHash: string
237
+ blockNumber: number
238
+ }
239
+ }
240
+
241
+ // Output events
242
+ export interface OutputStoredEvent extends BaseEvent {
243
+ type: 'output_stored'
244
+ level: 'debug'
245
+ data: {
246
+ outputKey: string
247
+ value: any
248
+ }
249
+ }
250
+
251
+ export interface OutputFileWrittenEvent extends BaseEvent {
252
+ type: 'output_file_written'
253
+ level: 'info'
254
+ data: {
255
+ relativePath: string
256
+ }
257
+ }
258
+
259
+ export interface NoOutputsEvent extends BaseEvent {
260
+ type: 'no_outputs'
261
+ level: 'warn'
262
+ }
263
+
264
+ export interface OutputWritingStartedEvent extends BaseEvent {
265
+ type: 'output_writing_started'
266
+ level: 'info'
267
+ }
268
+
269
+ // Warning events
270
+ export interface DuplicateArtifactWarningEvent extends BaseEvent {
271
+ type: 'duplicate_artifact_warning'
272
+ level: 'warn'
273
+ data: {
274
+ contractName: string
275
+ path: string
276
+ }
277
+ }
278
+
279
+ export interface MissingNetworkConfigWarningEvent extends BaseEvent {
280
+ type: 'missing_network_config_warning'
281
+ level: 'warn'
282
+ data: {
283
+ missingChainIds: number[]
284
+ }
285
+ }
286
+
287
+ export interface ContextDisposalWarningEvent extends BaseEvent {
288
+ type: 'context_disposal_warning'
289
+ level: 'warn'
290
+ data: {
291
+ jobName: string
292
+ networkName: string
293
+ error: string
294
+ }
295
+ }
296
+
297
+ export interface DeprecatedJobsSkippedEvent extends BaseEvent {
298
+ type: 'deprecated_jobs_skipped'
299
+ level: 'warn'
300
+ data: {
301
+ jobs: string[] | { name: string }[]
302
+ }
303
+ }
304
+
305
+ // Network events
306
+ export interface NetworkStartedEvent extends BaseEvent {
307
+ type: 'network_started'
308
+ level: 'info'
309
+ data: {
310
+ networkName: string
311
+ chainId: number
312
+ }
313
+ }
314
+
315
+ // Process error events
316
+ export interface UnhandledRejectionEvent extends BaseEvent {
317
+ type: 'unhandled_rejection'
318
+ level: 'error'
319
+ data: {
320
+ error: string
321
+ origin: string
322
+ }
323
+ }
324
+
325
+ export interface UncaughtExceptionEvent extends BaseEvent {
326
+ type: 'uncaught_exception'
327
+ level: 'error'
328
+ data: {
329
+ error: Error
330
+ }
331
+ }
332
+
333
+ export interface CLIErrorEvent extends BaseEvent {
334
+ type: 'cli_error'
335
+ level: 'error'
336
+ data: {
337
+ message: string
338
+ }
339
+ }
340
+
341
+ export interface JobExecutionFailedEvent extends BaseEvent {
342
+ type: 'job_execution_failed'
343
+ level: 'error'
344
+ data: {
345
+ jobName: string
346
+ networkName: string
347
+ chainId: number
348
+ error: string
349
+ }
350
+ }
351
+
352
+ export interface VerificationStartedEvent extends BaseEvent {
353
+ type: 'verification_started'
354
+ level: 'info'
355
+ data: {
356
+ actionName: string
357
+ address: string
358
+ contractName: string
359
+ platform: string
360
+ networkName: string
361
+ }
362
+ }
363
+
364
+ export interface VerificationSubmittedEvent extends BaseEvent {
365
+ type: 'verification_submitted'
366
+ level: 'info'
367
+ data: {
368
+ actionName: string
369
+ platform: string
370
+ guid: string
371
+ message: string
372
+ }
373
+ }
374
+
375
+ export interface VerificationCompletedEvent extends BaseEvent {
376
+ type: 'verification_completed'
377
+ level: 'info'
378
+ data: {
379
+ actionName: string
380
+ address: string
381
+ contractName: string
382
+ platform: string
383
+ message: string
384
+ }
385
+ }
386
+
387
+ export interface VerificationFailedEvent extends BaseEvent {
388
+ type: 'verification_failed'
389
+ level: 'error'
390
+ data: {
391
+ actionName: string
392
+ address: string
393
+ contractName: string
394
+ platform: string
395
+ error: string
396
+ }
397
+ }
398
+
399
+ export interface VerificationRetryEvent extends BaseEvent {
400
+ type: 'verification_retry'
401
+ level: 'info'
402
+ data: {
403
+ platform: string
404
+ attempt: number
405
+ maxRetries: number
406
+ error: string
407
+ }
408
+ }
409
+
410
+ // End-of-run summary
411
+ export interface RunSummaryEvent extends BaseEvent {
412
+ type: 'run_summary'
413
+ level: 'info' | 'warn'
414
+ data: {
415
+ networkCount: number
416
+ jobCount: number
417
+ successCount: number
418
+ failedCount: number
419
+ skippedCount: number
420
+ keyContracts: Array<{ job: string; action: string; address: string }>
421
+ }
422
+ }
423
+
424
+ // Union type of all events
425
+ export type DeploymentEvent =
426
+ | DeploymentStartedEvent
427
+ | DeploymentCompletedEvent
428
+ | DeploymentFailedEvent
429
+ | ProjectLoadingStartedEvent
430
+ | ProjectLoadedEvent
431
+ | ExecutionPlanEvent
432
+ | JobStartedEvent
433
+ | JobCompletedEvent
434
+ | JobSkippedEvent
435
+ | ActionStartedEvent
436
+ | ActionSkippedEvent
437
+ | ActionCompletedEvent
438
+ | ActionFailedEvent
439
+ | ActionInfoEvent
440
+ | DebugInfoEvent
441
+ | TemplateEnteredEvent
442
+ | TemplateExitedEvent
443
+ | TemplateSetupStartedEvent
444
+ | TemplateSetupCompletedEvent
445
+ | TemplateSetupSkippedEvent
446
+ | TemplateSkippedEvent
447
+ | PrimitiveActionEvent
448
+ | TransactionSentEvent
449
+ | TransactionConfirmedEvent
450
+ | ContractCreatedEvent
451
+ | OutputStoredEvent
452
+ | OutputFileWrittenEvent
453
+ | NoOutputsEvent
454
+ | OutputWritingStartedEvent
455
+ | DuplicateArtifactWarningEvent
456
+ | MissingNetworkConfigWarningEvent
457
+ | ContextDisposalWarningEvent
458
+ | DeprecatedJobsSkippedEvent
459
+ | NetworkStartedEvent
460
+ | UnhandledRejectionEvent
461
+ | UncaughtExceptionEvent
462
+ | CLIErrorEvent
463
+ | JobExecutionFailedEvent
464
+ | VerificationStartedEvent
465
+ | VerificationSubmittedEvent
466
+ | VerificationCompletedEvent
467
+ | VerificationFailedEvent
468
+ | VerificationRetryEvent
469
+ | RunSummaryEvent
@@ -0,0 +1,14 @@
1
+ // Export all types
2
+ export * from './types'
3
+
4
+ // Export core classes
5
+ export * from './contracts/repository'
6
+
7
+ // Export all parsers
8
+ export * as parsers from './parsers'
9
+
10
+ // Export the deployer
11
+ export * from './deployer'
12
+
13
+ // This will be the main entry point for the lib
14
+ // Additional functionality will be added here as the lib grows
@@ -0,0 +1,59 @@
1
+ import * as fs from 'fs/promises'
2
+ import * as path from 'path'
3
+ import { parse as parseYaml } from 'yaml'
4
+ import { Network } from './types'
5
+
6
+ function isValidNetwork(obj: unknown): obj is Network {
7
+ return (
8
+ typeof obj === 'object' &&
9
+ obj !== null &&
10
+ 'name' in obj &&
11
+ 'chainId' in obj &&
12
+ 'rpcUrl' in obj &&
13
+ typeof (obj as Record<string, unknown>).name === 'string' &&
14
+ typeof (obj as Record<string, unknown>).chainId === 'number' &&
15
+ typeof (obj as Record<string, unknown>).rpcUrl === 'string' &&
16
+ // supports field is optional and should be an array of strings if present
17
+ (!('supports' in obj) ||
18
+ (Array.isArray((obj as Record<string, unknown>).supports) &&
19
+ ((obj as Record<string, unknown>).supports as unknown[]).every((item: unknown) => typeof item === 'string'))) &&
20
+ // gasLimit field is optional and should be a number if present
21
+ (!('gasLimit' in obj) || typeof (obj as Record<string, unknown>).gasLimit === 'number') &&
22
+ // testnet field is optional and should be a boolean if present
23
+ (!('testnet' in obj) || typeof (obj as Record<string, unknown>).testnet === 'boolean')
24
+ )
25
+ }
26
+
27
+ /**
28
+ * Loads and validates network configurations from a `networks.yaml` file in the project root.
29
+ * @param projectRoot The root directory of the project.
30
+ * @returns A promise that resolves to an array of Network objects.
31
+ * @throws An error if the file exists but is malformed or contains invalid network data.
32
+ */
33
+ export async function loadNetworks(projectRoot: string): Promise<Network[]> {
34
+ const filePath = path.join(projectRoot, 'networks.yaml')
35
+ try {
36
+ const content = await fs.readFile(filePath, 'utf-8')
37
+ const parsed = parseYaml(content)
38
+
39
+ if (!Array.isArray(parsed)) {
40
+ throw new Error('networks.yaml must contain an array of network configurations.')
41
+ }
42
+
43
+ const networks: Network[] = []
44
+ for (const item of parsed) {
45
+ if (!isValidNetwork(item)) {
46
+ throw new Error(`Invalid network configuration found in networks.yaml: ${JSON.stringify(item)}`)
47
+ }
48
+ networks.push(item)
49
+ }
50
+ return networks
51
+ } catch (error: unknown) {
52
+ if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
53
+ // It's okay if the file doesn't exist, just return an empty array.
54
+ return []
55
+ }
56
+ const message = error instanceof Error ? error.message : String(error)
57
+ throw new Error(`Failed to load or parse networks.yaml: ${message}`)
58
+ }
59
+ }
@@ -0,0 +1,64 @@
1
+ import { ethers } from 'ethers'
2
+ import { Network } from './types'
3
+
4
+ /**
5
+ * Attempts to detect network information from an RPC URL
6
+ * @param rpcUrl The RPC URL to query
7
+ * @returns Promise that resolves with detected network information
8
+ */
9
+ export async function detectNetworkFromRpc(rpcUrl: string): Promise<Partial<Network>> {
10
+ // Detect network information from RPC URL
11
+
12
+ try {
13
+ const provider = new ethers.JsonRpcProvider(rpcUrl)
14
+
15
+ // Create provider and get network information
16
+ const network = await provider.getNetwork()
17
+
18
+ // Network detected successfully
19
+
20
+ return {
21
+ name: network.name,
22
+ chainId: Number(network.chainId),
23
+ rpcUrl: rpcUrl
24
+ }
25
+ } catch (error) {
26
+ // Failed to detect network
27
+ throw new Error(`Failed to detect network from RPC URL "${rpcUrl}": ${error instanceof Error ? error.message : String(error)}`)
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Validates if a string is a valid RPC URL
33
+ * @param url The URL to validate
34
+ * @returns True if the URL appears to be a valid RPC URL
35
+ */
36
+ export function isValidRpcUrl(url: string): boolean {
37
+ try {
38
+ // Basic URL validation
39
+ const urlObj = new URL(url)
40
+
41
+ // Check if it's http/https or a common RPC protocol
42
+ const isValidProtocol = urlObj.protocol === 'http:' ||
43
+ urlObj.protocol === 'https:' ||
44
+ url.startsWith('ws://') ||
45
+ url.startsWith('wss://')
46
+
47
+ if (!isValidProtocol) {
48
+ // Invalid protocol
49
+ return false
50
+ }
51
+
52
+ // Check if it has a hostname
53
+ if (!urlObj.hostname) {
54
+ // Missing hostname
55
+ return false
56
+ }
57
+
58
+ // Valid RPC URL format
59
+ return true
60
+ } catch {
61
+ // Invalid RPC URL format
62
+ return false
63
+ }
64
+ }