movehat 0.2.4 → 0.2.5

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 (557) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.d.ts +0 -1
  3. package/dist/cli.js +0 -1
  4. package/dist/commands/compile.d.ts +0 -1
  5. package/dist/commands/compile.js +0 -1
  6. package/dist/commands/fork/create.d.ts +1 -1
  7. package/dist/commands/fork/create.js +18 -3
  8. package/dist/commands/fork/fund.d.ts +0 -1
  9. package/dist/commands/fork/fund.js +0 -1
  10. package/dist/commands/fork/list.d.ts +0 -1
  11. package/dist/commands/fork/list.js +0 -1
  12. package/dist/commands/fork/serve.d.ts +0 -1
  13. package/dist/commands/fork/serve.js +0 -1
  14. package/dist/commands/fork/view-resource.d.ts +0 -1
  15. package/dist/commands/fork/view-resource.js +0 -1
  16. package/dist/commands/init.d.ts +0 -1
  17. package/dist/commands/init.js +0 -1
  18. package/dist/commands/run.d.ts +0 -1
  19. package/dist/commands/run.js +0 -1
  20. package/dist/commands/test-move.d.ts +0 -1
  21. package/dist/commands/test-move.js +0 -1
  22. package/dist/commands/test.d.ts +0 -1
  23. package/dist/commands/test.js +8 -1
  24. package/dist/commands/update.d.ts +0 -1
  25. package/dist/commands/update.js +0 -1
  26. package/dist/core/AccountManager.d.ts +15 -2
  27. package/dist/core/AccountManager.js +32 -20
  28. package/dist/core/Publisher.d.ts +0 -1
  29. package/dist/core/Publisher.js +0 -1
  30. package/dist/core/config.d.ts +0 -1
  31. package/dist/core/config.js +0 -1
  32. package/dist/core/contract.d.ts +0 -1
  33. package/dist/core/contract.js +0 -1
  34. package/dist/core/deployments.d.ts +0 -1
  35. package/dist/core/deployments.js +0 -1
  36. package/dist/core/movementProfile.d.ts +0 -1
  37. package/dist/core/movementProfile.js +0 -1
  38. package/dist/core/shell.d.ts +0 -1
  39. package/dist/core/shell.js +0 -1
  40. package/dist/errors.d.ts +0 -1
  41. package/dist/errors.js +0 -1
  42. package/dist/fork/api.d.ts +24 -1
  43. package/dist/fork/api.js +95 -1
  44. package/dist/fork/manager.d.ts +14 -1
  45. package/dist/fork/manager.js +19 -1
  46. package/dist/fork/server.d.ts +19 -1
  47. package/dist/fork/server.js +188 -8
  48. package/dist/fork/storage.d.ts +0 -1
  49. package/dist/fork/storage.js +50 -32
  50. package/dist/fork/test.d.ts +0 -1
  51. package/dist/fork/test.js +0 -1
  52. package/dist/harness/Harness.d.ts +0 -1
  53. package/dist/harness/Harness.js +6 -2
  54. package/dist/harness/codeObject.d.ts +0 -1
  55. package/dist/harness/codeObject.js +0 -1
  56. package/dist/harness/errors.d.ts +0 -1
  57. package/dist/harness/errors.js +0 -1
  58. package/dist/harness/index.d.ts +0 -1
  59. package/dist/harness/index.js +0 -1
  60. package/dist/harness/proxy.d.ts +12 -1
  61. package/dist/harness/proxy.js +23 -1
  62. package/dist/harness/script.d.ts +0 -1
  63. package/dist/harness/script.js +0 -1
  64. package/dist/harness/view.d.ts +0 -1
  65. package/dist/harness/view.js +0 -1
  66. package/dist/helpers/assertions.d.ts +0 -1
  67. package/dist/helpers/assertions.js +0 -1
  68. package/dist/helpers/banner.d.ts +0 -1
  69. package/dist/helpers/banner.js +0 -1
  70. package/dist/helpers/index.d.ts +0 -1
  71. package/dist/helpers/index.js +0 -1
  72. package/dist/helpers/move-tests.d.ts +0 -1
  73. package/dist/helpers/move-tests.js +0 -1
  74. package/dist/helpers/npm-registry.d.ts +0 -1
  75. package/dist/helpers/npm-registry.js +0 -1
  76. package/dist/helpers/semver-utils.d.ts +0 -1
  77. package/dist/helpers/semver-utils.js +0 -1
  78. package/dist/helpers/setup.d.ts +0 -1
  79. package/dist/helpers/setup.js +0 -1
  80. package/dist/helpers/setupLocalTesting.d.ts +2 -5
  81. package/dist/helpers/setupLocalTesting.js +0 -1
  82. package/dist/helpers/testFixtures.d.ts +0 -1
  83. package/dist/helpers/testFixtures.js +0 -1
  84. package/dist/helpers/version-check.d.ts +0 -1
  85. package/dist/helpers/version-check.js +0 -1
  86. package/dist/index.d.ts +0 -1
  87. package/dist/index.js +0 -1
  88. package/dist/node/LocalNodeManager.d.ts +0 -1
  89. package/dist/node/LocalNodeManager.js +4 -2
  90. package/dist/runtime.d.ts +0 -1
  91. package/dist/runtime.js +0 -1
  92. package/dist/types/config.d.ts +0 -1
  93. package/dist/types/config.js +0 -1
  94. package/dist/types/fork.d.ts +0 -1
  95. package/dist/types/fork.js +0 -1
  96. package/dist/types/harness.d.ts +0 -1
  97. package/dist/types/harness.js +0 -1
  98. package/dist/types/runtime.d.ts +0 -1
  99. package/dist/types/runtime.js +0 -1
  100. package/dist/ui/colors.d.ts +0 -1
  101. package/dist/ui/colors.js +0 -1
  102. package/dist/ui/formatters.d.ts +0 -1
  103. package/dist/ui/formatters.js +0 -1
  104. package/dist/ui/index.d.ts +0 -1
  105. package/dist/ui/index.js +0 -1
  106. package/dist/ui/logger.d.ts +0 -1
  107. package/dist/ui/logger.js +0 -1
  108. package/dist/ui/spinner.d.ts +0 -1
  109. package/dist/ui/spinner.js +0 -1
  110. package/dist/ui/symbols.d.ts +0 -1
  111. package/dist/ui/symbols.js +0 -1
  112. package/dist/ui/table.d.ts +0 -1
  113. package/dist/ui/table.js +0 -1
  114. package/dist/utils/address.d.ts +0 -1
  115. package/dist/utils/address.js +0 -1
  116. package/dist/utils/childProcessAdapter.d.ts +0 -1
  117. package/dist/utils/childProcessAdapter.js +46 -20
  118. package/dist/utils/movementCli.d.ts +5 -0
  119. package/dist/utils/movementCli.js +91 -0
  120. package/dist/utils/parseCliOutput.d.ts +0 -1
  121. package/dist/utils/parseCliOutput.js +0 -1
  122. package/dist/utils/redact.d.ts +3 -3
  123. package/dist/utils/redact.js +6 -5
  124. package/dist/utils/runCli.d.ts +0 -1
  125. package/dist/utils/runCli.js +10 -2
  126. package/package.json +4 -4
  127. package/dist/__tests__/deployContract.test.d.ts +0 -2
  128. package/dist/__tests__/deployContract.test.d.ts.map +0 -1
  129. package/dist/__tests__/deployContract.test.js +0 -377
  130. package/dist/__tests__/deployContract.test.js.map +0 -1
  131. package/dist/__tests__/errors.test.d.ts +0 -2
  132. package/dist/__tests__/errors.test.d.ts.map +0 -1
  133. package/dist/__tests__/errors.test.js +0 -46
  134. package/dist/__tests__/errors.test.js.map +0 -1
  135. package/dist/__tests__/exports.test.d.ts +0 -2
  136. package/dist/__tests__/exports.test.d.ts.map +0 -1
  137. package/dist/__tests__/exports.test.js +0 -30
  138. package/dist/__tests__/exports.test.js.map +0 -1
  139. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +0 -25
  140. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +0 -1
  141. package/dist/__tests__/fixtures/sigint-deploy-harness.js +0 -83
  142. package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +0 -1
  143. package/dist/__tests__/fork/api.test.d.ts +0 -2
  144. package/dist/__tests__/fork/api.test.d.ts.map +0 -1
  145. package/dist/__tests__/fork/api.test.js +0 -115
  146. package/dist/__tests__/fork/api.test.js.map +0 -1
  147. package/dist/__tests__/fork/api.timeout.test.d.ts +0 -2
  148. package/dist/__tests__/fork/api.timeout.test.d.ts.map +0 -1
  149. package/dist/__tests__/fork/api.timeout.test.js +0 -98
  150. package/dist/__tests__/fork/api.timeout.test.js.map +0 -1
  151. package/dist/__tests__/harness/Harness.createLive.test.d.ts +0 -2
  152. package/dist/__tests__/harness/Harness.createLive.test.d.ts.map +0 -1
  153. package/dist/__tests__/harness/Harness.createLive.test.js +0 -53
  154. package/dist/__tests__/harness/Harness.createLive.test.js.map +0 -1
  155. package/dist/__tests__/harness/Harness.proxy.test.d.ts +0 -2
  156. package/dist/__tests__/harness/Harness.proxy.test.d.ts.map +0 -1
  157. package/dist/__tests__/harness/Harness.proxy.test.js +0 -89
  158. package/dist/__tests__/harness/Harness.proxy.test.js.map +0 -1
  159. package/dist/__tests__/harness/_fixture.d.ts +0 -54
  160. package/dist/__tests__/harness/_fixture.d.ts.map +0 -1
  161. package/dist/__tests__/harness/_fixture.js +0 -69
  162. package/dist/__tests__/harness/_fixture.js.map +0 -1
  163. package/dist/__tests__/harness/codeObject.deploy.test.d.ts +0 -2
  164. package/dist/__tests__/harness/codeObject.deploy.test.d.ts.map +0 -1
  165. package/dist/__tests__/harness/codeObject.deploy.test.js +0 -288
  166. package/dist/__tests__/harness/codeObject.deploy.test.js.map +0 -1
  167. package/dist/__tests__/harness/codeObject.upgrade.test.d.ts +0 -2
  168. package/dist/__tests__/harness/codeObject.upgrade.test.d.ts.map +0 -1
  169. package/dist/__tests__/harness/codeObject.upgrade.test.js +0 -138
  170. package/dist/__tests__/harness/codeObject.upgrade.test.js.map +0 -1
  171. package/dist/__tests__/harness/script.test.d.ts +0 -2
  172. package/dist/__tests__/harness/script.test.d.ts.map +0 -1
  173. package/dist/__tests__/harness/script.test.js +0 -219
  174. package/dist/__tests__/harness/script.test.js.map +0 -1
  175. package/dist/__tests__/harness/view.test.d.ts +0 -2
  176. package/dist/__tests__/harness/view.test.d.ts.map +0 -1
  177. package/dist/__tests__/harness/view.test.js +0 -92
  178. package/dist/__tests__/harness/view.test.js.map +0 -1
  179. package/dist/__tests__/runtime.test.d.ts +0 -2
  180. package/dist/__tests__/runtime.test.d.ts.map +0 -1
  181. package/dist/__tests__/runtime.test.js +0 -141
  182. package/dist/__tests__/runtime.test.js.map +0 -1
  183. package/dist/cli.d.ts.map +0 -1
  184. package/dist/cli.js.map +0 -1
  185. package/dist/commands/__tests__/compile.test.d.ts +0 -2
  186. package/dist/commands/__tests__/compile.test.d.ts.map +0 -1
  187. package/dist/commands/__tests__/compile.test.js +0 -351
  188. package/dist/commands/__tests__/compile.test.js.map +0 -1
  189. package/dist/commands/__tests__/compile.toml-mutation.test.d.ts +0 -2
  190. package/dist/commands/__tests__/compile.toml-mutation.test.d.ts.map +0 -1
  191. package/dist/commands/__tests__/compile.toml-mutation.test.js +0 -69
  192. package/dist/commands/__tests__/compile.toml-mutation.test.js.map +0 -1
  193. package/dist/commands/__tests__/init.test.d.ts +0 -2
  194. package/dist/commands/__tests__/init.test.d.ts.map +0 -1
  195. package/dist/commands/__tests__/init.test.js +0 -163
  196. package/dist/commands/__tests__/init.test.js.map +0 -1
  197. package/dist/commands/__tests__/run.test.d.ts +0 -2
  198. package/dist/commands/__tests__/run.test.d.ts.map +0 -1
  199. package/dist/commands/__tests__/run.test.js +0 -166
  200. package/dist/commands/__tests__/run.test.js.map +0 -1
  201. package/dist/commands/__tests__/test-move.test.d.ts +0 -2
  202. package/dist/commands/__tests__/test-move.test.d.ts.map +0 -1
  203. package/dist/commands/__tests__/test-move.test.js +0 -59
  204. package/dist/commands/__tests__/test-move.test.js.map +0 -1
  205. package/dist/commands/__tests__/test.test.d.ts +0 -2
  206. package/dist/commands/__tests__/test.test.d.ts.map +0 -1
  207. package/dist/commands/__tests__/test.test.js +0 -168
  208. package/dist/commands/__tests__/test.test.js.map +0 -1
  209. package/dist/commands/__tests__/update.test.d.ts +0 -2
  210. package/dist/commands/__tests__/update.test.d.ts.map +0 -1
  211. package/dist/commands/__tests__/update.test.js +0 -176
  212. package/dist/commands/__tests__/update.test.js.map +0 -1
  213. package/dist/commands/compile.d.ts.map +0 -1
  214. package/dist/commands/compile.js.map +0 -1
  215. package/dist/commands/fork/__tests__/create.test.d.ts +0 -2
  216. package/dist/commands/fork/__tests__/create.test.d.ts.map +0 -1
  217. package/dist/commands/fork/__tests__/create.test.js +0 -108
  218. package/dist/commands/fork/__tests__/create.test.js.map +0 -1
  219. package/dist/commands/fork/__tests__/fund.test.d.ts +0 -2
  220. package/dist/commands/fork/__tests__/fund.test.d.ts.map +0 -1
  221. package/dist/commands/fork/__tests__/fund.test.js +0 -72
  222. package/dist/commands/fork/__tests__/fund.test.js.map +0 -1
  223. package/dist/commands/fork/__tests__/list.test.d.ts +0 -2
  224. package/dist/commands/fork/__tests__/list.test.d.ts.map +0 -1
  225. package/dist/commands/fork/__tests__/list.test.js +0 -119
  226. package/dist/commands/fork/__tests__/list.test.js.map +0 -1
  227. package/dist/commands/fork/__tests__/serve.test.d.ts +0 -2
  228. package/dist/commands/fork/__tests__/serve.test.d.ts.map +0 -1
  229. package/dist/commands/fork/__tests__/serve.test.js +0 -97
  230. package/dist/commands/fork/__tests__/serve.test.js.map +0 -1
  231. package/dist/commands/fork/__tests__/view-resource.test.d.ts +0 -2
  232. package/dist/commands/fork/__tests__/view-resource.test.d.ts.map +0 -1
  233. package/dist/commands/fork/__tests__/view-resource.test.js +0 -77
  234. package/dist/commands/fork/__tests__/view-resource.test.js.map +0 -1
  235. package/dist/commands/fork/create.d.ts.map +0 -1
  236. package/dist/commands/fork/create.js.map +0 -1
  237. package/dist/commands/fork/fund.d.ts.map +0 -1
  238. package/dist/commands/fork/fund.js.map +0 -1
  239. package/dist/commands/fork/list.d.ts.map +0 -1
  240. package/dist/commands/fork/list.js.map +0 -1
  241. package/dist/commands/fork/serve.d.ts.map +0 -1
  242. package/dist/commands/fork/serve.js.map +0 -1
  243. package/dist/commands/fork/view-resource.d.ts.map +0 -1
  244. package/dist/commands/fork/view-resource.js.map +0 -1
  245. package/dist/commands/init.d.ts.map +0 -1
  246. package/dist/commands/init.js.map +0 -1
  247. package/dist/commands/run.d.ts.map +0 -1
  248. package/dist/commands/run.js.map +0 -1
  249. package/dist/commands/test-move.d.ts.map +0 -1
  250. package/dist/commands/test-move.js.map +0 -1
  251. package/dist/commands/test.d.ts.map +0 -1
  252. package/dist/commands/test.js.map +0 -1
  253. package/dist/commands/update.d.ts.map +0 -1
  254. package/dist/commands/update.js.map +0 -1
  255. package/dist/core/AccountManager.d.ts.map +0 -1
  256. package/dist/core/AccountManager.js.map +0 -1
  257. package/dist/core/Publisher.d.ts.map +0 -1
  258. package/dist/core/Publisher.js.map +0 -1
  259. package/dist/core/__tests__/AccountManager.global-state.test.d.ts +0 -2
  260. package/dist/core/__tests__/AccountManager.global-state.test.d.ts.map +0 -1
  261. package/dist/core/__tests__/AccountManager.global-state.test.js +0 -69
  262. package/dist/core/__tests__/AccountManager.global-state.test.js.map +0 -1
  263. package/dist/core/__tests__/AccountManager.test.d.ts +0 -2
  264. package/dist/core/__tests__/AccountManager.test.d.ts.map +0 -1
  265. package/dist/core/__tests__/AccountManager.test.js +0 -239
  266. package/dist/core/__tests__/AccountManager.test.js.map +0 -1
  267. package/dist/core/__tests__/config.test.d.ts +0 -2
  268. package/dist/core/__tests__/config.test.d.ts.map +0 -1
  269. package/dist/core/__tests__/config.test.js +0 -311
  270. package/dist/core/__tests__/config.test.js.map +0 -1
  271. package/dist/core/__tests__/deployments.test.d.ts +0 -2
  272. package/dist/core/__tests__/deployments.test.d.ts.map +0 -1
  273. package/dist/core/__tests__/deployments.test.js +0 -201
  274. package/dist/core/__tests__/deployments.test.js.map +0 -1
  275. package/dist/core/__tests__/movementProfile.test.d.ts +0 -2
  276. package/dist/core/__tests__/movementProfile.test.d.ts.map +0 -1
  277. package/dist/core/__tests__/movementProfile.test.js +0 -112
  278. package/dist/core/__tests__/movementProfile.test.js.map +0 -1
  279. package/dist/core/__tests__/shell.test.d.ts +0 -2
  280. package/dist/core/__tests__/shell.test.d.ts.map +0 -1
  281. package/dist/core/__tests__/shell.test.js +0 -107
  282. package/dist/core/__tests__/shell.test.js.map +0 -1
  283. package/dist/core/config.d.ts.map +0 -1
  284. package/dist/core/config.js.map +0 -1
  285. package/dist/core/contract.d.ts.map +0 -1
  286. package/dist/core/contract.js.map +0 -1
  287. package/dist/core/deployments.d.ts.map +0 -1
  288. package/dist/core/deployments.js.map +0 -1
  289. package/dist/core/movementProfile.d.ts.map +0 -1
  290. package/dist/core/movementProfile.js.map +0 -1
  291. package/dist/core/shell.d.ts.map +0 -1
  292. package/dist/core/shell.js.map +0 -1
  293. package/dist/errors.d.ts.map +0 -1
  294. package/dist/errors.js.map +0 -1
  295. package/dist/fork/__tests__/manager.test.d.ts +0 -2
  296. package/dist/fork/__tests__/manager.test.d.ts.map +0 -1
  297. package/dist/fork/__tests__/manager.test.js +0 -309
  298. package/dist/fork/__tests__/manager.test.js.map +0 -1
  299. package/dist/fork/__tests__/server.cors.test.d.ts +0 -2
  300. package/dist/fork/__tests__/server.cors.test.d.ts.map +0 -1
  301. package/dist/fork/__tests__/server.cors.test.js +0 -79
  302. package/dist/fork/__tests__/server.cors.test.js.map +0 -1
  303. package/dist/fork/__tests__/server.test.d.ts +0 -2
  304. package/dist/fork/__tests__/server.test.d.ts.map +0 -1
  305. package/dist/fork/__tests__/server.test.js +0 -54
  306. package/dist/fork/__tests__/server.test.js.map +0 -1
  307. package/dist/fork/__tests__/storage.test.d.ts +0 -2
  308. package/dist/fork/__tests__/storage.test.d.ts.map +0 -1
  309. package/dist/fork/__tests__/storage.test.js +0 -222
  310. package/dist/fork/__tests__/storage.test.js.map +0 -1
  311. package/dist/fork/__tests__/test.test.d.ts +0 -2
  312. package/dist/fork/__tests__/test.test.d.ts.map +0 -1
  313. package/dist/fork/__tests__/test.test.js +0 -81
  314. package/dist/fork/__tests__/test.test.js.map +0 -1
  315. package/dist/fork/api.d.ts.map +0 -1
  316. package/dist/fork/api.js.map +0 -1
  317. package/dist/fork/manager.d.ts.map +0 -1
  318. package/dist/fork/manager.js.map +0 -1
  319. package/dist/fork/server.d.ts.map +0 -1
  320. package/dist/fork/server.js.map +0 -1
  321. package/dist/fork/storage.d.ts.map +0 -1
  322. package/dist/fork/storage.js.map +0 -1
  323. package/dist/fork/test.d.ts.map +0 -1
  324. package/dist/fork/test.js.map +0 -1
  325. package/dist/harness/Harness.d.ts.map +0 -1
  326. package/dist/harness/Harness.js.map +0 -1
  327. package/dist/harness/codeObject.d.ts.map +0 -1
  328. package/dist/harness/codeObject.js.map +0 -1
  329. package/dist/harness/errors.d.ts.map +0 -1
  330. package/dist/harness/errors.js.map +0 -1
  331. package/dist/harness/index.d.ts.map +0 -1
  332. package/dist/harness/index.js.map +0 -1
  333. package/dist/harness/proxy.d.ts.map +0 -1
  334. package/dist/harness/proxy.js.map +0 -1
  335. package/dist/harness/script.d.ts.map +0 -1
  336. package/dist/harness/script.js.map +0 -1
  337. package/dist/harness/view.d.ts.map +0 -1
  338. package/dist/harness/view.js.map +0 -1
  339. package/dist/helpers/__tests__/semver-utils.test.d.ts +0 -2
  340. package/dist/helpers/__tests__/semver-utils.test.d.ts.map +0 -1
  341. package/dist/helpers/__tests__/semver-utils.test.js +0 -103
  342. package/dist/helpers/__tests__/semver-utils.test.js.map +0 -1
  343. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.d.ts +0 -2
  344. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.d.ts.map +0 -1
  345. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.js +0 -172
  346. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.js.map +0 -1
  347. package/dist/helpers/assertions.d.ts.map +0 -1
  348. package/dist/helpers/assertions.js.map +0 -1
  349. package/dist/helpers/banner.d.ts.map +0 -1
  350. package/dist/helpers/banner.js.map +0 -1
  351. package/dist/helpers/index.d.ts.map +0 -1
  352. package/dist/helpers/index.js.map +0 -1
  353. package/dist/helpers/move-tests.d.ts.map +0 -1
  354. package/dist/helpers/move-tests.js.map +0 -1
  355. package/dist/helpers/npm-registry.d.ts.map +0 -1
  356. package/dist/helpers/npm-registry.js.map +0 -1
  357. package/dist/helpers/semver-utils.d.ts.map +0 -1
  358. package/dist/helpers/semver-utils.js.map +0 -1
  359. package/dist/helpers/setup.d.ts.map +0 -1
  360. package/dist/helpers/setup.js.map +0 -1
  361. package/dist/helpers/setupLocalTesting.d.ts.map +0 -1
  362. package/dist/helpers/setupLocalTesting.js.map +0 -1
  363. package/dist/helpers/testFixtures.d.ts.map +0 -1
  364. package/dist/helpers/testFixtures.js.map +0 -1
  365. package/dist/helpers/version-check.d.ts.map +0 -1
  366. package/dist/helpers/version-check.js.map +0 -1
  367. package/dist/index.d.ts.map +0 -1
  368. package/dist/index.js.map +0 -1
  369. package/dist/node/LocalNodeManager.d.ts.map +0 -1
  370. package/dist/node/LocalNodeManager.js.map +0 -1
  371. package/dist/node/__tests__/LocalNodeManager.api-port.test.d.ts +0 -2
  372. package/dist/node/__tests__/LocalNodeManager.api-port.test.d.ts.map +0 -1
  373. package/dist/node/__tests__/LocalNodeManager.api-port.test.js +0 -55
  374. package/dist/node/__tests__/LocalNodeManager.api-port.test.js.map +0 -1
  375. package/dist/node/__tests__/LocalNodeManager.test.d.ts +0 -2
  376. package/dist/node/__tests__/LocalNodeManager.test.d.ts.map +0 -1
  377. package/dist/node/__tests__/LocalNodeManager.test.js +0 -449
  378. package/dist/node/__tests__/LocalNodeManager.test.js.map +0 -1
  379. package/dist/runtime.d.ts.map +0 -1
  380. package/dist/runtime.js.map +0 -1
  381. package/dist/types/config.d.ts.map +0 -1
  382. package/dist/types/config.js.map +0 -1
  383. package/dist/types/fork.d.ts.map +0 -1
  384. package/dist/types/fork.js.map +0 -1
  385. package/dist/types/harness.d.ts.map +0 -1
  386. package/dist/types/harness.js.map +0 -1
  387. package/dist/types/runtime.d.ts.map +0 -1
  388. package/dist/types/runtime.js.map +0 -1
  389. package/dist/ui/__tests__/colors.test.d.ts +0 -2
  390. package/dist/ui/__tests__/colors.test.d.ts.map +0 -1
  391. package/dist/ui/__tests__/colors.test.js +0 -127
  392. package/dist/ui/__tests__/colors.test.js.map +0 -1
  393. package/dist/ui/__tests__/logger.test.d.ts +0 -2
  394. package/dist/ui/__tests__/logger.test.d.ts.map +0 -1
  395. package/dist/ui/__tests__/logger.test.js +0 -75
  396. package/dist/ui/__tests__/logger.test.js.map +0 -1
  397. package/dist/ui/colors.d.ts.map +0 -1
  398. package/dist/ui/colors.js.map +0 -1
  399. package/dist/ui/formatters.d.ts.map +0 -1
  400. package/dist/ui/formatters.js.map +0 -1
  401. package/dist/ui/index.d.ts.map +0 -1
  402. package/dist/ui/index.js.map +0 -1
  403. package/dist/ui/logger.d.ts.map +0 -1
  404. package/dist/ui/logger.js.map +0 -1
  405. package/dist/ui/spinner.d.ts.map +0 -1
  406. package/dist/ui/spinner.js.map +0 -1
  407. package/dist/ui/symbols.d.ts.map +0 -1
  408. package/dist/ui/symbols.js.map +0 -1
  409. package/dist/ui/table.d.ts.map +0 -1
  410. package/dist/ui/table.js.map +0 -1
  411. package/dist/utils/__tests__/address.test.d.ts +0 -2
  412. package/dist/utils/__tests__/address.test.d.ts.map +0 -1
  413. package/dist/utils/__tests__/address.test.js +0 -70
  414. package/dist/utils/__tests__/address.test.js.map +0 -1
  415. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.d.ts +0 -2
  416. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.d.ts.map +0 -1
  417. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.js +0 -43
  418. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.js.map +0 -1
  419. package/dist/utils/__tests__/childProcessAdapter.test.d.ts +0 -2
  420. package/dist/utils/__tests__/childProcessAdapter.test.d.ts.map +0 -1
  421. package/dist/utils/__tests__/childProcessAdapter.test.js +0 -217
  422. package/dist/utils/__tests__/childProcessAdapter.test.js.map +0 -1
  423. package/dist/utils/__tests__/runCli.test.d.ts +0 -2
  424. package/dist/utils/__tests__/runCli.test.d.ts.map +0 -1
  425. package/dist/utils/__tests__/runCli.test.js +0 -187
  426. package/dist/utils/__tests__/runCli.test.js.map +0 -1
  427. package/dist/utils/address.d.ts.map +0 -1
  428. package/dist/utils/address.js.map +0 -1
  429. package/dist/utils/childProcessAdapter.d.ts.map +0 -1
  430. package/dist/utils/childProcessAdapter.js.map +0 -1
  431. package/dist/utils/parseCliOutput.d.ts.map +0 -1
  432. package/dist/utils/parseCliOutput.js.map +0 -1
  433. package/dist/utils/redact.d.ts.map +0 -1
  434. package/dist/utils/redact.js.map +0 -1
  435. package/dist/utils/runCli.d.ts.map +0 -1
  436. package/dist/utils/runCli.js.map +0 -1
  437. package/src/__tests__/deployContract.test.ts +0 -438
  438. package/src/__tests__/errors.test.ts +0 -84
  439. package/src/__tests__/exports.test.ts +0 -32
  440. package/src/__tests__/fixtures/sigint-deploy-harness.ts +0 -96
  441. package/src/__tests__/fork/api.test.ts +0 -148
  442. package/src/__tests__/fork/api.timeout.test.ts +0 -150
  443. package/src/__tests__/harness/Harness.createLive.test.ts +0 -57
  444. package/src/__tests__/harness/Harness.proxy.test.ts +0 -111
  445. package/src/__tests__/harness/_fixture.ts +0 -131
  446. package/src/__tests__/harness/codeObject.deploy.test.ts +0 -319
  447. package/src/__tests__/harness/codeObject.upgrade.test.ts +0 -156
  448. package/src/__tests__/harness/script.test.ts +0 -245
  449. package/src/__tests__/harness/view.test.ts +0 -104
  450. package/src/__tests__/runtime.test.ts +0 -182
  451. package/src/cli.ts +0 -164
  452. package/src/commands/__tests__/compile.test.ts +0 -407
  453. package/src/commands/__tests__/compile.toml-mutation.test.ts +0 -77
  454. package/src/commands/__tests__/init.test.ts +0 -210
  455. package/src/commands/__tests__/run.test.ts +0 -192
  456. package/src/commands/__tests__/test-move.test.ts +0 -81
  457. package/src/commands/__tests__/test.test.ts +0 -204
  458. package/src/commands/__tests__/update.test.ts +0 -223
  459. package/src/commands/compile.ts +0 -339
  460. package/src/commands/fork/__tests__/create.test.ts +0 -132
  461. package/src/commands/fork/__tests__/fund.test.ts +0 -104
  462. package/src/commands/fork/__tests__/list.test.ts +0 -139
  463. package/src/commands/fork/__tests__/serve.test.ts +0 -121
  464. package/src/commands/fork/__tests__/view-resource.test.ts +0 -101
  465. package/src/commands/fork/create.ts +0 -110
  466. package/src/commands/fork/fund.ts +0 -64
  467. package/src/commands/fork/list.ts +0 -98
  468. package/src/commands/fork/serve.ts +0 -80
  469. package/src/commands/fork/view-resource.ts +0 -51
  470. package/src/commands/init.ts +0 -264
  471. package/src/commands/run.ts +0 -125
  472. package/src/commands/test-move.ts +0 -27
  473. package/src/commands/test.ts +0 -255
  474. package/src/commands/update.ts +0 -201
  475. package/src/core/AccountManager.ts +0 -457
  476. package/src/core/Publisher.ts +0 -310
  477. package/src/core/__tests__/AccountManager.global-state.test.ts +0 -83
  478. package/src/core/__tests__/AccountManager.test.ts +0 -290
  479. package/src/core/__tests__/config.test.ts +0 -377
  480. package/src/core/__tests__/deployments.test.ts +0 -247
  481. package/src/core/__tests__/movementProfile.test.ts +0 -131
  482. package/src/core/__tests__/shell.test.ts +0 -138
  483. package/src/core/config.ts +0 -286
  484. package/src/core/contract.ts +0 -103
  485. package/src/core/deployments.ts +0 -155
  486. package/src/core/movementProfile.ts +0 -127
  487. package/src/core/shell.ts +0 -86
  488. package/src/errors.ts +0 -81
  489. package/src/fork/__tests__/manager.test.ts +0 -385
  490. package/src/fork/__tests__/server.cors.test.ts +0 -101
  491. package/src/fork/__tests__/server.test.ts +0 -65
  492. package/src/fork/__tests__/storage.test.ts +0 -281
  493. package/src/fork/__tests__/test.test.ts +0 -97
  494. package/src/fork/api.ts +0 -190
  495. package/src/fork/manager.ts +0 -343
  496. package/src/fork/server.ts +0 -380
  497. package/src/fork/storage.ts +0 -253
  498. package/src/fork/test.ts +0 -221
  499. package/src/harness/Harness.ts +0 -231
  500. package/src/harness/codeObject.ts +0 -381
  501. package/src/harness/errors.ts +0 -22
  502. package/src/harness/index.ts +0 -3
  503. package/src/harness/proxy.ts +0 -40
  504. package/src/harness/script.ts +0 -200
  505. package/src/harness/view.ts +0 -34
  506. package/src/helpers/__tests__/semver-utils.test.ts +0 -121
  507. package/src/helpers/__tests__/setupLocalTesting.fork-network.test.ts +0 -212
  508. package/src/helpers/assertions.ts +0 -29
  509. package/src/helpers/banner.ts +0 -63
  510. package/src/helpers/index.ts +0 -37
  511. package/src/helpers/move-tests.ts +0 -72
  512. package/src/helpers/npm-registry.ts +0 -72
  513. package/src/helpers/semver-utils.ts +0 -54
  514. package/src/helpers/setup.ts +0 -54
  515. package/src/helpers/setupLocalTesting.ts +0 -387
  516. package/src/helpers/testFixtures.ts +0 -210
  517. package/src/helpers/version-check.ts +0 -114
  518. package/src/index.ts +0 -30
  519. package/src/node/LocalNodeManager.ts +0 -383
  520. package/src/node/__tests__/LocalNodeManager.api-port.test.ts +0 -62
  521. package/src/node/__tests__/LocalNodeManager.test.ts +0 -579
  522. package/src/runtime.ts +0 -157
  523. package/src/templates/.env.example +0 -9
  524. package/src/templates/.mocharc.json +0 -8
  525. package/src/templates/.vscode/settings.json +0 -11
  526. package/src/templates/README.md +0 -146
  527. package/src/templates/gitignore +0 -22
  528. package/src/templates/move/Move.toml +0 -19
  529. package/src/templates/move/sources/Counter.move +0 -96
  530. package/src/templates/movehat.config.ts +0 -57
  531. package/src/templates/package.json +0 -27
  532. package/src/templates/scripts/deploy-counter.ts +0 -66
  533. package/src/templates/tests/Counter.test.ts +0 -113
  534. package/src/templates/tsconfig.json +0 -15
  535. package/src/templates/types/movehat.d.ts +0 -101
  536. package/src/types/config.ts +0 -83
  537. package/src/types/fork.ts +0 -47
  538. package/src/types/harness.ts +0 -182
  539. package/src/types/runtime.ts +0 -57
  540. package/src/ui/__tests__/colors.test.ts +0 -156
  541. package/src/ui/__tests__/logger.test.ts +0 -89
  542. package/src/ui/colors.ts +0 -144
  543. package/src/ui/formatters.ts +0 -246
  544. package/src/ui/index.ts +0 -62
  545. package/src/ui/logger.ts +0 -310
  546. package/src/ui/spinner.ts +0 -218
  547. package/src/ui/symbols.ts +0 -80
  548. package/src/ui/table.ts +0 -191
  549. package/src/utils/__tests__/address.test.ts +0 -93
  550. package/src/utils/__tests__/childProcessAdapter.maxBuffer.test.ts +0 -51
  551. package/src/utils/__tests__/childProcessAdapter.test.ts +0 -266
  552. package/src/utils/__tests__/runCli.test.ts +0 -240
  553. package/src/utils/address.ts +0 -52
  554. package/src/utils/childProcessAdapter.ts +0 -244
  555. package/src/utils/parseCliOutput.ts +0 -27
  556. package/src/utils/redact.ts +0 -24
  557. package/src/utils/runCli.ts +0 -64
@@ -1,131 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
- import {
3
- chmodSync,
4
- existsSync,
5
- mkdirSync,
6
- mkdtempSync,
7
- rmSync,
8
- writeFileSync,
9
- } from "node:fs";
10
- import { tmpdir } from "node:os";
11
- import { join } from "node:path";
12
- import {
13
- removeKeyFile,
14
- removeKeyFileSyncBestEffort,
15
- writeTempKeyFile,
16
- } from "../movementProfile.js";
17
-
18
- /**
19
- * Unit tests for the two distinct cleanup helpers in movementProfile:
20
- *
21
- * - `removeKeyFileSyncBestEffort`: for SIGINT/SIGTERM handlers where
22
- * the event loop is dead. Never throws, never logs, always returns
23
- * void. We only test that it doesn't throw.
24
- *
25
- * - `removeKeyFile`: for normal `finally` cleanup paths. Returns
26
- * `null` when the file is gone (removed OR already absent — both
27
- * are benign), and returns an `Error` only when the file STILL
28
- * exists on disk after the unlink attempt failed. The Error path
29
- * is exactly the case the caller must surface as a warning,
30
- * because a private-key temp file would otherwise persist
31
- * silently.
32
- */
33
-
34
- describe("movementProfile cleanup helpers", () => {
35
- let scratchDir: string;
36
-
37
- beforeEach(() => {
38
- scratchDir = mkdtempSync(join(tmpdir(), "movehat-profile-test-"));
39
- });
40
-
41
- afterEach(() => {
42
- if (existsSync(scratchDir)) {
43
- // Force chmod in case a test left it un-removable, then rmSync.
44
- try {
45
- chmodSync(scratchDir, 0o700);
46
- } catch {
47
- /* best-effort */
48
- }
49
- rmSync(scratchDir, { recursive: true, force: true });
50
- }
51
- });
52
-
53
- describe("writeTempKeyFile", () => {
54
- it("creates a 0o600 file in os.tmpdir() with the key as contents", () => {
55
- const path = writeTempKeyFile("ed25519-priv-0x" + "a".repeat(64));
56
- try {
57
- expect(path.startsWith(tmpdir())).toBe(true);
58
- expect(path).toMatch(/movehat-key-/);
59
- expect(existsSync(path)).toBe(true);
60
- } finally {
61
- if (existsSync(path)) rmSync(path);
62
- }
63
- });
64
- });
65
-
66
- describe("removeKeyFileSyncBestEffort", () => {
67
- it("removes an existing file", () => {
68
- const path = join(scratchDir, "key");
69
- writeFileSync(path, "x", { mode: 0o600 });
70
- removeKeyFileSyncBestEffort(path);
71
- expect(existsSync(path)).toBe(false);
72
- });
73
-
74
- it("does not throw when the file is already gone", () => {
75
- const path = join(scratchDir, "never-existed");
76
- expect(() => removeKeyFileSyncBestEffort(path)).not.toThrow();
77
- });
78
-
79
- it("does not throw when the path is a non-empty directory (would fail in stricter callers)", () => {
80
- const dirPath = join(scratchDir, "i-am-a-directory");
81
- mkdirSync(dirPath);
82
- writeFileSync(join(dirPath, "child"), "x");
83
- expect(() => removeKeyFileSyncBestEffort(dirPath)).not.toThrow();
84
- // The dir still exists — best-effort doesn't fight EISDIR.
85
- expect(existsSync(dirPath)).toBe(true);
86
- });
87
- });
88
-
89
- describe("removeKeyFile", () => {
90
- it("returns null when the file is removed cleanly", () => {
91
- const path = join(scratchDir, "key-to-remove");
92
- writeFileSync(path, "x", { mode: 0o600 });
93
- const err = removeKeyFile(path);
94
- expect(err).toBeNull();
95
- expect(existsSync(path)).toBe(false);
96
- });
97
-
98
- it("returns null when the file was already gone (ENOENT is benign)", () => {
99
- const path = join(scratchDir, "never-existed");
100
- const err = removeKeyFile(path);
101
- expect(err).toBeNull();
102
- });
103
-
104
- it("returns null when the file disappears between the unlink attempt and the existsSync check (race)", () => {
105
- // Hard to provoke a real race deterministically. The contract is
106
- // documented; the previous test covers the ENOENT short-circuit
107
- // which is the common race outcome.
108
- const path = join(scratchDir, "raced");
109
- const err = removeKeyFile(path);
110
- expect(err).toBeNull();
111
- });
112
-
113
- it("returns an Error when the path is a directory AND still exists post-attempt", () => {
114
- // unlinkSync on a directory throws EISDIR (or EPERM on some
115
- // platforms). existsSync afterwards still returns true, so this
116
- // is the "preocupante" path the caller must surface as a warning
117
- // — the file (here, a directory occupying the key-file path) is
118
- // still on disk.
119
- const dirPath = join(scratchDir, "key-but-actually-a-dir");
120
- mkdirSync(dirPath);
121
- writeFileSync(join(dirPath, "child"), "x"); // make sure it's not empty
122
- const err = removeKeyFile(dirPath);
123
- expect(err).not.toBeNull();
124
- expect(err).toBeInstanceOf(Error);
125
- // Error code is platform-dependent (EISDIR on linux, EPERM on
126
- // macos), so just assert we got something Error-shaped.
127
- expect((err as NodeJS.ErrnoException).code).toMatch(/^E/);
128
- expect(existsSync(dirPath)).toBe(true);
129
- });
130
- });
131
- });
@@ -1,138 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import {
3
- escapeShellArg,
4
- validateAndEscapePath,
5
- validateAndEscapeProfile,
6
- } from '../shell.js';
7
-
8
- describe('escapeShellArg', () => {
9
- it('should wrap simple strings in single quotes', () => {
10
- expect(escapeShellArg('hello')).toBe("'hello'");
11
- });
12
-
13
- it('should escape single quotes within strings', () => {
14
- expect(escapeShellArg("it's")).toBe("'it'\\''s'");
15
- });
16
-
17
- it('should handle multiple single quotes', () => {
18
- expect(escapeShellArg("it's a 'test'")).toBe("'it'\\''s a '\\''test'\\'''");
19
- });
20
-
21
- it('should handle empty strings', () => {
22
- expect(escapeShellArg('')).toBe("''");
23
- });
24
-
25
- it('should handle strings with spaces', () => {
26
- expect(escapeShellArg('hello world')).toBe("'hello world'");
27
- });
28
-
29
- it('should handle paths with spaces', () => {
30
- expect(escapeShellArg('/path/to/my project')).toBe("'/path/to/my project'");
31
- });
32
-
33
- it('should throw for non-string input', () => {
34
- expect(() => escapeShellArg(123 as any)).toThrow('Shell argument must be a string');
35
- expect(() => escapeShellArg(null as any)).toThrow('Shell argument must be a string');
36
- expect(() => escapeShellArg(undefined as any)).toThrow('Shell argument must be a string');
37
- });
38
-
39
- it('should handle special characters safely', () => {
40
- // These should be safely wrapped, not executed
41
- expect(escapeShellArg('$(whoami)')).toBe("'$(whoami)'");
42
- expect(escapeShellArg('`ls`')).toBe("'`ls`'");
43
- });
44
- });
45
-
46
- describe('validateAndEscapePath', () => {
47
- it('should accept valid paths', () => {
48
- expect(validateAndEscapePath('/home/user/project')).toBe("'/home/user/project'");
49
- expect(validateAndEscapePath('./my-project')).toBe("'./my-project'");
50
- expect(validateAndEscapePath('C:\\Users\\project')).toBe("'C:\\Users\\project'");
51
- });
52
-
53
- it('should accept paths with spaces', () => {
54
- expect(validateAndEscapePath('/home/user/my project')).toBe("'/home/user/my project'");
55
- });
56
-
57
- it('should accept paths with dots and underscores', () => {
58
- expect(validateAndEscapePath('./my_project.test')).toBe("'./my_project.test'");
59
- });
60
-
61
- it('should reject paths with semicolons (command chaining)', () => {
62
- expect(() => validateAndEscapePath('/path; rm -rf /')).toThrow('potentially dangerous characters');
63
- });
64
-
65
- it('should reject paths with pipes', () => {
66
- expect(() => validateAndEscapePath('/path | cat /etc/passwd')).toThrow('potentially dangerous characters');
67
- });
68
-
69
- it('should reject paths with backticks (command substitution)', () => {
70
- expect(() => validateAndEscapePath('/path/`whoami`')).toThrow('potentially dangerous characters');
71
- });
72
-
73
- it('should reject paths with $() (command substitution)', () => {
74
- expect(() => validateAndEscapePath('/path/$(whoami)')).toThrow('potentially dangerous characters');
75
- });
76
-
77
- it('should reject paths with ampersand', () => {
78
- expect(() => validateAndEscapePath('/path & echo hacked')).toThrow('potentially dangerous characters');
79
- });
80
-
81
- it('should reject paths with curly braces', () => {
82
- expect(() => validateAndEscapePath('/path/{a,b}')).toThrow('potentially dangerous characters');
83
- });
84
-
85
- it('should reject paths with redirects', () => {
86
- expect(() => validateAndEscapePath('/path > /etc/passwd')).toThrow('potentially dangerous characters');
87
- expect(() => validateAndEscapePath('/path < /etc/passwd')).toThrow('potentially dangerous characters');
88
- });
89
-
90
- it('should throw for empty paths', () => {
91
- expect(() => validateAndEscapePath('')).toThrow('must be a non-empty string');
92
- });
93
-
94
- it('should throw for non-string input', () => {
95
- expect(() => validateAndEscapePath(null as any)).toThrow('must be a non-empty string');
96
- expect(() => validateAndEscapePath(undefined as any)).toThrow('must be a non-empty string');
97
- });
98
-
99
- it('should use custom name in error messages', () => {
100
- expect(() => validateAndEscapePath('', 'Move directory')).toThrow('Invalid Move directory');
101
- });
102
- });
103
-
104
- describe('validateAndEscapeProfile', () => {
105
- it('should accept valid profile names', () => {
106
- expect(validateAndEscapeProfile('default')).toBe("'default'");
107
- expect(validateAndEscapeProfile('my-profile')).toBe("'my-profile'");
108
- expect(validateAndEscapeProfile('profile_123')).toBe("'profile_123'");
109
- });
110
-
111
- it('should accept alphanumeric names', () => {
112
- expect(validateAndEscapeProfile('Profile1')).toBe("'Profile1'");
113
- expect(validateAndEscapeProfile('test123')).toBe("'test123'");
114
- });
115
-
116
- it('should reject profiles with spaces', () => {
117
- expect(() => validateAndEscapeProfile('my profile')).toThrow('Only alphanumeric');
118
- });
119
-
120
- it('should reject profiles with special characters', () => {
121
- expect(() => validateAndEscapeProfile('profile;rm')).toThrow('Only alphanumeric');
122
- expect(() => validateAndEscapeProfile('profile$test')).toThrow('Only alphanumeric');
123
- expect(() => validateAndEscapeProfile('profile/test')).toThrow('Only alphanumeric');
124
- });
125
-
126
- it('should reject profiles with dots', () => {
127
- expect(() => validateAndEscapeProfile('profile.test')).toThrow('Only alphanumeric');
128
- });
129
-
130
- it('should throw for empty profiles', () => {
131
- expect(() => validateAndEscapeProfile('')).toThrow('must be a non-empty string');
132
- });
133
-
134
- it('should throw for non-string input', () => {
135
- expect(() => validateAndEscapeProfile(null as any)).toThrow('must be a non-empty string');
136
- expect(() => validateAndEscapeProfile(undefined as any)).toThrow('must be a non-empty string');
137
- });
138
- });
@@ -1,286 +0,0 @@
1
- import { pathToFileURL } from "url";
2
- import { join } from "path";
3
- import { existsSync, statSync } from "fs";
4
- import { Account, Ed25519PrivateKey, PrivateKey, PrivateKeyVariants } from "@aptos-labs/ts-sdk";
5
- import { MovehatConfig, MovehatUserConfig } from "../types/config.js";
6
- import { logger } from "../ui/index.js";
7
-
8
- interface ConfigCacheEntry {
9
- mtimeMs: number;
10
- config: MovehatUserConfig;
11
- }
12
-
13
- // Keyed by resolved absolute path. One entry per config file the process
14
- // has loaded. Closes #62 — the previous `?t=Date.now()` cache-bust
15
- // created a fresh Node loader module per call.
16
- //
17
- // Note on concurrency: two `loadUserConfig()` calls racing on a cold
18
- // cache may both invoke `import()`. Node's loader cache deduplicates by
19
- // URL so both resolve to the same module, and both writers store the
20
- // same value here. No corruption, no in-flight-promise memoization
21
- // needed.
22
- const configCache = new Map<string, ConfigCacheEntry>();
23
-
24
- /**
25
- * Loads the user's movehat.config.{ts,js} from the current working directory.
26
- *
27
- * Cached by `{ absPath, mtimeMs }`: a second call with no edit returns
28
- * the parsed object directly and skips both the tsx loader register
29
- * dance and the dynamic `import()`. Edits invalidate via the file's
30
- * mtime.
31
- *
32
- * @throws {Error} If the configuration file is not found or fails to load
33
- * @security This function loads and executes code from the current working directory.
34
- * It should only be called from trusted project directories.
35
- */
36
- export async function loadUserConfig(): Promise<MovehatUserConfig> {
37
- const cwd = process.cwd();
38
-
39
- const possiblePaths = [
40
- join(cwd, "movehat.config.ts"),
41
- join(cwd, "movehat.config.js"),
42
- ];
43
-
44
- let configPath: string | null = null;
45
- for (const path of possiblePaths) {
46
- if (existsSync(path)) {
47
- configPath = path;
48
- break;
49
- }
50
- }
51
-
52
- if (!configPath) {
53
- throw new Error(
54
- "Configuration file not found. Expected 'movehat.config.ts' or 'movehat.config.js' in the current directory."
55
- );
56
- }
57
-
58
- try {
59
- const { mtimeMs } = statSync(configPath);
60
-
61
- const cached = configCache.get(configPath);
62
- if (cached && cached.mtimeMs === mtimeMs) {
63
- return cached.config;
64
- }
65
-
66
- let configModule;
67
-
68
- if (configPath.endsWith('.ts')) {
69
- const { register } = await import('tsx/esm/api');
70
- const unregister = register();
71
-
72
- try {
73
- const configUrl = pathToFileURL(configPath).href;
74
- configModule = await import(configUrl + '?mtime=' + mtimeMs);
75
- } finally {
76
- unregister();
77
- }
78
- } else {
79
- const configUrl = pathToFileURL(configPath).href;
80
- configModule = await import(configUrl + '?mtime=' + mtimeMs);
81
- }
82
-
83
- const userConfig = configModule.default as MovehatUserConfig;
84
-
85
- if (!userConfig.networks || Object.keys(userConfig.networks).length === 0) {
86
- throw new Error(
87
- "No networks defined in configuration. Add at least one network in the 'networks' field."
88
- );
89
- }
90
-
91
- configCache.set(configPath, { mtimeMs, config: userConfig });
92
-
93
- return userConfig;
94
- } catch (error) {
95
- throw new Error(`Failed to load configuration file '${configPath}': ${error}`);
96
- }
97
- }
98
-
99
- /**
100
- * Clear the in-memory config cache. Test-only escape hatch.
101
- *
102
- * @internal Not part of the public API surface. Imported via relative
103
- * path from `core/__tests__/config.test.ts` only.
104
- */
105
- export function _resetConfigCache(): void {
106
- configCache.clear();
107
- }
108
-
109
- /**
110
- * Resolve configuration for a specific network
111
- * Merges global settings with network-specific settings
112
- */
113
- export async function resolveNetworkConfig(
114
- userConfig: MovehatUserConfig,
115
- networkName?: string
116
- ): Promise<MovehatConfig> {
117
- // Determine which network to use
118
- // Default to "testnet" for testing with simulation
119
- const selectedNetwork =
120
- networkName ||
121
- process.env.MH_CLI_NETWORK ||
122
- process.env.MH_DEFAULT_NETWORK ||
123
- userConfig.defaultNetwork ||
124
- "testnet";
125
-
126
- // Check if network exists in config
127
- let networkConfig = userConfig.networks[selectedNetwork];
128
-
129
- // Special case: Auto-generate config for testnet (public test network)
130
- // This provides a better dev experience - no local setup required
131
- if (!networkConfig && selectedNetwork === "testnet") {
132
- networkConfig = {
133
- url: "https://testnet.movementnetwork.xyz/v1",
134
- chainId: "testnet",
135
- };
136
- logger.info("testnet not found in config - using default Movement testnet configuration");
137
- }
138
-
139
- // Special case: Auto-generate config for local fork server
140
- if (!networkConfig && selectedNetwork === "local") {
141
- networkConfig = {
142
- url: "http://localhost:8080/v1",
143
- chainId: "local",
144
- };
145
- logger.info("Local network not found in config - using default fork server configuration");
146
- }
147
-
148
- if (!networkConfig) {
149
- const availableNetworks = Object.keys(userConfig.networks).join(", ");
150
- throw new Error(
151
- `Network '${selectedNetwork}' not found in configuration.\nAvailable networks: ${availableNetworks}, testnet (auto-generated), local (auto-generated)`
152
- );
153
- }
154
-
155
- // Get accounts using Hardhat-style resolution:
156
- // 1. Network-specific accounts (if defined)
157
- // 2. Global accounts from config (if defined)
158
- // 3. PRIVATE_KEY environment variable (Hardhat-style, no MH_ prefix)
159
- // 4. Error if nothing found
160
-
161
- let accounts: string[] = [];
162
-
163
- // 1. Check network-specific accounts
164
- if (networkConfig.accounts && networkConfig.accounts.length > 0) {
165
- accounts = [...networkConfig.accounts].filter(Boolean);
166
- }
167
-
168
- // 2. If no network-specific accounts, use global accounts
169
- if (accounts.length === 0 && userConfig.accounts && userConfig.accounts.length > 0) {
170
- accounts = [...userConfig.accounts].filter(Boolean);
171
- }
172
-
173
- // 3. If still no accounts, check PRIVATE_KEY env var (Hardhat-style)
174
- if (accounts.length === 0 && process.env.PRIVATE_KEY) {
175
- accounts = [process.env.PRIVATE_KEY];
176
- }
177
-
178
- // 4. Validate we have at least one account (unless using testnet/local)
179
- if (accounts.length === 0 || !accounts[0]) {
180
- // Special case: Auto-generate test accounts for testing networks
181
- // testnet = public Movement test network (recommended)
182
- // local = local fork server
183
- if (selectedNetwork === "testnet" || selectedNetwork === "local") {
184
- // Security: Using a deterministic test account (like Hardhat's default accounts)
185
- // This is SAFE because:
186
- // 1. Only used for testnet/local (never mainnet - that throws error below)
187
- // 2. Perfect for transaction simulation (no real funds)
188
- // 3. Deterministic = consistent test results
189
- const testPrivateKey = "0x0000000000000000000000000000000000000000000000000000000000000001";
190
- accounts = [testPrivateKey];
191
- logger.newline();
192
- logger.warning("[TESTNET] Using auto-generated test account (safe for testing only)");
193
- logger.warning("[TESTNET] For mainnet, set PRIVATE_KEY in .env");
194
- logger.newline();
195
- } else {
196
- // For any other network (especially mainnet), REQUIRE explicit configuration
197
- // This prevents accidentally using the test key on production networks
198
- throw new Error(
199
- `Network '${selectedNetwork}' has no accounts configured.\n` +
200
- `\n` +
201
- `SECURITY: This network requires explicit account configuration.\n` +
202
- `\n` +
203
- `Options:\n` +
204
- ` 1. Set PRIVATE_KEY in your .env file (recommended for ${selectedNetwork})\n` +
205
- ` 2. Add 'accounts: ["0x..."]' globally in movehat.config.ts\n` +
206
- ` 3. Add 'accounts: ["0x..."]' to the '${selectedNetwork}' network config\n` +
207
- `\n` +
208
- `For testing without configuration, use:\n` +
209
- ` movehat <command> --network testnet (auto-generates safe test accounts)`
210
- );
211
- }
212
- }
213
-
214
- // Merge named addresses (network-specific overrides global)
215
- const mergedNamedAddresses = {
216
- ...(userConfig.namedAddresses || {}),
217
- ...(networkConfig.namedAddresses || {}),
218
- };
219
-
220
- // Capture the primary key after the L178 guard guaranteed it exists
221
- // (either present from the start, or auto-assigned by the testnet/local
222
- // branch; the else-branch throws). Pulling into a local lets TS see
223
- // the non-undefined narrowing.
224
- const primaryKey = accounts[0];
225
- if (!primaryKey) {
226
- throw new Error("invariant: accounts[0] must exist after the L178 guard");
227
- }
228
-
229
- // Derive the deployer account address from the resolved private key.
230
- // Without this, consumers reading `config.account` got an empty string
231
- // (the previous "Will be derived from privateKey in runtime" TODO was
232
- // never wired). Falls back to "" on malformed keys so we don't break
233
- // existing callers that don't need the field.
234
- const accountAddress = deriveAccountAddress(primaryKey);
235
-
236
- // Build resolved config
237
- const resolvedConfig: MovehatConfig = {
238
- network: selectedNetwork,
239
- rpc: networkConfig.url,
240
- privateKey: primaryKey,
241
- allAccounts: accounts,
242
- profile: networkConfig.profile || "default",
243
- moveDir: userConfig.moveDir || "./move",
244
- account: accountAddress,
245
- namedAddresses: mergedNamedAddresses,
246
- networkConfig: networkConfig,
247
- };
248
-
249
- return resolvedConfig;
250
- }
251
-
252
- /**
253
- * Derive the on-chain account address from a private key. Strips the
254
- * `ed25519-priv-` prefix that Movement CLI sometimes emits; returns ""
255
- * on any parse failure so existing callers that don't consume the field
256
- * keep working unchanged. Emits a console.warn on failure so a
257
- * misconfigured `PRIVATE_KEY` surfaces here (loud, at config-resolution
258
- * time) instead of as a cryptic "Hex string is too short" SDK error
259
- * later in the call chain.
260
- */
261
- function deriveAccountAddress(privateKeyHex: string | undefined): string {
262
- if (!privateKeyHex) return "";
263
- try {
264
- // Format into AIP-80 shape so the SDK doesn't emit a deprecation
265
- // warning on each derivation. `formatPrivateKey` is idempotent for
266
- // already-prefixed inputs.
267
- const formatted = PrivateKey.formatPrivateKey(
268
- privateKeyHex,
269
- PrivateKeyVariants.Ed25519,
270
- );
271
- const account = Account.fromPrivateKey({
272
- privateKey: new Ed25519PrivateKey(formatted),
273
- });
274
- return account.accountAddress.toString();
275
- } catch (err) {
276
- // The private key may have come from several sources (network.accounts,
277
- // global accounts, PRIVATE_KEY env, auto-generated testnet key). Keep
278
- // the hint generic so it never points at the wrong source.
279
- logger.warning(
280
- `Could not derive account address from the resolved private key: ${
281
- (err as Error).message
282
- }. Verify the key configured for this network is a valid Ed25519 private key (with or without the "ed25519-priv-" prefix).`
283
- );
284
- return "";
285
- }
286
- }
@@ -1,103 +0,0 @@
1
- import {
2
- Account,
3
- Aptos,
4
- type InputViewFunctionData,
5
- type MoveFunctionId,
6
- } from "@aptos-labs/ts-sdk";
7
- import { logger } from "../ui/index.js";
8
-
9
- export interface TransactionResult {
10
- hash: string;
11
- success: boolean;
12
- vm_status: string;
13
- }
14
-
15
- export class MoveContract {
16
- constructor(
17
- private aptos: Aptos,
18
- private moduleAddress: string,
19
- private moduleName: string
20
- ) {}
21
-
22
- async call(
23
- signer: Account,
24
- functionName: string,
25
- // any[]: Move entry-function arguments are heterogeneous primitives
26
- // (u8/u64/string/bool/address/vector) passed through to the Aptos
27
- // SDK's `functionArguments`, which validates at submit time. A
28
- // narrower union here would force casts at every call site for
29
- // little safety gain.
30
- args: any[] = [],
31
- typeArgs: string[] = []
32
- ): Promise<TransactionResult> {
33
- const functionFullName = `${this.moduleAddress}::${this.moduleName}::${functionName}`;
34
-
35
- logger.step(`Calling ${functionFullName}...`);
36
-
37
- const transaction = await this.aptos.transaction.build.simple({
38
- sender: signer.accountAddress,
39
- data: {
40
- function: functionFullName as MoveFunctionId,
41
- typeArguments: typeArgs,
42
- functionArguments: args,
43
- },
44
- });
45
-
46
- const signature = this.aptos.transaction.sign({
47
- signer,
48
- transaction,
49
- });
50
-
51
- const committedTxn = await this.aptos.transaction.submit.simple({
52
- transaction,
53
- senderAuthenticator: signature,
54
- });
55
-
56
- const response = await this.aptos.waitForTransaction({
57
- transactionHash: committedTxn.hash,
58
- });
59
-
60
- logger.success(
61
- `Transaction ${committedTxn.hash} committed with status: ${response.vm_status}`
62
- );
63
- logger.newline();
64
-
65
- return {
66
- hash: committedTxn.hash,
67
- success: response.success,
68
- vm_status: response.vm_status,
69
- };
70
- }
71
-
72
- async view<T = unknown>(
73
- functionName: string,
74
- // any[]: see `call()` above — Move view-function arguments share
75
- // the same SDK-validated boundary semantics.
76
- args: any[] = [],
77
- typeArgs: string[] = []
78
- ): Promise<T> {
79
- const functionFullName = `${this.moduleAddress}::${this.moduleName}::${functionName}`;
80
-
81
- const payload: InputViewFunctionData = {
82
- function: functionFullName as MoveFunctionId,
83
- typeArguments: typeArgs,
84
- functionArguments: args,
85
- };
86
-
87
- const result = await this.aptos.view({ payload });
88
-
89
- return (result.length === 1 ? result[0] : result) as T;
90
- }
91
-
92
- getModuleId(): string {
93
- return `${this.moduleAddress}::${this.moduleName}`;
94
- }
95
- }
96
-
97
- export function getContract(
98
- aptos: Aptos,
99
- moduleAddress: string,
100
- moduleName: string
101
- ): MoveContract {
102
- return new MoveContract(aptos, moduleAddress, moduleName);
103
- }