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