movehat 0.1.9 → 0.2.1

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 +132 -279
  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 +89 -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 -4
  130. package/dist/core/AccountManager.d.ts.map +1 -1
  131. package/dist/core/AccountManager.js +20 -12
  132. package/dist/core/AccountManager.js.map +1 -1
  133. package/dist/core/Publisher.d.ts +26 -0
  134. package/dist/core/Publisher.d.ts.map +1 -0
  135. package/dist/core/Publisher.js +240 -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 -4
  158. package/dist/core/contract.d.ts.map +1 -1
  159. package/dist/core/contract.js +15 -7
  160. package/dist/core/contract.js.map +1 -1
  161. package/dist/core/deployments.d.ts +2 -8
  162. package/dist/core/deployments.d.ts.map +1 -1
  163. package/dist/core/deployments.js +8 -18
  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 -29
  198. package/dist/fork/manager.d.ts.map +1 -1
  199. package/dist/fork/manager.js +79 -76
  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 +12 -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 +118 -0
  214. package/dist/harness/Harness.d.ts.map +1 -0
  215. package/dist/harness/Harness.js +187 -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 +267 -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 +6 -4
  261. package/dist/helpers/setup.js.map +1 -1
  262. package/dist/helpers/setupLocalTesting.d.ts +31 -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 +6 -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 +26 -239
  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 +39 -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 +29 -0
  330. package/dist/utils/address.d.ts.map +1 -0
  331. package/dist/utils/address.js +48 -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 +108 -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 +15 -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 +111 -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 -22
  385. package/src/core/Publisher.ts +314 -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 -7
  392. package/src/core/deployments.ts +13 -23
  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 -83
  402. package/src/fork/server.ts +53 -19
  403. package/src/fork/storage.ts +12 -15
  404. package/src/fork/test.ts +57 -32
  405. package/src/harness/Harness.ts +222 -0
  406. package/src/harness/codeObject.ts +384 -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 +6 -4
  418. package/src/helpers/setupLocalTesting.ts +218 -200
  419. package/src/helpers/testFixtures.ts +106 -118
  420. package/src/index.ts +8 -3
  421. package/src/node/LocalNodeManager.ts +87 -62
  422. package/src/node/__tests__/LocalNodeManager.test.ts +452 -0
  423. package/src/runtime.ts +28 -288
  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 +39 -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 +52 -0
  442. package/src/utils/childProcessAdapter.ts +214 -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
@@ -0,0 +1,240 @@
1
+ import { homedir } from "os";
2
+ import { join } from "path";
3
+ import { randomUUID } from "crypto";
4
+ import { extractNamedAddresses } from "../commands/compile.js";
5
+ import { saveDeployment, loadDeployment, validateSafeName, } from "./deployments.js";
6
+ import { validatePathSafety, validateProfileSafety } from "./shell.js";
7
+ import { CliExecutionError, ModuleAlreadyDeployedError, PostPublishError } from "../errors.js";
8
+ import { runCli } from "../utils/runCli.js";
9
+ import { logger } from "../ui/index.js";
10
+ import { withYamlLock, addProfile, removeProfile, removeProfileSync, ensureSignalHandler, cleanupCallbacks, } from "./movementProfile.js";
11
+ import { parseTxHash } from "../utils/parseCliOutput.js";
12
+ /**
13
+ * Publishes a Move module via the Movement CLI.
14
+ *
15
+ * @internal
16
+ */
17
+ export class Publisher {
18
+ deps;
19
+ constructor(deps = {}) {
20
+ this.deps = deps;
21
+ }
22
+ async deploy(input) {
23
+ const { moduleName, config, account } = input;
24
+ validateSafeName(moduleName, "module");
25
+ const forceRedeploy = process.env.MH_CLI_REDEPLOY === "true";
26
+ const existingDeployment = loadDeployment(config.network, moduleName);
27
+ if (existingDeployment && !forceRedeploy) {
28
+ // Build detailed error message with all deployment info
29
+ const errorDetails = [
30
+ `Module "${moduleName}" is already deployed on ${config.network}`,
31
+ `Address: ${existingDeployment.address}`,
32
+ `Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`,
33
+ existingDeployment.txHash ? `Transaction: ${existingDeployment.txHash}` : null,
34
+ `\nTo redeploy, run with the --redeploy flag:`,
35
+ `movehat run <script> --network ${config.network} --redeploy`,
36
+ ]
37
+ .filter(Boolean)
38
+ .join("\n");
39
+ // Log formatted error message for user
40
+ logger.error(`Module "${moduleName}" is already deployed on ${config.network}`);
41
+ logger.plain(` Address: ${existingDeployment.address}`);
42
+ logger.plain(` Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`);
43
+ if (existingDeployment.txHash) {
44
+ logger.plain(` Transaction: ${existingDeployment.txHash}`);
45
+ }
46
+ logger.newline();
47
+ logger.info("To redeploy, run with the --redeploy flag:");
48
+ logger.plain(` movehat run <script> --network ${config.network} --redeploy`);
49
+ logger.newline();
50
+ // Throw custom error with complete context for programmatic handling
51
+ throw new ModuleAlreadyDeployedError(errorDetails, moduleName, config.network, existingDeployment.address, existingDeployment.timestamp, existingDeployment.txHash);
52
+ }
53
+ if (forceRedeploy && existingDeployment) {
54
+ logger.info(`Redeploying module "${moduleName}" on ${config.network}...`);
55
+ }
56
+ const dir = input.packageDir || config.moveDir;
57
+ // Bug #37: use a UUID-suffixed profile name per deploy so concurrent
58
+ // Publisher.deploy() calls in the same process don't fight over the
59
+ // same key in ~/.aptos/config.yaml. The previous code reused
60
+ // config.profile (default "default"), which meant two parallel
61
+ // deploys would clobber each other's profile data mid-publish.
62
+ const profile = `movehat-deploy-${randomUUID().slice(0, 8)}`;
63
+ // Validate (no shell escape — runCli uses spawn, which takes args
64
+ // verbatim and would treat the single-quote wrapping as part of the
65
+ // literal path/profile, breaking Movement CLI argument parsing).
66
+ const safeDir = validatePathSafety(dir, "package directory");
67
+ const safeProfile = validateProfileSafety(profile);
68
+ logger.step(`Publishing module "${moduleName}" from ${dir}...`);
69
+ try {
70
+ // Get the deployer address to use for named addresses
71
+ const deployerAddress = account.accountAddress.toString();
72
+ // Detect named addresses from Move files
73
+ const detectedAddresses = extractNamedAddresses(dir);
74
+ // Build named addresses argument - use deployer address for all detected addresses.
75
+ // Stored as a pre-split args fragment so the spawn path never has to parse
76
+ // shell tokens; an empty fragment becomes a no-op via spread.
77
+ const namedAddrArgs = detectedAddresses.size > 0
78
+ ? [
79
+ "--named-addresses",
80
+ Array.from(detectedAddresses)
81
+ .map((name) => `${name}=${deployerAddress}`)
82
+ .join(","),
83
+ ]
84
+ : [];
85
+ // Build first with named addresses
86
+ logger.step("Building package...");
87
+ const buildResult = await runCli({
88
+ command: "movement",
89
+ args: ["move", "build", "--package-dir", safeDir, ...namedAddrArgs],
90
+ timeoutMs: 120000, // 2 minutes for git dependency downloads
91
+ }, { adapter: this.deps.adapter });
92
+ if (buildResult.stdout)
93
+ console.log(buildResult.stdout.trim());
94
+ // Publish using direct parameters (avoid config file issues)
95
+ logger.step("Publishing to blockchain...");
96
+ // Use parameters directly instead of relying on config file
97
+ // Strip any ed25519-priv- prefix if present
98
+ let cleanPrivateKey = config.privateKey;
99
+ if (cleanPrivateKey.startsWith("ed25519-priv-")) {
100
+ cleanPrivateKey = cleanPrivateKey.replace("ed25519-priv-", "");
101
+ }
102
+ // Bug #38: Move.toml is NOT mutated. All address overrides flow
103
+ // through the `--named-addresses` flag above, which Movement CLI
104
+ // applies during build + publish. The previous regex rewrite +
105
+ // restore-in-finally was destructive: if the process died between
106
+ // write and restore, the user's Move.toml stayed mutated.
107
+ let publishOut = "";
108
+ let publishErr = "";
109
+ // Setup Movement CLI config with private key securely.
110
+ // Movement CLI uses .aptos config directory (not .movement).
111
+ const movementConfigPath = join(homedir(), ".aptos", "config.yaml");
112
+ // Register a sync cleanup hook BEFORE writing the private key.
113
+ // If the user Ctrl+C's (or the process is SIGTERM'd) between the
114
+ // yaml write and our async finally, the SIGINT handler iterates
115
+ // every registered callback and removes this deploy's profile
116
+ // synchronously — closes bug #36 (private key persisting on disk
117
+ // after abnormal exit).
118
+ ensureSignalHandler();
119
+ const syncCleanup = () => removeProfileSync(movementConfigPath, profile);
120
+ cleanupCallbacks.add(syncCleanup);
121
+ // Add our deploy profile under the unique key. The mutex serializes
122
+ // read-modify-write cycles so concurrent deploys in the same process
123
+ // can't drop each other's profiles. Other user profiles in the same
124
+ // file are preserved untouched.
125
+ await withYamlLock(() => addProfile(movementConfigPath, profile, {
126
+ private_key: cleanPrivateKey,
127
+ public_key: account.publicKey.toString(),
128
+ account: deployerAddress,
129
+ rest_url: config.rpc,
130
+ }));
131
+ try {
132
+ // Execute publish command without exposing private key in CLI.
133
+ // Routed through runCli so stdout/stderr are redacted of any
134
+ // `ed25519-priv-…` shape before reaching console.log/console.error
135
+ // or the thrown CliExecutionError — that's bug #43.
136
+ const publishResult = await runCli({
137
+ command: "movement",
138
+ args: [
139
+ "move",
140
+ "publish",
141
+ "--package-dir",
142
+ safeDir,
143
+ "--url",
144
+ config.rpc,
145
+ "--profile",
146
+ safeProfile,
147
+ "--assume-yes",
148
+ ...namedAddrArgs,
149
+ ],
150
+ timeoutMs: 120000, // 2 minutes for blockchain transactions
151
+ }, { adapter: this.deps.adapter });
152
+ publishOut = publishResult.stdout;
153
+ publishErr = publishResult.stderr;
154
+ if (publishOut)
155
+ console.log(publishOut.trim());
156
+ if (publishErr)
157
+ console.error(publishErr.trim());
158
+ }
159
+ finally {
160
+ // Always remove our profile from the shared yaml — never restore
161
+ // a "snapshot" of the whole file (that's what the old code did,
162
+ // and that's the bug #37 race). Removing only our key leaves
163
+ // other concurrent deploys' profiles intact.
164
+ //
165
+ // CRITICAL: catch + log instead of throwing. `await` in a finally
166
+ // block that throws will clobber both the try block's successful
167
+ // return value AND any error already propagating. Without this
168
+ // catch, a yaml-write failure here would mask a successful
169
+ // publish (making the deploy look failed and inviting a redeploy)
170
+ // or mask the real publish error.
171
+ await withYamlLock(() => removeProfile(movementConfigPath, profile)).catch((err) => {
172
+ const cleanupMsg = err instanceof Error ? err.message : String(err);
173
+ logger.warning(`Failed to remove deploy profile "${profile}" from ${movementConfigPath}: ${cleanupMsg}. ` +
174
+ `Run 'movement config delete-profile --profile ${profile}' to clean up manually.`);
175
+ });
176
+ // Unregister the sync cleanup hook — normal path. (The signal
177
+ // handler stays installed for the process lifetime; cheap.)
178
+ cleanupCallbacks.delete(syncCleanup);
179
+ }
180
+ // Extract transaction hash from output via the shared helper
181
+ // (`utils/parseCliOutput.ts`). Same regex pair as before; lifted
182
+ // for reuse by harness/codeObject.ts and harness/script.ts.
183
+ const txHash = parseTxHash(publishOut);
184
+ logger.success("Module published successfully!");
185
+ // ←← "Publish succeeded" boundary. Anything thrown below this
186
+ // point did NOT cause the publish to fail — the module is on
187
+ // chain. We surface those failures as PostPublishError so callers
188
+ // can distinguish a genuine publish failure from a local
189
+ // bookkeeping failure (and avoid a wasteful redeploy).
190
+ const deployment = {
191
+ address: account.accountAddress.toString(),
192
+ moduleName,
193
+ network: config.network,
194
+ deployer: account.accountAddress.toString(),
195
+ timestamp: Date.now(),
196
+ txHash,
197
+ };
198
+ try {
199
+ saveDeployment(deployment);
200
+ }
201
+ catch (error) {
202
+ const err = error instanceof Error ? error : new Error(String(error));
203
+ throw new PostPublishError(`Module "${moduleName}" published to ${deployment.address} ` +
204
+ `but local deployment record could not be written: ${err.message}`, deployment, err);
205
+ }
206
+ return deployment;
207
+ }
208
+ catch (error) {
209
+ if (error instanceof PostPublishError) {
210
+ // Publish DID succeed; only local persistence failed. Log as
211
+ // warning (not error) so the user knows the deploy is real on
212
+ // chain. Re-throw so programmatic callers can react.
213
+ logger.warning(`Module published successfully to ${error.deployment.address} ` +
214
+ `(tx=${error.deployment.txHash ?? "unknown"}) ` +
215
+ `but local deployment record could not be written.`);
216
+ logger.warning(` Cause: ${error.cause.message}`);
217
+ logger.warning(` To recover, manually write the deployment to ` +
218
+ `deployments/${error.deployment.network}/${error.deployment.moduleName}.json.`);
219
+ throw error;
220
+ }
221
+ if (error instanceof CliExecutionError) {
222
+ // stdout/stderr are already redacted by runCli before reaching here,
223
+ // so this branch is safe to log verbatim.
224
+ if (error.stdoutPreview)
225
+ console.log(error.stdoutPreview);
226
+ logger.error(`Failed to publish module: ${error.message}\n${error.stderr}`);
227
+ }
228
+ else {
229
+ // Preserve existing behaviour for non-CLI errors (filesystem write
230
+ // failures from Move.toml / ~/.aptos/config.yaml, yaml parse errors,
231
+ // etc.). These paths can't carry private-key material so logging raw
232
+ // is safe.
233
+ const err = error instanceof Error ? error : new Error(String(error));
234
+ logger.error(`Failed to publish module: ${err.message}`);
235
+ }
236
+ throw error;
237
+ }
238
+ }
239
+ }
240
+ //# sourceMappingURL=Publisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Publisher.js","sourceRoot":"","sources":["../../src/core/Publisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AccountManager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountManager.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/AccountManager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,239 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { mkdtempSync, rmSync, statSync, existsSync, writeFileSync } from "fs";
3
+ import { tmpdir, platform } from "os";
4
+ import { join } from "path";
5
+ import { AccountManager } from "../AccountManager.js";
6
+ describe("AccountManager.saveAccountPool", () => {
7
+ let tmpDir;
8
+ beforeEach(() => {
9
+ tmpDir = mkdtempSync(join(tmpdir(), "movehat-acc-pool-"));
10
+ AccountManager.clearPool();
11
+ });
12
+ afterEach(() => {
13
+ AccountManager.clearPool();
14
+ if (existsSync(tmpDir)) {
15
+ rmSync(tmpDir, { recursive: true, force: true });
16
+ }
17
+ });
18
+ it("writes test-pool.json with 0o600 permissions", () => {
19
+ AccountManager.createAccount("alice");
20
+ AccountManager.createAccount("bob");
21
+ const poolDir = join(tmpDir, "accounts");
22
+ AccountManager.saveAccountPool(poolDir);
23
+ const poolFile = join(poolDir, "test-pool.json");
24
+ expect(existsSync(poolFile)).toBe(true);
25
+ // Mode check is POSIX-only; skip on Windows where mode bits don't apply.
26
+ if (platform() !== "win32") {
27
+ const stat = statSync(poolFile);
28
+ const mode = stat.mode & 0o777;
29
+ expect(mode).toBe(0o600);
30
+ }
31
+ });
32
+ it("creates the pool directory with 0o700 permissions when missing", () => {
33
+ AccountManager.createAccount("alice");
34
+ const poolDir = join(tmpDir, "fresh-accounts");
35
+ AccountManager.saveAccountPool(poolDir);
36
+ expect(existsSync(poolDir)).toBe(true);
37
+ if (platform() !== "win32") {
38
+ const stat = statSync(poolDir);
39
+ const mode = stat.mode & 0o777;
40
+ expect(mode).toBe(0o700);
41
+ }
42
+ });
43
+ });
44
+ const TEST_KEY_A = "0x0000000000000000000000000000000000000000000000000000000000000001";
45
+ const TEST_KEY_B = "0x0000000000000000000000000000000000000000000000000000000000000002";
46
+ describe("AccountManager — create / lookup / label", () => {
47
+ beforeEach(() => {
48
+ AccountManager.clearPool();
49
+ });
50
+ afterEach(() => {
51
+ AccountManager.clearPool();
52
+ });
53
+ it("getTestAccount(label) creates on first call, returns the same on second", () => {
54
+ const first = AccountManager.getTestAccount("alice");
55
+ const second = AccountManager.getTestAccount("alice");
56
+ expect(second.accountAddress.toString()).toBe(first.accountAddress.toString());
57
+ });
58
+ it("getTestAccount() with no label creates a fresh unlabeled account", () => {
59
+ const a = AccountManager.getTestAccount();
60
+ const b = AccountManager.getTestAccount();
61
+ expect(a.accountAddress.toString()).not.toBe(b.accountAddress.toString());
62
+ });
63
+ it("createAccount tracks the new account in the pool", () => {
64
+ expect(AccountManager.getPoolSize()).toBe(0);
65
+ AccountManager.createAccount("alice");
66
+ AccountManager.createAccount("bob");
67
+ expect(AccountManager.getPoolSize()).toBe(2);
68
+ });
69
+ it("getAccountByLabel returns undefined for an unknown label", () => {
70
+ expect(AccountManager.getAccountByLabel("missing")).toBeUndefined();
71
+ });
72
+ it("getLabeledAccounts returns a map of every labeled account", () => {
73
+ AccountManager.createAccount("alice");
74
+ AccountManager.createAccount("bob");
75
+ AccountManager.createAccount(); // unlabeled — should NOT appear
76
+ const labeled = AccountManager.getLabeledAccounts();
77
+ expect(Object.keys(labeled).sort()).toEqual(["alice", "bob"]);
78
+ });
79
+ it("hasLabel reflects the label map state", () => {
80
+ expect(AccountManager.hasLabel("alice")).toBe(false);
81
+ AccountManager.createAccount("alice");
82
+ expect(AccountManager.hasLabel("alice")).toBe(true);
83
+ });
84
+ it("getOrCreateLabeled returns the existing labeled account on second call", () => {
85
+ const first = AccountManager.getOrCreateLabeled("alice");
86
+ const second = AccountManager.getOrCreateLabeled("alice");
87
+ expect(second.accountAddress.toString()).toBe(first.accountAddress.toString());
88
+ expect(AccountManager.getPoolSize()).toBe(1);
89
+ });
90
+ it("createBatch creates one account per label and returns the map", () => {
91
+ const accounts = AccountManager.createBatch(["alice", "bob", "charlie"]);
92
+ expect(Object.keys(accounts).sort()).toEqual(["alice", "bob", "charlie"]);
93
+ expect(AccountManager.getPoolSize()).toBe(3);
94
+ });
95
+ it("getAllAccounts returns every account in insertion order", () => {
96
+ const a = AccountManager.createAccount("alice");
97
+ const b = AccountManager.createAccount("bob");
98
+ const addrs = AccountManager.getAllAccounts().map((acc) => acc.accountAddress.toString());
99
+ // Insertion order is preserved by the underlying Map iteration.
100
+ expect(addrs).toEqual([
101
+ a.accountAddress.toString(),
102
+ b.accountAddress.toString(),
103
+ ]);
104
+ });
105
+ it("clearPool resets pool, label map, and poolLoaded flag", () => {
106
+ AccountManager.createAccount("alice");
107
+ expect(AccountManager.getPoolSize()).toBe(1);
108
+ AccountManager.clearPool();
109
+ expect(AccountManager.getPoolSize()).toBe(0);
110
+ expect(AccountManager.hasLabel("alice")).toBe(false);
111
+ });
112
+ });
113
+ describe("AccountManager — load from env / key / config", () => {
114
+ let origEnv;
115
+ beforeEach(() => {
116
+ AccountManager.clearPool();
117
+ origEnv = process.env.PRIVATE_KEY;
118
+ delete process.env.PRIVATE_KEY;
119
+ });
120
+ afterEach(() => {
121
+ AccountManager.clearPool();
122
+ if (origEnv === undefined)
123
+ delete process.env.PRIVATE_KEY;
124
+ else
125
+ process.env.PRIVATE_KEY = origEnv;
126
+ });
127
+ it("loadAccountFromEnv reads from PRIVATE_KEY by default", () => {
128
+ process.env.PRIVATE_KEY = TEST_KEY_A;
129
+ const acc = AccountManager.loadAccountFromEnv();
130
+ expect(acc.accountAddress.toString()).toMatch(/^0x[a-f0-9]+$/i);
131
+ });
132
+ it("loadAccountFromEnv reads from a custom env var name", () => {
133
+ process.env.MY_CUSTOM_KEY = TEST_KEY_A;
134
+ try {
135
+ const acc = AccountManager.loadAccountFromEnv("MY_CUSTOM_KEY");
136
+ expect(acc.accountAddress.toString()).toMatch(/^0x[a-f0-9]+$/i);
137
+ }
138
+ finally {
139
+ delete process.env.MY_CUSTOM_KEY;
140
+ }
141
+ });
142
+ it("loadAccountFromEnv throws when the env var is unset", () => {
143
+ expect(() => AccountManager.loadAccountFromEnv("DEFINITELY_NOT_SET")).toThrow(/not found/);
144
+ });
145
+ it("loadAccountFromPrivateKey adds the account to the pool", () => {
146
+ expect(AccountManager.getPoolSize()).toBe(0);
147
+ AccountManager.loadAccountFromPrivateKey(TEST_KEY_A);
148
+ expect(AccountManager.getPoolSize()).toBe(1);
149
+ });
150
+ it("loadAccountsFromConfig loads every valid key", () => {
151
+ const config = {
152
+ allAccounts: [TEST_KEY_A, TEST_KEY_B],
153
+ };
154
+ const accounts = AccountManager.loadAccountsFromConfig(config);
155
+ expect(accounts).toHaveLength(2);
156
+ });
157
+ it("loadAccountsFromConfig warns on a malformed key and skips it", () => {
158
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => undefined);
159
+ const config = {
160
+ allAccounts: [TEST_KEY_A, "not-a-real-key"],
161
+ };
162
+ const accounts = AccountManager.loadAccountsFromConfig(config);
163
+ expect(accounts).toHaveLength(1);
164
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringMatching(/Failed to load account from config/));
165
+ warnSpy.mockRestore();
166
+ });
167
+ });
168
+ describe("AccountManager.loadAccountPool / exportPrivateKeys", () => {
169
+ let tmpDir;
170
+ beforeEach(() => {
171
+ tmpDir = mkdtempSync(join(tmpdir(), "movehat-acc-load-"));
172
+ AccountManager.clearPool();
173
+ });
174
+ afterEach(() => {
175
+ AccountManager.clearPool();
176
+ if (existsSync(tmpDir)) {
177
+ rmSync(tmpDir, { recursive: true, force: true });
178
+ }
179
+ });
180
+ it("loadAccountPool returns false when the file does not exist", () => {
181
+ expect(AccountManager.loadAccountPool(tmpDir)).toBe(false);
182
+ });
183
+ it("loadAccountPool restores accounts and labels from disk", () => {
184
+ // Plant a pool via save → clear → load round-trip.
185
+ AccountManager.createAccount("alice");
186
+ AccountManager.createAccount("bob");
187
+ const poolDir = join(tmpDir, "accounts");
188
+ AccountManager.saveAccountPool(poolDir);
189
+ AccountManager.clearPool();
190
+ expect(AccountManager.getPoolSize()).toBe(0);
191
+ const ok = AccountManager.loadAccountPool(poolDir);
192
+ expect(ok).toBe(true);
193
+ expect(AccountManager.getPoolSize()).toBe(2);
194
+ expect(AccountManager.hasLabel("alice")).toBe(true);
195
+ expect(AccountManager.hasLabel("bob")).toBe(true);
196
+ });
197
+ it("loadAccountPool is a no-op when poolLoaded is already true", () => {
198
+ AccountManager.createAccount("alice");
199
+ const poolDir = join(tmpDir, "accounts");
200
+ AccountManager.saveAccountPool(poolDir);
201
+ expect(AccountManager.loadAccountPool(poolDir)).toBe(true);
202
+ // Second call short-circuits via the poolLoaded flag.
203
+ expect(AccountManager.loadAccountPool(poolDir)).toBe(true);
204
+ });
205
+ it("loadAccountPool returns false and warns on corrupt JSON", () => {
206
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => undefined);
207
+ const poolDir = join(tmpDir, "accounts");
208
+ // mkdir then write a deliberately malformed test-pool.json.
209
+ AccountManager.createAccount("alice");
210
+ AccountManager.saveAccountPool(poolDir);
211
+ writeFileSync(join(poolDir, "test-pool.json"), "{ not valid json");
212
+ AccountManager.clearPool();
213
+ expect(AccountManager.loadAccountPool(poolDir)).toBe(false);
214
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringMatching(/Failed to load account pool/));
215
+ warnSpy.mockRestore();
216
+ });
217
+ it("exportPrivateKeys returns every labeled account's key when called with no args", () => {
218
+ AccountManager.createAccount("alice");
219
+ AccountManager.createAccount("bob");
220
+ const exported = AccountManager.exportPrivateKeys();
221
+ expect(Object.keys(exported).sort()).toEqual(["alice", "bob"]);
222
+ for (const key of Object.values(exported)) {
223
+ expect(typeof key).toBe("string");
224
+ expect(key.length).toBeGreaterThan(0);
225
+ }
226
+ });
227
+ it("exportPrivateKeys filters by labels when an array is passed", () => {
228
+ AccountManager.createAccount("alice");
229
+ AccountManager.createAccount("bob");
230
+ AccountManager.createAccount("charlie");
231
+ const exported = AccountManager.exportPrivateKeys(["alice", "charlie"]);
232
+ expect(Object.keys(exported).sort()).toEqual(["alice", "charlie"]);
233
+ });
234
+ it("exportPrivateKeys with an unknown label returns an empty map", () => {
235
+ const exported = AccountManager.exportPrivateKeys(["missing"]);
236
+ expect(exported).toEqual({});
237
+ });
238
+ });
239
+ //# sourceMappingURL=AccountManager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountManager.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/AccountManager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/config.test.ts"],"names":[],"mappings":""}