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