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
@@ -0,0 +1,248 @@
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
+ * Extracted from `runtime.deployContract` (M1.4 / #79). Carries the
16
+ * destructive Move.toml-rewrite + shared-yaml-write semantics of the
17
+ * original closure verbatim in this scaffold commit — bug fixes for
18
+ * #36 / #37 / #38 land in subsequent commits.
19
+ *
20
+ * @internal
21
+ */
22
+ export class Publisher {
23
+ deps;
24
+ constructor(deps = {}) {
25
+ this.deps = deps;
26
+ }
27
+ async deploy(input) {
28
+ const { moduleName, config, account } = input;
29
+ // Validate moduleName early
30
+ validateSafeName(moduleName, "module");
31
+ // Check if --redeploy flag was passed via CLI
32
+ const forceRedeploy = process.env.MH_CLI_REDEPLOY === "true";
33
+ // Check if already deployed
34
+ const existingDeployment = loadDeployment(config.network, moduleName);
35
+ if (existingDeployment && !forceRedeploy) {
36
+ // Build detailed error message with all deployment info
37
+ const errorDetails = [
38
+ `Module "${moduleName}" is already deployed on ${config.network}`,
39
+ `Address: ${existingDeployment.address}`,
40
+ `Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`,
41
+ existingDeployment.txHash ? `Transaction: ${existingDeployment.txHash}` : null,
42
+ `\nTo redeploy, run with the --redeploy flag:`,
43
+ `movehat run <script> --network ${config.network} --redeploy`,
44
+ ]
45
+ .filter(Boolean)
46
+ .join("\n");
47
+ // Log formatted error message for user
48
+ logger.error(`Module "${moduleName}" is already deployed on ${config.network}`);
49
+ logger.plain(` Address: ${existingDeployment.address}`);
50
+ logger.plain(` Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`);
51
+ if (existingDeployment.txHash) {
52
+ logger.plain(` Transaction: ${existingDeployment.txHash}`);
53
+ }
54
+ logger.newline();
55
+ logger.info("To redeploy, run with the --redeploy flag:");
56
+ logger.plain(` movehat run <script> --network ${config.network} --redeploy`);
57
+ logger.newline();
58
+ // Throw custom error with complete context for programmatic handling
59
+ throw new ModuleAlreadyDeployedError(errorDetails, moduleName, config.network, existingDeployment.address, existingDeployment.timestamp, existingDeployment.txHash);
60
+ }
61
+ if (forceRedeploy && existingDeployment) {
62
+ logger.info(`Redeploying module "${moduleName}" on ${config.network}...`);
63
+ }
64
+ const dir = input.packageDir || config.moveDir;
65
+ // Bug #37: use a UUID-suffixed profile name per deploy so concurrent
66
+ // Publisher.deploy() calls in the same process don't fight over the
67
+ // same key in ~/.aptos/config.yaml. The previous code reused
68
+ // config.profile (default "default"), which meant two parallel
69
+ // deploys would clobber each other's profile data mid-publish.
70
+ const profile = `movehat-deploy-${randomUUID().slice(0, 8)}`;
71
+ // Validate (no shell escape — runCli uses spawn, which takes args
72
+ // verbatim and would treat the single-quote wrapping as part of the
73
+ // literal path/profile, breaking Movement CLI argument parsing).
74
+ const safeDir = validatePathSafety(dir, "package directory");
75
+ const safeProfile = validateProfileSafety(profile);
76
+ logger.step(`Publishing module "${moduleName}" from ${dir}...`);
77
+ try {
78
+ // Get the deployer address to use for named addresses
79
+ const deployerAddress = account.accountAddress.toString();
80
+ // Detect named addresses from Move files
81
+ const detectedAddresses = extractNamedAddresses(dir);
82
+ // Build named addresses argument - use deployer address for all detected addresses.
83
+ // Stored as a pre-split args fragment so the spawn path never has to parse
84
+ // shell tokens; an empty fragment becomes a no-op via spread.
85
+ const namedAddrArgs = detectedAddresses.size > 0
86
+ ? [
87
+ "--named-addresses",
88
+ Array.from(detectedAddresses)
89
+ .map((name) => `${name}=${deployerAddress}`)
90
+ .join(","),
91
+ ]
92
+ : [];
93
+ // Build first with named addresses
94
+ logger.step("Building package...");
95
+ const buildResult = await runCli({
96
+ command: "movement",
97
+ args: ["move", "build", "--package-dir", safeDir, ...namedAddrArgs],
98
+ timeoutMs: 120000, // 2 minutes for git dependency downloads
99
+ }, { adapter: this.deps.adapter });
100
+ if (buildResult.stdout)
101
+ console.log(buildResult.stdout.trim());
102
+ // Publish using direct parameters (avoid config file issues)
103
+ logger.step("Publishing to blockchain...");
104
+ // Use parameters directly instead of relying on config file
105
+ // Strip any ed25519-priv- prefix if present
106
+ let cleanPrivateKey = config.privateKey;
107
+ if (cleanPrivateKey.startsWith("ed25519-priv-")) {
108
+ cleanPrivateKey = cleanPrivateKey.replace("ed25519-priv-", "");
109
+ }
110
+ // Bug #38: Move.toml is NOT mutated. All address overrides flow
111
+ // through the `--named-addresses` flag above, which Movement CLI
112
+ // applies during build + publish. The previous regex rewrite +
113
+ // restore-in-finally was destructive: if the process died between
114
+ // write and restore, the user's Move.toml stayed mutated.
115
+ let publishOut = "";
116
+ let publishErr = "";
117
+ // Setup Movement CLI config with private key securely.
118
+ // Movement CLI uses .aptos config directory (not .movement).
119
+ const movementConfigPath = join(homedir(), ".aptos", "config.yaml");
120
+ // Register a sync cleanup hook BEFORE writing the private key.
121
+ // If the user Ctrl+C's (or the process is SIGTERM'd) between the
122
+ // yaml write and our async finally, the SIGINT handler iterates
123
+ // every registered callback and removes this deploy's profile
124
+ // synchronously — closes bug #36 (private key persisting on disk
125
+ // after abnormal exit).
126
+ ensureSignalHandler();
127
+ const syncCleanup = () => removeProfileSync(movementConfigPath, profile);
128
+ cleanupCallbacks.add(syncCleanup);
129
+ // Add our deploy profile under the unique key. The mutex serializes
130
+ // read-modify-write cycles so concurrent deploys in the same process
131
+ // can't drop each other's profiles. Other user profiles in the same
132
+ // file are preserved untouched.
133
+ await withYamlLock(() => addProfile(movementConfigPath, profile, {
134
+ private_key: cleanPrivateKey,
135
+ public_key: account.publicKey.toString(),
136
+ account: deployerAddress,
137
+ rest_url: config.rpc,
138
+ }));
139
+ try {
140
+ // Execute publish command without exposing private key in CLI.
141
+ // Routed through runCli so stdout/stderr are redacted of any
142
+ // `ed25519-priv-…` shape before reaching console.log/console.error
143
+ // or the thrown CliExecutionError — that's bug #43.
144
+ const publishResult = await runCli({
145
+ command: "movement",
146
+ args: [
147
+ "move",
148
+ "publish",
149
+ "--package-dir",
150
+ safeDir,
151
+ "--url",
152
+ config.rpc,
153
+ "--profile",
154
+ safeProfile,
155
+ "--assume-yes",
156
+ ...namedAddrArgs,
157
+ ],
158
+ timeoutMs: 120000, // 2 minutes for blockchain transactions
159
+ }, { adapter: this.deps.adapter });
160
+ publishOut = publishResult.stdout;
161
+ publishErr = publishResult.stderr;
162
+ if (publishOut)
163
+ console.log(publishOut.trim());
164
+ if (publishErr)
165
+ console.error(publishErr.trim());
166
+ }
167
+ finally {
168
+ // Always remove our profile from the shared yaml — never restore
169
+ // a "snapshot" of the whole file (that's what the old code did,
170
+ // and that's the bug #37 race). Removing only our key leaves
171
+ // other concurrent deploys' profiles intact.
172
+ //
173
+ // CRITICAL: catch + log instead of throwing. `await` in a finally
174
+ // block that throws will clobber both the try block's successful
175
+ // return value AND any error already propagating. Without this
176
+ // catch, a yaml-write failure here would mask a successful
177
+ // publish (making the deploy look failed and inviting a redeploy)
178
+ // or mask the real publish error.
179
+ await withYamlLock(() => removeProfile(movementConfigPath, profile)).catch((err) => {
180
+ const cleanupMsg = err instanceof Error ? err.message : String(err);
181
+ logger.warning(`Failed to remove deploy profile "${profile}" from ${movementConfigPath}: ${cleanupMsg}. ` +
182
+ `Run 'movement config delete-profile --profile ${profile}' to clean up manually.`);
183
+ });
184
+ // Unregister the sync cleanup hook — normal path. (The signal
185
+ // handler stays installed for the process lifetime; cheap.)
186
+ cleanupCallbacks.delete(syncCleanup);
187
+ }
188
+ // Extract transaction hash from output via the shared helper
189
+ // (`utils/parseCliOutput.ts`). Same regex pair as before; lifted
190
+ // for reuse by harness/codeObject.ts and harness/script.ts.
191
+ const txHash = parseTxHash(publishOut);
192
+ logger.success("Module published successfully!");
193
+ // ←← "Publish succeeded" boundary. Anything thrown below this
194
+ // point did NOT cause the publish to fail — the module is on
195
+ // chain. We surface those failures as PostPublishError so callers
196
+ // can distinguish a genuine publish failure from a local
197
+ // bookkeeping failure (and avoid a wasteful redeploy).
198
+ const deployment = {
199
+ address: account.accountAddress.toString(),
200
+ moduleName,
201
+ network: config.network,
202
+ deployer: account.accountAddress.toString(),
203
+ timestamp: Date.now(),
204
+ txHash,
205
+ };
206
+ try {
207
+ saveDeployment(deployment);
208
+ }
209
+ catch (error) {
210
+ const err = error instanceof Error ? error : new Error(String(error));
211
+ throw new PostPublishError(`Module "${moduleName}" published to ${deployment.address} ` +
212
+ `but local deployment record could not be written: ${err.message}`, deployment, err);
213
+ }
214
+ return deployment;
215
+ }
216
+ catch (error) {
217
+ if (error instanceof PostPublishError) {
218
+ // Publish DID succeed; only local persistence failed. Log as
219
+ // warning (not error) so the user knows the deploy is real on
220
+ // chain. Re-throw so programmatic callers can react.
221
+ logger.warning(`Module published successfully to ${error.deployment.address} ` +
222
+ `(tx=${error.deployment.txHash ?? "unknown"}) ` +
223
+ `but local deployment record could not be written.`);
224
+ logger.warning(` Cause: ${error.cause.message}`);
225
+ logger.warning(` To recover, manually write the deployment to ` +
226
+ `deployments/${error.deployment.network}/${error.deployment.moduleName}.json.`);
227
+ throw error;
228
+ }
229
+ if (error instanceof CliExecutionError) {
230
+ // stdout/stderr are already redacted by runCli before reaching here,
231
+ // so this branch is safe to log verbatim.
232
+ if (error.stdoutPreview)
233
+ console.log(error.stdoutPreview);
234
+ logger.error(`Failed to publish module: ${error.message}\n${error.stderr}`);
235
+ }
236
+ else {
237
+ // Preserve existing behaviour for non-CLI errors (filesystem write
238
+ // failures from Move.toml / ~/.aptos/config.yaml, yaml parse errors,
239
+ // etc.). These paths can't carry private-key material so logging raw
240
+ // is safe.
241
+ const err = error instanceof Error ? error : new Error(String(error));
242
+ logger.error(`Failed to publish module: ${err.message}`);
243
+ }
244
+ throw error;
245
+ }
246
+ }
247
+ }
248
+ //# 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":""}