movehat 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/__tests__/deployContract.test.d.ts +2 -0
- package/dist/__tests__/deployContract.test.d.ts.map +1 -0
- package/dist/__tests__/deployContract.test.js +368 -0
- package/dist/__tests__/deployContract.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +46 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +24 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +1 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.js +82 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +1 -0
- package/dist/__tests__/fork/api.test.d.ts +2 -0
- package/dist/__tests__/fork/api.test.d.ts.map +1 -0
- package/dist/__tests__/fork/api.test.js +110 -0
- package/dist/__tests__/fork/api.test.js.map +1 -0
- package/dist/__tests__/harness/Harness.createLive.test.d.ts +2 -0
- package/dist/__tests__/harness/Harness.createLive.test.d.ts.map +1 -0
- package/dist/__tests__/harness/Harness.createLive.test.js +53 -0
- package/dist/__tests__/harness/Harness.createLive.test.js.map +1 -0
- package/dist/__tests__/harness/Harness.proxy.test.d.ts +2 -0
- package/dist/__tests__/harness/Harness.proxy.test.d.ts.map +1 -0
- package/dist/__tests__/harness/Harness.proxy.test.js +93 -0
- package/dist/__tests__/harness/Harness.proxy.test.js.map +1 -0
- package/dist/__tests__/harness/_fixture.d.ts +54 -0
- package/dist/__tests__/harness/_fixture.d.ts.map +1 -0
- package/dist/__tests__/harness/_fixture.js +69 -0
- package/dist/__tests__/harness/_fixture.js.map +1 -0
- package/dist/__tests__/harness/codeObject.deploy.test.d.ts +2 -0
- package/dist/__tests__/harness/codeObject.deploy.test.d.ts.map +1 -0
- package/dist/__tests__/harness/codeObject.deploy.test.js +288 -0
- package/dist/__tests__/harness/codeObject.deploy.test.js.map +1 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.d.ts +2 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.d.ts.map +1 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.js +138 -0
- package/dist/__tests__/harness/codeObject.upgrade.test.js.map +1 -0
- package/dist/__tests__/harness/script.test.d.ts +2 -0
- package/dist/__tests__/harness/script.test.d.ts.map +1 -0
- package/dist/__tests__/harness/script.test.js +219 -0
- package/dist/__tests__/harness/script.test.js.map +1 -0
- package/dist/__tests__/harness/view.test.d.ts +2 -0
- package/dist/__tests__/harness/view.test.d.ts.map +1 -0
- package/dist/__tests__/harness/view.test.js +92 -0
- package/dist/__tests__/harness/view.test.js.map +1 -0
- package/dist/__tests__/runtime.test.d.ts +2 -0
- package/dist/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/__tests__/runtime.test.js +141 -0
- package/dist/__tests__/runtime.test.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/compile.test.d.ts +2 -0
- package/dist/commands/__tests__/compile.test.d.ts.map +1 -0
- package/dist/commands/__tests__/compile.test.js +351 -0
- package/dist/commands/__tests__/compile.test.js.map +1 -0
- package/dist/commands/__tests__/init.test.d.ts +2 -0
- package/dist/commands/__tests__/init.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init.test.js +101 -0
- package/dist/commands/__tests__/init.test.js.map +1 -0
- package/dist/commands/__tests__/run.test.d.ts +2 -0
- package/dist/commands/__tests__/run.test.d.ts.map +1 -0
- package/dist/commands/__tests__/run.test.js +166 -0
- package/dist/commands/__tests__/run.test.js.map +1 -0
- package/dist/commands/__tests__/test-move.test.d.ts +2 -0
- package/dist/commands/__tests__/test-move.test.d.ts.map +1 -0
- package/dist/commands/__tests__/test-move.test.js +59 -0
- package/dist/commands/__tests__/test-move.test.js.map +1 -0
- package/dist/commands/__tests__/test.test.d.ts +2 -0
- package/dist/commands/__tests__/test.test.d.ts.map +1 -0
- package/dist/commands/__tests__/test.test.js +168 -0
- package/dist/commands/__tests__/test.test.js.map +1 -0
- package/dist/commands/__tests__/update.test.d.ts +2 -0
- package/dist/commands/__tests__/update.test.d.ts.map +1 -0
- package/dist/commands/__tests__/update.test.js +176 -0
- package/dist/commands/__tests__/update.test.js.map +1 -0
- package/dist/commands/compile.d.ts +7 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +150 -33
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/fork/__tests__/create.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/create.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/create.test.js +108 -0
- package/dist/commands/fork/__tests__/create.test.js.map +1 -0
- package/dist/commands/fork/__tests__/fund.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/fund.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/fund.test.js +72 -0
- package/dist/commands/fork/__tests__/fund.test.js.map +1 -0
- package/dist/commands/fork/__tests__/list.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/list.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/list.test.js +119 -0
- package/dist/commands/fork/__tests__/list.test.js.map +1 -0
- package/dist/commands/fork/__tests__/serve.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/serve.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/serve.test.js +97 -0
- package/dist/commands/fork/__tests__/serve.test.js.map +1 -0
- package/dist/commands/fork/__tests__/view-resource.test.d.ts +2 -0
- package/dist/commands/fork/__tests__/view-resource.test.d.ts.map +1 -0
- package/dist/commands/fork/__tests__/view-resource.test.js +77 -0
- package/dist/commands/fork/__tests__/view-resource.test.js.map +1 -0
- package/dist/commands/fork/create.d.ts +1 -1
- package/dist/commands/fork/create.d.ts.map +1 -1
- package/dist/commands/fork/create.js +3 -2
- package/dist/commands/fork/create.js.map +1 -1
- package/dist/commands/fork/fund.d.ts.map +1 -1
- package/dist/commands/fork/fund.js +15 -8
- package/dist/commands/fork/fund.js.map +1 -1
- package/dist/commands/fork/list.d.ts.map +1 -1
- package/dist/commands/fork/list.js +2 -1
- package/dist/commands/fork/list.js.map +1 -1
- package/dist/commands/fork/serve.d.ts +1 -0
- package/dist/commands/fork/serve.d.ts.map +1 -1
- package/dist/commands/fork/serve.js +4 -2
- package/dist/commands/fork/serve.js.map +1 -1
- package/dist/commands/fork/view-resource.d.ts.map +1 -1
- package/dist/commands/fork/view-resource.js +10 -5
- package/dist/commands/fork/view-resource.js.map +1 -1
- package/dist/commands/run.d.ts +15 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +50 -27
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/test-move.d.ts.map +1 -1
- package/dist/commands/test-move.js +3 -2
- package/dist/commands/test-move.js.map +1 -1
- package/dist/commands/test.js +52 -46
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +15 -13
- package/dist/commands/update.js.map +1 -1
- package/dist/core/AccountManager.d.ts +1 -1
- package/dist/core/AccountManager.d.ts.map +1 -1
- package/dist/core/AccountManager.js +20 -7
- package/dist/core/AccountManager.js.map +1 -1
- package/dist/core/Publisher.d.ts +31 -0
- package/dist/core/Publisher.d.ts.map +1 -0
- package/dist/core/Publisher.js +248 -0
- package/dist/core/Publisher.js.map +1 -0
- package/dist/core/__tests__/AccountManager.test.d.ts +2 -0
- package/dist/core/__tests__/AccountManager.test.d.ts.map +1 -0
- package/dist/core/__tests__/AccountManager.test.js +239 -0
- package/dist/core/__tests__/AccountManager.test.js.map +1 -0
- package/dist/core/__tests__/config.test.d.ts +2 -0
- package/dist/core/__tests__/config.test.d.ts.map +1 -0
- package/dist/core/__tests__/config.test.js +311 -0
- package/dist/core/__tests__/config.test.js.map +1 -0
- package/dist/core/__tests__/deployments.test.d.ts +2 -0
- package/dist/core/__tests__/deployments.test.d.ts.map +1 -0
- package/dist/core/__tests__/deployments.test.js +201 -0
- package/dist/core/__tests__/deployments.test.js.map +1 -0
- package/dist/core/__tests__/shell.test.d.ts +2 -0
- package/dist/core/__tests__/shell.test.d.ts.map +1 -0
- package/dist/core/__tests__/shell.test.js +107 -0
- package/dist/core/__tests__/shell.test.js.map +1 -0
- package/dist/core/config.d.ts +13 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +80 -11
- package/dist/core/config.js.map +1 -1
- package/dist/core/contract.d.ts +1 -1
- package/dist/core/contract.d.ts.map +1 -1
- package/dist/core/contract.js +15 -4
- package/dist/core/contract.js.map +1 -1
- package/dist/core/deployments.d.ts +2 -2
- package/dist/core/deployments.d.ts.map +1 -1
- package/dist/core/deployments.js +8 -6
- package/dist/core/deployments.js.map +1 -1
- package/dist/core/movementProfile.d.ts +34 -0
- package/dist/core/movementProfile.d.ts.map +1 -0
- package/dist/core/movementProfile.js +150 -0
- package/dist/core/movementProfile.js.map +1 -0
- package/dist/core/shell.d.ts +23 -7
- package/dist/core/shell.d.ts.map +1 -1
- package/dist/core/shell.js +32 -14
- package/dist/core/shell.js.map +1 -1
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +54 -0
- package/dist/errors.js.map +1 -1
- package/dist/fork/__tests__/manager.test.d.ts +2 -0
- package/dist/fork/__tests__/manager.test.d.ts.map +1 -0
- package/dist/fork/__tests__/manager.test.js +309 -0
- package/dist/fork/__tests__/manager.test.js.map +1 -0
- package/dist/fork/__tests__/server.test.d.ts +2 -0
- package/dist/fork/__tests__/server.test.d.ts.map +1 -0
- package/dist/fork/__tests__/server.test.js +54 -0
- package/dist/fork/__tests__/server.test.js.map +1 -0
- package/dist/fork/__tests__/storage.test.d.ts +2 -0
- package/dist/fork/__tests__/storage.test.d.ts.map +1 -0
- package/dist/fork/__tests__/storage.test.js +222 -0
- package/dist/fork/__tests__/storage.test.js.map +1 -0
- package/dist/fork/__tests__/test.test.d.ts +2 -0
- package/dist/fork/__tests__/test.test.d.ts.map +1 -0
- package/dist/fork/__tests__/test.test.js +81 -0
- package/dist/fork/__tests__/test.test.js.map +1 -0
- package/dist/fork/api.d.ts +14 -3
- package/dist/fork/api.d.ts.map +1 -1
- package/dist/fork/api.js +25 -14
- package/dist/fork/api.js.map +1 -1
- package/dist/fork/manager.d.ts +23 -9
- package/dist/fork/manager.d.ts.map +1 -1
- package/dist/fork/manager.js +79 -36
- package/dist/fork/manager.js.map +1 -1
- package/dist/fork/server.d.ts +11 -3
- package/dist/fork/server.d.ts.map +1 -1
- package/dist/fork/server.js +45 -13
- package/dist/fork/server.js.map +1 -1
- package/dist/fork/storage.d.ts +4 -4
- package/dist/fork/storage.d.ts.map +1 -1
- package/dist/fork/storage.js +7 -9
- package/dist/fork/storage.js.map +1 -1
- package/dist/fork/test.d.ts +13 -4
- package/dist/fork/test.d.ts.map +1 -1
- package/dist/fork/test.js +36 -27
- package/dist/fork/test.js.map +1 -1
- package/dist/harness/Harness.d.ts +124 -0
- package/dist/harness/Harness.d.ts.map +1 -0
- package/dist/harness/Harness.js +193 -0
- package/dist/harness/Harness.js.map +1 -0
- package/dist/harness/codeObject.d.ts +31 -0
- package/dist/harness/codeObject.d.ts.map +1 -0
- package/dist/harness/codeObject.js +271 -0
- package/dist/harness/codeObject.js.map +1 -0
- package/dist/harness/errors.d.ts +14 -0
- package/dist/harness/errors.d.ts.map +1 -0
- package/dist/harness/errors.js +22 -0
- package/dist/harness/errors.js.map +1 -0
- package/dist/harness/index.d.ts +4 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +3 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/proxy.d.ts +7 -0
- package/dist/harness/proxy.d.ts.map +1 -0
- package/dist/harness/proxy.js +36 -0
- package/dist/harness/proxy.js.map +1 -0
- package/dist/harness/script.d.ts +21 -0
- package/dist/harness/script.d.ts.map +1 -0
- package/dist/harness/script.js +155 -0
- package/dist/harness/script.js.map +1 -0
- package/dist/harness/view.d.ts +22 -0
- package/dist/harness/view.d.ts.map +1 -0
- package/dist/harness/view.js +28 -0
- package/dist/harness/view.js.map +1 -0
- package/dist/helpers/__tests__/semver-utils.test.d.ts +2 -0
- package/dist/helpers/__tests__/semver-utils.test.d.ts.map +1 -0
- package/dist/helpers/__tests__/semver-utils.test.js +103 -0
- package/dist/helpers/__tests__/semver-utils.test.js.map +1 -0
- package/dist/helpers/index.d.ts +3 -2
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +2 -2
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/move-tests.d.ts +3 -3
- package/dist/helpers/move-tests.d.ts.map +1 -1
- package/dist/helpers/move-tests.js +21 -20
- package/dist/helpers/move-tests.js.map +1 -1
- package/dist/helpers/npm-registry.d.ts.map +1 -1
- package/dist/helpers/npm-registry.js +1 -3
- package/dist/helpers/npm-registry.js.map +1 -1
- package/dist/helpers/semver-utils.d.ts.map +1 -1
- package/dist/helpers/semver-utils.js +4 -3
- package/dist/helpers/semver-utils.js.map +1 -1
- package/dist/helpers/setup.d.ts.map +1 -1
- package/dist/helpers/setup.js +10 -6
- package/dist/helpers/setup.js.map +1 -1
- package/dist/helpers/setupLocalTesting.d.ts +32 -27
- package/dist/helpers/setupLocalTesting.d.ts.map +1 -1
- package/dist/helpers/setupLocalTesting.js +179 -180
- package/dist/helpers/setupLocalTesting.js.map +1 -1
- package/dist/helpers/testFixtures.d.ts +19 -53
- package/dist/helpers/testFixtures.d.ts.map +1 -1
- package/dist/helpers/testFixtures.js +89 -107
- package/dist/helpers/testFixtures.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/node/LocalNodeManager.d.ts +9 -1
- package/dist/node/LocalNodeManager.d.ts.map +1 -1
- package/dist/node/LocalNodeManager.js +75 -58
- package/dist/node/LocalNodeManager.js.map +1 -1
- package/dist/node/__tests__/LocalNodeManager.test.d.ts +2 -0
- package/dist/node/__tests__/LocalNodeManager.test.d.ts.map +1 -0
- package/dist/node/__tests__/LocalNodeManager.test.js +349 -0
- package/dist/node/__tests__/LocalNodeManager.test.js.map +1 -0
- package/dist/runtime.d.ts +12 -15
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +32 -241
- package/dist/runtime.js.map +1 -1
- package/dist/templates/README.md +1 -1
- package/dist/templates/movehat.config.ts +10 -0
- package/dist/templates/package.json +2 -1
- package/dist/templates/scripts/deploy-counter.ts +46 -38
- package/dist/templates/tests/Counter.test.ts +51 -51
- package/dist/templates/types/movehat.d.ts +6 -9
- package/dist/types/config.d.ts +8 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/fork.d.ts +7 -1
- package/dist/types/fork.d.ts.map +1 -1
- package/dist/types/harness.d.ts +166 -0
- package/dist/types/harness.d.ts.map +1 -0
- package/dist/types/harness.js +2 -0
- package/dist/types/harness.js.map +1 -0
- package/dist/types/runtime.d.ts +7 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/ui/__tests__/colors.test.d.ts +2 -0
- package/dist/ui/__tests__/colors.test.d.ts.map +1 -0
- package/dist/ui/__tests__/colors.test.js +127 -0
- package/dist/ui/__tests__/colors.test.js.map +1 -0
- package/dist/ui/colors.d.ts.map +1 -1
- package/dist/ui/colors.js +6 -2
- package/dist/ui/colors.js.map +1 -1
- package/dist/ui/logger.d.ts +17 -0
- package/dist/ui/logger.d.ts.map +1 -1
- package/dist/ui/logger.js +22 -0
- package/dist/ui/logger.js.map +1 -1
- package/dist/ui/symbols.d.ts +1 -0
- package/dist/ui/symbols.d.ts.map +1 -1
- package/dist/ui/symbols.js +7 -1
- package/dist/ui/symbols.js.map +1 -1
- package/dist/utils/__tests__/address.test.d.ts +2 -0
- package/dist/utils/__tests__/address.test.d.ts.map +1 -0
- package/dist/utils/__tests__/address.test.js +70 -0
- package/dist/utils/__tests__/address.test.js.map +1 -0
- package/dist/utils/__tests__/childProcessAdapter.test.d.ts +2 -0
- package/dist/utils/__tests__/childProcessAdapter.test.d.ts.map +1 -0
- package/dist/utils/__tests__/childProcessAdapter.test.js +217 -0
- package/dist/utils/__tests__/childProcessAdapter.test.js.map +1 -0
- package/dist/utils/__tests__/runCli.test.d.ts +2 -0
- package/dist/utils/__tests__/runCli.test.d.ts.map +1 -0
- package/dist/utils/__tests__/runCli.test.js +187 -0
- package/dist/utils/__tests__/runCli.test.js.map +1 -0
- package/dist/utils/address.d.ts +33 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +52 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/childProcessAdapter.d.ts +93 -0
- package/dist/utils/childProcessAdapter.d.ts.map +1 -0
- package/dist/utils/childProcessAdapter.js +109 -0
- package/dist/utils/childProcessAdapter.js.map +1 -0
- package/dist/utils/parseCliOutput.d.ts +20 -0
- package/dist/utils/parseCliOutput.d.ts.map +1 -0
- package/dist/utils/parseCliOutput.js +26 -0
- package/dist/utils/parseCliOutput.js.map +1 -0
- package/dist/utils/redact.d.ts +15 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +24 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/runCli.d.ts +24 -0
- package/dist/utils/runCli.d.ts.map +1 -0
- package/dist/utils/runCli.js +37 -0
- package/dist/utils/runCli.js.map +1 -0
- package/package.json +14 -4
- package/src/__tests__/deployContract.test.ts +429 -0
- package/src/__tests__/errors.test.ts +84 -0
- package/src/__tests__/fixtures/sigint-deploy-harness.ts +95 -0
- package/src/__tests__/fork/api.test.ts +143 -0
- package/src/__tests__/harness/Harness.createLive.test.ts +57 -0
- package/src/__tests__/harness/Harness.proxy.test.ts +115 -0
- package/src/__tests__/harness/_fixture.ts +131 -0
- package/src/__tests__/harness/codeObject.deploy.test.ts +319 -0
- package/src/__tests__/harness/codeObject.upgrade.test.ts +156 -0
- package/src/__tests__/harness/script.test.ts +245 -0
- package/src/__tests__/harness/view.test.ts +104 -0
- package/src/__tests__/runtime.test.ts +182 -0
- package/src/cli.ts +2 -1
- package/src/commands/__tests__/compile.test.ts +407 -0
- package/src/commands/__tests__/init.test.ts +125 -0
- package/src/commands/__tests__/run.test.ts +192 -0
- package/src/commands/__tests__/test-move.test.ts +81 -0
- package/src/commands/__tests__/test.test.ts +204 -0
- package/src/commands/__tests__/update.test.ts +223 -0
- package/src/commands/compile.ts +168 -32
- package/src/commands/fork/__tests__/create.test.ts +132 -0
- package/src/commands/fork/__tests__/fund.test.ts +104 -0
- package/src/commands/fork/__tests__/list.test.ts +139 -0
- package/src/commands/fork/__tests__/serve.test.ts +121 -0
- package/src/commands/fork/__tests__/view-resource.test.ts +101 -0
- package/src/commands/fork/create.ts +4 -3
- package/src/commands/fork/fund.ts +16 -9
- package/src/commands/fork/list.ts +3 -2
- package/src/commands/fork/serve.ts +6 -3
- package/src/commands/fork/view-resource.ts +11 -6
- package/src/commands/run.ts +54 -28
- package/src/commands/test-move.ts +4 -3
- package/src/commands/test.ts +56 -44
- package/src/commands/update.ts +19 -16
- package/src/core/AccountManager.ts +23 -10
- package/src/core/Publisher.ts +322 -0
- package/src/core/__tests__/AccountManager.test.ts +290 -0
- package/src/core/__tests__/config.test.ts +377 -0
- package/src/core/__tests__/deployments.test.ts +247 -0
- package/src/core/__tests__/shell.test.ts +138 -0
- package/src/core/config.ts +96 -12
- package/src/core/contract.ts +13 -4
- package/src/core/deployments.ts +13 -11
- package/src/core/movementProfile.ts +179 -0
- package/src/core/shell.ts +34 -14
- package/src/errors.ts +60 -0
- package/src/fork/__tests__/manager.test.ts +385 -0
- package/src/fork/__tests__/server.test.ts +65 -0
- package/src/fork/__tests__/storage.test.ts +281 -0
- package/src/fork/__tests__/test.test.ts +97 -0
- package/src/fork/api.ts +28 -14
- package/src/fork/manager.ts +88 -43
- package/src/fork/server.ts +53 -19
- package/src/fork/storage.ts +12 -15
- package/src/fork/test.ts +58 -32
- package/src/harness/Harness.ts +228 -0
- package/src/harness/codeObject.ts +388 -0
- package/src/harness/errors.ts +22 -0
- package/src/harness/index.ts +3 -0
- package/src/harness/proxy.ts +40 -0
- package/src/harness/script.ts +196 -0
- package/src/harness/view.ts +34 -0
- package/src/helpers/__tests__/semver-utils.test.ts +121 -0
- package/src/helpers/index.ts +2 -8
- package/src/helpers/move-tests.ts +27 -23
- package/src/helpers/npm-registry.ts +4 -3
- package/src/helpers/semver-utils.ts +4 -3
- package/src/helpers/setup.ts +9 -5
- package/src/helpers/setupLocalTesting.ts +219 -200
- package/src/helpers/testFixtures.ts +106 -118
- package/src/index.ts +9 -3
- package/src/node/LocalNodeManager.ts +87 -62
- package/src/node/__tests__/LocalNodeManager.test.ts +452 -0
- package/src/runtime.ts +33 -289
- package/src/templates/README.md +1 -1
- package/src/templates/movehat.config.ts +10 -0
- package/src/templates/package.json +2 -1
- package/src/templates/scripts/deploy-counter.ts +46 -38
- package/src/templates/tests/Counter.test.ts +51 -51
- package/src/templates/types/movehat.d.ts +6 -9
- package/src/types/config.ts +8 -0
- package/src/types/fork.ts +7 -1
- package/src/types/harness.ts +182 -0
- package/src/types/runtime.ts +11 -3
- package/src/ui/__tests__/colors.test.ts +156 -0
- package/src/ui/colors.ts +5 -2
- package/src/ui/logger.ts +22 -0
- package/src/ui/symbols.ts +7 -1
- package/src/utils/__tests__/address.test.ts +93 -0
- package/src/utils/__tests__/childProcessAdapter.test.ts +266 -0
- package/src/utils/__tests__/runCli.test.ts +240 -0
- package/src/utils/address.ts +56 -0
- package/src/utils/childProcessAdapter.ts +215 -0
- package/src/utils/parseCliOutput.ts +27 -0
- package/src/utils/redact.ts +24 -0
- package/src/utils/runCli.ts +64 -0
package/src/commands/update.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { spawn } from "child_process";
|
|
2
1
|
import { readFileSync, existsSync } from "fs";
|
|
3
2
|
import { join, dirname, resolve } from "path";
|
|
4
3
|
import { fileURLToPath } from "url";
|
|
@@ -7,6 +6,7 @@ import prompts from "prompts";
|
|
|
7
6
|
import { isNewerVersion } from "../helpers/semver-utils.js";
|
|
8
7
|
import { fetchLatestVersion } from "../helpers/npm-registry.js";
|
|
9
8
|
import { logger, withSpinner, box, colors } from "../ui/index.js";
|
|
9
|
+
import { runCli } from "../utils/runCli.js";
|
|
10
10
|
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
12
|
const __dirname = dirname(__filename);
|
|
@@ -159,35 +159,38 @@ export default async function updateCommand() {
|
|
|
159
159
|
break;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
// Execute update
|
|
163
|
-
// Use home directory as cwd to avoid packageManager conflicts from local package.json
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
162
|
+
// Execute update.
|
|
163
|
+
// Use home directory as cwd to avoid packageManager conflicts from local package.json.
|
|
164
|
+
try {
|
|
165
|
+
const result = await runCli(
|
|
166
|
+
{
|
|
167
|
+
command: packageManager,
|
|
168
|
+
args: updateArgs,
|
|
169
|
+
cwd: homedir() || process.cwd(),
|
|
170
|
+
inheritStdio: true,
|
|
171
|
+
},
|
|
172
|
+
{ throwOnNonZeroExit: false }
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
if (result.exitCode === 0) {
|
|
171
176
|
logger.newline();
|
|
172
177
|
logger.success(`Successfully updated to version ${latestVersion}!`);
|
|
173
178
|
logger.newline();
|
|
174
179
|
process.exit(0);
|
|
175
180
|
} else {
|
|
176
181
|
logger.newline();
|
|
177
|
-
logger.error(
|
|
182
|
+
logger.error("Update failed");
|
|
178
183
|
logger.plain(` Try manually: ${packageManager} ${updateArgs.join(" ")}`);
|
|
179
184
|
logger.newline();
|
|
180
185
|
process.exit(1);
|
|
181
186
|
}
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
child.on("error", (error) => {
|
|
187
|
+
} catch (error) {
|
|
185
188
|
logger.newline();
|
|
186
|
-
logger.error(`Failed to update: ${error.message}`);
|
|
189
|
+
logger.error(`Failed to update: ${(error as Error).message}`);
|
|
187
190
|
logger.plain(` Try manually: ${packageManager} ${updateArgs.join(" ")}`);
|
|
188
191
|
logger.newline();
|
|
189
192
|
process.exit(1);
|
|
190
|
-
}
|
|
193
|
+
}
|
|
191
194
|
} catch (error) {
|
|
192
195
|
const message = error instanceof Error ? error.message : String(error);
|
|
193
196
|
logger.newline();
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
Account,
|
|
3
3
|
Ed25519PrivateKey,
|
|
4
4
|
} from "@aptos-labs/ts-sdk";
|
|
5
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
5
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { MovehatConfig } from "../types/config.js";
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ import { MovehatConfig } from "../types/config.js";
|
|
|
10
10
|
* Represents a stored account in the pool
|
|
11
11
|
*/
|
|
12
12
|
export interface StoredAccount {
|
|
13
|
-
label?: string;
|
|
13
|
+
label?: string | undefined;
|
|
14
14
|
privateKey: string;
|
|
15
15
|
address: string;
|
|
16
16
|
createdAt: number;
|
|
@@ -173,9 +173,10 @@ export class AccountManager {
|
|
|
173
173
|
try {
|
|
174
174
|
const account = this.loadAccountFromPrivateKey(privateKeyHex);
|
|
175
175
|
accounts.push(account);
|
|
176
|
-
} catch (error
|
|
176
|
+
} catch (error) {
|
|
177
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
177
178
|
console.warn(
|
|
178
|
-
`Warning: Failed to load account from config: ${
|
|
179
|
+
`Warning: Failed to load account from config: ${msg}`
|
|
179
180
|
);
|
|
180
181
|
}
|
|
181
182
|
}
|
|
@@ -216,10 +217,14 @@ export class AccountManager {
|
|
|
216
217
|
static saveAccountPool(poolPath?: string): void {
|
|
217
218
|
const basePath = poolPath || this.defaultPoolPath;
|
|
218
219
|
|
|
219
|
-
// Ensure directory exists
|
|
220
|
+
// Ensure directory exists with restrictive perms (the pool file holds
|
|
221
|
+
// plaintext private keys, so the directory must not be world-readable).
|
|
222
|
+
// Note: mkdirSync's mode is masked by the process umask, so we chmod
|
|
223
|
+
// explicitly afterwards to guarantee 0o700 regardless of umask.
|
|
220
224
|
if (!existsSync(basePath)) {
|
|
221
|
-
mkdirSync(basePath, { recursive: true });
|
|
225
|
+
mkdirSync(basePath, { recursive: true, mode: 0o700 });
|
|
222
226
|
}
|
|
227
|
+
chmodSync(basePath, 0o700);
|
|
223
228
|
|
|
224
229
|
// Build stored accounts array
|
|
225
230
|
const storedAccounts: StoredAccount[] = [];
|
|
@@ -255,9 +260,16 @@ export class AccountManager {
|
|
|
255
260
|
labelMap: labelMapObject,
|
|
256
261
|
};
|
|
257
262
|
|
|
258
|
-
// Write to file
|
|
263
|
+
// Write to file with owner-only permissions — file contains plaintext
|
|
264
|
+
// private keys for test accounts. writeFileSync's mode is masked by
|
|
265
|
+
// the process umask, so we chmod explicitly afterwards to guarantee
|
|
266
|
+
// 0o600 regardless of umask.
|
|
259
267
|
const poolFilePath = join(basePath, "test-pool.json");
|
|
260
|
-
writeFileSync(poolFilePath, JSON.stringify(poolData, null, 2),
|
|
268
|
+
writeFileSync(poolFilePath, JSON.stringify(poolData, null, 2), {
|
|
269
|
+
encoding: "utf-8",
|
|
270
|
+
mode: 0o600,
|
|
271
|
+
});
|
|
272
|
+
chmodSync(poolFilePath, 0o600);
|
|
261
273
|
}
|
|
262
274
|
|
|
263
275
|
/**
|
|
@@ -311,9 +323,10 @@ export class AccountManager {
|
|
|
311
323
|
|
|
312
324
|
this.poolLoaded = true;
|
|
313
325
|
return true;
|
|
314
|
-
} catch (error
|
|
326
|
+
} catch (error) {
|
|
327
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
315
328
|
console.warn(
|
|
316
|
-
`Warning: Failed to load account pool: ${
|
|
329
|
+
`Warning: Failed to load account pool: ${msg}`
|
|
317
330
|
);
|
|
318
331
|
return false;
|
|
319
332
|
}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { homedir } from "os";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { randomUUID } from "crypto";
|
|
4
|
+
import { Account } from "@aptos-labs/ts-sdk";
|
|
5
|
+
import { MovehatConfig } from "../types/config.js";
|
|
6
|
+
import { extractNamedAddresses } from "../commands/compile.js";
|
|
7
|
+
import {
|
|
8
|
+
saveDeployment,
|
|
9
|
+
loadDeployment,
|
|
10
|
+
DeploymentInfo,
|
|
11
|
+
validateSafeName,
|
|
12
|
+
} from "./deployments.js";
|
|
13
|
+
import { validatePathSafety, validateProfileSafety } from "./shell.js";
|
|
14
|
+
import { CliExecutionError, ModuleAlreadyDeployedError, PostPublishError } from "../errors.js";
|
|
15
|
+
import { runCli } from "../utils/runCli.js";
|
|
16
|
+
import { logger } from "../ui/index.js";
|
|
17
|
+
import type { ChildProcessAdapter } from "../utils/childProcessAdapter.js";
|
|
18
|
+
import {
|
|
19
|
+
withYamlLock,
|
|
20
|
+
addProfile,
|
|
21
|
+
removeProfile,
|
|
22
|
+
removeProfileSync,
|
|
23
|
+
ensureSignalHandler,
|
|
24
|
+
cleanupCallbacks,
|
|
25
|
+
} from "./movementProfile.js";
|
|
26
|
+
import { parseTxHash } from "../utils/parseCliOutput.js";
|
|
27
|
+
|
|
28
|
+
/** @internal */
|
|
29
|
+
export interface PublisherDeps {
|
|
30
|
+
adapter?: ChildProcessAdapter | undefined;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** @internal */
|
|
34
|
+
export interface PublishInput {
|
|
35
|
+
moduleName: string;
|
|
36
|
+
config: MovehatConfig;
|
|
37
|
+
account: Account;
|
|
38
|
+
packageDir?: string | undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Publishes a Move module via the Movement CLI.
|
|
43
|
+
*
|
|
44
|
+
* Extracted from `runtime.deployContract` (M1.4 / #79). Carries the
|
|
45
|
+
* destructive Move.toml-rewrite + shared-yaml-write semantics of the
|
|
46
|
+
* original closure verbatim in this scaffold commit — bug fixes for
|
|
47
|
+
* #36 / #37 / #38 land in subsequent commits.
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export class Publisher {
|
|
52
|
+
constructor(private readonly deps: PublisherDeps = {}) {}
|
|
53
|
+
|
|
54
|
+
async deploy(input: PublishInput): Promise<DeploymentInfo> {
|
|
55
|
+
const { moduleName, config, account } = input;
|
|
56
|
+
|
|
57
|
+
// Validate moduleName early
|
|
58
|
+
validateSafeName(moduleName, "module");
|
|
59
|
+
|
|
60
|
+
// Check if --redeploy flag was passed via CLI
|
|
61
|
+
const forceRedeploy = process.env.MH_CLI_REDEPLOY === "true";
|
|
62
|
+
|
|
63
|
+
// Check if already deployed
|
|
64
|
+
const existingDeployment = loadDeployment(config.network, moduleName);
|
|
65
|
+
if (existingDeployment && !forceRedeploy) {
|
|
66
|
+
// Build detailed error message with all deployment info
|
|
67
|
+
const errorDetails = [
|
|
68
|
+
`Module "${moduleName}" is already deployed on ${config.network}`,
|
|
69
|
+
`Address: ${existingDeployment.address}`,
|
|
70
|
+
`Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`,
|
|
71
|
+
existingDeployment.txHash ? `Transaction: ${existingDeployment.txHash}` : null,
|
|
72
|
+
`\nTo redeploy, run with the --redeploy flag:`,
|
|
73
|
+
`movehat run <script> --network ${config.network} --redeploy`,
|
|
74
|
+
]
|
|
75
|
+
.filter(Boolean)
|
|
76
|
+
.join("\n");
|
|
77
|
+
|
|
78
|
+
// Log formatted error message for user
|
|
79
|
+
logger.error(`Module "${moduleName}" is already deployed on ${config.network}`);
|
|
80
|
+
logger.plain(` Address: ${existingDeployment.address}`);
|
|
81
|
+
logger.plain(
|
|
82
|
+
` Deployed at: ${new Date(existingDeployment.timestamp).toLocaleString()}`
|
|
83
|
+
);
|
|
84
|
+
if (existingDeployment.txHash) {
|
|
85
|
+
logger.plain(` Transaction: ${existingDeployment.txHash}`);
|
|
86
|
+
}
|
|
87
|
+
logger.newline();
|
|
88
|
+
logger.info("To redeploy, run with the --redeploy flag:");
|
|
89
|
+
logger.plain(` movehat run <script> --network ${config.network} --redeploy`);
|
|
90
|
+
logger.newline();
|
|
91
|
+
|
|
92
|
+
// Throw custom error with complete context for programmatic handling
|
|
93
|
+
throw new ModuleAlreadyDeployedError(
|
|
94
|
+
errorDetails,
|
|
95
|
+
moduleName,
|
|
96
|
+
config.network,
|
|
97
|
+
existingDeployment.address,
|
|
98
|
+
existingDeployment.timestamp,
|
|
99
|
+
existingDeployment.txHash
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (forceRedeploy && existingDeployment) {
|
|
104
|
+
logger.info(`Redeploying module "${moduleName}" on ${config.network}...`);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const dir = input.packageDir || config.moveDir;
|
|
108
|
+
|
|
109
|
+
// Bug #37: use a UUID-suffixed profile name per deploy so concurrent
|
|
110
|
+
// Publisher.deploy() calls in the same process don't fight over the
|
|
111
|
+
// same key in ~/.aptos/config.yaml. The previous code reused
|
|
112
|
+
// config.profile (default "default"), which meant two parallel
|
|
113
|
+
// deploys would clobber each other's profile data mid-publish.
|
|
114
|
+
const profile = `movehat-deploy-${randomUUID().slice(0, 8)}`;
|
|
115
|
+
|
|
116
|
+
// Validate (no shell escape — runCli uses spawn, which takes args
|
|
117
|
+
// verbatim and would treat the single-quote wrapping as part of the
|
|
118
|
+
// literal path/profile, breaking Movement CLI argument parsing).
|
|
119
|
+
const safeDir = validatePathSafety(dir, "package directory");
|
|
120
|
+
const safeProfile = validateProfileSafety(profile);
|
|
121
|
+
|
|
122
|
+
logger.step(`Publishing module "${moduleName}" from ${dir}...`);
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
// Get the deployer address to use for named addresses
|
|
126
|
+
const deployerAddress = account.accountAddress.toString();
|
|
127
|
+
|
|
128
|
+
// Detect named addresses from Move files
|
|
129
|
+
const detectedAddresses = extractNamedAddresses(dir);
|
|
130
|
+
|
|
131
|
+
// Build named addresses argument - use deployer address for all detected addresses.
|
|
132
|
+
// Stored as a pre-split args fragment so the spawn path never has to parse
|
|
133
|
+
// shell tokens; an empty fragment becomes a no-op via spread.
|
|
134
|
+
const namedAddrArgs: string[] =
|
|
135
|
+
detectedAddresses.size > 0
|
|
136
|
+
? [
|
|
137
|
+
"--named-addresses",
|
|
138
|
+
Array.from(detectedAddresses)
|
|
139
|
+
.map((name) => `${name}=${deployerAddress}`)
|
|
140
|
+
.join(","),
|
|
141
|
+
]
|
|
142
|
+
: [];
|
|
143
|
+
|
|
144
|
+
// Build first with named addresses
|
|
145
|
+
logger.step("Building package...");
|
|
146
|
+
const buildResult = await runCli(
|
|
147
|
+
{
|
|
148
|
+
command: "movement",
|
|
149
|
+
args: ["move", "build", "--package-dir", safeDir, ...namedAddrArgs],
|
|
150
|
+
timeoutMs: 120000, // 2 minutes for git dependency downloads
|
|
151
|
+
},
|
|
152
|
+
{ adapter: this.deps.adapter }
|
|
153
|
+
);
|
|
154
|
+
if (buildResult.stdout) console.log(buildResult.stdout.trim());
|
|
155
|
+
|
|
156
|
+
// Publish using direct parameters (avoid config file issues)
|
|
157
|
+
logger.step("Publishing to blockchain...");
|
|
158
|
+
|
|
159
|
+
// Use parameters directly instead of relying on config file
|
|
160
|
+
// Strip any ed25519-priv- prefix if present
|
|
161
|
+
let cleanPrivateKey = config.privateKey;
|
|
162
|
+
if (cleanPrivateKey.startsWith("ed25519-priv-")) {
|
|
163
|
+
cleanPrivateKey = cleanPrivateKey.replace("ed25519-priv-", "");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Bug #38: Move.toml is NOT mutated. All address overrides flow
|
|
167
|
+
// through the `--named-addresses` flag above, which Movement CLI
|
|
168
|
+
// applies during build + publish. The previous regex rewrite +
|
|
169
|
+
// restore-in-finally was destructive: if the process died between
|
|
170
|
+
// write and restore, the user's Move.toml stayed mutated.
|
|
171
|
+
|
|
172
|
+
let publishOut = "";
|
|
173
|
+
let publishErr = "";
|
|
174
|
+
|
|
175
|
+
// Setup Movement CLI config with private key securely.
|
|
176
|
+
// Movement CLI uses .aptos config directory (not .movement).
|
|
177
|
+
const movementConfigPath = join(homedir(), ".aptos", "config.yaml");
|
|
178
|
+
|
|
179
|
+
// Register a sync cleanup hook BEFORE writing the private key.
|
|
180
|
+
// If the user Ctrl+C's (or the process is SIGTERM'd) between the
|
|
181
|
+
// yaml write and our async finally, the SIGINT handler iterates
|
|
182
|
+
// every registered callback and removes this deploy's profile
|
|
183
|
+
// synchronously — closes bug #36 (private key persisting on disk
|
|
184
|
+
// after abnormal exit).
|
|
185
|
+
ensureSignalHandler();
|
|
186
|
+
const syncCleanup = () => removeProfileSync(movementConfigPath, profile);
|
|
187
|
+
cleanupCallbacks.add(syncCleanup);
|
|
188
|
+
|
|
189
|
+
// Add our deploy profile under the unique key. The mutex serializes
|
|
190
|
+
// read-modify-write cycles so concurrent deploys in the same process
|
|
191
|
+
// can't drop each other's profiles. Other user profiles in the same
|
|
192
|
+
// file are preserved untouched.
|
|
193
|
+
await withYamlLock(() =>
|
|
194
|
+
addProfile(movementConfigPath, profile, {
|
|
195
|
+
private_key: cleanPrivateKey,
|
|
196
|
+
public_key: account.publicKey.toString(),
|
|
197
|
+
account: deployerAddress,
|
|
198
|
+
rest_url: config.rpc,
|
|
199
|
+
})
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
try {
|
|
203
|
+
// Execute publish command without exposing private key in CLI.
|
|
204
|
+
// Routed through runCli so stdout/stderr are redacted of any
|
|
205
|
+
// `ed25519-priv-…` shape before reaching console.log/console.error
|
|
206
|
+
// or the thrown CliExecutionError — that's bug #43.
|
|
207
|
+
const publishResult = await runCli(
|
|
208
|
+
{
|
|
209
|
+
command: "movement",
|
|
210
|
+
args: [
|
|
211
|
+
"move",
|
|
212
|
+
"publish",
|
|
213
|
+
"--package-dir",
|
|
214
|
+
safeDir,
|
|
215
|
+
"--url",
|
|
216
|
+
config.rpc,
|
|
217
|
+
"--profile",
|
|
218
|
+
safeProfile,
|
|
219
|
+
"--assume-yes",
|
|
220
|
+
...namedAddrArgs,
|
|
221
|
+
],
|
|
222
|
+
timeoutMs: 120000, // 2 minutes for blockchain transactions
|
|
223
|
+
},
|
|
224
|
+
{ adapter: this.deps.adapter }
|
|
225
|
+
);
|
|
226
|
+
publishOut = publishResult.stdout;
|
|
227
|
+
publishErr = publishResult.stderr;
|
|
228
|
+
if (publishOut) console.log(publishOut.trim());
|
|
229
|
+
if (publishErr) console.error(publishErr.trim());
|
|
230
|
+
} finally {
|
|
231
|
+
// Always remove our profile from the shared yaml — never restore
|
|
232
|
+
// a "snapshot" of the whole file (that's what the old code did,
|
|
233
|
+
// and that's the bug #37 race). Removing only our key leaves
|
|
234
|
+
// other concurrent deploys' profiles intact.
|
|
235
|
+
//
|
|
236
|
+
// CRITICAL: catch + log instead of throwing. `await` in a finally
|
|
237
|
+
// block that throws will clobber both the try block's successful
|
|
238
|
+
// return value AND any error already propagating. Without this
|
|
239
|
+
// catch, a yaml-write failure here would mask a successful
|
|
240
|
+
// publish (making the deploy look failed and inviting a redeploy)
|
|
241
|
+
// or mask the real publish error.
|
|
242
|
+
await withYamlLock(() => removeProfile(movementConfigPath, profile)).catch((err) => {
|
|
243
|
+
const cleanupMsg = err instanceof Error ? err.message : String(err);
|
|
244
|
+
logger.warning(
|
|
245
|
+
`Failed to remove deploy profile "${profile}" from ${movementConfigPath}: ${cleanupMsg}. ` +
|
|
246
|
+
`Run 'movement config delete-profile --profile ${profile}' to clean up manually.`
|
|
247
|
+
);
|
|
248
|
+
});
|
|
249
|
+
// Unregister the sync cleanup hook — normal path. (The signal
|
|
250
|
+
// handler stays installed for the process lifetime; cheap.)
|
|
251
|
+
cleanupCallbacks.delete(syncCleanup);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Extract transaction hash from output via the shared helper
|
|
255
|
+
// (`utils/parseCliOutput.ts`). Same regex pair as before; lifted
|
|
256
|
+
// for reuse by harness/codeObject.ts and harness/script.ts.
|
|
257
|
+
const txHash = parseTxHash(publishOut);
|
|
258
|
+
|
|
259
|
+
logger.success("Module published successfully!");
|
|
260
|
+
|
|
261
|
+
// ←← "Publish succeeded" boundary. Anything thrown below this
|
|
262
|
+
// point did NOT cause the publish to fail — the module is on
|
|
263
|
+
// chain. We surface those failures as PostPublishError so callers
|
|
264
|
+
// can distinguish a genuine publish failure from a local
|
|
265
|
+
// bookkeeping failure (and avoid a wasteful redeploy).
|
|
266
|
+
|
|
267
|
+
const deployment: DeploymentInfo = {
|
|
268
|
+
address: account.accountAddress.toString(),
|
|
269
|
+
moduleName,
|
|
270
|
+
network: config.network,
|
|
271
|
+
deployer: account.accountAddress.toString(),
|
|
272
|
+
timestamp: Date.now(),
|
|
273
|
+
txHash,
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
try {
|
|
277
|
+
saveDeployment(deployment);
|
|
278
|
+
} catch (error) {
|
|
279
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
280
|
+
throw new PostPublishError(
|
|
281
|
+
`Module "${moduleName}" published to ${deployment.address} ` +
|
|
282
|
+
`but local deployment record could not be written: ${err.message}`,
|
|
283
|
+
deployment,
|
|
284
|
+
err
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return deployment;
|
|
289
|
+
} catch (error) {
|
|
290
|
+
if (error instanceof PostPublishError) {
|
|
291
|
+
// Publish DID succeed; only local persistence failed. Log as
|
|
292
|
+
// warning (not error) so the user knows the deploy is real on
|
|
293
|
+
// chain. Re-throw so programmatic callers can react.
|
|
294
|
+
logger.warning(
|
|
295
|
+
`Module published successfully to ${error.deployment.address} ` +
|
|
296
|
+
`(tx=${error.deployment.txHash ?? "unknown"}) ` +
|
|
297
|
+
`but local deployment record could not be written.`
|
|
298
|
+
);
|
|
299
|
+
logger.warning(` Cause: ${error.cause.message}`);
|
|
300
|
+
logger.warning(
|
|
301
|
+
` To recover, manually write the deployment to ` +
|
|
302
|
+
`deployments/${error.deployment.network}/${error.deployment.moduleName}.json.`
|
|
303
|
+
);
|
|
304
|
+
throw error;
|
|
305
|
+
}
|
|
306
|
+
if (error instanceof CliExecutionError) {
|
|
307
|
+
// stdout/stderr are already redacted by runCli before reaching here,
|
|
308
|
+
// so this branch is safe to log verbatim.
|
|
309
|
+
if (error.stdoutPreview) console.log(error.stdoutPreview);
|
|
310
|
+
logger.error(`Failed to publish module: ${error.message}\n${error.stderr}`);
|
|
311
|
+
} else {
|
|
312
|
+
// Preserve existing behaviour for non-CLI errors (filesystem write
|
|
313
|
+
// failures from Move.toml / ~/.aptos/config.yaml, yaml parse errors,
|
|
314
|
+
// etc.). These paths can't carry private-key material so logging raw
|
|
315
|
+
// is safe.
|
|
316
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
317
|
+
logger.error(`Failed to publish module: ${err.message}`);
|
|
318
|
+
}
|
|
319
|
+
throw error;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|