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,380 +0,0 @@
1
- import http from 'http';
2
- import { URL } from 'url';
3
- import { ForkManager } from './manager.js';
4
- import { logger } from '../ui/index.js';
5
-
6
- export interface ForkServerOptions {
7
- /**
8
- * Origins allowed to make cross-origin requests. When unset (default),
9
- * no `Access-Control-Allow-Origin` header is emitted — any browser
10
- * cross-origin read is rejected by the user agent. Setting this to a
11
- * non-empty list opts into echoing matching `Origin` request headers
12
- * back. Wildcard `'*'` is intentionally NOT supported: cached fork
13
- * state may include resources that should not be readable by every
14
- * page in the dev's browser.
15
- */
16
- corsAllowOrigins?: readonly string[];
17
- }
18
-
19
- /**
20
- * Fork Server - Serves fork data via Movement L1 RPC API
21
- * Emulates a Movement L1 node using local fork storage
22
- */
23
- export class ForkServer {
24
- private server: http.Server | null = null;
25
- private forkManager: ForkManager;
26
- private port: number;
27
- private host: string;
28
- private readonly corsAllowOrigins: ReadonlySet<string>;
29
-
30
- /**
31
- * @param host Interface to bind. Defaults to `127.0.0.1` so cached fork
32
- * state (which may include sensitive resources) is not exposed on the LAN.
33
- * Pass `'0.0.0.0'` only if you intentionally need to expose the server.
34
- * @param options Optional CORS allowlist (see {@link ForkServerOptions}).
35
- */
36
- constructor(
37
- forkPath: string,
38
- port: number = 8080,
39
- host: string = '127.0.0.1',
40
- options: ForkServerOptions = {}
41
- ) {
42
- this.forkManager = new ForkManager(forkPath);
43
- this.port = port;
44
- this.host = host;
45
- this.corsAllowOrigins = new Set(options.corsAllowOrigins ?? []);
46
- }
47
-
48
- /**
49
- * Set CORS headers for a request when the request's `Origin` is in
50
- * the allowlist. No-op otherwise.
51
- */
52
- private applyCors(req: http.IncomingMessage, res: http.ServerResponse): void {
53
- const origin = req.headers.origin;
54
- if (typeof origin === 'string' && this.corsAllowOrigins.has(origin)) {
55
- res.setHeader('Access-Control-Allow-Origin', origin);
56
- res.setHeader('Vary', 'Origin');
57
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
58
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
59
- }
60
- }
61
-
62
- /**
63
- * Start the fork server
64
- */
65
- async start(): Promise<void> {
66
- // Load fork metadata
67
- this.forkManager.load();
68
- const metadata = this.forkManager.getMetadata();
69
-
70
- logger.newline();
71
- logger.phase("Fork Server");
72
- logger.kv("Network", metadata.network, 2);
73
- logger.kv("Chain ID", String(metadata.chainId), 2);
74
- logger.kv("Ledger Version", String(metadata.ledgerVersion), 2);
75
- logger.kv("Forked at", metadata.createdAt, 2);
76
-
77
- this.server = http.createServer((req, res) => {
78
- this.handleRequest(req, res).catch((error) => {
79
- // Log full error server-side for diagnostics
80
- logger.error(`Error handling request: ${error instanceof Error ? error.message : String(error)}`);
81
-
82
- // Only send response if headers haven't been sent yet
83
- if (!res.headersSent) {
84
- this.applyCors(req, res);
85
-
86
- // Send generic error response (no internal details exposed)
87
- this.sendJSON(res, 500, {
88
- message: 'Internal server error',
89
- error_code: 'internal_error',
90
- vm_error_code: null
91
- });
92
- }
93
- });
94
- });
95
-
96
- // Capture the just-assigned server into a non-null local so we don't
97
- // have to repeatedly assert `this.server!` (which TS forces because
98
- // `http.createServer` returns an unrelated narrow that the field
99
- // declaration doesn't track).
100
- const server = this.server;
101
-
102
- return new Promise((resolve, reject) => {
103
- // Handle server errors (port in use, permission denied, etc.)
104
- const onError = (error: NodeJS.ErrnoException) => {
105
- if (error.code === 'EADDRINUSE') {
106
- reject(new Error(`Port ${this.port} is already in use. Please use a different port with --port <number>`));
107
- } else if (error.code === 'EACCES') {
108
- reject(new Error(`Permission denied to bind to port ${this.port}. Try using a port above 1024 or run with appropriate permissions.`));
109
- } else {
110
- reject(new Error(`Failed to start server: ${error.message}`));
111
- }
112
- };
113
-
114
- // Listen for errors during startup
115
- server.once('error', onError);
116
-
117
- server.listen(this.port, this.host, () => {
118
- // Remove error listener after successful start
119
- server.removeListener('error', onError);
120
-
121
- // IPv6 literals must be wrapped in brackets in URLs (RFC 3986).
122
- const isIpv6 = this.host.includes(':');
123
- const displayHost =
124
- this.host === '0.0.0.0'
125
- ? 'localhost'
126
- : isIpv6
127
- ? `[${this.host}]`
128
- : this.host;
129
- logger.newline();
130
- logger.success(`Fork Server listening on http://${displayHost}:${this.port}`);
131
- logger.kv("Bound interface", this.host, 2);
132
- logger.kv("Ledger Info", `http://${displayHost}:${this.port}/v1/`, 2);
133
- if (this.host === '0.0.0.0') {
134
- logger.warning("Server is bound to 0.0.0.0 — fork state is reachable from the LAN.", 2);
135
- }
136
- logger.newline();
137
- logger.info("Press Ctrl+C to stop");
138
- resolve();
139
- });
140
- });
141
- }
142
-
143
- /**
144
- * Stop the fork server
145
- */
146
- stop(): Promise<void> {
147
- return new Promise((resolve) => {
148
- if (this.server) {
149
- this.server.close(() => {
150
- logger.newline();
151
- logger.success("Fork Server stopped");
152
- resolve();
153
- });
154
- } else {
155
- resolve();
156
- }
157
- });
158
- }
159
-
160
- /**
161
- * Sanitize pathname for error messages to prevent log injection
162
- */
163
- private sanitizePathname(pathname: string): string {
164
- // Remove control characters and newlines
165
- const sanitized = pathname.replace(/[\x00-\x1F\x7F]/g, '');
166
- // Truncate to reasonable length
167
- return sanitized.length > 100 ? sanitized.substring(0, 100) + '...' : sanitized;
168
- }
169
-
170
- /**
171
- * Handle incoming HTTP requests
172
- */
173
- private async handleRequest(
174
- req: http.IncomingMessage,
175
- res: http.ServerResponse
176
- ): Promise<void> {
177
- const url = new URL(req.url || '/', `http://localhost:${this.port}`);
178
- const pathname = url.pathname;
179
-
180
- // Log request — plain so the fork-server access log retains its
181
- // grep-friendly line shape (timestamp + method + path, no symbol).
182
- logger.plain(`[${new Date().toISOString()}] ${req.method} ${pathname}`);
183
-
184
- this.applyCors(req, res);
185
-
186
- // Handle OPTIONS for CORS preflight
187
- if (req.method === 'OPTIONS') {
188
- res.writeHead(200);
189
- res.end();
190
- return;
191
- }
192
-
193
- try {
194
- // Route requests
195
- if (pathname === '/v1' || pathname === '/v1/') {
196
- await this.handleLedgerInfo(res);
197
- } else if (pathname.match(/^\/v1\/accounts\/0x[a-fA-F0-9]{1,64}$/)) {
198
- const address = pathname.split('/').pop()!;
199
- await this.handleGetAccount(address, res);
200
- } else if (pathname.match(/^\/v1\/accounts\/0x[a-fA-F0-9]{1,64}\/resource\/.+$/)) {
201
- const parts = pathname.split('/');
202
- const accountIndex = parts.indexOf('accounts') + 1;
203
- const resourceIndex = parts.indexOf('resource') + 1;
204
- const address = parts[accountIndex];
205
- const resourceType = decodeURIComponent(parts.slice(resourceIndex).join('/'));
206
- if (!address) {
207
- this.send404(res, 'Malformed resource path', 'malformed_path');
208
- return;
209
- }
210
- await this.handleGetResource(address, resourceType, res);
211
- } else {
212
- // Use regex capture for resources endpoint
213
- const resourcesMatch = pathname.match(/^\/v1\/accounts\/(0x[a-fA-F0-9]{1,64})\/resources$/);
214
- if (resourcesMatch && resourcesMatch[1]) {
215
- const address = resourcesMatch[1];
216
- await this.handleGetResources(address, res);
217
- } else {
218
- // Sanitize pathname to prevent log injection
219
- const safePath = this.sanitizePathname(pathname);
220
- this.send404(res, `Endpoint not found: ${safePath}`, 'endpoint_not_found');
221
- }
222
- }
223
- } catch (error) {
224
- // Log full error server-side for diagnostics
225
- logger.error(`Error handling request: ${error instanceof Error ? error.message : String(error)}`);
226
-
227
- // Send generic error to client (don't expose internal details)
228
- this.sendError(res, 500, 'Internal server error');
229
- }
230
- }
231
-
232
- /**
233
- * Handle GET /v1/ - Ledger info
234
- */
235
- private async handleLedgerInfo(res: http.ServerResponse): Promise<void> {
236
- const metadata = this.forkManager.getMetadata();
237
-
238
- const ledgerInfo = {
239
- chain_id: metadata.chainId,
240
- epoch: metadata.epoch,
241
- ledger_version: metadata.ledgerVersion,
242
- oldest_ledger_version: "0",
243
- ledger_timestamp: metadata.timestamp,
244
- node_role: "full_node",
245
- oldest_block_height: "0",
246
- block_height: metadata.blockHeight,
247
- git_hash: "movehat-fork"
248
- };
249
-
250
- this.sendJSON(res, 200, ledgerInfo, {
251
- 'x-aptos-chain-id': String(metadata.chainId),
252
- 'x-aptos-ledger-version': metadata.ledgerVersion,
253
- 'x-aptos-ledger-oldest-version': '0',
254
- 'x-aptos-ledger-timestampusec': metadata.timestamp,
255
- 'x-aptos-epoch': metadata.epoch,
256
- 'x-aptos-block-height': metadata.blockHeight,
257
- 'x-aptos-oldest-block-height': '0'
258
- });
259
- }
260
-
261
- /**
262
- * Handle GET /v1/accounts/:address
263
- */
264
- private async handleGetAccount(
265
- address: string,
266
- res: http.ServerResponse
267
- ): Promise<void> {
268
- try {
269
- const account = await this.forkManager.getAccount(address);
270
-
271
- this.sendJSON(res, 200, {
272
- sequence_number: account.sequenceNumber,
273
- authentication_key: account.authenticationKey
274
- });
275
- } catch (error) {
276
- const msg = error instanceof Error ? error.message : String(error);
277
- if (msg.includes('not found')) {
278
- this.send404(res, `Account not found: ${address}`);
279
- } else {
280
- throw error;
281
- }
282
- }
283
- }
284
-
285
- /**
286
- * Handle GET /v1/accounts/:address/resource/:resourceType
287
- */
288
- private async handleGetResource(
289
- address: string,
290
- resourceType: string,
291
- res: http.ServerResponse
292
- ): Promise<void> {
293
- try {
294
- const resource = await this.forkManager.getResource(address, resourceType);
295
-
296
- this.sendJSON(res, 200, {
297
- type: resourceType,
298
- data: resource
299
- });
300
- } catch (error) {
301
- const msg = error instanceof Error ? error.message : String(error);
302
- if (msg.includes('not found')) {
303
- this.send404(res, `Resource not found: ${resourceType}`, 'resource_not_found');
304
- } else {
305
- throw error;
306
- }
307
- }
308
- }
309
-
310
- /**
311
- * Handle GET /v1/accounts/:address/resources
312
- */
313
- private async handleGetResources(
314
- address: string,
315
- res: http.ServerResponse
316
- ): Promise<void> {
317
- try {
318
- const resources = await this.forkManager.getAllResources(address);
319
-
320
- // Convert to array format expected by the Movement L1 API
321
- const resourcesArray = Object.entries(resources).map(([type, data]) => ({
322
- type,
323
- data
324
- }));
325
-
326
- this.sendJSON(res, 200, resourcesArray);
327
- } catch (error) {
328
- const msg = error instanceof Error ? error.message : String(error);
329
- if (msg.includes('not found')) {
330
- this.send404(res, `Account not found: ${address}`);
331
- } else {
332
- throw error;
333
- }
334
- }
335
- }
336
-
337
- /**
338
- * Send JSON response.
339
- * unknown: arbitrary JSON-serializable payload; structural shape varies by
340
- * endpoint (account metadata, resource arrays, error envelopes).
341
- */
342
- private sendJSON(
343
- res: http.ServerResponse,
344
- status: number,
345
- data: unknown,
346
- extraHeaders: Record<string, string> = {}
347
- ): void {
348
- const body = JSON.stringify(data, null, 2);
349
-
350
- res.writeHead(status, {
351
- 'Content-Type': 'application/json',
352
- 'Content-Length': Buffer.byteLength(body),
353
- ...extraHeaders
354
- });
355
-
356
- res.end(body);
357
- }
358
-
359
- /**
360
- * Send 404 error
361
- */
362
- private send404(res: http.ServerResponse, message: string, errorCode: string = 'account_not_found'): void {
363
- this.sendJSON(res, 404, {
364
- message,
365
- error_code: errorCode,
366
- vm_error_code: null
367
- });
368
- }
369
-
370
- /**
371
- * Send error response
372
- */
373
- private sendError(res: http.ServerResponse, status: number, message: string): void {
374
- this.sendJSON(res, status, {
375
- message,
376
- error_code: 'internal_error',
377
- vm_error_code: null
378
- });
379
- }
380
- }
@@ -1,253 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync } from 'fs';
2
- import { join } from 'path';
3
- import type { ForkMetadata, AccountState } from '../types/fork.js';
4
- import { isHexAddress } from '../utils/address.js';
5
-
6
- /**
7
- * Sanitize address to create a safe filename. Validates the address through
8
- * the shared `isHexAddress` helper (length 1–64 hex chars, optional `0x`),
9
- * then rebuilds a canonical `0x…` form. The trailing path-separator check is
10
- * defense-in-depth: unreachable after `isHexAddress`, but cheap to keep.
11
- */
12
- function sanitizeAddressForFilename(address: string): string {
13
- if (!isHexAddress(address)) {
14
- throw new Error(`Invalid address format: ${address}. Expected hexadecimal string.`);
15
- }
16
-
17
- const normalized = address.toLowerCase().replace(/^0x/, '');
18
- const safe = `0x${normalized}`;
19
-
20
- if (safe.includes('/') || safe.includes('\\') || safe.includes('..')) {
21
- throw new Error(`Address contains invalid characters: ${address}`);
22
- }
23
-
24
- return safe;
25
- }
26
-
27
- /**
28
- * Storage system for fork state
29
- * Manages the file structure and I/O for fork data
30
- */
31
- export class ForkStorage {
32
- private forkPath: string;
33
-
34
- constructor(forkPath: string) {
35
- this.forkPath = forkPath;
36
- }
37
-
38
- /**
39
- * Get safe resource file path for an address
40
- * Prevents path traversal attacks
41
- */
42
- private getResourceFilePath(address: string): string {
43
- const safeFilename = sanitizeAddressForFilename(address);
44
- return join(this.forkPath, 'resources', `${safeFilename}.json`);
45
- }
46
-
47
- /**
48
- * Initialize fork directory structure
49
- */
50
- initialize(): void {
51
- // Create main fork directory
52
- if (!existsSync(this.forkPath)) {
53
- mkdirSync(this.forkPath, { recursive: true });
54
- }
55
-
56
- // Create subdirectories
57
- const resourcesDir = join(this.forkPath, 'resources');
58
- if (!existsSync(resourcesDir)) {
59
- mkdirSync(resourcesDir, { recursive: true });
60
- }
61
-
62
- const cacheDir = join(this.forkPath, 'cache');
63
- if (!existsSync(cacheDir)) {
64
- mkdirSync(cacheDir, { recursive: true });
65
- }
66
-
67
- // Create .gitignore for cache
68
- const gitignorePath = join(cacheDir, '.gitignore');
69
- if (!existsSync(gitignorePath)) {
70
- writeFileSync(gitignorePath, '*\n!.gitignore\n');
71
- }
72
-
73
- // Initialize accounts.json if it doesn't exist
74
- const accountsPath = join(this.forkPath, 'accounts.json');
75
- if (!existsSync(accountsPath)) {
76
- writeFileSync(accountsPath, JSON.stringify({}, null, 2));
77
- }
78
- }
79
-
80
- /**
81
- * Check if fork exists
82
- */
83
- exists(): boolean {
84
- return existsSync(this.forkPath) && existsSync(join(this.forkPath, 'metadata.json'));
85
- }
86
-
87
- /**
88
- * Save fork metadata
89
- */
90
- saveMetadata(metadata: ForkMetadata): void {
91
- const metadataPath = join(this.forkPath, 'metadata.json');
92
- writeFileSync(metadataPath, JSON.stringify(metadata, null, 2));
93
- }
94
-
95
- /**
96
- * Load fork metadata
97
- */
98
- loadMetadata(): ForkMetadata {
99
- const metadataPath = join(this.forkPath, 'metadata.json');
100
-
101
- if (!existsSync(metadataPath)) {
102
- throw new Error(`Fork metadata not found at ${metadataPath}`);
103
- }
104
-
105
- const data = readFileSync(metadataPath, 'utf-8');
106
- return JSON.parse(data);
107
- }
108
-
109
- /**
110
- * Get account state
111
- */
112
- getAccount(address: string): AccountState | null {
113
- const accountsPath = join(this.forkPath, 'accounts.json');
114
-
115
- if (!existsSync(accountsPath)) {
116
- return null;
117
- }
118
-
119
- const accounts = JSON.parse(readFileSync(accountsPath, 'utf-8'));
120
- return accounts[address] || null;
121
- }
122
-
123
- /**
124
- * Save account state
125
- */
126
- saveAccount(address: string, state: AccountState): void {
127
- const accountsPath = join(this.forkPath, 'accounts.json');
128
-
129
- let accounts: Record<string, AccountState> = {};
130
- if (existsSync(accountsPath)) {
131
- accounts = JSON.parse(readFileSync(accountsPath, 'utf-8'));
132
- }
133
-
134
- accounts[address] = state;
135
- writeFileSync(accountsPath, JSON.stringify(accounts, null, 2));
136
- }
137
-
138
- /**
139
- * Get resource for an account
140
- */
141
- getResource(address: string, resourceType: string): unknown | null {
142
- const resourceFilePath = this.getResourceFilePath(address);
143
-
144
- if (!existsSync(resourceFilePath)) {
145
- return null;
146
- }
147
-
148
- const resources = JSON.parse(readFileSync(resourceFilePath, 'utf-8'));
149
- return resources[resourceType] || null;
150
- }
151
-
152
- /**
153
- * Get all resources for an account
154
- */
155
- getAllResources(address: string): Record<string, unknown> {
156
- const resourceFilePath = this.getResourceFilePath(address);
157
-
158
- if (!existsSync(resourceFilePath)) {
159
- return {};
160
- }
161
-
162
- return JSON.parse(readFileSync(resourceFilePath, 'utf-8'));
163
- }
164
-
165
- /**
166
- * Save resource for an account
167
- */
168
- saveResource(address: string, resourceType: string, data: unknown): void {
169
- const resourceFilePath = this.getResourceFilePath(address);
170
-
171
- // Ensure resources directory exists
172
- const resourcesDir = join(this.forkPath, 'resources');
173
- if (!existsSync(resourcesDir)) {
174
- mkdirSync(resourcesDir, { recursive: true });
175
- }
176
-
177
- let resources: Record<string, unknown> = {};
178
- if (existsSync(resourceFilePath)) {
179
- resources = JSON.parse(readFileSync(resourceFilePath, 'utf-8'));
180
- }
181
-
182
- resources[resourceType] = data;
183
- writeFileSync(resourceFilePath, JSON.stringify(resources, null, 2));
184
- }
185
-
186
- /**
187
- * Save all resources for an account
188
- */
189
- saveAllResources(address: string, resources: Record<string, unknown>): void {
190
- const resourceFilePath = this.getResourceFilePath(address);
191
-
192
- // Ensure resources directory exists
193
- const resourcesDir = join(this.forkPath, 'resources');
194
- if (!existsSync(resourcesDir)) {
195
- mkdirSync(resourcesDir, { recursive: true });
196
- }
197
-
198
- writeFileSync(resourceFilePath, JSON.stringify(resources, null, 2));
199
- }
200
-
201
- /**
202
- * Check if resource is cached
203
- */
204
- hasResource(address: string, resourceType: string): boolean {
205
- return this.getResource(address, resourceType) !== null;
206
- }
207
-
208
- /**
209
- * List all accounts in the fork
210
- */
211
- listAccounts(): string[] {
212
- const accountsPath = join(this.forkPath, 'accounts.json');
213
-
214
- if (!existsSync(accountsPath)) {
215
- return [];
216
- }
217
-
218
- const accounts = JSON.parse(readFileSync(accountsPath, 'utf-8'));
219
- return Object.keys(accounts);
220
- }
221
-
222
- /**
223
- * Clear all cached accounts
224
- * Resets accounts.json to empty object
225
- */
226
- clearAccounts(): void {
227
- const accountsPath = join(this.forkPath, 'accounts.json');
228
- writeFileSync(accountsPath, JSON.stringify({}, null, 2));
229
- }
230
-
231
- /**
232
- * Clear all cached resources
233
- * Deletes all resource files from the resources directory
234
- */
235
- clearResources(): void {
236
- const resourcesDir = join(this.forkPath, 'resources');
237
-
238
- if (!existsSync(resourcesDir)) {
239
- return;
240
- }
241
-
242
- // Read all files in resources directory
243
- const files = readdirSync(resourcesDir);
244
-
245
- // Delete each resource file
246
- for (const file of files) {
247
- if (file.endsWith('.json')) {
248
- const filePath = join(resourcesDir, file);
249
- unlinkSync(filePath);
250
- }
251
- }
252
- }
253
- }