movehat 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +0 -1
- package/dist/commands/run.js +0 -1
- 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 +0 -1
- 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 +0 -1
- package/dist/utils/parseCliOutput.js +0 -1
- 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
package/src/core/Publisher.ts
DELETED
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
import { Account, PrivateKey, PrivateKeyVariants } from "@aptos-labs/ts-sdk";
|
|
2
|
-
import { MovehatConfig } from "../types/config.js";
|
|
3
|
-
import { extractNamedAddresses } from "../commands/compile.js";
|
|
4
|
-
import {
|
|
5
|
-
saveDeployment,
|
|
6
|
-
loadDeployment,
|
|
7
|
-
DeploymentInfo,
|
|
8
|
-
validateSafeName,
|
|
9
|
-
} from "./deployments.js";
|
|
10
|
-
import { validatePathSafety } from "./shell.js";
|
|
11
|
-
import { CliExecutionError, ModuleAlreadyDeployedError, PostPublishError } from "../errors.js";
|
|
12
|
-
import { runCli } from "../utils/runCli.js";
|
|
13
|
-
import { logger, isVerbose } from "../ui/index.js";
|
|
14
|
-
import { withSpinner } from "../ui/spinner.js";
|
|
15
|
-
import type { ChildProcessAdapter } from "../utils/childProcessAdapter.js";
|
|
16
|
-
import {
|
|
17
|
-
writeTempKeyFile,
|
|
18
|
-
removeKeyFile,
|
|
19
|
-
removeKeyFileSyncBestEffort,
|
|
20
|
-
ensureSignalHandler,
|
|
21
|
-
cleanupCallbacks,
|
|
22
|
-
} from "./movementProfile.js";
|
|
23
|
-
import { parseTxHash } from "../utils/parseCliOutput.js";
|
|
24
|
-
|
|
25
|
-
/** @internal */
|
|
26
|
-
export interface PublisherDeps {
|
|
27
|
-
adapter?: ChildProcessAdapter | undefined;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** @internal */
|
|
31
|
-
export interface PublishInput {
|
|
32
|
-
moduleName: string;
|
|
33
|
-
config: MovehatConfig;
|
|
34
|
-
account: Account;
|
|
35
|
-
packageDir?: string | undefined;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Publishes a Move module via the Movement CLI.
|
|
40
|
-
*
|
|
41
|
-
* @internal
|
|
42
|
-
*/
|
|
43
|
-
export class Publisher {
|
|
44
|
-
constructor(private readonly deps: PublisherDeps = {}) {}
|
|
45
|
-
|
|
46
|
-
async deploy(input: PublishInput): Promise<DeploymentInfo> {
|
|
47
|
-
const { moduleName, config, account } = input;
|
|
48
|
-
|
|
49
|
-
validateSafeName(moduleName, "module");
|
|
50
|
-
|
|
51
|
-
const forceRedeploy = process.env.MH_CLI_REDEPLOY === "true";
|
|
52
|
-
|
|
53
|
-
const existingDeployment = loadDeployment(config.network, moduleName);
|
|
54
|
-
if (existingDeployment && !forceRedeploy) {
|
|
55
|
-
// Build detailed error message with all deployment info
|
|
56
|
-
const errorDetails = [
|
|
57
|
-
`Module "${moduleName}" is already deployed on ${config.network}`,
|
|
58
|
-
`Address: ${existingDeployment.address}`,
|
|
59
|
-
`Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`,
|
|
60
|
-
existingDeployment.txHash ? `Transaction: ${existingDeployment.txHash}` : null,
|
|
61
|
-
`\nTo redeploy, run with the --redeploy flag:`,
|
|
62
|
-
`movehat run <script> --network ${config.network} --redeploy`,
|
|
63
|
-
]
|
|
64
|
-
.filter(Boolean)
|
|
65
|
-
.join("\n");
|
|
66
|
-
|
|
67
|
-
// Log formatted error message for user
|
|
68
|
-
logger.error(`Module "${moduleName}" is already deployed on ${config.network}`);
|
|
69
|
-
logger.plain(` Address: ${existingDeployment.address}`);
|
|
70
|
-
logger.plain(
|
|
71
|
-
` Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`
|
|
72
|
-
);
|
|
73
|
-
if (existingDeployment.txHash) {
|
|
74
|
-
logger.plain(` Transaction: ${existingDeployment.txHash}`);
|
|
75
|
-
}
|
|
76
|
-
logger.newline();
|
|
77
|
-
logger.info("To redeploy, run with the --redeploy flag:");
|
|
78
|
-
logger.plain(` movehat run <script> --network ${config.network} --redeploy`);
|
|
79
|
-
logger.newline();
|
|
80
|
-
|
|
81
|
-
// Throw custom error with complete context for programmatic handling
|
|
82
|
-
throw new ModuleAlreadyDeployedError(
|
|
83
|
-
errorDetails,
|
|
84
|
-
moduleName,
|
|
85
|
-
config.network,
|
|
86
|
-
existingDeployment.address,
|
|
87
|
-
existingDeployment.timestamp,
|
|
88
|
-
existingDeployment.txHash
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (forceRedeploy && existingDeployment) {
|
|
93
|
-
logger.info(`Redeploying module "${moduleName}" on ${config.network}...`);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const dir = input.packageDir || config.moveDir;
|
|
97
|
-
|
|
98
|
-
// Validate (no shell escape — runCli uses spawn, which takes args
|
|
99
|
-
// verbatim and would treat the single-quote wrapping as part of the
|
|
100
|
-
// literal path, breaking Movement CLI argument parsing).
|
|
101
|
-
const safeDir = validatePathSafety(dir, "package directory");
|
|
102
|
-
|
|
103
|
-
logger.step(`Publishing module "${moduleName}" from ${dir}...`);
|
|
104
|
-
|
|
105
|
-
try {
|
|
106
|
-
// Get the deployer address to use for named addresses
|
|
107
|
-
const deployerAddress = account.accountAddress.toString();
|
|
108
|
-
|
|
109
|
-
// Detect named addresses from Move files
|
|
110
|
-
const detectedAddresses = extractNamedAddresses(dir);
|
|
111
|
-
|
|
112
|
-
// Build named addresses argument - use deployer address for all detected addresses.
|
|
113
|
-
// Stored as a pre-split args fragment so the spawn path never has to parse
|
|
114
|
-
// shell tokens; an empty fragment becomes a no-op via spread.
|
|
115
|
-
const namedAddrArgs: string[] =
|
|
116
|
-
detectedAddresses.size > 0
|
|
117
|
-
? [
|
|
118
|
-
"--named-addresses",
|
|
119
|
-
Array.from(detectedAddresses)
|
|
120
|
-
.map((name) => `${name}=${deployerAddress}`)
|
|
121
|
-
.join(","),
|
|
122
|
-
]
|
|
123
|
-
: [];
|
|
124
|
-
|
|
125
|
-
// Build first with named addresses
|
|
126
|
-
const buildResult = await withSpinner(
|
|
127
|
-
"Building package",
|
|
128
|
-
() =>
|
|
129
|
-
runCli(
|
|
130
|
-
{
|
|
131
|
-
command: "movement",
|
|
132
|
-
args: ["move", "build", "--package-dir", safeDir, ...namedAddrArgs],
|
|
133
|
-
timeoutMs: 120000, // 2 minutes for git dependency downloads
|
|
134
|
-
},
|
|
135
|
-
{ adapter: this.deps.adapter }
|
|
136
|
-
),
|
|
137
|
-
);
|
|
138
|
-
if (isVerbose() && buildResult.stdout) {
|
|
139
|
-
logger.info(buildResult.stdout.trim(), 2);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Publish using direct parameters (avoid config file issues)
|
|
143
|
-
|
|
144
|
-
// Format the private key into AIP-80 shape so the Movement CLI
|
|
145
|
-
// doesn't emit its raw-hex deprecation warning. `formatPrivateKey`
|
|
146
|
-
// is idempotent for already-prefixed inputs.
|
|
147
|
-
const formattedPrivateKey = PrivateKey.formatPrivateKey(
|
|
148
|
-
config.privateKey,
|
|
149
|
-
PrivateKeyVariants.Ed25519,
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
// Move.toml is NOT mutated. All address overrides flow through
|
|
153
|
-
// the `--named-addresses` flag above, which Movement CLI applies
|
|
154
|
-
// during build + publish. Rewriting Move.toml on disk would risk
|
|
155
|
-
// leaving the user's file mutated if the process died before the
|
|
156
|
-
// restore step.
|
|
157
|
-
|
|
158
|
-
let publishOut = "";
|
|
159
|
-
let publishErr = "";
|
|
160
|
-
|
|
161
|
-
// Pass the private key to Movement CLI via a 0o600 temp file
|
|
162
|
-
// (`--private-key-file <path>`) and the on-chain address via
|
|
163
|
-
// `--sender-account <addr>`. This avoids the CLI's profile-yaml
|
|
164
|
-
// lookup chain entirely — no CWD / HOME / .aptos / .movement
|
|
165
|
-
// dance, no CLI-variant dependency.
|
|
166
|
-
const keyFilePath = writeTempKeyFile(formattedPrivateKey);
|
|
167
|
-
|
|
168
|
-
// Register a sync cleanup hook BEFORE invoking the CLI. If the
|
|
169
|
-
// user Ctrl+C's (or the process is SIGTERM'd) between the file
|
|
170
|
-
// write and our finally, the SIGINT handler iterates every
|
|
171
|
-
// registered callback and unlinks this deploy's key file
|
|
172
|
-
// synchronously so the private key never persists on disk after
|
|
173
|
-
// an abnormal exit. The signal-handler path uses the
|
|
174
|
-
// best-effort variant because the event loop is dead and we
|
|
175
|
-
// cannot logger.warning.
|
|
176
|
-
ensureSignalHandler();
|
|
177
|
-
const syncCleanup = () => removeKeyFileSyncBestEffort(keyFilePath);
|
|
178
|
-
cleanupCallbacks.add(syncCleanup);
|
|
179
|
-
|
|
180
|
-
try {
|
|
181
|
-
// Execute publish command. Private key reaches the CLI via the
|
|
182
|
-
// temp key file path (--private-key-file) — never on the
|
|
183
|
-
// command line — so it can't leak through `ps aux`. runCli's
|
|
184
|
-
// stdout/stderr redaction still applies as defense in depth
|
|
185
|
-
// for any `ed25519-priv-…` substring that surfaces in CLI
|
|
186
|
-
// output (Movement CLI sometimes echoes the key on error).
|
|
187
|
-
const publishResult = await withSpinner(
|
|
188
|
-
"Publishing to blockchain",
|
|
189
|
-
() =>
|
|
190
|
-
runCli(
|
|
191
|
-
{
|
|
192
|
-
command: "movement",
|
|
193
|
-
args: [
|
|
194
|
-
"move",
|
|
195
|
-
"publish",
|
|
196
|
-
"--package-dir",
|
|
197
|
-
safeDir,
|
|
198
|
-
"--url",
|
|
199
|
-
config.rpc,
|
|
200
|
-
"--private-key-file",
|
|
201
|
-
keyFilePath,
|
|
202
|
-
"--sender-account",
|
|
203
|
-
deployerAddress,
|
|
204
|
-
"--assume-yes",
|
|
205
|
-
...namedAddrArgs,
|
|
206
|
-
],
|
|
207
|
-
timeoutMs: 120000, // 2 minutes for blockchain transactions
|
|
208
|
-
},
|
|
209
|
-
{ adapter: this.deps.adapter }
|
|
210
|
-
),
|
|
211
|
-
);
|
|
212
|
-
publishOut = publishResult.stdout;
|
|
213
|
-
publishErr = publishResult.stderr;
|
|
214
|
-
// Both stdout and stderr from the publish subprocess are gated
|
|
215
|
-
// behind isVerbose() — Movement CLI emits progress to both
|
|
216
|
-
// streams ("Compiling, may take a little while..."), so a
|
|
217
|
-
// visible stderr line is not by itself a failure signal. The
|
|
218
|
-
// surrounding withSpinner converts the runCli throw on real
|
|
219
|
-
// failure into the visible spinner.fail() output instead.
|
|
220
|
-
if (isVerbose() && publishOut) logger.info(publishOut.trim(), 2);
|
|
221
|
-
if (isVerbose() && publishErr) logger.info(publishErr.trim(), 2);
|
|
222
|
-
} finally {
|
|
223
|
-
// Unlink the temp key file via the observable cleanup helper.
|
|
224
|
-
// ENOENT and other already-gone outcomes are benign (null).
|
|
225
|
-
// A non-null Error means the unlink failed AND the file still
|
|
226
|
-
// exists on disk — the private key would persist silently
|
|
227
|
-
// otherwise, so we emit a warning with the manual-cleanup
|
|
228
|
-
// hint. The SIGINT signal handler's sync callback below also
|
|
229
|
-
// tries to remove the same file; if SIGINT fires before this
|
|
230
|
-
// finally runs the file is gone and the next finally call
|
|
231
|
-
// sees ENOENT (benign).
|
|
232
|
-
const cleanupErr = removeKeyFile(keyFilePath);
|
|
233
|
-
if (cleanupErr) {
|
|
234
|
-
logger.warning(
|
|
235
|
-
`Failed to remove temp key file '${keyFilePath}': ${cleanupErr.message}. ` +
|
|
236
|
-
`The file has mode 0o600 but should be removed manually: rm ${keyFilePath}`
|
|
237
|
-
);
|
|
238
|
-
}
|
|
239
|
-
cleanupCallbacks.delete(syncCleanup);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Extract transaction hash from output via the shared helper
|
|
243
|
-
// (`utils/parseCliOutput.ts`). Same regex pair as before; lifted
|
|
244
|
-
// for reuse by harness/codeObject.ts and harness/script.ts.
|
|
245
|
-
const txHash = parseTxHash(publishOut);
|
|
246
|
-
|
|
247
|
-
logger.success("Module published successfully!");
|
|
248
|
-
|
|
249
|
-
// ←← "Publish succeeded" boundary. Anything thrown below this
|
|
250
|
-
// point did NOT cause the publish to fail — the module is on
|
|
251
|
-
// chain. We surface those failures as PostPublishError so callers
|
|
252
|
-
// can distinguish a genuine publish failure from a local
|
|
253
|
-
// bookkeeping failure (and avoid a wasteful redeploy).
|
|
254
|
-
|
|
255
|
-
const deployment: DeploymentInfo = {
|
|
256
|
-
address: account.accountAddress.toString(),
|
|
257
|
-
moduleName,
|
|
258
|
-
network: config.network,
|
|
259
|
-
deployer: account.accountAddress.toString(),
|
|
260
|
-
timestamp: Date.now(),
|
|
261
|
-
txHash,
|
|
262
|
-
};
|
|
263
|
-
|
|
264
|
-
try {
|
|
265
|
-
saveDeployment(deployment);
|
|
266
|
-
} catch (error) {
|
|
267
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
268
|
-
throw new PostPublishError(
|
|
269
|
-
`Module "${moduleName}" published to ${deployment.address} ` +
|
|
270
|
-
`but local deployment record could not be written: ${err.message}`,
|
|
271
|
-
deployment,
|
|
272
|
-
err
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
return deployment;
|
|
277
|
-
} catch (error) {
|
|
278
|
-
if (error instanceof PostPublishError) {
|
|
279
|
-
// Publish DID succeed; only local persistence failed. Log as
|
|
280
|
-
// warning (not error) so the user knows the deploy is real on
|
|
281
|
-
// chain. Re-throw so programmatic callers can react.
|
|
282
|
-
logger.warning(
|
|
283
|
-
`Module published successfully to ${error.deployment.address} ` +
|
|
284
|
-
`(tx=${error.deployment.txHash ?? "unknown"}) ` +
|
|
285
|
-
`but local deployment record could not be written.`
|
|
286
|
-
);
|
|
287
|
-
logger.warning(` Cause: ${error.cause.message}`);
|
|
288
|
-
logger.warning(
|
|
289
|
-
` To recover, manually write the deployment to ` +
|
|
290
|
-
`deployments/${error.deployment.network}/${error.deployment.moduleName}.json.`
|
|
291
|
-
);
|
|
292
|
-
throw error;
|
|
293
|
-
}
|
|
294
|
-
if (error instanceof CliExecutionError) {
|
|
295
|
-
// stdout/stderr are already redacted by runCli before reaching here,
|
|
296
|
-
// so this branch is safe to log verbatim.
|
|
297
|
-
if (error.stdoutPreview) logger.info(error.stdoutPreview, 2);
|
|
298
|
-
logger.error(`Failed to publish module: ${error.message}\n${error.stderr}`);
|
|
299
|
-
} else {
|
|
300
|
-
// Preserve existing behaviour for non-CLI errors (filesystem write
|
|
301
|
-
// failures from Move.toml / ~/.aptos/config.yaml, yaml parse errors,
|
|
302
|
-
// etc.). These paths can't carry private-key material so logging raw
|
|
303
|
-
// is safe.
|
|
304
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
305
|
-
logger.error(`Failed to publish module: ${err.message}`);
|
|
306
|
-
}
|
|
307
|
-
throw error;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
-
import { existsSync, mkdtempSync, rmSync } from "node:fs";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
|
|
6
|
-
import { AccountManager } from "../AccountManager.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* F8 — Document the two known limitations of `AccountManager`:
|
|
10
|
-
*
|
|
11
|
-
* (a) State is class-static. Two harness "sessions" in the same
|
|
12
|
-
* process share the pool, the labelMap, and the private-key
|
|
13
|
-
* map. A label re-used across sessions overwrites the entry.
|
|
14
|
-
* This is intentional per `Harness.ts:39-42` ("Two Harness
|
|
15
|
-
* instances in the same process share account labels"). This
|
|
16
|
-
* test captures the contract so a future refactor cannot
|
|
17
|
-
* silently change it.
|
|
18
|
-
*
|
|
19
|
-
* (b) `defaultPoolPath = join(process.cwd(), ".movehat", "accounts")`
|
|
20
|
-
* is evaluated when the module is first imported, NOT lazily on
|
|
21
|
-
* each call. Changing `process.cwd()` after import does not move
|
|
22
|
-
* the save destination. Callers needing per-test isolation must
|
|
23
|
-
* pass an explicit `poolPath` argument.
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
describe("F8 — AccountManager static state and import-time cwd capture", () => {
|
|
27
|
-
let cwdBackup: string;
|
|
28
|
-
let tmpDir: string;
|
|
29
|
-
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
AccountManager.clearPool();
|
|
32
|
-
cwdBackup = process.cwd();
|
|
33
|
-
tmpDir = mkdtempSync(join(tmpdir(), "movehat-f8-"));
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
afterEach(() => {
|
|
37
|
-
AccountManager.clearPool();
|
|
38
|
-
if (process.cwd() !== cwdBackup) {
|
|
39
|
-
process.chdir(cwdBackup);
|
|
40
|
-
}
|
|
41
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it("(a) re-creating an account with an existing label overwrites the labelMap entry", () => {
|
|
45
|
-
const first = AccountManager.createAccount("alice");
|
|
46
|
-
const second = AccountManager.createAccount("alice");
|
|
47
|
-
expect(second.accountAddress.toString()).not.toBe(
|
|
48
|
-
first.accountAddress.toString()
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const lookup = AccountManager.getAccountByLabel("alice");
|
|
52
|
-
expect(lookup).toBeDefined();
|
|
53
|
-
expect(lookup!.accountAddress.toString()).toBe(
|
|
54
|
-
second.accountAddress.toString()
|
|
55
|
-
);
|
|
56
|
-
// The first account is still in the pool (keyed by address), only
|
|
57
|
-
// the label binding moved. A second harness session that creates
|
|
58
|
-
// its own "alice" will silently shadow the first — this is the
|
|
59
|
-
// documented Harness limitation. exportPrivateKeys reflects the
|
|
60
|
-
// current label binding (i.e. the second account).
|
|
61
|
-
const exportedKeys = AccountManager.exportPrivateKeys(["alice"]);
|
|
62
|
-
expect(exportedKeys.alice).toBeTypeOf("string");
|
|
63
|
-
expect(exportedKeys.alice!.length).toBeGreaterThan(0);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
it("(b) saveAccountPool ignores a process.chdir after import; defaults to the import-time cwd", () => {
|
|
67
|
-
AccountManager.createAccount("bob");
|
|
68
|
-
|
|
69
|
-
process.chdir(tmpDir);
|
|
70
|
-
// No path argument → uses defaultPoolPath, which was set at module
|
|
71
|
-
// load time before this chdir.
|
|
72
|
-
AccountManager.saveAccountPool();
|
|
73
|
-
|
|
74
|
-
// The pool file must NOT appear under the freshly-chdir'd cwd.
|
|
75
|
-
const expectedAtNewCwd = join(tmpDir, ".movehat", "accounts", "test-pool.json");
|
|
76
|
-
expect(existsSync(expectedAtNewCwd)).toBe(false);
|
|
77
|
-
|
|
78
|
-
// Sanity check: explicit poolPath does land where the caller asked.
|
|
79
|
-
const explicit = join(tmpDir, "explicit");
|
|
80
|
-
AccountManager.saveAccountPool(explicit);
|
|
81
|
-
expect(existsSync(join(explicit, "test-pool.json"))).toBe(true);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
@@ -1,290 +0,0 @@
|
|
|
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
|
-
import type { MovehatConfig } from "../../types/config.js";
|
|
7
|
-
|
|
8
|
-
describe("AccountManager.saveAccountPool", () => {
|
|
9
|
-
let tmpDir: string;
|
|
10
|
-
|
|
11
|
-
beforeEach(() => {
|
|
12
|
-
tmpDir = mkdtempSync(join(tmpdir(), "movehat-acc-pool-"));
|
|
13
|
-
AccountManager.clearPool();
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
AccountManager.clearPool();
|
|
18
|
-
if (existsSync(tmpDir)) {
|
|
19
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it("writes test-pool.json with 0o600 permissions", () => {
|
|
24
|
-
AccountManager.createAccount("alice");
|
|
25
|
-
AccountManager.createAccount("bob");
|
|
26
|
-
|
|
27
|
-
const poolDir = join(tmpDir, "accounts");
|
|
28
|
-
AccountManager.saveAccountPool(poolDir);
|
|
29
|
-
|
|
30
|
-
const poolFile = join(poolDir, "test-pool.json");
|
|
31
|
-
expect(existsSync(poolFile)).toBe(true);
|
|
32
|
-
|
|
33
|
-
// Mode check is POSIX-only; skip on Windows where mode bits don't apply.
|
|
34
|
-
if (platform() !== "win32") {
|
|
35
|
-
const stat = statSync(poolFile);
|
|
36
|
-
const mode = stat.mode & 0o777;
|
|
37
|
-
expect(mode).toBe(0o600);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it("creates the pool directory with 0o700 permissions when missing", () => {
|
|
42
|
-
AccountManager.createAccount("alice");
|
|
43
|
-
|
|
44
|
-
const poolDir = join(tmpDir, "fresh-accounts");
|
|
45
|
-
AccountManager.saveAccountPool(poolDir);
|
|
46
|
-
|
|
47
|
-
expect(existsSync(poolDir)).toBe(true);
|
|
48
|
-
|
|
49
|
-
if (platform() !== "win32") {
|
|
50
|
-
const stat = statSync(poolDir);
|
|
51
|
-
const mode = stat.mode & 0o777;
|
|
52
|
-
expect(mode).toBe(0o700);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
const TEST_KEY_A =
|
|
58
|
-
"0x0000000000000000000000000000000000000000000000000000000000000001";
|
|
59
|
-
const TEST_KEY_B =
|
|
60
|
-
"0x0000000000000000000000000000000000000000000000000000000000000002";
|
|
61
|
-
|
|
62
|
-
describe("AccountManager — create / lookup / label", () => {
|
|
63
|
-
beforeEach(() => {
|
|
64
|
-
AccountManager.clearPool();
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
afterEach(() => {
|
|
68
|
-
AccountManager.clearPool();
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it("getTestAccount(label) creates on first call, returns the same on second", () => {
|
|
72
|
-
const first = AccountManager.getTestAccount("alice");
|
|
73
|
-
const second = AccountManager.getTestAccount("alice");
|
|
74
|
-
expect(second.accountAddress.toString()).toBe(first.accountAddress.toString());
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it("getTestAccount() with no label creates a fresh unlabeled account", () => {
|
|
78
|
-
const a = AccountManager.getTestAccount();
|
|
79
|
-
const b = AccountManager.getTestAccount();
|
|
80
|
-
expect(a.accountAddress.toString()).not.toBe(b.accountAddress.toString());
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it("createAccount tracks the new account in the pool", () => {
|
|
84
|
-
expect(AccountManager.getPoolSize()).toBe(0);
|
|
85
|
-
AccountManager.createAccount("alice");
|
|
86
|
-
AccountManager.createAccount("bob");
|
|
87
|
-
expect(AccountManager.getPoolSize()).toBe(2);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it("getAccountByLabel returns undefined for an unknown label", () => {
|
|
91
|
-
expect(AccountManager.getAccountByLabel("missing")).toBeUndefined();
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it("getLabeledAccounts returns a map of every labeled account", () => {
|
|
95
|
-
AccountManager.createAccount("alice");
|
|
96
|
-
AccountManager.createAccount("bob");
|
|
97
|
-
AccountManager.createAccount(); // unlabeled — should NOT appear
|
|
98
|
-
const labeled = AccountManager.getLabeledAccounts();
|
|
99
|
-
expect(Object.keys(labeled).sort()).toEqual(["alice", "bob"]);
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it("hasLabel reflects the label map state", () => {
|
|
103
|
-
expect(AccountManager.hasLabel("alice")).toBe(false);
|
|
104
|
-
AccountManager.createAccount("alice");
|
|
105
|
-
expect(AccountManager.hasLabel("alice")).toBe(true);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it("getOrCreateLabeled returns the existing labeled account on second call", () => {
|
|
109
|
-
const first = AccountManager.getOrCreateLabeled("alice");
|
|
110
|
-
const second = AccountManager.getOrCreateLabeled("alice");
|
|
111
|
-
expect(second.accountAddress.toString()).toBe(first.accountAddress.toString());
|
|
112
|
-
expect(AccountManager.getPoolSize()).toBe(1);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it("createBatch creates one account per label and returns the map", () => {
|
|
116
|
-
const accounts = AccountManager.createBatch(["alice", "bob", "charlie"]);
|
|
117
|
-
expect(Object.keys(accounts).sort()).toEqual(["alice", "bob", "charlie"]);
|
|
118
|
-
expect(AccountManager.getPoolSize()).toBe(3);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it("getAllAccounts returns every account in insertion order", () => {
|
|
122
|
-
const a = AccountManager.createAccount("alice");
|
|
123
|
-
const b = AccountManager.createAccount("bob");
|
|
124
|
-
const addrs = AccountManager.getAllAccounts().map((acc) =>
|
|
125
|
-
acc.accountAddress.toString()
|
|
126
|
-
);
|
|
127
|
-
// Insertion order is preserved by the underlying Map iteration.
|
|
128
|
-
expect(addrs).toEqual([
|
|
129
|
-
a.accountAddress.toString(),
|
|
130
|
-
b.accountAddress.toString(),
|
|
131
|
-
]);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it("clearPool resets pool, label map, and poolLoaded flag", () => {
|
|
135
|
-
AccountManager.createAccount("alice");
|
|
136
|
-
expect(AccountManager.getPoolSize()).toBe(1);
|
|
137
|
-
AccountManager.clearPool();
|
|
138
|
-
expect(AccountManager.getPoolSize()).toBe(0);
|
|
139
|
-
expect(AccountManager.hasLabel("alice")).toBe(false);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
describe("AccountManager — load from env / key / config", () => {
|
|
144
|
-
let origEnv: string | undefined;
|
|
145
|
-
|
|
146
|
-
beforeEach(() => {
|
|
147
|
-
AccountManager.clearPool();
|
|
148
|
-
origEnv = process.env.PRIVATE_KEY;
|
|
149
|
-
delete process.env.PRIVATE_KEY;
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
afterEach(() => {
|
|
153
|
-
AccountManager.clearPool();
|
|
154
|
-
if (origEnv === undefined) delete process.env.PRIVATE_KEY;
|
|
155
|
-
else process.env.PRIVATE_KEY = origEnv;
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it("loadAccountFromEnv reads from PRIVATE_KEY by default", () => {
|
|
159
|
-
process.env.PRIVATE_KEY = TEST_KEY_A;
|
|
160
|
-
const acc = AccountManager.loadAccountFromEnv();
|
|
161
|
-
expect(acc.accountAddress.toString()).toMatch(/^0x[a-f0-9]+$/i);
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
it("loadAccountFromEnv reads from a custom env var name", () => {
|
|
165
|
-
process.env.MY_CUSTOM_KEY = TEST_KEY_A;
|
|
166
|
-
try {
|
|
167
|
-
const acc = AccountManager.loadAccountFromEnv("MY_CUSTOM_KEY");
|
|
168
|
-
expect(acc.accountAddress.toString()).toMatch(/^0x[a-f0-9]+$/i);
|
|
169
|
-
} finally {
|
|
170
|
-
delete process.env.MY_CUSTOM_KEY;
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
it("loadAccountFromEnv throws when the env var is unset", () => {
|
|
175
|
-
expect(() => AccountManager.loadAccountFromEnv("DEFINITELY_NOT_SET")).toThrow(
|
|
176
|
-
/not found/
|
|
177
|
-
);
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it("loadAccountFromPrivateKey adds the account to the pool", () => {
|
|
181
|
-
expect(AccountManager.getPoolSize()).toBe(0);
|
|
182
|
-
AccountManager.loadAccountFromPrivateKey(TEST_KEY_A);
|
|
183
|
-
expect(AccountManager.getPoolSize()).toBe(1);
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it("loadAccountsFromConfig loads every valid key", () => {
|
|
187
|
-
const config = {
|
|
188
|
-
allAccounts: [TEST_KEY_A, TEST_KEY_B],
|
|
189
|
-
} as unknown as MovehatConfig;
|
|
190
|
-
const accounts = AccountManager.loadAccountsFromConfig(config);
|
|
191
|
-
expect(accounts).toHaveLength(2);
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
it("loadAccountsFromConfig warns on a malformed key and skips it", () => {
|
|
195
|
-
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
196
|
-
const config = {
|
|
197
|
-
allAccounts: [TEST_KEY_A, "not-a-real-key"],
|
|
198
|
-
} as unknown as MovehatConfig;
|
|
199
|
-
const accounts = AccountManager.loadAccountsFromConfig(config);
|
|
200
|
-
expect(accounts).toHaveLength(1);
|
|
201
|
-
expect(warnSpy).toHaveBeenCalledWith(
|
|
202
|
-
expect.stringMatching(/Failed to load account from config/)
|
|
203
|
-
);
|
|
204
|
-
warnSpy.mockRestore();
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
describe("AccountManager.loadAccountPool / exportPrivateKeys", () => {
|
|
209
|
-
let tmpDir: string;
|
|
210
|
-
|
|
211
|
-
beforeEach(() => {
|
|
212
|
-
tmpDir = mkdtempSync(join(tmpdir(), "movehat-acc-load-"));
|
|
213
|
-
AccountManager.clearPool();
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
afterEach(() => {
|
|
217
|
-
AccountManager.clearPool();
|
|
218
|
-
if (existsSync(tmpDir)) {
|
|
219
|
-
rmSync(tmpDir, { recursive: true, force: true });
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
it("loadAccountPool returns false when the file does not exist", () => {
|
|
224
|
-
expect(AccountManager.loadAccountPool(tmpDir)).toBe(false);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
it("loadAccountPool restores accounts and labels from disk", () => {
|
|
228
|
-
// Plant a pool via save → clear → load round-trip.
|
|
229
|
-
AccountManager.createAccount("alice");
|
|
230
|
-
AccountManager.createAccount("bob");
|
|
231
|
-
const poolDir = join(tmpDir, "accounts");
|
|
232
|
-
AccountManager.saveAccountPool(poolDir);
|
|
233
|
-
AccountManager.clearPool();
|
|
234
|
-
expect(AccountManager.getPoolSize()).toBe(0);
|
|
235
|
-
|
|
236
|
-
const ok = AccountManager.loadAccountPool(poolDir);
|
|
237
|
-
expect(ok).toBe(true);
|
|
238
|
-
expect(AccountManager.getPoolSize()).toBe(2);
|
|
239
|
-
expect(AccountManager.hasLabel("alice")).toBe(true);
|
|
240
|
-
expect(AccountManager.hasLabel("bob")).toBe(true);
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it("loadAccountPool is a no-op when poolLoaded is already true", () => {
|
|
244
|
-
AccountManager.createAccount("alice");
|
|
245
|
-
const poolDir = join(tmpDir, "accounts");
|
|
246
|
-
AccountManager.saveAccountPool(poolDir);
|
|
247
|
-
expect(AccountManager.loadAccountPool(poolDir)).toBe(true);
|
|
248
|
-
// Second call short-circuits via the poolLoaded flag.
|
|
249
|
-
expect(AccountManager.loadAccountPool(poolDir)).toBe(true);
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
it("loadAccountPool returns false and warns on corrupt JSON", () => {
|
|
253
|
-
const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
254
|
-
const poolDir = join(tmpDir, "accounts");
|
|
255
|
-
// mkdir then write a deliberately malformed test-pool.json.
|
|
256
|
-
AccountManager.createAccount("alice");
|
|
257
|
-
AccountManager.saveAccountPool(poolDir);
|
|
258
|
-
writeFileSync(join(poolDir, "test-pool.json"), "{ not valid json");
|
|
259
|
-
AccountManager.clearPool();
|
|
260
|
-
expect(AccountManager.loadAccountPool(poolDir)).toBe(false);
|
|
261
|
-
expect(warnSpy).toHaveBeenCalledWith(
|
|
262
|
-
expect.stringMatching(/Failed to load account pool/)
|
|
263
|
-
);
|
|
264
|
-
warnSpy.mockRestore();
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
it("exportPrivateKeys returns every labeled account's key when called with no args", () => {
|
|
268
|
-
AccountManager.createAccount("alice");
|
|
269
|
-
AccountManager.createAccount("bob");
|
|
270
|
-
const exported = AccountManager.exportPrivateKeys();
|
|
271
|
-
expect(Object.keys(exported).sort()).toEqual(["alice", "bob"]);
|
|
272
|
-
for (const key of Object.values(exported)) {
|
|
273
|
-
expect(typeof key).toBe("string");
|
|
274
|
-
expect(key.length).toBeGreaterThan(0);
|
|
275
|
-
}
|
|
276
|
-
});
|
|
277
|
-
|
|
278
|
-
it("exportPrivateKeys filters by labels when an array is passed", () => {
|
|
279
|
-
AccountManager.createAccount("alice");
|
|
280
|
-
AccountManager.createAccount("bob");
|
|
281
|
-
AccountManager.createAccount("charlie");
|
|
282
|
-
const exported = AccountManager.exportPrivateKeys(["alice", "charlie"]);
|
|
283
|
-
expect(Object.keys(exported).sort()).toEqual(["alice", "charlie"]);
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
it("exportPrivateKeys with an unknown label returns an empty map", () => {
|
|
287
|
-
const exported = AccountManager.exportPrivateKeys(["missing"]);
|
|
288
|
-
expect(exported).toEqual({});
|
|
289
|
-
});
|
|
290
|
-
});
|