movehat 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +132 -279
  2. package/dist/__tests__/deployContract.test.js +56 -47
  3. package/dist/__tests__/deployContract.test.js.map +1 -1
  4. package/dist/__tests__/exports.test.d.ts +2 -0
  5. package/dist/__tests__/exports.test.d.ts.map +1 -0
  6. package/dist/__tests__/exports.test.js +30 -0
  7. package/dist/__tests__/exports.test.js.map +1 -0
  8. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +4 -3
  9. package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +1 -1
  10. package/dist/__tests__/fixtures/sigint-deploy-harness.js +8 -7
  11. package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +1 -1
  12. package/dist/__tests__/fork/api.test.js +7 -2
  13. package/dist/__tests__/fork/api.test.js.map +1 -1
  14. package/dist/__tests__/fork/api.timeout.test.d.ts +2 -0
  15. package/dist/__tests__/fork/api.timeout.test.d.ts.map +1 -0
  16. package/dist/__tests__/fork/api.timeout.test.js +98 -0
  17. package/dist/__tests__/fork/api.timeout.test.js.map +1 -0
  18. package/dist/__tests__/harness/Harness.proxy.test.js +7 -11
  19. package/dist/__tests__/harness/Harness.proxy.test.js.map +1 -1
  20. package/dist/__tests__/harness/codeObject.deploy.test.js +1 -1
  21. package/dist/__tests__/harness/codeObject.deploy.test.js.map +1 -1
  22. package/dist/__tests__/harness/view.test.js +3 -3
  23. package/dist/commands/__tests__/compile.toml-mutation.test.d.ts +2 -0
  24. package/dist/commands/__tests__/compile.toml-mutation.test.d.ts.map +1 -0
  25. package/dist/commands/__tests__/compile.toml-mutation.test.js +69 -0
  26. package/dist/commands/__tests__/compile.toml-mutation.test.js.map +1 -0
  27. package/dist/commands/__tests__/init.test.js +73 -11
  28. package/dist/commands/__tests__/init.test.js.map +1 -1
  29. package/dist/commands/__tests__/run.test.js +3 -3
  30. package/dist/commands/__tests__/run.test.js.map +1 -1
  31. package/dist/commands/init.d.ts +22 -0
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +55 -6
  34. package/dist/commands/init.js.map +1 -1
  35. package/dist/core/AccountManager.d.ts +0 -3
  36. package/dist/core/AccountManager.d.ts.map +1 -1
  37. package/dist/core/AccountManager.js +14 -7
  38. package/dist/core/AccountManager.js.map +1 -1
  39. package/dist/core/Publisher.d.ts +0 -5
  40. package/dist/core/Publisher.d.ts.map +1 -1
  41. package/dist/core/Publisher.js +52 -76
  42. package/dist/core/Publisher.js.map +1 -1
  43. package/dist/core/__tests__/AccountManager.global-state.test.d.ts +2 -0
  44. package/dist/core/__tests__/AccountManager.global-state.test.d.ts.map +1 -0
  45. package/dist/core/__tests__/AccountManager.global-state.test.js +69 -0
  46. package/dist/core/__tests__/AccountManager.global-state.test.js.map +1 -0
  47. package/dist/core/__tests__/movementProfile.test.d.ts +2 -0
  48. package/dist/core/__tests__/movementProfile.test.d.ts.map +1 -0
  49. package/dist/core/__tests__/movementProfile.test.js +112 -0
  50. package/dist/core/__tests__/movementProfile.test.js.map +1 -0
  51. package/dist/core/config.js +6 -5
  52. package/dist/core/config.js.map +1 -1
  53. package/dist/core/contract.d.ts +0 -3
  54. package/dist/core/contract.d.ts.map +1 -1
  55. package/dist/core/contract.js +0 -3
  56. package/dist/core/contract.js.map +1 -1
  57. package/dist/core/deployments.d.ts +0 -6
  58. package/dist/core/deployments.d.ts.map +1 -1
  59. package/dist/core/deployments.js +0 -12
  60. package/dist/core/deployments.js.map +1 -1
  61. package/dist/core/movementProfile.d.ts +55 -22
  62. package/dist/core/movementProfile.d.ts.map +1 -1
  63. package/dist/core/movementProfile.js +77 -99
  64. package/dist/core/movementProfile.js.map +1 -1
  65. package/dist/fork/__tests__/manager.test.js +1 -1
  66. package/dist/fork/__tests__/server.cors.test.d.ts +2 -0
  67. package/dist/fork/__tests__/server.cors.test.d.ts.map +1 -0
  68. package/dist/fork/__tests__/server.cors.test.js +79 -0
  69. package/dist/fork/__tests__/server.cors.test.js.map +1 -0
  70. package/dist/fork/api.d.ts +9 -1
  71. package/dist/fork/api.d.ts.map +1 -1
  72. package/dist/fork/api.js +37 -7
  73. package/dist/fork/api.js.map +1 -1
  74. package/dist/fork/manager.d.ts +1 -21
  75. package/dist/fork/manager.d.ts.map +1 -1
  76. package/dist/fork/manager.js +1 -41
  77. package/dist/fork/manager.js.map +1 -1
  78. package/dist/fork/server.d.ts +20 -1
  79. package/dist/fork/server.d.ts.map +1 -1
  80. package/dist/fork/server.js +19 -9
  81. package/dist/fork/server.js.map +1 -1
  82. package/dist/fork/test.d.ts +0 -1
  83. package/dist/fork/test.d.ts.map +1 -1
  84. package/dist/fork/test.js.map +1 -1
  85. package/dist/harness/Harness.d.ts +11 -13
  86. package/dist/harness/Harness.d.ts.map +1 -1
  87. package/dist/harness/Harness.js +13 -13
  88. package/dist/harness/Harness.js.map +1 -1
  89. package/dist/harness/codeObject.d.ts.map +1 -1
  90. package/dist/harness/codeObject.js +31 -38
  91. package/dist/harness/codeObject.js.map +1 -1
  92. package/dist/harness/script.d.ts +3 -3
  93. package/dist/harness/script.d.ts.map +1 -1
  94. package/dist/harness/script.js +33 -29
  95. package/dist/harness/script.js.map +1 -1
  96. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.d.ts +2 -0
  97. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.d.ts.map +1 -0
  98. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.js +172 -0
  99. package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.js.map +1 -0
  100. package/dist/helpers/setupLocalTesting.d.ts +1 -2
  101. package/dist/helpers/setupLocalTesting.d.ts.map +1 -1
  102. package/dist/helpers/setupLocalTesting.js +28 -2
  103. package/dist/helpers/setupLocalTesting.js.map +1 -1
  104. package/dist/index.d.ts +1 -0
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +0 -1
  107. package/dist/index.js.map +1 -1
  108. package/dist/node/LocalNodeManager.d.ts +8 -0
  109. package/dist/node/LocalNodeManager.d.ts.map +1 -1
  110. package/dist/node/LocalNodeManager.js +10 -1
  111. package/dist/node/LocalNodeManager.js.map +1 -1
  112. package/dist/node/__tests__/LocalNodeManager.api-port.test.d.ts +2 -0
  113. package/dist/node/__tests__/LocalNodeManager.api-port.test.d.ts.map +1 -0
  114. package/dist/node/__tests__/LocalNodeManager.api-port.test.js +55 -0
  115. package/dist/node/__tests__/LocalNodeManager.api-port.test.js.map +1 -0
  116. package/dist/node/__tests__/LocalNodeManager.test.js +4 -3
  117. package/dist/node/__tests__/LocalNodeManager.test.js.map +1 -1
  118. package/dist/runtime.d.ts.map +1 -1
  119. package/dist/runtime.js +1 -3
  120. package/dist/runtime.js.map +1 -1
  121. package/dist/templates/move/Move.toml +1 -1
  122. package/dist/templates/move/sources/Counter.move +31 -4
  123. package/dist/templates/scripts/deploy-counter.ts +11 -1
  124. package/dist/templates/tests/Counter.test.ts +2 -2
  125. package/dist/types/config.d.ts +8 -1
  126. package/dist/types/config.d.ts.map +1 -1
  127. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.d.ts +2 -0
  128. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.d.ts.map +1 -0
  129. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.js +43 -0
  130. package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.js.map +1 -0
  131. package/dist/utils/address.d.ts +0 -4
  132. package/dist/utils/address.d.ts.map +1 -1
  133. package/dist/utils/address.js +0 -4
  134. package/dist/utils/address.js.map +1 -1
  135. package/dist/utils/childProcessAdapter.d.ts +7 -0
  136. package/dist/utils/childProcessAdapter.d.ts.map +1 -1
  137. package/dist/utils/childProcessAdapter.js +23 -6
  138. package/dist/utils/childProcessAdapter.js.map +1 -1
  139. package/package.json +2 -1
  140. package/src/__tests__/deployContract.test.ts +59 -50
  141. package/src/__tests__/exports.test.ts +32 -0
  142. package/src/__tests__/fixtures/sigint-deploy-harness.ts +8 -7
  143. package/src/__tests__/fork/api.test.ts +7 -2
  144. package/src/__tests__/fork/api.timeout.test.ts +150 -0
  145. package/src/__tests__/harness/Harness.proxy.test.ts +7 -11
  146. package/src/__tests__/harness/codeObject.deploy.test.ts +1 -1
  147. package/src/__tests__/harness/view.test.ts +3 -3
  148. package/src/commands/__tests__/compile.toml-mutation.test.ts +77 -0
  149. package/src/commands/__tests__/init.test.ts +96 -11
  150. package/src/commands/__tests__/run.test.ts +3 -3
  151. package/src/commands/init.ts +77 -6
  152. package/src/core/AccountManager.ts +18 -13
  153. package/src/core/Publisher.ts +58 -85
  154. package/src/core/__tests__/AccountManager.global-state.test.ts +83 -0
  155. package/src/core/__tests__/movementProfile.test.ts +131 -0
  156. package/src/core/config.ts +9 -5
  157. package/src/core/contract.ts +0 -3
  158. package/src/core/deployments.ts +0 -12
  159. package/src/core/movementProfile.ts +75 -127
  160. package/src/fork/__tests__/manager.test.ts +1 -1
  161. package/src/fork/__tests__/server.cors.test.ts +101 -0
  162. package/src/fork/api.ts +69 -10
  163. package/src/fork/manager.ts +1 -41
  164. package/src/fork/server.ts +38 -9
  165. package/src/fork/test.ts +0 -1
  166. package/src/harness/Harness.ts +16 -13
  167. package/src/harness/codeObject.ts +38 -48
  168. package/src/harness/script.ts +40 -39
  169. package/src/helpers/__tests__/setupLocalTesting.fork-network.test.ts +212 -0
  170. package/src/helpers/setupLocalTesting.ts +37 -4
  171. package/src/index.ts +9 -2
  172. package/src/node/LocalNodeManager.ts +24 -2
  173. package/src/node/__tests__/LocalNodeManager.api-port.test.ts +62 -0
  174. package/src/node/__tests__/LocalNodeManager.test.ts +5 -4
  175. package/src/runtime.ts +1 -3
  176. package/src/templates/move/Move.toml +1 -1
  177. package/src/templates/move/sources/Counter.move +31 -4
  178. package/src/templates/scripts/deploy-counter.ts +11 -1
  179. package/src/templates/tests/Counter.test.ts +2 -2
  180. package/src/types/config.ts +8 -1
  181. package/src/types/runtime.ts +2 -2
  182. package/src/utils/__tests__/childProcessAdapter.maxBuffer.test.ts +51 -0
  183. package/src/utils/address.ts +0 -4
  184. package/src/utils/childProcessAdapter.ts +35 -6
@@ -1,14 +1,12 @@
1
- import { homedir } from "os";
2
- import { join } from "path";
3
- import { randomUUID } from "crypto";
1
+ import { PrivateKey, PrivateKeyVariants } from "@aptos-labs/ts-sdk";
4
2
  import { extractNamedAddresses } from "../commands/compile.js";
5
3
  import { saveDeployment, loadDeployment, validateSafeName, } from "../core/deployments.js";
6
- import { validatePathSafety, validateProfileSafety } from "../core/shell.js";
4
+ import { validatePathSafety } from "../core/shell.js";
7
5
  import { CliExecutionError, ModuleAlreadyDeployedError, PostPublishError, } from "../errors.js";
8
6
  import { runCli } from "../utils/runCli.js";
9
7
  import { parseTxHash } from "../utils/parseCliOutput.js";
10
8
  import { logger } from "../ui/index.js";
11
- import { withYamlLock, addProfile, removeProfile, removeProfileSync, ensureSignalHandler, cleanupCallbacks, } from "../core/movementProfile.js";
9
+ import { writeTempKeyFile, removeKeyFile, removeKeyFileSyncBestEffort, ensureSignalHandler, cleanupCallbacks, } from "../core/movementProfile.js";
12
10
  /**
13
11
  * Deploy a Move package as a code object via `movement move deploy-object`.
14
12
  *
@@ -97,9 +95,7 @@ async function executeMovementMoveObject(opts) {
97
95
  }
98
96
  }
99
97
  const dir = opts.packageDir || config.moveDir;
100
- const profile = `movehat-deploy-${randomUUID().slice(0, 8)}`;
101
98
  const safeDir = validatePathSafety(dir, "package directory");
102
- const safeProfile = validateProfileSafety(profile);
103
99
  logger.step(`${subcommand === "deploy-object" ? "Deploying" : "Upgrading"} module "${moduleName}" from ${dir}...`);
104
100
  try {
105
101
  const deployerAddress = account.accountAddress.toString();
@@ -132,24 +128,22 @@ async function executeMovementMoveObject(opts) {
132
128
  }, { adapter: opts.adapter });
133
129
  if (buildResult.stdout)
134
130
  console.log(buildResult.stdout.trim());
135
- // Strip `ed25519-priv-` prefix if present Movement CLI expects the
136
- // raw hex.
137
- let cleanPrivateKey = config.privateKey;
138
- if (cleanPrivateKey.startsWith("ed25519-priv-")) {
139
- cleanPrivateKey = cleanPrivateKey.replace("ed25519-priv-", "");
140
- }
141
- const movementConfigPath = join(homedir(), ".aptos", "config.yaml");
142
- // Register SIGINT-safe sync cleanup BEFORE writing the key (same
143
- // pattern as Publisher — closes bug #36).
131
+ // Format the private key into AIP-80 shape so the Movement CLI
132
+ // doesn't emit its raw-hex deprecation warning. `formatPrivateKey`
133
+ // is idempotent for already-prefixed inputs.
134
+ const formattedPrivateKey = PrivateKey.formatPrivateKey(config.privateKey, PrivateKeyVariants.Ed25519);
135
+ // Pass the private key via a 0o600 temp file (--private-key-file)
136
+ // and the on-chain address via --sender-account. This avoids the
137
+ // CLI's profile-yaml lookup entirely — no CWD / HOME / .aptos /
138
+ // .movement dance, no CLI-variant dependency.
139
+ const keyFilePath = writeTempKeyFile(formattedPrivateKey);
140
+ // Register SIGINT-safe sync cleanup BEFORE invoking the CLI so
141
+ // the private key never persists on disk after an abnormal exit.
142
+ // The signal-handler path uses the best-effort variant because the
143
+ // event loop is dead and we cannot logger.warning.
144
144
  ensureSignalHandler();
145
- const syncCleanup = () => removeProfileSync(movementConfigPath, profile);
145
+ const syncCleanup = () => removeKeyFileSyncBestEffort(keyFilePath);
146
146
  cleanupCallbacks.add(syncCleanup);
147
- await withYamlLock(() => addProfile(movementConfigPath, profile, {
148
- private_key: cleanPrivateKey,
149
- public_key: account.publicKey.toString(),
150
- account: deployerAddress,
151
- rest_url: config.rpc,
152
- }));
153
147
  let deployOut = "";
154
148
  try {
155
149
  logger.step(`Running 'movement move ${subcommand}'${subcommand === "upgrade-object" ? "" : " (this may take a moment)"}...`);
@@ -167,8 +161,10 @@ async function executeMovementMoveObject(opts) {
167
161
  safeDir,
168
162
  "--url",
169
163
  config.rpc,
170
- "--profile",
171
- safeProfile,
164
+ "--private-key-file",
165
+ keyFilePath,
166
+ "--sender-account",
167
+ deployerAddress,
172
168
  "--assume-yes",
173
169
  ...includedArtifacts,
174
170
  ...namedAddrArgs,
@@ -183,19 +179,18 @@ async function executeMovementMoveObject(opts) {
183
179
  console.error(result.stderr.trim());
184
180
  }
185
181
  finally {
186
- // Best-effort profile removal. CRITICAL: catch + log instead of
187
- // re-throwing an await-in-finally that throws would clobber the
188
- // try block's success/error (the bug-#37 lesson from Publisher).
189
- await withYamlLock(() => removeProfile(movementConfigPath, profile)).catch((err) => {
190
- const cleanupMsg = err instanceof Error ? err.message : String(err);
191
- logger.warning(`Failed to remove deploy profile "${profile}" from ${movementConfigPath}: ${cleanupMsg}. ` +
192
- `Run 'movement config delete-profile --profile ${profile}' to clean up manually.`);
193
- });
182
+ // Unlink via the observable helper emit a warning if the file
183
+ // could not be removed AND still exists on disk (private key
184
+ // would persist silently otherwise). ENOENT and races are
185
+ // treated as benign success.
186
+ const cleanupErr = removeKeyFile(keyFilePath);
187
+ if (cleanupErr) {
188
+ logger.warning(`Failed to remove temp key file '${keyFilePath}': ${cleanupErr.message}. ` +
189
+ `The file has mode 0o600 but should be removed manually: rm ${keyFilePath}`);
190
+ }
194
191
  cleanupCallbacks.delete(syncCleanup);
195
192
  }
196
193
  // Parse object address (for deploy-object) and txHash (both flows).
197
- // No captured fixture exists at M2.2 commit time; M4 integration
198
- // tests validate against real CLI output.
199
194
  const objectAddress = opts.fixedAddress ?? parseObjectAddress(deployOut);
200
195
  const txHash = parseTxHash(deployOut);
201
196
  if (!objectAddress) {
@@ -247,9 +242,7 @@ async function executeMovementMoveObject(opts) {
247
242
  /**
248
243
  * Extract a code-object address from `movement move deploy-object` stdout.
249
244
  *
250
- * Movement CLI typically emits the address in one of these shapes (none
251
- * of them captured at M2.2 commit time — patterns are speculative, with
252
- * M4 integration tests as the validation gate):
245
+ * Movement CLI typically emits the address in one of these shapes:
253
246
  *
254
247
  * - Free text: `Code was successfully deployed to object address 0x…`
255
248
  * - Free text: `Object address: 0x…`
@@ -1 +1 @@
1
- {"version":3,"file":"codeObject.js","sourceRoot":"","sources":["../../src/harness/codeObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAOpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,GAEjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAuB,EACvB,OAAgC;IAEhC,OAAO,yBAAyB,CAAC;QAC/B,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,OAAiC;IAEjC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,yBAAyB,CAAC;QAC/B,OAAO;QACP,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE,CAAC,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC;QACtD,gBAAgB,EAAE,KAAK;QACvB,YAAY,EAAE,OAAO,CAAC,aAAa;KACpC,CAAC,CAAC;AACL,CAAC;AAyBD,KAAK,UAAU,yBAAyB,CACtC,IAAoB;IAEpB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEvC,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;IAC7D,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC5D,IAAI,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG;gBACnB,WAAW,UAAU,4BAA4B,MAAM,CAAC,OAAO,EAAE;gBACjE,YAAY,QAAQ,CAAC,OAAO,EAAE;gBAC9B,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE;gBAC/D,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC1D,+FAA+F,QAAQ,CAAC,OAAO,YAAY;aAC5H;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,CAAC,KAAK,CACV,WAAW,UAAU,4BAA4B,MAAM,CAAC,OAAO,EAAE,CAClE,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,KAAK,CACV,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CACnE,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM;gBAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,MAAM,IAAI,0BAA0B,CAClC,YAAY,EACZ,UAAU,EACV,MAAM,CAAC,OAAO,EACd,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,MAAM,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC;IAC9C,MAAM,OAAO,GAAG,kBAAkB,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAEnD,MAAM,CAAC,IAAI,CACT,GAAG,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,YAAY,UAAU,UAAU,GAAG,KAAK,CACtG,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAE1D,mEAAmE;QACnE,8DAA8D;QAC9D,mDAAmD;QACnD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,iBAAiB;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,aAAa,GACjB,OAAO,CAAC,IAAI,GAAG,CAAC;YACd,CAAC,CAAC;gBACE,mBAAmB;gBACnB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;qBAC1B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;qBAC5B,IAAI,CAAC,GAAG,CAAC;aACb;YACH,CAAC,CAAC,EAAE,CAAC;QAET,4DAA4D;QAC5D,oCAAoC;QACpC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,MAAM,CAC9B;YACE,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC;YACnE,SAAS,EAAE,MAAM;SAClB,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CAAC;QACF,IAAI,WAAW,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/D,qEAAqE;QACrE,WAAW;QACX,IAAI,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAI,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChD,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEpE,iEAAiE;QACjE,0CAA0C;QAC1C,mBAAmB,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACzE,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAElC,MAAM,YAAY,CAAC,GAAG,EAAE,CACtB,UAAU,CAAC,kBAAkB,EAAE,OAAO,EAAE;YACtC,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;YACxC,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,MAAM,CAAC,GAAG;SACrB,CAAC,CACH,CAAC;QAEF,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CACT,0BAA0B,UAAU,IAAI,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,KAAK,CAChH,CAAC;YACF,MAAM,iBAAiB,GACrB,IAAI,CAAC,iBAAiB;gBACpB,CAAC,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC;gBAClD,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB;gBACE,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE;oBACJ,MAAM;oBACN,UAAU;oBACV,gBAAgB;oBAChB,IAAI,CAAC,WAAW,IAAI,UAAU;oBAC9B,eAAe;oBACf,OAAO;oBACP,OAAO;oBACP,MAAM,CAAC,GAAG;oBACV,WAAW;oBACX,WAAW;oBACX,cAAc;oBACd,GAAG,iBAAiB;oBACpB,GAAG,aAAa;oBAChB,GAAG,IAAI,CAAC,SAAS;iBAClB;gBACD,SAAS,EAAE,MAAM,EAAE,6DAA6D;aACjF,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAC1B,CAAC;YACF,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACrD,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,gEAAgE;YAChE,kEAAkE;YAClE,iEAAiE;YACjE,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CACxE,CAAC,GAAG,EAAE,EAAE;gBACN,MAAM,UAAU,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACpE,MAAM,CAAC,OAAO,CACZ,oCAAoC,OAAO,UAAU,kBAAkB,KAAK,UAAU,IAAI;oBACxF,iDAAiD,OAAO,yBAAyB,CACpF,CAAC;YACJ,CAAC,CACF,CAAC;YACF,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QAED,oEAAoE;QACpE,iEAAiE;QACjE,0CAA0C;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,wCAAwC,UAAU,YAAY;gBAC5D,8DAA8D;gBAC9D,oEAAoE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CACjG,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,OAAO,CACZ,GAAG,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,gBAAgB,CAC1F,CAAC;QAEF,qEAAqE;QACrE,gEAAgE;QAEhE,MAAM,UAAU,GAAmB;YACjC,OAAO,EAAE,aAAa;YACtB,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;QAEF,IAAI,CAAC;YACH,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,MAAM,IAAI,gBAAgB,CACxB,WAAW,UAAU,KAAK,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,OAAO,UAAU,CAAC,OAAO,GAAG;gBAC5G,qDAAqD,GAAG,CAAC,OAAO,EAAE,EACpE,UAAU,EACV,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CACZ,UAAU,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,oBAAoB,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG;gBAC/G,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,qDAAqD,CACnG,CAAC;YACF,MAAM,CAAC,OAAO,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CACZ,+DAA+D,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,QAAQ,CAC/H,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,aAAa;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,CAAC,KAAK,CACV,aAAa,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,YAAY,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,MAAM,EAAE,CAC/G,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,KAAK,CACV,aAAa,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,YAAY,GAAG,CAAC,OAAO,EAAE,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,mCAAmC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAC9B,kDAAkD,CACnD,CAAC;IACF,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IAE5C,8BAA8B;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAC5B,gDAAgD,CACjD,CAAC;IACF,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IAExC,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"codeObject.js","sourceRoot":"","sources":["../../src/harness/codeObject.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@ import type { RunMoveScriptOptions, MoveScriptResult } from "../types/harness.js
8
8
  * - `.mv` compiled bytecode → `--compiled-script-path`
9
9
  *
10
10
  * Reuses Publisher's security model via the shared `movementProfile`
11
- * helpers: per-deploy unique profile, atomic 0o600 yaml writes under
12
- * the mutex, SIGINT-safe sync cleanup, `--profile` auth (key never
13
- * appears in `ps` output).
11
+ * helpers: per-invocation temp key file (0o600), SIGINT-safe sync
12
+ * cleanup, `--private-key-file` auth (key never appears in `ps`
13
+ * output or in the user's `~/.aptos/config.yaml`).
14
14
  *
15
15
  * Returns {@link MoveScriptResult}. `txHash` is guaranteed; `success`
16
16
  * and `vmStatus` are best-effort parsed from the CLI's Result JSON.
@@ -1 +1 @@
1
- {"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/harness/script.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAe7B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAqI3B"}
1
+ {"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/harness/script.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAc7B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAwI3B"}
@@ -1,13 +1,12 @@
1
1
  import { existsSync } from "fs";
2
- import { homedir } from "os";
3
- import { extname, join } from "path";
4
- import { randomUUID } from "crypto";
5
- import { validatePathSafety, validateProfileSafety } from "../core/shell.js";
2
+ import { extname } from "path";
3
+ import { PrivateKey, PrivateKeyVariants } from "@aptos-labs/ts-sdk";
4
+ import { validatePathSafety } from "../core/shell.js";
6
5
  import { CliExecutionError } from "../errors.js";
7
6
  import { runCli } from "../utils/runCli.js";
8
7
  import { parseTxHash } from "../utils/parseCliOutput.js";
9
8
  import { logger } from "../ui/index.js";
10
- import { withYamlLock, addProfile, removeProfile, removeProfileSync, ensureSignalHandler, cleanupCallbacks, } from "../core/movementProfile.js";
9
+ import { writeTempKeyFile, removeKeyFile, removeKeyFileSyncBestEffort, ensureSignalHandler, cleanupCallbacks, } from "../core/movementProfile.js";
11
10
  /**
12
11
  * Execute a Move script via `movement move run-script`.
13
12
  *
@@ -16,9 +15,9 @@ import { withYamlLock, addProfile, removeProfile, removeProfileSync, ensureSigna
16
15
  * - `.mv` compiled bytecode → `--compiled-script-path`
17
16
  *
18
17
  * Reuses Publisher's security model via the shared `movementProfile`
19
- * helpers: per-deploy unique profile, atomic 0o600 yaml writes under
20
- * the mutex, SIGINT-safe sync cleanup, `--profile` auth (key never
21
- * appears in `ps` output).
18
+ * helpers: per-invocation temp key file (0o600), SIGINT-safe sync
19
+ * cleanup, `--private-key-file` auth (key never appears in `ps`
20
+ * output or in the user's `~/.aptos/config.yaml`).
22
21
  *
23
22
  * Returns {@link MoveScriptResult}. `txHash` is guaranteed; `success`
24
23
  * and `vmStatus` are best-effort parsed from the CLI's Result JSON.
@@ -48,25 +47,25 @@ export async function runMoveScript(runtime, options) {
48
47
  throw new Error(`Harness.runMoveScript: script not found at '${options.scriptPath}'.`);
49
48
  }
50
49
  const safeScriptPath = validatePathSafety(options.scriptPath, "script path");
51
- const profile = `movehat-script-${randomUUID().slice(0, 8)}`;
52
- const safeProfile = validateProfileSafety(profile);
53
50
  logger.step(`Running Move script '${options.scriptPath}' on ${config.network}...`);
54
51
  try {
55
52
  const deployerAddress = account.accountAddress.toString();
56
- let cleanPrivateKey = config.privateKey;
57
- if (cleanPrivateKey.startsWith("ed25519-priv-")) {
58
- cleanPrivateKey = cleanPrivateKey.replace("ed25519-priv-", "");
59
- }
60
- const movementConfigPath = join(homedir(), ".aptos", "config.yaml");
53
+ // Format the private key into AIP-80 shape before writing to the
54
+ // temp key file. `formatPrivateKey` is idempotent for already-
55
+ // prefixed inputs.
56
+ const formattedPrivateKey = PrivateKey.formatPrivateKey(config.privateKey, PrivateKeyVariants.Ed25519);
57
+ // Pass the private key via a 0o600 temp file (--private-key-file)
58
+ // and the on-chain address via --sender-account. Avoids the CLI's
59
+ // profile-yaml lookup chain entirely (no CWD / HOME / .aptos /
60
+ // .movement dance, no CLI-variant dependency).
61
+ const keyFilePath = writeTempKeyFile(formattedPrivateKey);
62
+ // SIGINT-safe sync cleanup BEFORE the CLI call so the private key
63
+ // never persists on disk after an abnormal exit. The signal-handler
64
+ // path uses the best-effort variant because the event loop is dead
65
+ // and we cannot logger.warning.
61
66
  ensureSignalHandler();
62
- const syncCleanup = () => removeProfileSync(movementConfigPath, profile);
67
+ const syncCleanup = () => removeKeyFileSyncBestEffort(keyFilePath);
63
68
  cleanupCallbacks.add(syncCleanup);
64
- await withYamlLock(() => addProfile(movementConfigPath, profile, {
65
- private_key: cleanPrivateKey,
66
- public_key: account.publicKey.toString(),
67
- account: deployerAddress,
68
- rest_url: config.rpc,
69
- }));
70
69
  let scriptOut = "";
71
70
  try {
72
71
  const typeArgsFragment = options.typeArgs && options.typeArgs.length > 0
@@ -80,8 +79,10 @@ export async function runMoveScript(runtime, options) {
80
79
  args: [
81
80
  "move",
82
81
  "run-script",
83
- "--profile",
84
- safeProfile,
82
+ "--private-key-file",
83
+ keyFilePath,
84
+ "--sender-account",
85
+ deployerAddress,
85
86
  "--url",
86
87
  config.rpc,
87
88
  "--assume-yes",
@@ -99,11 +100,14 @@ export async function runMoveScript(runtime, options) {
99
100
  console.error(result.stderr.trim());
100
101
  }
101
102
  finally {
102
- await withYamlLock(() => removeProfile(movementConfigPath, profile)).catch((err) => {
103
- const cleanupMsg = err instanceof Error ? err.message : String(err);
104
- logger.warning(`Failed to remove script profile "${profile}" from ${movementConfigPath}: ${cleanupMsg}. ` +
105
- `Run 'movement config delete-profile --profile ${profile}' to clean up manually.`);
106
- });
103
+ // Observable cleanup emit a warning if the unlink failed and
104
+ // the file is still on disk (private key would persist silently
105
+ // otherwise).
106
+ const cleanupErr = removeKeyFile(keyFilePath);
107
+ if (cleanupErr) {
108
+ logger.warning(`Failed to remove temp key file '${keyFilePath}': ${cleanupErr.message}. ` +
109
+ `The file has mode 0o600 but should be removed manually: rm ${keyFilePath}`);
110
+ }
107
111
  cleanupCallbacks.delete(syncCleanup);
108
112
  }
109
113
  const txHash = parseTxHash(scriptOut);
@@ -1 +1 @@
1
- {"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/harness/script.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/harness/script.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setupLocalTesting.fork-network.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupLocalTesting.fork-network.test.d.ts","sourceRoot":"","sources":["../../../src/helpers/__tests__/setupLocalTesting.fork-network.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ const initializeCalls = [];
6
+ vi.mock("../../fork/manager.js", async () => {
7
+ const fs = await import("node:fs");
8
+ return {
9
+ ForkManager: class {
10
+ forkPath;
11
+ metadata = null;
12
+ constructor(forkPath) {
13
+ this.forkPath = forkPath;
14
+ }
15
+ async initialize(nodeUrl, networkName, apiKey) {
16
+ const entry = { nodeUrl };
17
+ if (networkName !== undefined)
18
+ entry.networkName = networkName;
19
+ if (apiKey !== undefined)
20
+ entry.apiKey = apiKey;
21
+ initializeCalls.push(entry);
22
+ this.metadata = { network: networkName ?? "custom", nodeUrl };
23
+ }
24
+ load() {
25
+ const raw = fs.readFileSync(`${this.forkPath}/metadata.json`, "utf-8");
26
+ this.metadata = JSON.parse(raw);
27
+ }
28
+ getMetadata() {
29
+ if (!this.metadata) {
30
+ throw new Error("Fork not initialized");
31
+ }
32
+ return this.metadata;
33
+ }
34
+ setApiKey() { }
35
+ async resetState() { }
36
+ async fundAccount() { }
37
+ async fundMultipleAccounts() { }
38
+ },
39
+ };
40
+ });
41
+ vi.mock("../../fork/server.js", () => {
42
+ return {
43
+ ForkServer: class {
44
+ constructor(_p, _port) { }
45
+ async start() { }
46
+ async stop() { }
47
+ },
48
+ };
49
+ });
50
+ vi.mock("../../runtime.js", () => ({
51
+ initRuntime: vi.fn(async () => ({})),
52
+ }));
53
+ vi.mock("../../core/AccountManager.js", () => {
54
+ let _seq = 0;
55
+ return {
56
+ AccountManager: {
57
+ createBatch(labels) {
58
+ const out = {};
59
+ for (const l of labels) {
60
+ _seq++;
61
+ const addr = "0x" + _seq.toString(16).padStart(64, "0");
62
+ out[l] = { accountAddress: { toString: () => addr } };
63
+ }
64
+ return out;
65
+ },
66
+ exportPrivateKeys(_labels) {
67
+ return { deployer: "0x" + "1".repeat(64) };
68
+ },
69
+ },
70
+ };
71
+ });
72
+ // Imported after mocks so vi.hoisted ordering applies.
73
+ import { setupLocalTesting } from "../setupLocalTesting.js";
74
+ import { logger } from "../../ui/index.js";
75
+ describe("F1 — setupLocalTesting honors forkNetwork", () => {
76
+ let cwdBackup;
77
+ let tmpRoot;
78
+ beforeEach(() => {
79
+ initializeCalls.length = 0;
80
+ cwdBackup = process.cwd();
81
+ tmpRoot = mkdtempSync(join(tmpdir(), "movehat-f1-"));
82
+ process.chdir(tmpRoot);
83
+ vi.spyOn(logger, "step").mockImplementation(() => undefined);
84
+ vi.spyOn(logger, "success").mockImplementation(() => undefined);
85
+ vi.spyOn(logger, "plain").mockImplementation(() => undefined);
86
+ vi.spyOn(logger, "newline").mockImplementation(() => undefined);
87
+ vi.spyOn(logger, "warning").mockImplementation(() => undefined);
88
+ vi.spyOn(logger, "error").mockImplementation(() => undefined);
89
+ });
90
+ afterEach(() => {
91
+ process.chdir(cwdBackup);
92
+ rmSync(tmpRoot, { recursive: true, force: true });
93
+ vi.restoreAllMocks();
94
+ });
95
+ it("uses the mainnet RPC when forkNetwork = 'mainnet'", async () => {
96
+ await setupLocalTesting({
97
+ mode: "fork",
98
+ forkNetwork: "mainnet",
99
+ accountLabels: ["deployer"],
100
+ autoFund: false,
101
+ });
102
+ expect(initializeCalls).toHaveLength(1);
103
+ const call = initializeCalls[0];
104
+ expect(call.networkName).toBe("mainnet");
105
+ expect(call.nodeUrl).not.toMatch(/testnet/i);
106
+ expect(call.nodeUrl).toMatch(/mainnet/i);
107
+ });
108
+ it("uses the testnet RPC when forkNetwork = 'testnet'", async () => {
109
+ await setupLocalTesting({
110
+ mode: "fork",
111
+ forkNetwork: "testnet",
112
+ accountLabels: ["deployer"],
113
+ autoFund: false,
114
+ });
115
+ expect(initializeCalls).toHaveLength(1);
116
+ const call = initializeCalls[0];
117
+ expect(call.networkName).toBe("testnet");
118
+ expect(call.nodeUrl).toMatch(/testnet/i);
119
+ });
120
+ it("uses forkRpcUrl override when supplied for a custom network", async () => {
121
+ await setupLocalTesting({
122
+ mode: "fork",
123
+ forkNetwork: "custom",
124
+ forkRpcUrl: "https://my-custom-node.example/v1",
125
+ accountLabels: ["deployer"],
126
+ autoFund: false,
127
+ });
128
+ expect(initializeCalls).toHaveLength(1);
129
+ const call = initializeCalls[0];
130
+ expect(call.networkName).toBe("custom");
131
+ expect(call.nodeUrl).toBe("https://my-custom-node.example/v1");
132
+ });
133
+ it("rejects a non-built-in forkNetwork when no forkRpcUrl is provided", async () => {
134
+ await expect(setupLocalTesting({
135
+ mode: "fork",
136
+ forkNetwork: "some-unknown-network",
137
+ accountLabels: ["deployer"],
138
+ autoFund: false,
139
+ })).rejects.toThrow(/forkRpcUrl/i);
140
+ expect(initializeCalls).toHaveLength(0);
141
+ });
142
+ it("rejects when an existing fork's saved network does not match the requested one (audit-f1 follow-up)", async () => {
143
+ // Pre-seed `.movehat/forks/test-local/metadata.json` with the
144
+ // wrong network so the `forkExists` branch fires and loads stale
145
+ // metadata. Without the metadata-mismatch guard, setupLocalTesting
146
+ // would silently serve a testnet snapshot while the caller thinks
147
+ // it's reading mainnet.
148
+ const forkDir = join(tmpRoot, ".movehat", "forks", "test-local");
149
+ mkdirSync(forkDir, { recursive: true });
150
+ writeFileSync(join(forkDir, "metadata.json"), JSON.stringify({
151
+ network: "testnet",
152
+ nodeUrl: "https://testnet.movementnetwork.xyz/v1",
153
+ chainId: 250,
154
+ ledgerVersion: "0",
155
+ timestamp: "0",
156
+ epoch: "0",
157
+ blockHeight: "0",
158
+ createdAt: new Date().toISOString(),
159
+ }));
160
+ await expect(setupLocalTesting({
161
+ mode: "fork",
162
+ forkNetwork: "mainnet",
163
+ accountLabels: ["deployer"],
164
+ autoFund: false,
165
+ })).rejects.toThrow(/network mismatch|created for|requested/i);
166
+ // Must not have re-initialized — the existing dir is what poisons
167
+ // the load path, and silently reinitializing would clobber the
168
+ // user's saved snapshot.
169
+ expect(initializeCalls).toHaveLength(0);
170
+ });
171
+ });
172
+ //# sourceMappingURL=setupLocalTesting.fork-network.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupLocalTesting.fork-network.test.js","sourceRoot":"","sources":["../../../src/helpers/__tests__/setupLocalTesting.fork-network.test.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,7 @@ import type { LocalTestOptions } from "../types/config.js";
14
14
  * @public The `runtime` and `teardown` fields are the supported surface.
15
15
  * `localNode`, `forkServer`, and `forkManager` are exposed for
16
16
  * escape hatches (e.g. mid-test `forkManager.resetState()`) but
17
- * their concrete shapes are considered `@internal` until the M5
18
- * TypeDoc pass formalizes the public API.
17
+ * their concrete shapes are `@internal`.
19
18
  */
20
19
  export interface LocalTestingContext {
21
20
  runtime: MovehatRuntime;
@@ -1 +1 @@
1
- {"version":3,"file":"setupLocalTesting.d.ts","sourceRoot":"","sources":["../../src/helpers/setupLocalTesting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB;IAChB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gBAAgB;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CA4C9B"}
1
+ {"version":3,"file":"setupLocalTesting.d.ts","sourceRoot":"","sources":["../../src/helpers/setupLocalTesting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAqB3D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB;IAChB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,gBAAgB;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CA4C9B"}
@@ -6,6 +6,20 @@ import { ForkServer } from "../fork/server.js";
6
6
  import { LocalNodeManager } from "../node/LocalNodeManager.js";
7
7
  import { AccountManager } from "../core/AccountManager.js";
8
8
  import { logger } from "../ui/index.js";
9
+ const BUILTIN_FORK_RPCS = {
10
+ testnet: "https://testnet.movementnetwork.xyz/v1",
11
+ mainnet: "https://mainnet.movementnetwork.xyz/v1",
12
+ };
13
+ function resolveForkRpcUrl(network, override) {
14
+ if (override !== undefined)
15
+ return override;
16
+ const builtin = BUILTIN_FORK_RPCS[network];
17
+ if (builtin !== undefined)
18
+ return builtin;
19
+ throw new Error(`Cannot fork unknown network "${network}" without a forkRpcUrl. ` +
20
+ `Either pass forkRpcUrl in LocalTestOptions or use one of: ` +
21
+ `${Object.keys(BUILTIN_FORK_RPCS).join(", ")}.`);
22
+ }
9
23
  /**
10
24
  * Setup a local testing environment with either a local node or fork server
11
25
  *
@@ -200,8 +214,8 @@ async function setupWithFork(options, accountLabels, autoFund, defaultBalance) {
200
214
  const forkExists = existsSync(join(forkPath, "metadata.json"));
201
215
  if (!forkExists) {
202
216
  logger.step(`Creating fork from ${forkNetwork}...`);
203
- const testnetRpc = "https://testnet.movementnetwork.xyz/v1";
204
- await forkManager.initialize(testnetRpc, forkNetwork, options.forkApiKey);
217
+ const rpcUrl = resolveForkRpcUrl(forkNetwork, options.forkRpcUrl);
218
+ await forkManager.initialize(rpcUrl, forkNetwork, options.forkApiKey);
205
219
  logger.success(`Fork created at ${forkPath}`);
206
220
  logger.newline();
207
221
  }
@@ -214,6 +228,18 @@ async function setupWithFork(options, accountLabels, autoFund, defaultBalance) {
214
228
  forkManager.setApiKey(options.forkApiKey);
215
229
  }
216
230
  forkManager.load();
231
+ // Guard against the audit-f1 follow-up case: the default forkName
232
+ // ("test-local") doesn't encode the network, so a fork created for
233
+ // testnet would silently serve mainnet requests. Refuse to load
234
+ // when the saved metadata's network doesn't match what the caller
235
+ // asked for — the user must either pass a network-specific
236
+ // `forkName` or delete the stale directory.
237
+ const savedNetwork = forkManager.getMetadata().network;
238
+ if (savedNetwork !== forkNetwork) {
239
+ throw new Error(`Fork at ${forkPath} was created for network "${savedNetwork}" but ` +
240
+ `you requested "${forkNetwork}". Use a different forkName ` +
241
+ `(e.g. "${forkNetwork}-local") or delete ${forkPath} to recreate.`);
242
+ }
217
243
  if (forkResetState) {
218
244
  logger.step("Resetting fork state...");
219
245
  await forkManager.resetState();