@0xsequence/catapult 1.4.0 → 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 (163) hide show
  1. package/README.md +27 -0
  2. package/dist/lib/__tests__/network-loader.spec.js.map +1 -1
  3. package/dist/lib/core/__tests__/resolver.spec.js +22 -0
  4. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -1
  5. package/dist/lib/core/__tests__/sign-actions.spec.d.ts +2 -0
  6. package/dist/lib/core/__tests__/sign-actions.spec.d.ts.map +1 -0
  7. package/dist/lib/core/__tests__/sign-actions.spec.js +128 -0
  8. package/dist/lib/core/__tests__/sign-actions.spec.js.map +1 -0
  9. package/dist/lib/core/__tests__/signer.spec.d.ts +2 -0
  10. package/dist/lib/core/__tests__/signer.spec.d.ts.map +1 -0
  11. package/dist/lib/core/__tests__/signer.spec.js +40 -0
  12. package/dist/lib/core/__tests__/signer.spec.js.map +1 -0
  13. package/dist/lib/core/context.d.ts +3 -2
  14. package/dist/lib/core/context.d.ts.map +1 -1
  15. package/dist/lib/core/context.js +3 -2
  16. package/dist/lib/core/context.js.map +1 -1
  17. package/dist/lib/core/engine.d.ts +4 -0
  18. package/dist/lib/core/engine.d.ts.map +1 -1
  19. package/dist/lib/core/engine.js +173 -0
  20. package/dist/lib/core/engine.js.map +1 -1
  21. package/dist/lib/core/signer.d.ts +7 -0
  22. package/dist/lib/core/signer.d.ts.map +1 -0
  23. package/dist/lib/core/signer.js +60 -0
  24. package/dist/lib/core/signer.js.map +1 -0
  25. package/dist/lib/parsers/__tests__/source.spec.js +37 -0
  26. package/dist/lib/parsers/__tests__/source.spec.js.map +1 -1
  27. package/dist/lib/parsers/source.js +1 -1
  28. package/dist/lib/parsers/source.js.map +1 -1
  29. package/dist/lib/provenance.js +51 -2
  30. package/dist/lib/provenance.js.map +1 -1
  31. package/dist/lib/types/actions.d.ts +26 -2
  32. package/dist/lib/types/actions.d.ts.map +1 -1
  33. package/dist/lib/types/actions.js +3 -0
  34. package/dist/lib/types/actions.js.map +1 -1
  35. package/dist/lib/types/source.d.ts +2 -0
  36. package/dist/lib/types/source.d.ts.map +1 -1
  37. package/package.json +4 -1
  38. package/.eslintrc.json +0 -29
  39. package/.github/workflows/ci.yml +0 -181
  40. package/CONCEPT.md +0 -24
  41. package/contracts/checked-call.huff +0 -65
  42. package/eslint.config.js +0 -48
  43. package/examples/jobs/guards-v1.yaml +0 -17
  44. package/examples/jobs/sequence-seq-0001-patch.yaml +0 -59
  45. package/examples/jobs/sequence-v1.yaml +0 -59
  46. package/examples/templates/sequence-factory-v1.yaml +0 -56
  47. package/jest.config.js +0 -25
  48. package/src/cli.ts +0 -18
  49. package/src/commands/common.ts +0 -61
  50. package/src/commands/dry.ts +0 -209
  51. package/src/commands/etherscan.ts +0 -360
  52. package/src/commands/index.ts +0 -6
  53. package/src/commands/list.ts +0 -262
  54. package/src/commands/provenance.ts +0 -120
  55. package/src/commands/run.ts +0 -146
  56. package/src/commands/utils.ts +0 -215
  57. package/src/index.ts +0 -67
  58. package/src/lib/__tests__/deployer-events.spec.ts +0 -338
  59. package/src/lib/__tests__/deployer.spec.ts +0 -2269
  60. package/src/lib/__tests__/network-loader.spec.ts +0 -150
  61. package/src/lib/__tests__/network-selection.spec.ts +0 -41
  62. package/src/lib/__tests__/network-utils.spec.ts +0 -230
  63. package/src/lib/__tests__/provenance.spec.ts +0 -208
  64. package/src/lib/artifacts/__tests__/fixtures/contract1.json +0 -19
  65. package/src/lib/artifacts/__tests__/fixtures/contract2.json +0 -19
  66. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +0 -19
  67. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +0 -18
  68. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +0 -8
  69. package/src/lib/artifacts/__tests__/fixtures/readme.txt +0 -2
  70. package/src/lib/contracts/__tests__/repository.spec.ts +0 -612
  71. package/src/lib/contracts/repository.ts +0 -411
  72. package/src/lib/core/__tests__/assert-action.spec.ts +0 -474
  73. package/src/lib/core/__tests__/context.spec.ts +0 -37
  74. package/src/lib/core/__tests__/engine.spec.ts +0 -2005
  75. package/src/lib/core/__tests__/graph.spec.ts +0 -125
  76. package/src/lib/core/__tests__/json-integration.spec.ts +0 -425
  77. package/src/lib/core/__tests__/loader.spec.ts +0 -367
  78. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +0 -406
  79. package/src/lib/core/__tests__/resolver.spec.ts +0 -2496
  80. package/src/lib/core/__tests__/static-action.spec.ts +0 -172
  81. package/src/lib/core/context.ts +0 -127
  82. package/src/lib/core/engine.ts +0 -1834
  83. package/src/lib/core/graph.ts +0 -252
  84. package/src/lib/core/loader.ts +0 -253
  85. package/src/lib/core/resolver.ts +0 -873
  86. package/src/lib/deployer.ts +0 -1005
  87. package/src/lib/events/__tests__/event-system.spec.ts +0 -392
  88. package/src/lib/events/cli-adapter.ts +0 -369
  89. package/src/lib/events/emitter.ts +0 -62
  90. package/src/lib/events/index.ts +0 -3
  91. package/src/lib/events/types.ts +0 -520
  92. package/src/lib/index.ts +0 -17
  93. package/src/lib/network-loader.ts +0 -90
  94. package/src/lib/network-selection.ts +0 -73
  95. package/src/lib/network-utils.ts +0 -64
  96. package/src/lib/parsers/__tests__/buildinfo.spec.ts +0 -122
  97. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +0 -62
  98. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +0 -2
  99. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +0 -89
  100. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +0 -17
  101. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +0 -63
  102. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +0 -4
  103. package/src/lib/parsers/__tests__/job.spec.ts +0 -439
  104. package/src/lib/parsers/__tests__/source.spec.ts +0 -134
  105. package/src/lib/parsers/__tests__/template.spec.ts +0 -111
  106. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +0 -117
  107. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +0 -5
  108. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +0 -67
  109. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +0 -5
  110. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +0 -11
  111. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +0 -5
  112. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +0 -4
  113. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +0 -11
  114. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +0 -11
  115. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +0 -40
  116. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +0 -7
  117. package/src/lib/parsers/artifact/foundry-1.2.ts +0 -72
  118. package/src/lib/parsers/artifact/index.ts +0 -27
  119. package/src/lib/parsers/artifact/types.ts +0 -9
  120. package/src/lib/parsers/buildinfo.ts +0 -127
  121. package/src/lib/parsers/constants.ts +0 -56
  122. package/src/lib/parsers/index.ts +0 -6
  123. package/src/lib/parsers/job.ts +0 -160
  124. package/src/lib/parsers/source.ts +0 -129
  125. package/src/lib/parsers/template.ts +0 -135
  126. package/src/lib/provenance.ts +0 -785
  127. package/src/lib/std/templates/arachnid-deterministic-deployment-proxy.yaml +0 -68
  128. package/src/lib/std/templates/assured-deployment.yaml +0 -46
  129. package/src/lib/std/templates/era-evm-predeploy.yaml +0 -35
  130. package/src/lib/std/templates/erc-2470.yaml +0 -70
  131. package/src/lib/std/templates/min-balance.yaml +0 -35
  132. package/src/lib/std/templates/nano-universal-deployer.yaml +0 -61
  133. package/src/lib/std/templates/raw-erc-2470.yaml +0 -62
  134. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +0 -54
  135. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +0 -52
  136. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +0 -61
  137. package/src/lib/types/__tests__/json-request-action.spec.ts +0 -243
  138. package/src/lib/types/__tests__/read-json-value.spec.ts +0 -278
  139. package/src/lib/types/__tests__/resolve-json-value.spec.ts +0 -769
  140. package/src/lib/types/actions.ts +0 -148
  141. package/src/lib/types/artifacts.ts +0 -21
  142. package/src/lib/types/buildinfo.ts +0 -116
  143. package/src/lib/types/conditions.ts +0 -50
  144. package/src/lib/types/contracts.ts +0 -26
  145. package/src/lib/types/definitions.ts +0 -77
  146. package/src/lib/types/index.ts +0 -9
  147. package/src/lib/types/network.ts +0 -33
  148. package/src/lib/types/project.ts +0 -9
  149. package/src/lib/types/source.ts +0 -26
  150. package/src/lib/types/task.ts +0 -9
  151. package/src/lib/types/values.ts +0 -221
  152. package/src/lib/utils/assertion.ts +0 -24
  153. package/src/lib/utils/validation.ts +0 -116
  154. package/src/lib/validation/contract-references.ts +0 -210
  155. package/src/lib/validation/index.ts +0 -1
  156. package/src/lib/verification/__tests__/etherscan.spec.ts +0 -710
  157. package/src/lib/verification/__tests__/sourcify.spec.ts +0 -288
  158. package/src/lib/verification/etherscan.ts +0 -547
  159. package/src/lib/verification/sourcify.ts +0 -248
  160. package/test_validation/artifacts/TestContract.json +0 -9
  161. package/test_validation/jobs/test-missing.yaml +0 -16
  162. package/test_validation/networks.yaml +0 -3
  163. 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'