movehat 0.1.8 → 0.2.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 (445) hide show
  1. package/README.md +2 -2
  2. package/dist/__tests__/deployContract.test.d.ts +2 -0
  3. package/dist/__tests__/deployContract.test.d.ts.map +1 -0
  4. package/dist/__tests__/deployContract.test.js +368 -0
  5. package/dist/__tests__/deployContract.test.js.map +1 -0
  6. package/dist/__tests__/errors.test.d.ts +2 -0
  7. package/dist/__tests__/errors.test.d.ts.map +1 -0
  8. package/dist/__tests__/errors.test.js +46 -0
  9. package/dist/__tests__/errors.test.js.map +1 -0
  10. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +24 -0
  11. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/sigint-deploy-harness.js +82 -0
  13. package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +1 -0
  14. package/dist/__tests__/fork/api.test.d.ts +2 -0
  15. package/dist/__tests__/fork/api.test.d.ts.map +1 -0
  16. package/dist/__tests__/fork/api.test.js +110 -0
  17. package/dist/__tests__/fork/api.test.js.map +1 -0
  18. package/dist/__tests__/harness/Harness.createLive.test.d.ts +2 -0
  19. package/dist/__tests__/harness/Harness.createLive.test.d.ts.map +1 -0
  20. package/dist/__tests__/harness/Harness.createLive.test.js +53 -0
  21. package/dist/__tests__/harness/Harness.createLive.test.js.map +1 -0
  22. package/dist/__tests__/harness/Harness.proxy.test.d.ts +2 -0
  23. package/dist/__tests__/harness/Harness.proxy.test.d.ts.map +1 -0
  24. package/dist/__tests__/harness/Harness.proxy.test.js +93 -0
  25. package/dist/__tests__/harness/Harness.proxy.test.js.map +1 -0
  26. package/dist/__tests__/harness/_fixture.d.ts +54 -0
  27. package/dist/__tests__/harness/_fixture.d.ts.map +1 -0
  28. package/dist/__tests__/harness/_fixture.js +69 -0
  29. package/dist/__tests__/harness/_fixture.js.map +1 -0
  30. package/dist/__tests__/harness/codeObject.deploy.test.d.ts +2 -0
  31. package/dist/__tests__/harness/codeObject.deploy.test.d.ts.map +1 -0
  32. package/dist/__tests__/harness/codeObject.deploy.test.js +288 -0
  33. package/dist/__tests__/harness/codeObject.deploy.test.js.map +1 -0
  34. package/dist/__tests__/harness/codeObject.upgrade.test.d.ts +2 -0
  35. package/dist/__tests__/harness/codeObject.upgrade.test.d.ts.map +1 -0
  36. package/dist/__tests__/harness/codeObject.upgrade.test.js +138 -0
  37. package/dist/__tests__/harness/codeObject.upgrade.test.js.map +1 -0
  38. package/dist/__tests__/harness/script.test.d.ts +2 -0
  39. package/dist/__tests__/harness/script.test.d.ts.map +1 -0
  40. package/dist/__tests__/harness/script.test.js +219 -0
  41. package/dist/__tests__/harness/script.test.js.map +1 -0
  42. package/dist/__tests__/harness/view.test.d.ts +2 -0
  43. package/dist/__tests__/harness/view.test.d.ts.map +1 -0
  44. package/dist/__tests__/harness/view.test.js +92 -0
  45. package/dist/__tests__/harness/view.test.js.map +1 -0
  46. package/dist/__tests__/runtime.test.d.ts +2 -0
  47. package/dist/__tests__/runtime.test.d.ts.map +1 -0
  48. package/dist/__tests__/runtime.test.js +141 -0
  49. package/dist/__tests__/runtime.test.js.map +1 -0
  50. package/dist/cli.js +2 -1
  51. package/dist/cli.js.map +1 -1
  52. package/dist/commands/__tests__/compile.test.d.ts +2 -0
  53. package/dist/commands/__tests__/compile.test.d.ts.map +1 -0
  54. package/dist/commands/__tests__/compile.test.js +351 -0
  55. package/dist/commands/__tests__/compile.test.js.map +1 -0
  56. package/dist/commands/__tests__/init.test.d.ts +2 -0
  57. package/dist/commands/__tests__/init.test.d.ts.map +1 -0
  58. package/dist/commands/__tests__/init.test.js +101 -0
  59. package/dist/commands/__tests__/init.test.js.map +1 -0
  60. package/dist/commands/__tests__/run.test.d.ts +2 -0
  61. package/dist/commands/__tests__/run.test.d.ts.map +1 -0
  62. package/dist/commands/__tests__/run.test.js +166 -0
  63. package/dist/commands/__tests__/run.test.js.map +1 -0
  64. package/dist/commands/__tests__/test-move.test.d.ts +2 -0
  65. package/dist/commands/__tests__/test-move.test.d.ts.map +1 -0
  66. package/dist/commands/__tests__/test-move.test.js +59 -0
  67. package/dist/commands/__tests__/test-move.test.js.map +1 -0
  68. package/dist/commands/__tests__/test.test.d.ts +2 -0
  69. package/dist/commands/__tests__/test.test.d.ts.map +1 -0
  70. package/dist/commands/__tests__/test.test.js +168 -0
  71. package/dist/commands/__tests__/test.test.js.map +1 -0
  72. package/dist/commands/__tests__/update.test.d.ts +2 -0
  73. package/dist/commands/__tests__/update.test.d.ts.map +1 -0
  74. package/dist/commands/__tests__/update.test.js +176 -0
  75. package/dist/commands/__tests__/update.test.js.map +1 -0
  76. package/dist/commands/compile.d.ts +7 -1
  77. package/dist/commands/compile.d.ts.map +1 -1
  78. package/dist/commands/compile.js +150 -33
  79. package/dist/commands/compile.js.map +1 -1
  80. package/dist/commands/fork/__tests__/create.test.d.ts +2 -0
  81. package/dist/commands/fork/__tests__/create.test.d.ts.map +1 -0
  82. package/dist/commands/fork/__tests__/create.test.js +108 -0
  83. package/dist/commands/fork/__tests__/create.test.js.map +1 -0
  84. package/dist/commands/fork/__tests__/fund.test.d.ts +2 -0
  85. package/dist/commands/fork/__tests__/fund.test.d.ts.map +1 -0
  86. package/dist/commands/fork/__tests__/fund.test.js +72 -0
  87. package/dist/commands/fork/__tests__/fund.test.js.map +1 -0
  88. package/dist/commands/fork/__tests__/list.test.d.ts +2 -0
  89. package/dist/commands/fork/__tests__/list.test.d.ts.map +1 -0
  90. package/dist/commands/fork/__tests__/list.test.js +119 -0
  91. package/dist/commands/fork/__tests__/list.test.js.map +1 -0
  92. package/dist/commands/fork/__tests__/serve.test.d.ts +2 -0
  93. package/dist/commands/fork/__tests__/serve.test.d.ts.map +1 -0
  94. package/dist/commands/fork/__tests__/serve.test.js +97 -0
  95. package/dist/commands/fork/__tests__/serve.test.js.map +1 -0
  96. package/dist/commands/fork/__tests__/view-resource.test.d.ts +2 -0
  97. package/dist/commands/fork/__tests__/view-resource.test.d.ts.map +1 -0
  98. package/dist/commands/fork/__tests__/view-resource.test.js +77 -0
  99. package/dist/commands/fork/__tests__/view-resource.test.js.map +1 -0
  100. package/dist/commands/fork/create.d.ts +1 -1
  101. package/dist/commands/fork/create.d.ts.map +1 -1
  102. package/dist/commands/fork/create.js +3 -2
  103. package/dist/commands/fork/create.js.map +1 -1
  104. package/dist/commands/fork/fund.d.ts.map +1 -1
  105. package/dist/commands/fork/fund.js +15 -8
  106. package/dist/commands/fork/fund.js.map +1 -1
  107. package/dist/commands/fork/list.d.ts.map +1 -1
  108. package/dist/commands/fork/list.js +2 -1
  109. package/dist/commands/fork/list.js.map +1 -1
  110. package/dist/commands/fork/serve.d.ts +1 -0
  111. package/dist/commands/fork/serve.d.ts.map +1 -1
  112. package/dist/commands/fork/serve.js +4 -2
  113. package/dist/commands/fork/serve.js.map +1 -1
  114. package/dist/commands/fork/view-resource.d.ts.map +1 -1
  115. package/dist/commands/fork/view-resource.js +10 -5
  116. package/dist/commands/fork/view-resource.js.map +1 -1
  117. package/dist/commands/run.d.ts +15 -0
  118. package/dist/commands/run.d.ts.map +1 -1
  119. package/dist/commands/run.js +50 -27
  120. package/dist/commands/run.js.map +1 -1
  121. package/dist/commands/test-move.d.ts.map +1 -1
  122. package/dist/commands/test-move.js +3 -2
  123. package/dist/commands/test-move.js.map +1 -1
  124. package/dist/commands/test.js +52 -46
  125. package/dist/commands/test.js.map +1 -1
  126. package/dist/commands/update.d.ts.map +1 -1
  127. package/dist/commands/update.js +15 -13
  128. package/dist/commands/update.js.map +1 -1
  129. package/dist/core/AccountManager.d.ts +1 -1
  130. package/dist/core/AccountManager.d.ts.map +1 -1
  131. package/dist/core/AccountManager.js +20 -7
  132. package/dist/core/AccountManager.js.map +1 -1
  133. package/dist/core/Publisher.d.ts +31 -0
  134. package/dist/core/Publisher.d.ts.map +1 -0
  135. package/dist/core/Publisher.js +248 -0
  136. package/dist/core/Publisher.js.map +1 -0
  137. package/dist/core/__tests__/AccountManager.test.d.ts +2 -0
  138. package/dist/core/__tests__/AccountManager.test.d.ts.map +1 -0
  139. package/dist/core/__tests__/AccountManager.test.js +239 -0
  140. package/dist/core/__tests__/AccountManager.test.js.map +1 -0
  141. package/dist/core/__tests__/config.test.d.ts +2 -0
  142. package/dist/core/__tests__/config.test.d.ts.map +1 -0
  143. package/dist/core/__tests__/config.test.js +311 -0
  144. package/dist/core/__tests__/config.test.js.map +1 -0
  145. package/dist/core/__tests__/deployments.test.d.ts +2 -0
  146. package/dist/core/__tests__/deployments.test.d.ts.map +1 -0
  147. package/dist/core/__tests__/deployments.test.js +201 -0
  148. package/dist/core/__tests__/deployments.test.js.map +1 -0
  149. package/dist/core/__tests__/shell.test.d.ts +2 -0
  150. package/dist/core/__tests__/shell.test.d.ts.map +1 -0
  151. package/dist/core/__tests__/shell.test.js +107 -0
  152. package/dist/core/__tests__/shell.test.js.map +1 -0
  153. package/dist/core/config.d.ts +13 -1
  154. package/dist/core/config.d.ts.map +1 -1
  155. package/dist/core/config.js +80 -11
  156. package/dist/core/config.js.map +1 -1
  157. package/dist/core/contract.d.ts +1 -1
  158. package/dist/core/contract.d.ts.map +1 -1
  159. package/dist/core/contract.js +15 -4
  160. package/dist/core/contract.js.map +1 -1
  161. package/dist/core/deployments.d.ts +2 -2
  162. package/dist/core/deployments.d.ts.map +1 -1
  163. package/dist/core/deployments.js +8 -6
  164. package/dist/core/deployments.js.map +1 -1
  165. package/dist/core/movementProfile.d.ts +34 -0
  166. package/dist/core/movementProfile.d.ts.map +1 -0
  167. package/dist/core/movementProfile.js +150 -0
  168. package/dist/core/movementProfile.js.map +1 -0
  169. package/dist/core/shell.d.ts +23 -7
  170. package/dist/core/shell.d.ts.map +1 -1
  171. package/dist/core/shell.js +32 -14
  172. package/dist/core/shell.js.map +1 -1
  173. package/dist/errors.d.ts +35 -0
  174. package/dist/errors.d.ts.map +1 -1
  175. package/dist/errors.js +54 -0
  176. package/dist/errors.js.map +1 -1
  177. package/dist/fork/__tests__/manager.test.d.ts +2 -0
  178. package/dist/fork/__tests__/manager.test.d.ts.map +1 -0
  179. package/dist/fork/__tests__/manager.test.js +309 -0
  180. package/dist/fork/__tests__/manager.test.js.map +1 -0
  181. package/dist/fork/__tests__/server.test.d.ts +2 -0
  182. package/dist/fork/__tests__/server.test.d.ts.map +1 -0
  183. package/dist/fork/__tests__/server.test.js +54 -0
  184. package/dist/fork/__tests__/server.test.js.map +1 -0
  185. package/dist/fork/__tests__/storage.test.d.ts +2 -0
  186. package/dist/fork/__tests__/storage.test.d.ts.map +1 -0
  187. package/dist/fork/__tests__/storage.test.js +222 -0
  188. package/dist/fork/__tests__/storage.test.js.map +1 -0
  189. package/dist/fork/__tests__/test.test.d.ts +2 -0
  190. package/dist/fork/__tests__/test.test.d.ts.map +1 -0
  191. package/dist/fork/__tests__/test.test.js +81 -0
  192. package/dist/fork/__tests__/test.test.js.map +1 -0
  193. package/dist/fork/api.d.ts +14 -3
  194. package/dist/fork/api.d.ts.map +1 -1
  195. package/dist/fork/api.js +25 -14
  196. package/dist/fork/api.js.map +1 -1
  197. package/dist/fork/manager.d.ts +23 -9
  198. package/dist/fork/manager.d.ts.map +1 -1
  199. package/dist/fork/manager.js +79 -36
  200. package/dist/fork/manager.js.map +1 -1
  201. package/dist/fork/server.d.ts +11 -3
  202. package/dist/fork/server.d.ts.map +1 -1
  203. package/dist/fork/server.js +45 -13
  204. package/dist/fork/server.js.map +1 -1
  205. package/dist/fork/storage.d.ts +4 -4
  206. package/dist/fork/storage.d.ts.map +1 -1
  207. package/dist/fork/storage.js +7 -9
  208. package/dist/fork/storage.js.map +1 -1
  209. package/dist/fork/test.d.ts +13 -4
  210. package/dist/fork/test.d.ts.map +1 -1
  211. package/dist/fork/test.js +36 -27
  212. package/dist/fork/test.js.map +1 -1
  213. package/dist/harness/Harness.d.ts +124 -0
  214. package/dist/harness/Harness.d.ts.map +1 -0
  215. package/dist/harness/Harness.js +193 -0
  216. package/dist/harness/Harness.js.map +1 -0
  217. package/dist/harness/codeObject.d.ts +31 -0
  218. package/dist/harness/codeObject.d.ts.map +1 -0
  219. package/dist/harness/codeObject.js +271 -0
  220. package/dist/harness/codeObject.js.map +1 -0
  221. package/dist/harness/errors.d.ts +14 -0
  222. package/dist/harness/errors.d.ts.map +1 -0
  223. package/dist/harness/errors.js +22 -0
  224. package/dist/harness/errors.js.map +1 -0
  225. package/dist/harness/index.d.ts +4 -0
  226. package/dist/harness/index.d.ts.map +1 -0
  227. package/dist/harness/index.js +3 -0
  228. package/dist/harness/index.js.map +1 -0
  229. package/dist/harness/proxy.d.ts +7 -0
  230. package/dist/harness/proxy.d.ts.map +1 -0
  231. package/dist/harness/proxy.js +36 -0
  232. package/dist/harness/proxy.js.map +1 -0
  233. package/dist/harness/script.d.ts +21 -0
  234. package/dist/harness/script.d.ts.map +1 -0
  235. package/dist/harness/script.js +155 -0
  236. package/dist/harness/script.js.map +1 -0
  237. package/dist/harness/view.d.ts +22 -0
  238. package/dist/harness/view.d.ts.map +1 -0
  239. package/dist/harness/view.js +28 -0
  240. package/dist/harness/view.js.map +1 -0
  241. package/dist/helpers/__tests__/semver-utils.test.d.ts +2 -0
  242. package/dist/helpers/__tests__/semver-utils.test.d.ts.map +1 -0
  243. package/dist/helpers/__tests__/semver-utils.test.js +103 -0
  244. package/dist/helpers/__tests__/semver-utils.test.js.map +1 -0
  245. package/dist/helpers/index.d.ts +3 -2
  246. package/dist/helpers/index.d.ts.map +1 -1
  247. package/dist/helpers/index.js +2 -2
  248. package/dist/helpers/index.js.map +1 -1
  249. package/dist/helpers/move-tests.d.ts +3 -3
  250. package/dist/helpers/move-tests.d.ts.map +1 -1
  251. package/dist/helpers/move-tests.js +21 -20
  252. package/dist/helpers/move-tests.js.map +1 -1
  253. package/dist/helpers/npm-registry.d.ts.map +1 -1
  254. package/dist/helpers/npm-registry.js +1 -3
  255. package/dist/helpers/npm-registry.js.map +1 -1
  256. package/dist/helpers/semver-utils.d.ts.map +1 -1
  257. package/dist/helpers/semver-utils.js +4 -3
  258. package/dist/helpers/semver-utils.js.map +1 -1
  259. package/dist/helpers/setup.d.ts.map +1 -1
  260. package/dist/helpers/setup.js +10 -6
  261. package/dist/helpers/setup.js.map +1 -1
  262. package/dist/helpers/setupLocalTesting.d.ts +32 -27
  263. package/dist/helpers/setupLocalTesting.d.ts.map +1 -1
  264. package/dist/helpers/setupLocalTesting.js +179 -180
  265. package/dist/helpers/setupLocalTesting.js.map +1 -1
  266. package/dist/helpers/testFixtures.d.ts +19 -53
  267. package/dist/helpers/testFixtures.d.ts.map +1 -1
  268. package/dist/helpers/testFixtures.js +89 -107
  269. package/dist/helpers/testFixtures.js.map +1 -1
  270. package/dist/index.d.ts +4 -2
  271. package/dist/index.d.ts.map +1 -1
  272. package/dist/index.js +7 -3
  273. package/dist/index.js.map +1 -1
  274. package/dist/node/LocalNodeManager.d.ts +9 -1
  275. package/dist/node/LocalNodeManager.d.ts.map +1 -1
  276. package/dist/node/LocalNodeManager.js +75 -58
  277. package/dist/node/LocalNodeManager.js.map +1 -1
  278. package/dist/node/__tests__/LocalNodeManager.test.d.ts +2 -0
  279. package/dist/node/__tests__/LocalNodeManager.test.d.ts.map +1 -0
  280. package/dist/node/__tests__/LocalNodeManager.test.js +349 -0
  281. package/dist/node/__tests__/LocalNodeManager.test.js.map +1 -0
  282. package/dist/runtime.d.ts +12 -15
  283. package/dist/runtime.d.ts.map +1 -1
  284. package/dist/runtime.js +32 -241
  285. package/dist/runtime.js.map +1 -1
  286. package/dist/templates/README.md +1 -1
  287. package/dist/templates/movehat.config.ts +10 -0
  288. package/dist/templates/package.json +2 -1
  289. package/dist/templates/scripts/deploy-counter.ts +46 -38
  290. package/dist/templates/tests/Counter.test.ts +51 -51
  291. package/dist/templates/types/movehat.d.ts +6 -9
  292. package/dist/types/config.d.ts +8 -0
  293. package/dist/types/config.d.ts.map +1 -1
  294. package/dist/types/fork.d.ts +7 -1
  295. package/dist/types/fork.d.ts.map +1 -1
  296. package/dist/types/harness.d.ts +166 -0
  297. package/dist/types/harness.d.ts.map +1 -0
  298. package/dist/types/harness.js +2 -0
  299. package/dist/types/harness.js.map +1 -0
  300. package/dist/types/runtime.d.ts +7 -1
  301. package/dist/types/runtime.d.ts.map +1 -1
  302. package/dist/ui/__tests__/colors.test.d.ts +2 -0
  303. package/dist/ui/__tests__/colors.test.d.ts.map +1 -0
  304. package/dist/ui/__tests__/colors.test.js +127 -0
  305. package/dist/ui/__tests__/colors.test.js.map +1 -0
  306. package/dist/ui/colors.d.ts.map +1 -1
  307. package/dist/ui/colors.js +6 -2
  308. package/dist/ui/colors.js.map +1 -1
  309. package/dist/ui/logger.d.ts +17 -0
  310. package/dist/ui/logger.d.ts.map +1 -1
  311. package/dist/ui/logger.js +22 -0
  312. package/dist/ui/logger.js.map +1 -1
  313. package/dist/ui/symbols.d.ts +1 -0
  314. package/dist/ui/symbols.d.ts.map +1 -1
  315. package/dist/ui/symbols.js +7 -1
  316. package/dist/ui/symbols.js.map +1 -1
  317. package/dist/utils/__tests__/address.test.d.ts +2 -0
  318. package/dist/utils/__tests__/address.test.d.ts.map +1 -0
  319. package/dist/utils/__tests__/address.test.js +70 -0
  320. package/dist/utils/__tests__/address.test.js.map +1 -0
  321. package/dist/utils/__tests__/childProcessAdapter.test.d.ts +2 -0
  322. package/dist/utils/__tests__/childProcessAdapter.test.d.ts.map +1 -0
  323. package/dist/utils/__tests__/childProcessAdapter.test.js +217 -0
  324. package/dist/utils/__tests__/childProcessAdapter.test.js.map +1 -0
  325. package/dist/utils/__tests__/runCli.test.d.ts +2 -0
  326. package/dist/utils/__tests__/runCli.test.d.ts.map +1 -0
  327. package/dist/utils/__tests__/runCli.test.js +187 -0
  328. package/dist/utils/__tests__/runCli.test.js.map +1 -0
  329. package/dist/utils/address.d.ts +33 -0
  330. package/dist/utils/address.d.ts.map +1 -0
  331. package/dist/utils/address.js +52 -0
  332. package/dist/utils/address.js.map +1 -0
  333. package/dist/utils/childProcessAdapter.d.ts +93 -0
  334. package/dist/utils/childProcessAdapter.d.ts.map +1 -0
  335. package/dist/utils/childProcessAdapter.js +109 -0
  336. package/dist/utils/childProcessAdapter.js.map +1 -0
  337. package/dist/utils/parseCliOutput.d.ts +20 -0
  338. package/dist/utils/parseCliOutput.d.ts.map +1 -0
  339. package/dist/utils/parseCliOutput.js +26 -0
  340. package/dist/utils/parseCliOutput.js.map +1 -0
  341. package/dist/utils/redact.d.ts +15 -0
  342. package/dist/utils/redact.d.ts.map +1 -0
  343. package/dist/utils/redact.js +24 -0
  344. package/dist/utils/redact.js.map +1 -0
  345. package/dist/utils/runCli.d.ts +24 -0
  346. package/dist/utils/runCli.d.ts.map +1 -0
  347. package/dist/utils/runCli.js +37 -0
  348. package/dist/utils/runCli.js.map +1 -0
  349. package/package.json +14 -4
  350. package/src/__tests__/deployContract.test.ts +429 -0
  351. package/src/__tests__/errors.test.ts +84 -0
  352. package/src/__tests__/fixtures/sigint-deploy-harness.ts +95 -0
  353. package/src/__tests__/fork/api.test.ts +143 -0
  354. package/src/__tests__/harness/Harness.createLive.test.ts +57 -0
  355. package/src/__tests__/harness/Harness.proxy.test.ts +115 -0
  356. package/src/__tests__/harness/_fixture.ts +131 -0
  357. package/src/__tests__/harness/codeObject.deploy.test.ts +319 -0
  358. package/src/__tests__/harness/codeObject.upgrade.test.ts +156 -0
  359. package/src/__tests__/harness/script.test.ts +245 -0
  360. package/src/__tests__/harness/view.test.ts +104 -0
  361. package/src/__tests__/runtime.test.ts +182 -0
  362. package/src/cli.ts +2 -1
  363. package/src/commands/__tests__/compile.test.ts +407 -0
  364. package/src/commands/__tests__/init.test.ts +125 -0
  365. package/src/commands/__tests__/run.test.ts +192 -0
  366. package/src/commands/__tests__/test-move.test.ts +81 -0
  367. package/src/commands/__tests__/test.test.ts +204 -0
  368. package/src/commands/__tests__/update.test.ts +223 -0
  369. package/src/commands/compile.ts +168 -32
  370. package/src/commands/fork/__tests__/create.test.ts +132 -0
  371. package/src/commands/fork/__tests__/fund.test.ts +104 -0
  372. package/src/commands/fork/__tests__/list.test.ts +139 -0
  373. package/src/commands/fork/__tests__/serve.test.ts +121 -0
  374. package/src/commands/fork/__tests__/view-resource.test.ts +101 -0
  375. package/src/commands/fork/create.ts +4 -3
  376. package/src/commands/fork/fund.ts +16 -9
  377. package/src/commands/fork/list.ts +3 -2
  378. package/src/commands/fork/serve.ts +6 -3
  379. package/src/commands/fork/view-resource.ts +11 -6
  380. package/src/commands/run.ts +54 -28
  381. package/src/commands/test-move.ts +4 -3
  382. package/src/commands/test.ts +56 -44
  383. package/src/commands/update.ts +19 -16
  384. package/src/core/AccountManager.ts +23 -10
  385. package/src/core/Publisher.ts +322 -0
  386. package/src/core/__tests__/AccountManager.test.ts +290 -0
  387. package/src/core/__tests__/config.test.ts +377 -0
  388. package/src/core/__tests__/deployments.test.ts +247 -0
  389. package/src/core/__tests__/shell.test.ts +138 -0
  390. package/src/core/config.ts +96 -12
  391. package/src/core/contract.ts +13 -4
  392. package/src/core/deployments.ts +13 -11
  393. package/src/core/movementProfile.ts +179 -0
  394. package/src/core/shell.ts +34 -14
  395. package/src/errors.ts +60 -0
  396. package/src/fork/__tests__/manager.test.ts +385 -0
  397. package/src/fork/__tests__/server.test.ts +65 -0
  398. package/src/fork/__tests__/storage.test.ts +281 -0
  399. package/src/fork/__tests__/test.test.ts +97 -0
  400. package/src/fork/api.ts +28 -14
  401. package/src/fork/manager.ts +88 -43
  402. package/src/fork/server.ts +53 -19
  403. package/src/fork/storage.ts +12 -15
  404. package/src/fork/test.ts +58 -32
  405. package/src/harness/Harness.ts +228 -0
  406. package/src/harness/codeObject.ts +388 -0
  407. package/src/harness/errors.ts +22 -0
  408. package/src/harness/index.ts +3 -0
  409. package/src/harness/proxy.ts +40 -0
  410. package/src/harness/script.ts +196 -0
  411. package/src/harness/view.ts +34 -0
  412. package/src/helpers/__tests__/semver-utils.test.ts +121 -0
  413. package/src/helpers/index.ts +2 -8
  414. package/src/helpers/move-tests.ts +27 -23
  415. package/src/helpers/npm-registry.ts +4 -3
  416. package/src/helpers/semver-utils.ts +4 -3
  417. package/src/helpers/setup.ts +9 -5
  418. package/src/helpers/setupLocalTesting.ts +219 -200
  419. package/src/helpers/testFixtures.ts +106 -118
  420. package/src/index.ts +9 -3
  421. package/src/node/LocalNodeManager.ts +87 -62
  422. package/src/node/__tests__/LocalNodeManager.test.ts +452 -0
  423. package/src/runtime.ts +33 -289
  424. package/src/templates/README.md +1 -1
  425. package/src/templates/movehat.config.ts +10 -0
  426. package/src/templates/package.json +2 -1
  427. package/src/templates/scripts/deploy-counter.ts +46 -38
  428. package/src/templates/tests/Counter.test.ts +51 -51
  429. package/src/templates/types/movehat.d.ts +6 -9
  430. package/src/types/config.ts +8 -0
  431. package/src/types/fork.ts +7 -1
  432. package/src/types/harness.ts +182 -0
  433. package/src/types/runtime.ts +11 -3
  434. package/src/ui/__tests__/colors.test.ts +156 -0
  435. package/src/ui/colors.ts +5 -2
  436. package/src/ui/logger.ts +22 -0
  437. package/src/ui/symbols.ts +7 -1
  438. package/src/utils/__tests__/address.test.ts +93 -0
  439. package/src/utils/__tests__/childProcessAdapter.test.ts +266 -0
  440. package/src/utils/__tests__/runCli.test.ts +240 -0
  441. package/src/utils/address.ts +56 -0
  442. package/src/utils/childProcessAdapter.ts +215 -0
  443. package/src/utils/parseCliOutput.ts +27 -0
  444. package/src/utils/redact.ts +24 -0
  445. package/src/utils/runCli.ts +64 -0
@@ -1,6 +1,7 @@
1
- import { spawn } from "child_process";
2
1
  import { existsSync, rmSync } from "fs";
3
2
  import { join } from "path";
3
+ import { defaultChildProcessAdapter, } from "../utils/childProcessAdapter.js";
4
+ import { logger } from "../ui/index.js";
4
5
  /**
5
6
  * Manages the lifecycle of a local Movement node
6
7
  *
@@ -11,10 +12,13 @@ import { join } from "path";
11
12
  * - Cleanup on shutdown
12
13
  */
13
14
  export class LocalNodeManager {
14
- process = null;
15
+ spawned = null;
16
+ killed = false;
15
17
  options;
18
+ adapter;
16
19
  starting = false;
17
20
  constructor(options = {}) {
21
+ this.adapter = options.adapter ?? defaultChildProcessAdapter;
18
22
  this.options = {
19
23
  testDir: options.testDir || join(process.cwd(), ".movehat", "local-node"),
20
24
  forceRestart: options.forceRestart ?? false,
@@ -30,7 +34,7 @@ export class LocalNodeManager {
30
34
  * @returns LocalNodeInfo with connection details
31
35
  */
32
36
  async start() {
33
- if (this.process) {
37
+ if (this.spawned) {
34
38
  console.log("Local node already running");
35
39
  return this.getNodeInfo();
36
40
  }
@@ -39,14 +43,16 @@ export class LocalNodeManager {
39
43
  }
40
44
  this.starting = true;
41
45
  try {
42
- console.log("\n🚀 Starting local Movement node...");
43
- console.log(` Test directory: ${this.options.testDir}`);
44
- console.log(` RPC port: ${this.options.apiPort}`);
45
- console.log(` Faucet port: ${this.options.faucetPort}`);
46
- console.log(` Ready port: ${this.options.readyPort}\n`);
46
+ logger.newline();
47
+ logger.step("Starting local Movement node...");
48
+ logger.plain(` Test directory: ${this.options.testDir}`);
49
+ logger.plain(` RPC port: ${this.options.apiPort}`);
50
+ logger.plain(` Faucet port: ${this.options.faucetPort}`);
51
+ logger.plain(` Ready port: ${this.options.readyPort}`);
52
+ logger.newline();
47
53
  // Clean state if force restart
48
54
  if (this.options.forceRestart && existsSync(this.options.testDir)) {
49
- console.log("🧹 Cleaning previous node state...");
55
+ logger.step("Cleaning previous node state...");
50
56
  rmSync(this.options.testDir, { recursive: true, force: true });
51
57
  }
52
58
  // Build command arguments
@@ -61,50 +67,53 @@ export class LocalNodeManager {
61
67
  if (this.options.forceRestart) {
62
68
  args.push("--force-restart");
63
69
  }
64
- // Start the node process
65
- this.process = spawn("movement", args, {
70
+ // Start the node process via the injectable adapter.
71
+ this.killed = false;
72
+ this.spawned = this.adapter.spawn({
73
+ command: "movement",
74
+ args,
66
75
  stdio: this.options.silent ? "ignore" : "pipe",
67
- detached: false,
68
76
  });
69
77
  // Handle process output
70
- if (!this.options.silent && this.process.stdout && this.process.stderr) {
71
- this.process.stdout.on("data", (data) => {
78
+ if (!this.options.silent && this.spawned.stdout && this.spawned.stderr) {
79
+ this.spawned.stdout.on("data", (data) => {
72
80
  const output = data.toString().trim();
73
81
  if (output) {
74
82
  console.log(`[Node] ${output}`);
75
83
  }
76
84
  });
77
- this.process.stderr.on("data", (data) => {
85
+ this.spawned.stderr.on("data", (data) => {
78
86
  const output = data.toString().trim();
79
87
  if (output && !output.includes("WARN")) {
80
88
  console.error(`[Node Error] ${output}`);
81
89
  }
82
90
  });
83
91
  }
84
- // Handle process exit
85
- this.process.on("exit", (code) => {
86
- if (code !== 0 && code !== null) {
87
- console.error(`\n❌ Local node exited with code ${code}`);
92
+ // The adapter's `exited` promise settles on both natural exit and on
93
+ // spawn-time error (e.g. ENOENT). On error the code is `null` — we don't
94
+ // log a generic "spawn failed" message here because `waitForReady` will
95
+ // surface a detailed timeout-with-hints error if movement never starts.
96
+ void this.spawned.exited.then(({ code }) => {
97
+ if (code !== null && code !== 0) {
98
+ logger.error(`Local node exited with code ${code}`);
88
99
  }
89
- this.process = null;
90
- });
91
- this.process.on("error", (error) => {
92
- console.error(`\n❌ Failed to start local node: ${error.message}`);
93
- this.process = null;
100
+ this.spawned = null;
94
101
  });
95
102
  // Wait for node to be ready
96
- console.log("Waiting for node to be ready...");
103
+ logger.step("Waiting for node to be ready...");
97
104
  await this.waitForReady(60000); // 60 second timeout
98
- console.log("Local Movement node is ready!\n");
105
+ logger.success("Local Movement node is ready!");
106
+ logger.newline();
99
107
  this.starting = false;
100
108
  return this.getNodeInfo();
101
109
  }
102
110
  catch (error) {
103
111
  this.starting = false;
104
112
  // Cleanup on failure
105
- if (this.process) {
106
- this.process.kill();
107
- this.process = null;
113
+ if (this.spawned) {
114
+ this.killed = true;
115
+ this.spawned.kill();
116
+ this.spawned = null;
108
117
  }
109
118
  throw error;
110
119
  }
@@ -113,36 +122,41 @@ export class LocalNodeManager {
113
122
  * Stop the local node
114
123
  */
115
124
  async stop() {
116
- if (!this.process) {
125
+ if (!this.spawned) {
117
126
  return;
118
127
  }
119
- console.log("\n🛑 Stopping local Movement node...");
120
- return new Promise((resolve) => {
121
- if (!this.process) {
122
- resolve();
123
- return;
128
+ logger.newline();
129
+ logger.step("Stopping local Movement node...");
130
+ const spawned = this.spawned;
131
+ // Mark killed synchronously so isRunning() reflects the intent right away,
132
+ // mirroring node's ChildProcess.killed semantics.
133
+ this.killed = true;
134
+ // Send SIGTERM for graceful shutdown
135
+ spawned.kill("SIGTERM");
136
+ // Force kill after 5 seconds if still running
137
+ const forceTimer = setTimeout(() => {
138
+ if (this.spawned === spawned) {
139
+ logger.warning("Force killing node...");
140
+ spawned.kill("SIGKILL");
124
141
  }
125
- this.process.once("exit", () => {
126
- console.log("✅ Local node stopped\n");
127
- this.process = null;
128
- resolve();
129
- });
130
- // Send SIGTERM for graceful shutdown
131
- this.process.kill("SIGTERM");
132
- // Force kill after 5 seconds if still running
133
- setTimeout(() => {
134
- if (this.process) {
135
- console.log("⚠️ Force killing node...");
136
- this.process.kill("SIGKILL");
137
- }
138
- }, 5000);
139
- });
142
+ }, 5000);
143
+ try {
144
+ await spawned.exited;
145
+ logger.success("Local node stopped");
146
+ logger.newline();
147
+ }
148
+ finally {
149
+ clearTimeout(forceTimer);
150
+ if (this.spawned === spawned) {
151
+ this.spawned = null;
152
+ }
153
+ }
140
154
  }
141
155
  /**
142
156
  * Check if the node is running
143
157
  */
144
158
  isRunning() {
145
- return this.process !== null && !this.process.killed;
159
+ return this.spawned !== null && !this.killed;
146
160
  }
147
161
  /**
148
162
  * Get node connection info
@@ -192,7 +206,7 @@ export class LocalNodeManager {
192
206
  const address = typeof account === 'string'
193
207
  ? account
194
208
  : account.accountAddress.toString();
195
- // Use query parameters for Aptos/Movement faucet
209
+ // Use query parameters for the Movement faucet
196
210
  const faucetUrl = `http://127.0.0.1:${this.options.faucetPort}/mint?amount=${amount}&address=${address}`;
197
211
  try {
198
212
  const response = await fetch(faucetUrl, {
@@ -203,22 +217,25 @@ export class LocalNodeManager {
203
217
  throw new Error(`Faucet request failed: ${errorText}`);
204
218
  }
205
219
  const result = await response.json();
206
- console.log(`Funded ${address} with ${amount} octas`);
220
+ logger.success(`Funded ${address} with ${amount} octas`, 2);
207
221
  return result;
208
222
  }
209
223
  catch (error) {
210
- throw new Error(`Failed to fund account: ${error.message}`);
224
+ const msg = error instanceof Error ? error.message : String(error);
225
+ throw new Error(`Failed to fund account: ${msg}`);
211
226
  }
212
227
  }
213
228
  /**
214
229
  * Fund multiple accounts in batch
215
230
  */
216
231
  async fundAccounts(accounts, amount = 100_000_000) {
217
- console.log(`\n💰 Funding ${accounts.length} accounts from local faucet...`);
232
+ logger.newline();
233
+ logger.step(`Funding ${accounts.length} accounts from local faucet...`);
218
234
  for (const account of accounts) {
219
235
  await this.fundAccount(account, amount);
220
236
  }
221
- console.log(`✓ All accounts funded successfully\n`);
237
+ logger.success("All accounts funded successfully");
238
+ logger.newline();
222
239
  }
223
240
  /**
224
241
  * Clean up node data directory
@@ -228,9 +245,9 @@ export class LocalNodeManager {
228
245
  throw new Error("Cannot clean while node is running. Stop the node first.");
229
246
  }
230
247
  if (existsSync(this.options.testDir)) {
231
- console.log(`🧹 Cleaning node data at ${this.options.testDir}...`);
248
+ logger.step(`Cleaning node data at ${this.options.testDir}...`);
232
249
  rmSync(this.options.testDir, { recursive: true, force: true });
233
- console.log("Node data cleaned");
250
+ logger.success("Node data cleaned");
234
251
  }
235
252
  }
236
253
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LocalNodeManager.js","sourceRoot":"","sources":["../../src/node/LocalNodeManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalNodeManager.js","sourceRoot":"","sources":["../../src/node/LocalNodeManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LocalNodeManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalNodeManager.test.d.ts","sourceRoot":"","sources":["../../../src/node/__tests__/LocalNodeManager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,349 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { PassThrough } from "node:stream";
3
+ import { mkdtempSync, rmSync, existsSync, mkdirSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { LocalNodeManager } from "../LocalNodeManager.js";
7
+ function buildFakeSpawned() {
8
+ const stdout = new PassThrough();
9
+ const stderr = new PassThrough();
10
+ const stdin = new PassThrough();
11
+ let exitResolve;
12
+ const exited = new Promise((resolve) => {
13
+ exitResolve = resolve;
14
+ });
15
+ let killed = false;
16
+ const proc = {
17
+ pid: 4242,
18
+ stdout,
19
+ stderr,
20
+ stdin,
21
+ kill: (_signal) => {
22
+ if (killed)
23
+ return false;
24
+ killed = true;
25
+ // Resolve `exited` shortly after kill so `stop()` doesn't hang.
26
+ setImmediate(() => exitResolve({ code: null, signal: _signal ?? "SIGTERM" }));
27
+ return true;
28
+ },
29
+ exited,
30
+ __exit: (code, signal) => exitResolve({ code, signal }),
31
+ };
32
+ return proc;
33
+ }
34
+ function buildFakeAdapter() {
35
+ const calls = [];
36
+ const spawned = [];
37
+ const adapter = {
38
+ run: vi.fn(),
39
+ spawn: (input) => {
40
+ calls.push(input);
41
+ const proc = buildFakeSpawned();
42
+ spawned.push(proc);
43
+ return proc;
44
+ },
45
+ };
46
+ return { adapter, calls, spawned };
47
+ }
48
+ function stubFetchOnce(response) {
49
+ const fn = vi.fn().mockResolvedValueOnce(response);
50
+ vi.stubGlobal("fetch", fn);
51
+ return fn;
52
+ }
53
+ function stubFetchAlwaysOk() {
54
+ const fn = vi.fn().mockResolvedValue({ ok: true, json: async () => ({}) });
55
+ vi.stubGlobal("fetch", fn);
56
+ return fn;
57
+ }
58
+ describe("LocalNodeManager — start / stop / lifecycle", () => {
59
+ let tmpDir;
60
+ let logSpy;
61
+ let errSpy;
62
+ beforeEach(() => {
63
+ tmpDir = mkdtempSync(join(tmpdir(), "movehat-localnode-"));
64
+ // The logger prints to stdout/stderr; silence the noise for cleaner test output.
65
+ logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);
66
+ errSpy = vi.spyOn(console, "error").mockImplementation(() => undefined);
67
+ });
68
+ afterEach(() => {
69
+ vi.restoreAllMocks();
70
+ vi.unstubAllGlobals();
71
+ if (existsSync(tmpDir)) {
72
+ rmSync(tmpDir, { recursive: true, force: true });
73
+ }
74
+ });
75
+ it("constructs with sensible defaults from getNodeInfo", () => {
76
+ const { adapter } = buildFakeAdapter();
77
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir });
78
+ const info = mgr.getNodeInfo();
79
+ expect(info.rpcUrl).toBe("http://127.0.0.1:8080");
80
+ expect(info.faucetUrl).toBe("http://127.0.0.1:8081");
81
+ expect(info.readyUrl).toBe("http://127.0.0.1:8070");
82
+ expect(info.testDir).toBe(tmpDir);
83
+ });
84
+ it("honors custom ports from constructor options", () => {
85
+ const { adapter } = buildFakeAdapter();
86
+ const mgr = new LocalNodeManager({
87
+ adapter,
88
+ testDir: tmpDir,
89
+ apiPort: 9000,
90
+ faucetPort: 9001,
91
+ readyPort: 9002,
92
+ });
93
+ const info = mgr.getNodeInfo();
94
+ expect(info.rpcUrl).toContain(":9000");
95
+ expect(info.faucetUrl).toContain(":9001");
96
+ expect(info.readyUrl).toContain(":9002");
97
+ });
98
+ it("isRunning reports false before start", () => {
99
+ const { adapter } = buildFakeAdapter();
100
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir });
101
+ expect(mgr.isRunning()).toBe(false);
102
+ });
103
+ it("start spawns 'movement node run-localnet' with the expected args", async () => {
104
+ const { adapter, calls } = buildFakeAdapter();
105
+ stubFetchAlwaysOk();
106
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
107
+ await mgr.start();
108
+ expect(calls).toHaveLength(1);
109
+ expect(calls[0]?.command).toBe("movement");
110
+ const args = calls[0]?.args ?? [];
111
+ expect(args.slice(0, 2)).toEqual(["node", "run-localnet"]);
112
+ expect(args).toContain("--test-dir");
113
+ expect(args).toContain(tmpDir);
114
+ expect(args).toContain("--faucet-port");
115
+ expect(args).toContain("8081");
116
+ expect(args).toContain("--assume-yes");
117
+ expect(mgr.isRunning()).toBe(true);
118
+ });
119
+ it("start in silent mode does not wire stdout/stderr listeners", async () => {
120
+ const { adapter, spawned } = buildFakeAdapter();
121
+ stubFetchAlwaysOk();
122
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
123
+ await mgr.start();
124
+ // The PassThrough streams should have no `data` listeners attached
125
+ // when `silent: true` is set.
126
+ const proc = spawned[0];
127
+ expect(proc.stdout.listenerCount("data")).toBe(0);
128
+ expect(proc.stderr.listenerCount("data")).toBe(0);
129
+ });
130
+ it("start in non-silent mode wires stdout/stderr listeners that log events", async () => {
131
+ const { adapter, spawned } = buildFakeAdapter();
132
+ stubFetchAlwaysOk();
133
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: false });
134
+ await mgr.start();
135
+ const proc = spawned[0];
136
+ expect(proc.stdout.listenerCount("data")).toBeGreaterThan(0);
137
+ expect(proc.stderr.listenerCount("data")).toBeGreaterThan(0);
138
+ // Drive a line through stdout — the manager's listener forwards to console.log.
139
+ proc.stdout.emit("data", Buffer.from("local node ready\n"));
140
+ expect(logSpy).toHaveBeenCalledWith(expect.stringContaining("local node ready"));
141
+ // stderr non-WARN line goes through console.error.
142
+ proc.stderr.emit("data", Buffer.from("real error\n"));
143
+ expect(errSpy).toHaveBeenCalledWith(expect.stringContaining("real error"));
144
+ // stderr WARN line should be filtered (no error log).
145
+ errSpy.mockClear();
146
+ proc.stderr.emit("data", Buffer.from("WARN something\n"));
147
+ expect(errSpy).not.toHaveBeenCalledWith(expect.stringContaining("WARN"));
148
+ });
149
+ it("force-restart cleans the test directory before spawn", async () => {
150
+ const { adapter } = buildFakeAdapter();
151
+ stubFetchAlwaysOk();
152
+ const planted = join(tmpDir, "stale-file.txt");
153
+ // Create a stale file to prove the cleanup actually removes it.
154
+ mkdirSync(tmpDir, { recursive: true });
155
+ require("node:fs").writeFileSync(planted, "stale");
156
+ expect(existsSync(planted)).toBe(true);
157
+ const mgr = new LocalNodeManager({
158
+ adapter,
159
+ testDir: tmpDir,
160
+ forceRestart: true,
161
+ silent: true,
162
+ });
163
+ await mgr.start();
164
+ expect(existsSync(planted)).toBe(false);
165
+ });
166
+ it("force-restart appends --force-restart to the CLI args", async () => {
167
+ const { adapter, calls } = buildFakeAdapter();
168
+ stubFetchAlwaysOk();
169
+ const mgr = new LocalNodeManager({
170
+ adapter,
171
+ testDir: tmpDir,
172
+ forceRestart: true,
173
+ silent: true,
174
+ });
175
+ await mgr.start();
176
+ expect(calls[0]?.args).toContain("--force-restart");
177
+ });
178
+ it("calling start twice returns the same node info (idempotent)", async () => {
179
+ const { adapter, calls } = buildFakeAdapter();
180
+ stubFetchAlwaysOk();
181
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
182
+ const info1 = await mgr.start();
183
+ const info2 = await mgr.start();
184
+ expect(info2).toEqual(info1);
185
+ expect(calls).toHaveLength(1);
186
+ });
187
+ it("stop signals SIGTERM and clears the spawned handle", async () => {
188
+ const { adapter, spawned } = buildFakeAdapter();
189
+ stubFetchAlwaysOk();
190
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
191
+ await mgr.start();
192
+ const killSpy = vi.spyOn(spawned[0], "kill");
193
+ await mgr.stop();
194
+ expect(killSpy).toHaveBeenCalledWith("SIGTERM");
195
+ expect(mgr.isRunning()).toBe(false);
196
+ });
197
+ it("stop is a no-op when no node is running", async () => {
198
+ const { adapter } = buildFakeAdapter();
199
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir });
200
+ // Should not throw.
201
+ await mgr.stop();
202
+ expect(mgr.isRunning()).toBe(false);
203
+ });
204
+ it("clean refuses while the node is running", async () => {
205
+ const { adapter } = buildFakeAdapter();
206
+ stubFetchAlwaysOk();
207
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
208
+ await mgr.start();
209
+ await expect(mgr.clean()).rejects.toThrow(/Cannot clean while node is running/);
210
+ });
211
+ it("clean removes the test directory after stop", async () => {
212
+ const { adapter } = buildFakeAdapter();
213
+ stubFetchAlwaysOk();
214
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
215
+ await mgr.start();
216
+ await mgr.stop();
217
+ expect(existsSync(tmpDir)).toBe(true);
218
+ await mgr.clean();
219
+ expect(existsSync(tmpDir)).toBe(false);
220
+ });
221
+ it("clean is a no-op when the test directory doesn't exist", async () => {
222
+ const { adapter } = buildFakeAdapter();
223
+ const missing = join(tmpDir, "never-created");
224
+ const mgr = new LocalNodeManager({ adapter, testDir: missing });
225
+ // Should not throw.
226
+ await mgr.clean();
227
+ });
228
+ });
229
+ describe("LocalNodeManager — start failure paths", () => {
230
+ let tmpDir;
231
+ beforeEach(() => {
232
+ tmpDir = mkdtempSync(join(tmpdir(), "movehat-localnode-"));
233
+ vi.spyOn(console, "log").mockImplementation(() => undefined);
234
+ vi.spyOn(console, "error").mockImplementation(() => undefined);
235
+ });
236
+ afterEach(() => {
237
+ vi.restoreAllMocks();
238
+ vi.unstubAllGlobals();
239
+ if (existsSync(tmpDir))
240
+ rmSync(tmpDir, { recursive: true, force: true });
241
+ });
242
+ it("waitForReady timeout surfaces a clear error AND cleans up the spawn", async () => {
243
+ const { adapter, spawned } = buildFakeAdapter();
244
+ // Always-failing fetch — node never becomes ready.
245
+ vi.stubGlobal("fetch", vi.fn().mockRejectedValue(new Error("ECONNREFUSED")));
246
+ vi.useFakeTimers();
247
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
248
+ // Attach the .catch handler synchronously so the eventual rejection
249
+ // never lands as an unhandled promise. vi.advanceTimersByTimeAsync
250
+ // drives the waitForReady loop forward; we then await the captured
251
+ // error and assert on it.
252
+ let captured;
253
+ const startPromise = mgr.start().catch((e) => {
254
+ captured = e;
255
+ });
256
+ // Drive the 60s timeout forward — each loop iteration does fetch +
257
+ // sleep(1000). Advance well past 60 000 ms.
258
+ await vi.advanceTimersByTimeAsync(61_000);
259
+ await startPromise;
260
+ expect(captured).toBeInstanceOf(Error);
261
+ expect(captured.message).toMatch(/did not become ready/);
262
+ // The spawn handle must have been killed in the catch arm.
263
+ expect(spawned[0]).toBeDefined();
264
+ expect(mgr.isRunning()).toBe(false);
265
+ vi.useRealTimers();
266
+ });
267
+ });
268
+ describe("LocalNodeManager — fundAccount", () => {
269
+ let tmpDir;
270
+ beforeEach(() => {
271
+ tmpDir = mkdtempSync(join(tmpdir(), "movehat-localnode-"));
272
+ vi.spyOn(console, "log").mockImplementation(() => undefined);
273
+ vi.spyOn(console, "error").mockImplementation(() => undefined);
274
+ });
275
+ afterEach(() => {
276
+ vi.restoreAllMocks();
277
+ vi.unstubAllGlobals();
278
+ if (existsSync(tmpDir))
279
+ rmSync(tmpDir, { recursive: true, force: true });
280
+ });
281
+ it("rejects when called before the node is running", async () => {
282
+ const { adapter } = buildFakeAdapter();
283
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir });
284
+ await expect(mgr.fundAccount("0xabc", 100)).rejects.toThrow(/Local node is not running/);
285
+ });
286
+ it("posts to the faucet endpoint and returns the parsed JSON on success", async () => {
287
+ const { adapter } = buildFakeAdapter();
288
+ // First fetch = ready check; subsequent = faucet mint.
289
+ const fetchFn = vi.fn();
290
+ fetchFn.mockResolvedValueOnce({ ok: true }); // waitForReady
291
+ fetchFn.mockResolvedValueOnce({
292
+ ok: true,
293
+ json: async () => ({ txn_hashes: ["0xdeadbeef"] }),
294
+ }); // faucet
295
+ vi.stubGlobal("fetch", fetchFn);
296
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
297
+ await mgr.start();
298
+ const addr = "0x" + "1".repeat(64);
299
+ const result = await mgr.fundAccount(addr, 12345);
300
+ expect(result).toEqual({ txn_hashes: ["0xdeadbeef"] });
301
+ const faucetCall = fetchFn.mock.calls[1];
302
+ expect(faucetCall[0]).toContain("/mint?amount=12345&address=" + addr);
303
+ expect(faucetCall[1]?.method).toBe("POST");
304
+ });
305
+ it("rethrows a clear error when the faucet returns non-ok", async () => {
306
+ const { adapter } = buildFakeAdapter();
307
+ const fetchFn = vi.fn();
308
+ fetchFn.mockResolvedValueOnce({ ok: true }); // waitForReady
309
+ fetchFn.mockResolvedValueOnce({
310
+ ok: false,
311
+ text: async () => "out of funds",
312
+ json: async () => ({}),
313
+ });
314
+ vi.stubGlobal("fetch", fetchFn);
315
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
316
+ await mgr.start();
317
+ await expect(mgr.fundAccount("0xabc", 100)).rejects.toThrow(/Failed to fund account.*out of funds/);
318
+ });
319
+ it("fundAccount accepts an Account-like object by reading accountAddress.toString()", async () => {
320
+ const { adapter } = buildFakeAdapter();
321
+ const fetchFn = vi.fn();
322
+ fetchFn.mockResolvedValueOnce({ ok: true }); // waitForReady
323
+ fetchFn.mockResolvedValueOnce({
324
+ ok: true,
325
+ json: async () => ({}),
326
+ });
327
+ vi.stubGlobal("fetch", fetchFn);
328
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
329
+ await mgr.start();
330
+ const fakeAccount = {
331
+ accountAddress: { toString: () => "0xfeedbeef" },
332
+ }; // exercises the typeof-not-string branch
333
+ await mgr.fundAccount(fakeAccount, 100);
334
+ expect(fetchFn.mock.calls[1][0]).toContain("address=0xfeedbeef");
335
+ });
336
+ it("fundAccounts iterates and funds each account in turn", async () => {
337
+ const { adapter } = buildFakeAdapter();
338
+ const fetchFn = vi.fn();
339
+ fetchFn.mockResolvedValueOnce({ ok: true }); // waitForReady
340
+ fetchFn.mockResolvedValue({ ok: true, json: async () => ({}) });
341
+ vi.stubGlobal("fetch", fetchFn);
342
+ const mgr = new LocalNodeManager({ adapter, testDir: tmpDir, silent: true });
343
+ await mgr.start();
344
+ await mgr.fundAccounts(["0x1", "0x2", "0x3"], 100);
345
+ // 1 ready + 3 mint calls = 4 total.
346
+ expect(fetchFn.mock.calls.length).toBeGreaterThanOrEqual(4);
347
+ });
348
+ });
349
+ //# sourceMappingURL=LocalNodeManager.test.js.map