@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,392 +0,0 @@
1
- import { DeploymentEventEmitter, CLIEventAdapter } from '../index'
2
- import { DeploymentEvent } from '../types'
3
-
4
- describe('Event System', () => {
5
- let eventEmitter: DeploymentEventEmitter
6
- let cliAdapter: CLIEventAdapter
7
- let consoleLogSpy: jest.SpyInstance
8
- let consoleErrorSpy: jest.SpyInstance
9
- let consoleWarnSpy: jest.SpyInstance
10
-
11
- beforeEach(() => {
12
- eventEmitter = new DeploymentEventEmitter()
13
- cliAdapter = new CLIEventAdapter(eventEmitter, 3)
14
-
15
- // Mock console methods
16
- consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => {})
17
- consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {})
18
- consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {})
19
- })
20
-
21
- afterEach(() => {
22
- cliAdapter.destroy()
23
- consoleLogSpy.mockRestore()
24
- consoleErrorSpy.mockRestore()
25
- consoleWarnSpy.mockRestore()
26
- })
27
-
28
- describe('DeploymentEventEmitter', () => {
29
- it('should emit events with automatic timestamp', () => {
30
- const eventHandler = jest.fn()
31
- eventEmitter.onAnyEvent(eventHandler)
32
-
33
- eventEmitter.emitEvent({
34
- type: 'deployment_started',
35
- level: 'info',
36
- data: {
37
- projectRoot: '/test/project'
38
- }
39
- })
40
-
41
- expect(eventHandler).toHaveBeenCalledWith(
42
- expect.objectContaining({
43
- type: 'deployment_started',
44
- level: 'info',
45
- data: {
46
- projectRoot: '/test/project'
47
- },
48
- timestamp: expect.any(Date)
49
- })
50
- )
51
- })
52
-
53
- it('should emit on both specific event type and general event channel', () => {
54
- const specificHandler = jest.fn()
55
- const generalHandler = jest.fn()
56
-
57
- eventEmitter.onEvent('job_started', specificHandler)
58
- eventEmitter.onAnyEvent(generalHandler)
59
-
60
- eventEmitter.emitEvent({
61
- type: 'job_started',
62
- level: 'info',
63
- data: {
64
- jobName: 'test-job',
65
- jobVersion: '1.0.0',
66
- networkName: 'localhost',
67
- chainId: 1337
68
- }
69
- })
70
-
71
- expect(specificHandler).toHaveBeenCalledTimes(1)
72
- expect(generalHandler).toHaveBeenCalledTimes(1)
73
- })
74
-
75
- it('should handle events without data property', () => {
76
- const eventHandler = jest.fn()
77
- eventEmitter.onAnyEvent(eventHandler)
78
-
79
- eventEmitter.emitEvent({
80
- type: 'deployment_completed',
81
- level: 'info'
82
- })
83
-
84
- expect(eventHandler).toHaveBeenCalledWith(
85
- expect.objectContaining({
86
- type: 'deployment_completed',
87
- level: 'info',
88
- timestamp: expect.any(Date)
89
- })
90
- )
91
- })
92
- })
93
-
94
- describe('CLIEventAdapter', () => {
95
- it('should output deployment started event', () => {
96
- eventEmitter.emitEvent({
97
- type: 'deployment_started',
98
- level: 'info',
99
- data: {
100
- projectRoot: '/test/project'
101
- }
102
- })
103
-
104
- expect(consoleLogSpy).toHaveBeenCalledWith(
105
- expect.stringContaining('CATAPULT: STARTING DEPLOYMENT RUN')
106
- )
107
- })
108
-
109
- it('should output project loading events', () => {
110
- eventEmitter.emitEvent({
111
- type: 'project_loading_started',
112
- level: 'info',
113
- data: {
114
- projectRoot: '/test/project'
115
- }
116
- })
117
-
118
- eventEmitter.emitEvent({
119
- type: 'project_loaded',
120
- level: 'info',
121
- data: {
122
- jobCount: 3,
123
- templateCount: 5
124
- }
125
- })
126
-
127
- expect(consoleLogSpy).toHaveBeenCalledWith(
128
- expect.stringContaining('1. Loading project from: /test/project')
129
- )
130
- expect(consoleLogSpy).toHaveBeenCalledWith(
131
- expect.stringContaining('Loaded 3 jobs, 5 templates, and registered artifacts.')
132
- )
133
- })
134
-
135
- it('should output execution plan', () => {
136
- eventEmitter.emitEvent({
137
- type: 'execution_plan',
138
- level: 'info',
139
- data: {
140
- targetNetworks: [
141
- { name: 'localhost', chainId: 1337 },
142
- { name: 'sepolia', chainId: 11155111 }
143
- ],
144
- jobExecutionOrder: ['deploy-factory', 'deploy-proxy']
145
- }
146
- })
147
-
148
- expect(consoleLogSpy).toHaveBeenCalledWith(
149
- expect.stringContaining('2. Execution Plan')
150
- )
151
- expect(consoleLogSpy).toHaveBeenCalledWith(
152
- expect.stringContaining('Target Networks: localhost (ChainID: 1337), sepolia (ChainID: 11155111)')
153
- )
154
- expect(consoleLogSpy).toHaveBeenCalledWith(
155
- expect.stringContaining('Job Execution Order: deploy-factory -> deploy-proxy')
156
- )
157
- })
158
-
159
- it('should output job execution events', () => {
160
- eventEmitter.emitEvent({
161
- type: 'job_started',
162
- level: 'info',
163
- data: {
164
- jobName: 'test-job',
165
- jobVersion: '1.0.0',
166
- networkName: 'localhost',
167
- chainId: 1337
168
- }
169
- })
170
-
171
- eventEmitter.emitEvent({
172
- type: 'job_completed',
173
- level: 'info',
174
- data: {
175
- jobName: 'test-job',
176
- networkName: 'localhost',
177
- chainId: 1337
178
- }
179
- })
180
-
181
- expect(consoleLogSpy).toHaveBeenCalledWith(
182
- expect.stringContaining('🚀 Starting job: test-job (v1.0.0)')
183
- )
184
- expect(consoleLogSpy).toHaveBeenCalledWith(
185
- expect.stringContaining('✅ Job "test-job" completed successfully')
186
- )
187
- })
188
-
189
- it('should output transaction events', () => {
190
- eventEmitter.emitEvent({
191
- type: 'transaction_sent',
192
- level: 'info',
193
- data: {
194
- to: '0x1234567890123456789012345678901234567890',
195
- value: '1000000000000000000',
196
- dataPreview: '0x1234567890abcdef',
197
- txHash: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890'
198
- }
199
- })
200
-
201
- eventEmitter.emitEvent({
202
- type: 'transaction_confirmed',
203
- level: 'info',
204
- data: {
205
- txHash: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890',
206
- blockNumber: 12345
207
- }
208
- })
209
-
210
- expect(consoleLogSpy).toHaveBeenCalledWith(
211
- expect.stringContaining('to: 0x1234567890123456789012345678901234567890')
212
- )
213
- expect(consoleLogSpy).toHaveBeenCalledWith(
214
- expect.stringContaining('tx hash: 0xabcdef')
215
- )
216
- expect(consoleLogSpy).toHaveBeenCalledWith(
217
- expect.stringContaining('tx confirmed in block: 12345')
218
- )
219
- })
220
-
221
- it('should output error events', () => {
222
- eventEmitter.emitEvent({
223
- type: 'deployment_failed',
224
- level: 'error',
225
- data: {
226
- error: 'Test error message',
227
- stack: 'Error stack trace'
228
- }
229
- })
230
-
231
- expect(consoleErrorSpy).toHaveBeenCalledWith(
232
- expect.stringContaining('💥 DEPLOYMENT FAILED!')
233
- )
234
- expect(consoleErrorSpy).toHaveBeenCalledWith(
235
- expect.stringContaining('Error stack trace')
236
- )
237
- })
238
-
239
- it('should output warning events', () => {
240
- eventEmitter.emitEvent({
241
- type: 'duplicate_artifact_warning',
242
- level: 'warn',
243
- data: {
244
- contractName: 'TestContract',
245
- path: '/path/to/artifact.json'
246
- }
247
- })
248
-
249
- eventEmitter.emitEvent({
250
- type: 'missing_network_config_warning',
251
- level: 'warn',
252
- data: {
253
- missingChainIds: [1, 137]
254
- }
255
- })
256
-
257
- expect(consoleWarnSpy).toHaveBeenCalledWith(
258
- expect.stringContaining('Duplicate artifact contractName found: "TestContract"')
259
- )
260
- expect(consoleWarnSpy).toHaveBeenCalledWith(
261
- expect.stringContaining('Could not find network configurations for specified chain IDs: 1, 137')
262
- )
263
- })
264
-
265
- it('should handle unknown event types gracefully', () => {
266
- const unknownEvent = {
267
- type: 'unknown_event_type',
268
- level: 'info',
269
- timestamp: new Date(),
270
- data: { test: 'data' }
271
- } as any
272
-
273
- // Manually emit to test fallback handling
274
- eventEmitter.emit('event', unknownEvent)
275
-
276
- // At default verbosity (0), unknown events are suppressed.
277
- // Increase verbosity to 3 to enable concise unknown-event logging.
278
- cliAdapter.setVerbosity(3)
279
-
280
- // Re-emit under high verbosity to trigger default handler logging path
281
- eventEmitter.emit('event', unknownEvent)
282
-
283
- // Under verbosity 3, unknown events only log a concise line if data.message exists.
284
- // Since our unknown event has no "data.message", no console.log call is expected.
285
- expect(consoleLogSpy).not.toHaveBeenCalled()
286
- })
287
- })
288
-
289
- describe('Event Integration', () => {
290
- it('should maintain type safety for event data', () => {
291
- const eventHandler = jest.fn()
292
- eventEmitter.onEvent('job_started', eventHandler)
293
-
294
- eventEmitter.emitEvent({
295
- type: 'job_started',
296
- level: 'info',
297
- data: {
298
- jobName: 'test-job',
299
- jobVersion: '1.0.0',
300
- networkName: 'localhost',
301
- chainId: 1337
302
- }
303
- })
304
-
305
- const receivedEvent = eventHandler.mock.calls[0][0]
306
- expect(receivedEvent.data.jobName).toBe('test-job')
307
- expect(receivedEvent.data.chainId).toBe(1337)
308
- })
309
-
310
- it('should support multiple listeners for the same event', () => {
311
- const handler1 = jest.fn()
312
- const handler2 = jest.fn()
313
-
314
- eventEmitter.onEvent('deployment_completed', handler1)
315
- eventEmitter.onEvent('deployment_completed', handler2)
316
-
317
- eventEmitter.emitEvent({
318
- type: 'deployment_completed',
319
- level: 'info'
320
- })
321
-
322
- expect(handler1).toHaveBeenCalledTimes(1)
323
- expect(handler2).toHaveBeenCalledTimes(1)
324
- })
325
-
326
- it('should remove event listeners correctly', () => {
327
- const handler = jest.fn()
328
-
329
- eventEmitter.onEvent('deployment_started', handler)
330
- eventEmitter.offEvent('deployment_started', handler)
331
-
332
- eventEmitter.emitEvent({
333
- type: 'deployment_started',
334
- level: 'info',
335
- data: {
336
- projectRoot: '/test/project'
337
- }
338
- })
339
-
340
- expect(handler).not.toHaveBeenCalled()
341
- })
342
-
343
- it('should respect debug_info event level for verbosity filtering', () => {
344
- // Test with verbosity 0 (default) - should NOT show any debug_info events
345
- cliAdapter.setVerbosity(0)
346
-
347
- eventEmitter.emitEvent({
348
- type: 'debug_info',
349
- level: 'warn',
350
- data: {
351
- message: 'This warning should NOT be shown at verbosity 0'
352
- }
353
- })
354
-
355
- expect(consoleLogSpy).not.toHaveBeenCalled()
356
-
357
- // Clear previous calls
358
- consoleLogSpy.mockClear()
359
-
360
- // Test with verbosity 3 - should show warn level with correct formatting
361
- cliAdapter.setVerbosity(3)
362
-
363
- eventEmitter.emitEvent({
364
- type: 'debug_info',
365
- level: 'warn',
366
- data: {
367
- message: 'This warning should be shown at verbosity 3'
368
- }
369
- })
370
-
371
- expect(consoleLogSpy).toHaveBeenCalledWith(
372
- expect.stringContaining('[WARN] This warning should be shown at verbosity 3')
373
- )
374
-
375
- // Clear previous calls
376
- consoleLogSpy.mockClear()
377
-
378
- // Test with verbosity 3 - should show debug level with correct formatting
379
- eventEmitter.emitEvent({
380
- type: 'debug_info',
381
- level: 'debug',
382
- data: {
383
- message: 'This debug message should be shown at verbosity 3'
384
- }
385
- })
386
-
387
- expect(consoleLogSpy).toHaveBeenCalledWith(
388
- expect.stringContaining('[DEBUG] This debug message should be shown at verbosity 3')
389
- )
390
- })
391
- })
392
- })