@0xsequence/catapult 1.3.17 → 1.5.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 (232) hide show
  1. package/README.md +276 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +1 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +1 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/list.d.ts.map +1 -1
  10. package/dist/commands/list.js +12 -0
  11. package/dist/commands/list.js.map +1 -1
  12. package/dist/commands/provenance.d.ts +3 -0
  13. package/dist/commands/provenance.d.ts.map +1 -0
  14. package/dist/commands/provenance.js +138 -0
  15. package/dist/commands/provenance.js.map +1 -0
  16. package/dist/lib/__tests__/deployer.spec.js +118 -1
  17. package/dist/lib/__tests__/deployer.spec.js.map +1 -1
  18. package/dist/lib/__tests__/network-loader.spec.js.map +1 -1
  19. package/dist/lib/__tests__/provenance.spec.d.ts +2 -0
  20. package/dist/lib/__tests__/provenance.spec.d.ts.map +1 -0
  21. package/dist/lib/__tests__/provenance.spec.js +205 -0
  22. package/dist/lib/__tests__/provenance.spec.js.map +1 -0
  23. package/dist/lib/contracts/__tests__/repository.spec.js +243 -0
  24. package/dist/lib/contracts/__tests__/repository.spec.js.map +1 -1
  25. package/dist/lib/contracts/repository.d.ts +9 -1
  26. package/dist/lib/contracts/repository.d.ts.map +1 -1
  27. package/dist/lib/contracts/repository.js +93 -7
  28. package/dist/lib/contracts/repository.js.map +1 -1
  29. package/dist/lib/core/__tests__/assert-action.spec.d.ts +2 -0
  30. package/dist/lib/core/__tests__/assert-action.spec.d.ts.map +1 -0
  31. package/dist/lib/core/__tests__/assert-action.spec.js +377 -0
  32. package/dist/lib/core/__tests__/assert-action.spec.js.map +1 -0
  33. package/dist/lib/core/__tests__/engine.spec.js +80 -0
  34. package/dist/lib/core/__tests__/engine.spec.js.map +1 -1
  35. package/dist/lib/core/__tests__/loader.spec.js +29 -0
  36. package/dist/lib/core/__tests__/loader.spec.js.map +1 -1
  37. package/dist/lib/core/__tests__/resolver.spec.js +405 -0
  38. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -1
  39. package/dist/lib/core/__tests__/sign-actions.spec.d.ts +2 -0
  40. package/dist/lib/core/__tests__/sign-actions.spec.d.ts.map +1 -0
  41. package/dist/lib/core/__tests__/sign-actions.spec.js +128 -0
  42. package/dist/lib/core/__tests__/sign-actions.spec.js.map +1 -0
  43. package/dist/lib/core/__tests__/signer.spec.d.ts +2 -0
  44. package/dist/lib/core/__tests__/signer.spec.d.ts.map +1 -0
  45. package/dist/lib/core/__tests__/signer.spec.js +40 -0
  46. package/dist/lib/core/__tests__/signer.spec.js.map +1 -0
  47. package/dist/lib/core/context.d.ts +3 -2
  48. package/dist/lib/core/context.d.ts.map +1 -1
  49. package/dist/lib/core/context.js +3 -2
  50. package/dist/lib/core/context.js.map +1 -1
  51. package/dist/lib/core/engine.d.ts +4 -0
  52. package/dist/lib/core/engine.d.ts.map +1 -1
  53. package/dist/lib/core/engine.js +206 -0
  54. package/dist/lib/core/engine.js.map +1 -1
  55. package/dist/lib/core/loader.d.ts +1 -0
  56. package/dist/lib/core/loader.d.ts.map +1 -1
  57. package/dist/lib/core/loader.js +6 -1
  58. package/dist/lib/core/loader.js.map +1 -1
  59. package/dist/lib/core/resolver.d.ts +2 -0
  60. package/dist/lib/core/resolver.d.ts.map +1 -1
  61. package/dist/lib/core/resolver.js +89 -0
  62. package/dist/lib/core/resolver.js.map +1 -1
  63. package/dist/lib/core/signer.d.ts +7 -0
  64. package/dist/lib/core/signer.d.ts.map +1 -0
  65. package/dist/lib/core/signer.js +60 -0
  66. package/dist/lib/core/signer.js.map +1 -0
  67. package/dist/lib/deployer.d.ts.map +1 -1
  68. package/dist/lib/deployer.js +21 -4
  69. package/dist/lib/deployer.js.map +1 -1
  70. package/dist/lib/index.d.ts +1 -0
  71. package/dist/lib/index.d.ts.map +1 -1
  72. package/dist/lib/index.js +1 -0
  73. package/dist/lib/index.js.map +1 -1
  74. package/dist/lib/parsers/__tests__/job.spec.js +77 -0
  75. package/dist/lib/parsers/__tests__/job.spec.js.map +1 -1
  76. package/dist/lib/parsers/__tests__/source.spec.d.ts +2 -0
  77. package/dist/lib/parsers/__tests__/source.spec.d.ts.map +1 -0
  78. package/dist/lib/parsers/__tests__/source.spec.js +158 -0
  79. package/dist/lib/parsers/__tests__/source.spec.js.map +1 -0
  80. package/dist/lib/parsers/index.d.ts +1 -0
  81. package/dist/lib/parsers/index.d.ts.map +1 -1
  82. package/dist/lib/parsers/index.js +1 -0
  83. package/dist/lib/parsers/index.js.map +1 -1
  84. package/dist/lib/parsers/job.d.ts.map +1 -1
  85. package/dist/lib/parsers/job.js +11 -0
  86. package/dist/lib/parsers/job.js.map +1 -1
  87. package/dist/lib/parsers/source.d.ts +4 -0
  88. package/dist/lib/parsers/source.d.ts.map +1 -0
  89. package/dist/lib/parsers/source.js +107 -0
  90. package/dist/lib/parsers/source.js.map +1 -0
  91. package/dist/lib/provenance.d.ts +34 -0
  92. package/dist/lib/provenance.d.ts.map +1 -0
  93. package/dist/lib/provenance.js +694 -0
  94. package/dist/lib/provenance.js.map +1 -0
  95. package/dist/lib/types/actions.d.ts +42 -2
  96. package/dist/lib/types/actions.d.ts.map +1 -1
  97. package/dist/lib/types/actions.js +4 -0
  98. package/dist/lib/types/actions.js.map +1 -1
  99. package/dist/lib/types/contracts.d.ts +3 -0
  100. package/dist/lib/types/contracts.d.ts.map +1 -1
  101. package/dist/lib/types/definitions.d.ts +1 -0
  102. package/dist/lib/types/definitions.d.ts.map +1 -1
  103. package/dist/lib/types/index.d.ts +1 -0
  104. package/dist/lib/types/index.d.ts.map +1 -1
  105. package/dist/lib/types/index.js +1 -0
  106. package/dist/lib/types/index.js.map +1 -1
  107. package/dist/lib/types/source.d.ts +26 -0
  108. package/dist/lib/types/source.d.ts.map +1 -0
  109. package/dist/lib/types/source.js +3 -0
  110. package/dist/lib/types/source.js.map +1 -0
  111. package/dist/lib/types/values.d.ts +33 -1
  112. package/dist/lib/types/values.d.ts.map +1 -1
  113. package/package.json +4 -1
  114. package/.eslintrc.json +0 -29
  115. package/.github/workflows/ci.yml +0 -181
  116. package/CONCEPT.md +0 -24
  117. package/contracts/checked-call.huff +0 -65
  118. package/eslint.config.js +0 -48
  119. package/examples/jobs/guards-v1.yaml +0 -17
  120. package/examples/jobs/sequence-seq-0001-patch.yaml +0 -59
  121. package/examples/jobs/sequence-v1.yaml +0 -59
  122. package/examples/templates/sequence-factory-v1.yaml +0 -56
  123. package/jest.config.js +0 -25
  124. package/src/cli.ts +0 -17
  125. package/src/commands/common.ts +0 -61
  126. package/src/commands/dry.ts +0 -209
  127. package/src/commands/etherscan.ts +0 -360
  128. package/src/commands/index.ts +0 -5
  129. package/src/commands/list.ts +0 -249
  130. package/src/commands/run.ts +0 -146
  131. package/src/commands/utils.ts +0 -215
  132. package/src/index.ts +0 -67
  133. package/src/lib/__tests__/deployer-events.spec.ts +0 -338
  134. package/src/lib/__tests__/deployer.spec.ts +0 -2093
  135. package/src/lib/__tests__/network-loader.spec.ts +0 -150
  136. package/src/lib/__tests__/network-selection.spec.ts +0 -41
  137. package/src/lib/__tests__/network-utils.spec.ts +0 -230
  138. package/src/lib/artifacts/__tests__/fixtures/contract1.json +0 -19
  139. package/src/lib/artifacts/__tests__/fixtures/contract2.json +0 -19
  140. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +0 -19
  141. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +0 -18
  142. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +0 -8
  143. package/src/lib/artifacts/__tests__/fixtures/readme.txt +0 -2
  144. package/src/lib/contracts/__tests__/repository.spec.ts +0 -344
  145. package/src/lib/contracts/repository.ts +0 -313
  146. package/src/lib/core/__tests__/context.spec.ts +0 -37
  147. package/src/lib/core/__tests__/engine.spec.ts +0 -1889
  148. package/src/lib/core/__tests__/graph.spec.ts +0 -125
  149. package/src/lib/core/__tests__/json-integration.spec.ts +0 -425
  150. package/src/lib/core/__tests__/loader.spec.ts +0 -334
  151. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +0 -406
  152. package/src/lib/core/__tests__/resolver.spec.ts +0 -2053
  153. package/src/lib/core/__tests__/static-action.spec.ts +0 -172
  154. package/src/lib/core/context.ts +0 -127
  155. package/src/lib/core/engine.ts +0 -1782
  156. package/src/lib/core/graph.ts +0 -252
  157. package/src/lib/core/loader.ts +0 -247
  158. package/src/lib/core/resolver.ts +0 -757
  159. package/src/lib/deployer.ts +0 -981
  160. package/src/lib/events/__tests__/event-system.spec.ts +0 -392
  161. package/src/lib/events/cli-adapter.ts +0 -369
  162. package/src/lib/events/emitter.ts +0 -62
  163. package/src/lib/events/index.ts +0 -3
  164. package/src/lib/events/types.ts +0 -520
  165. package/src/lib/index.ts +0 -14
  166. package/src/lib/network-loader.ts +0 -90
  167. package/src/lib/network-selection.ts +0 -73
  168. package/src/lib/network-utils.ts +0 -64
  169. package/src/lib/parsers/__tests__/buildinfo.spec.ts +0 -122
  170. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +0 -62
  171. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +0 -2
  172. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +0 -89
  173. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +0 -17
  174. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +0 -63
  175. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +0 -4
  176. package/src/lib/parsers/__tests__/job.spec.ts +0 -358
  177. package/src/lib/parsers/__tests__/template.spec.ts +0 -111
  178. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +0 -117
  179. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +0 -5
  180. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +0 -67
  181. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +0 -5
  182. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +0 -11
  183. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +0 -5
  184. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +0 -4
  185. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +0 -11
  186. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +0 -11
  187. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +0 -40
  188. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +0 -7
  189. package/src/lib/parsers/artifact/foundry-1.2.ts +0 -72
  190. package/src/lib/parsers/artifact/index.ts +0 -27
  191. package/src/lib/parsers/artifact/types.ts +0 -9
  192. package/src/lib/parsers/buildinfo.ts +0 -127
  193. package/src/lib/parsers/constants.ts +0 -56
  194. package/src/lib/parsers/index.ts +0 -5
  195. package/src/lib/parsers/job.ts +0 -148
  196. package/src/lib/parsers/template.ts +0 -135
  197. package/src/lib/std/templates/arachnid-deterministic-deployment-proxy.yaml +0 -68
  198. package/src/lib/std/templates/assured-deployment.yaml +0 -46
  199. package/src/lib/std/templates/era-evm-predeploy.yaml +0 -35
  200. package/src/lib/std/templates/erc-2470.yaml +0 -70
  201. package/src/lib/std/templates/min-balance.yaml +0 -35
  202. package/src/lib/std/templates/nano-universal-deployer.yaml +0 -61
  203. package/src/lib/std/templates/raw-erc-2470.yaml +0 -62
  204. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +0 -54
  205. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +0 -52
  206. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +0 -61
  207. package/src/lib/types/__tests__/json-request-action.spec.ts +0 -243
  208. package/src/lib/types/__tests__/read-json-value.spec.ts +0 -278
  209. package/src/lib/types/__tests__/resolve-json-value.spec.ts +0 -769
  210. package/src/lib/types/actions.ts +0 -127
  211. package/src/lib/types/artifacts.ts +0 -21
  212. package/src/lib/types/buildinfo.ts +0 -116
  213. package/src/lib/types/conditions.ts +0 -50
  214. package/src/lib/types/contracts.ts +0 -23
  215. package/src/lib/types/definitions.ts +0 -70
  216. package/src/lib/types/index.ts +0 -8
  217. package/src/lib/types/network.ts +0 -33
  218. package/src/lib/types/project.ts +0 -9
  219. package/src/lib/types/task.ts +0 -9
  220. package/src/lib/types/values.ts +0 -150
  221. package/src/lib/utils/assertion.ts +0 -24
  222. package/src/lib/utils/validation.ts +0 -116
  223. package/src/lib/validation/contract-references.ts +0 -210
  224. package/src/lib/validation/index.ts +0 -1
  225. package/src/lib/verification/__tests__/etherscan.spec.ts +0 -710
  226. package/src/lib/verification/__tests__/sourcify.spec.ts +0 -288
  227. package/src/lib/verification/etherscan.ts +0 -547
  228. package/src/lib/verification/sourcify.ts +0 -248
  229. package/test_validation/artifacts/TestContract.json +0 -9
  230. package/test_validation/jobs/test-missing.yaml +0 -16
  231. package/test_validation/networks.yaml +0 -3
  232. package/tsconfig.json +0 -36
@@ -1,369 +0,0 @@
1
- import chalk from 'chalk'
2
- import { DeploymentEvent } from './types'
3
- import { DeploymentEventEmitter } from './emitter'
4
-
5
- /**
6
- * Verbosity levels for filtering console output:
7
- * 0 (default): Critical info only - errors, warnings, main deployment steps
8
- * 1 (-v): Add transaction details and verification steps
9
- * 2 (-vv): Add action details and file operations
10
- * 3 (-vvv): Full debug - show everything including template transitions
11
- */
12
- export type VerbosityLevel = 0 | 1 | 2 | 3
13
-
14
- /**
15
- * CLI adapter that converts structured deployment events into
16
- * formatted console output using chalk for colors.
17
- */
18
- export class CLIEventAdapter {
19
- private emitter: DeploymentEventEmitter
20
- private verbosity: VerbosityLevel
21
-
22
- constructor(emitter: DeploymentEventEmitter, verbosity: VerbosityLevel = 0) {
23
- this.emitter = emitter
24
- this.verbosity = verbosity
25
- this.setupListeners()
26
- }
27
-
28
- /**
29
- * Updates the verbosity level for this adapter.
30
- */
31
- setVerbosity(verbosity: VerbosityLevel): void {
32
- this.verbosity = verbosity
33
- }
34
-
35
-
36
-
37
- private setupListeners(): void {
38
- this.emitter.onAnyEvent((event) => {
39
- this.handleEvent(event)
40
- })
41
- }
42
-
43
- /**
44
- * Determines the minimum verbosity level required to show an event.
45
- */
46
- private getEventVerbosityLevel(eventType: string): VerbosityLevel {
47
- // Level 0 (default): Critical info only
48
- const level0Events = new Set([
49
- 'deployment_started', 'deployment_completed', 'deployment_failed',
50
- 'job_started', 'job_completed', 'job_skipped', 'job_execution_failed',
51
- 'network_started', 'network_signer_info',
52
- 'duplicate_artifact_warning', 'missing_network_config_warning',
53
- 'unhandled_rejection', 'uncaught_exception', 'cli_error',
54
- 'verification_failed'
55
- ])
56
-
57
- // Level 1 (-v): Add transaction details and verification
58
- const level1Events = new Set([
59
- 'project_loading_started', 'project_loaded', 'execution_plan',
60
- 'transaction_sent', 'transaction_confirmed',
61
- 'contract_created',
62
- 'verification_started', 'verification_submitted', 'verification_completed',
63
- 'output_writing_started', 'output_file_written', 'no_outputs',
64
- 'run_summary'
65
- ])
66
-
67
- // Level 2 (-vv): Add action details and operations
68
- const level2Events = new Set([
69
- 'action_started', 'action_skipped',
70
- 'template_setup_started', 'template_setup_completed', 'template_setup_skipped', 'template_skipped'
71
- ])
72
-
73
- // Level 3 (-vvv): Full debug - everything else
74
- const level3Events = new Set([
75
- 'template_entered', 'template_exited',
76
- 'primitive_action', 'output_stored',
77
- 'debug_info', 'action_failed', 'action_info', 'action_completed'
78
- ])
79
-
80
- if (level0Events.has(eventType)) return 0
81
- if (level1Events.has(eventType)) return 1
82
- if (level2Events.has(eventType)) return 2
83
- if (level3Events.has(eventType)) return 3
84
-
85
- // Default to level 3 for any new events we haven't categorized
86
- return 3
87
- }
88
-
89
- private handleEvent(event: DeploymentEvent): void {
90
- // Filter events based on verbosity level
91
- const requiredLevel = this.getEventVerbosityLevel(event.type)
92
- if (this.verbosity < requiredLevel) {
93
- return
94
- }
95
- switch (event.type) {
96
- case 'deployment_started':
97
- console.log(chalk.bold.inverse(' CATAPULT: STARTING DEPLOYMENT RUN '))
98
- break
99
-
100
- case 'project_loading_started':
101
- console.log(chalk.blue(`\n1. Loading project from: ${event.data.projectRoot}`))
102
- break
103
-
104
- case 'project_loaded':
105
- console.log(chalk.green(` - Loaded ${event.data.jobCount} jobs, ${event.data.templateCount} templates, and registered artifacts.`))
106
- break
107
-
108
- case 'execution_plan':
109
- console.log(chalk.blue('\n2. Execution Plan'))
110
- console.log(chalk.gray(` - Target Networks: ${event.data.targetNetworks.map(n => `${n.name} (ChainID: ${n.chainId})`).join(', ')}`))
111
- console.log(chalk.gray(` - Job Execution Order: ${event.data.jobExecutionOrder.join(' -> ')}`))
112
- break
113
-
114
- case 'network_started':
115
- console.log(chalk.cyan.bold(`\nNetwork: ${event.data.networkName} (ChainID: ${event.data.chainId})`))
116
- break
117
-
118
- case 'network_signer_info':
119
- console.log(chalk.gray(` Sender: ${event.data.address}`))
120
- console.log(chalk.gray(` Balance: ${event.data.balance} ETH (${event.data.balanceWei} wei)`))
121
- break
122
-
123
- case 'job_started':
124
- console.log(chalk.cyan.bold(`\n🚀 Starting job: ${event.data.jobName} (v${event.data.jobVersion})`))
125
- break
126
-
127
- case 'job_completed':
128
- console.log(chalk.green.bold(`✅ Job "${event.data.jobName}" completed successfully.`))
129
- break
130
-
131
- case 'job_skipped':
132
- console.log(chalk.yellow(` Skipping job "${event.data.jobName}" on network "${event.data.networkName}" due to configuration.`))
133
- break
134
-
135
- case 'action_started':
136
- console.log(chalk.blue(` - Executing: ${event.data.actionName}`))
137
- break
138
-
139
- case 'action_skipped':
140
- console.log(chalk.yellow(` ↪ Skipping "${event.data.actionName}": ${event.data.reason}`))
141
- break
142
-
143
- case 'template_entered':
144
- console.log(chalk.magenta(` -> Entering template: ${event.data.templateName}`))
145
- break
146
-
147
- case 'template_exited':
148
- console.log(chalk.magenta(` <- Exiting template: ${event.data.templateName}`))
149
- break
150
-
151
- case 'template_setup_started':
152
- console.log(chalk.magenta(` -> Running setup for template: ${event.data.templateName}`))
153
- break
154
-
155
- case 'template_setup_completed':
156
- console.log(chalk.magenta(` <- Finished setup for template: ${event.data.templateName}`))
157
- break
158
-
159
- case 'template_setup_skipped':
160
- // Don't output anything - this is internal and not user-facing
161
- break
162
-
163
- case 'template_skipped':
164
- console.log(chalk.yellow(` ↪ Skipping actions in template "${event.data.templateName}" due to met condition.`))
165
- break
166
-
167
- case 'primitive_action':
168
- console.log(chalk.gray(` Executing primitive: ${event.data.actionType}`))
169
- break
170
-
171
- case 'transaction_sent':
172
- console.log(chalk.gray(` to: ${event.data.to}, value: ${event.data.value}, data: ${event.data.dataPreview}...`))
173
- console.log(chalk.gray(` tx hash: ${event.data.txHash}`))
174
- break
175
-
176
- case 'transaction_confirmed':
177
- console.log(chalk.gray(` tx confirmed in block: ${event.data.blockNumber}`))
178
- break
179
-
180
- case 'output_stored':
181
- console.log(chalk.gray(` Stored output: ${event.data.outputKey} = ${event.data.value}`))
182
- break
183
-
184
- case 'output_writing_started':
185
- console.log(chalk.blue('\n4. Writing output files...'))
186
- break
187
-
188
- case 'output_file_written':
189
- console.log(chalk.green(` - Wrote: ${event.data.relativePath}`))
190
- break
191
-
192
- case 'no_outputs':
193
- console.log(chalk.yellow('\nNo successful job executions to write to output.'))
194
- break
195
-
196
- case 'deployment_completed':
197
- // Print a compact, high-signal run summary. The Deployer will have emitted
198
- // preceding info, so we only render a final banner here. Detailed counts
199
- // are printed via a separate 'run_summary' event.
200
- console.log(chalk.bold.inverse('\n CATAPULT: DEPLOYMENT RUN COMPLETED SUCCESSFULLY '))
201
- break
202
-
203
- case 'deployment_failed':
204
- console.error(chalk.red.bold('\n💥 DEPLOYMENT FAILED!'))
205
- // Show concise failed jobs table if present
206
- const failedJobs = (event as any).data?.failedJobs as Array<{ jobName: string; networkName: string; chainId: number; error: string }> | undefined
207
- if (Array.isArray(failedJobs) && failedJobs.length > 0) {
208
- console.error(chalk.red(' ✗ Failed jobs:'))
209
- for (const f of failedJobs) {
210
- const where = `${f.networkName} (ChainID: ${f.chainId})`
211
- console.error(chalk.red(` - ${f.jobName} on ${where}`))
212
- console.error(chalk.red(` Error: ${f.error}`))
213
- }
214
- }
215
- // Always print the top-level error and stack last
216
- if ((event as any).data?.stack) {
217
- console.error(chalk.red((event as any).data.stack))
218
- } else if ((event as any).data?.error) {
219
- console.error(chalk.red((event as any).data.error))
220
- }
221
- break
222
-
223
- case 'duplicate_artifact_warning':
224
- console.warn(`Warning: Duplicate artifact contractName found: "${event.data.contractName}". Name-based lookup disabled - use hash or path references instead.`)
225
- break
226
-
227
- case 'missing_network_config_warning':
228
- console.warn(chalk.yellow(`Warning: Could not find network configurations for specified chain IDs: ${event.data.missingChainIds.join(', ')}`))
229
- break
230
-
231
- case 'unhandled_rejection':
232
- console.error(chalk.red('Unhandled Rejection:'), event.data.error, chalk.red('origin:'), event.data.origin)
233
- break
234
-
235
- case 'uncaught_exception':
236
- console.error(chalk.red('Uncaught Exception:'), event.data.error)
237
- break
238
-
239
- case 'cli_error':
240
- console.error(chalk.red('Error:'), event.data.message)
241
- break
242
-
243
- case 'verification_started':
244
- console.log(chalk.gray(` 🔍 Verifying contract on ${event.data.platform} (${event.data.networkName})...`))
245
- break
246
-
247
- case 'verification_submitted':
248
- if (event.data.guid && event.data.guid !== 'N/A') {
249
- console.log(chalk.gray(` 📝 Verification submitted to ${event.data.platform} (GUID: ${event.data.guid})`))
250
- }
251
- break
252
-
253
- case 'verification_completed':
254
- if (event.data.message.includes('already verified')) {
255
- console.log(chalk.yellow(` ✓ Already verified on ${event.data.platform}`))
256
- } else {
257
- console.log(chalk.green(` ✅ ${event.data.message} on ${event.data.platform}`))
258
- }
259
- break
260
-
261
- case 'verification_failed':
262
- console.log(chalk.red(` ❌ Verification failed on ${event.data.platform}: ${event.data.error}`))
263
- break
264
-
265
- case 'verification_retry':
266
- // Keep short to reduce noise
267
- console.log(chalk.gray(` Verification retry ${event.data.attempt}/${event.data.maxRetries}: ${event.data.error}`))
268
- break
269
-
270
- case 'verification_skipped':
271
- console.log(chalk.yellow(` ⚠️ ${event.data.reason}`))
272
- break
273
-
274
- case 'verification_warnings_report':
275
- // Display detailed verification warnings report
276
- console.log(chalk.yellow('\n📋 Verification Warnings Report'))
277
- console.log(chalk.yellow(` Total warnings: ${event.data.totalWarnings}`))
278
- console.log('')
279
-
280
- if (event.data.warnings && event.data.warnings.length > 0) {
281
- for (const warning of event.data.warnings) {
282
- console.log(chalk.red(` ❌ ${warning.actionName} (${warning.contractName})`))
283
- console.log(chalk.gray(` Address: ${warning.address}`))
284
- console.log(chalk.gray(` Platform: ${warning.platform}`))
285
- if (warning.networkName) {
286
- console.log(chalk.gray(` Network: ${warning.networkName}`))
287
- }
288
- console.log(chalk.gray(` Error: ${warning.error}`))
289
- console.log('')
290
- }
291
- }
292
- break
293
- case 'contract_created':
294
- console.log(chalk.gray(` contract: ${event.data.contractAddress}`))
295
- break
296
-
297
- case 'context_disposal_warning':
298
- console.warn(chalk.yellow(`Warning: context cleanup issue for job "${event.data.jobName}" on ${event.data.networkName}: ${event.data.error}`))
299
- break
300
-
301
- case 'deprecated_jobs_skipped':
302
- if (Array.isArray(event.data.jobs) && event.data.jobs.length > 0) {
303
- const names = event.data.jobs.map((j: any) => typeof j === 'string' ? j : j.name).filter(Boolean)
304
- console.log(chalk.yellow(`Skipping deprecated jobs (not requested): ${names.join(', ')}`))
305
- }
306
- break
307
-
308
- case 'run_summary':
309
- // Rich end-of-run summary
310
- console.log(chalk.blue('\n5. Summary'))
311
- console.log(chalk.gray(` Networks: ${event.data.networkCount}, Jobs: ${event.data.jobCount}`))
312
- console.log(chalk.green(` ✓ Success: ${event.data.successCount}`))
313
- if (event.data.skippedCount > 0) console.log(chalk.yellow(` ↪ Skipped: ${event.data.skippedCount}`))
314
- if (event.data.failedCount > 0) console.log(chalk.red(` ✗ Failed: ${event.data.failedCount}`))
315
- if (Array.isArray(event.data.keyContracts) && event.data.keyContracts.length > 0) {
316
- console.log(chalk.gray(' Key contracts:'))
317
- for (const c of event.data.keyContracts) {
318
- console.log(chalk.gray(` - ${c.job}.${c.action}: ${c.address}`))
319
- }
320
- }
321
- break
322
-
323
- case 'job_execution_failed':
324
- console.error(chalk.red.bold(`❌ Job "${event.data.jobName}" failed on ${event.data.networkName} (Chain ID: ${event.data.chainId})`))
325
- console.error(chalk.red(` Error: ${event.data.error}`))
326
- break
327
-
328
- case 'action_completed':
329
- console.log(chalk.green(` ✅ ${event.data.result}`))
330
- break
331
-
332
- case 'action_failed':
333
- console.log(chalk.red(` ❌ ${event.data.message}`))
334
- break
335
-
336
- case 'action_info':
337
- console.log(chalk.gray(` ℹ️ ${event.data.message}`))
338
- break
339
-
340
- case 'debug_info':
341
- const levelPrefix = event.level.toUpperCase()
342
- const levelColor = event.level === 'warn' ? chalk.yellow :
343
- event.level === 'info' ? chalk.blue :
344
- chalk.gray
345
- console.log(levelColor(` [${levelPrefix}] ${event.data.message}`))
346
- break
347
-
348
- default:
349
- // Suppress raw debug dumps in CLI output; only show a concise line at highest verbosity
350
- if (this.verbosity >= 3) {
351
- const level = (event as any).level?.toUpperCase?.() || 'DEBUG'
352
- const type = (event as any).type || 'event'
353
- const msg = (event as any).data?.message
354
- if (msg) {
355
- console.log(chalk.gray(` [${level}] ${type}: ${msg}`))
356
- }
357
- // Otherwise, remain silent to avoid noisy/broken logs
358
- }
359
- break
360
- }
361
- }
362
-
363
- /**
364
- * Stop listening to events (cleanup method).
365
- */
366
- public destroy(): void {
367
- this.emitter.removeAllListeners()
368
- }
369
- }
@@ -1,62 +0,0 @@
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()
@@ -1,3 +0,0 @@
1
- export * from './types'
2
- export * from './emitter'
3
- export * from './cli-adapter'