movehat 0.2.1 → 0.2.3
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/dist/__tests__/deployContract.test.js +56 -47
- package/dist/__tests__/deployContract.test.js.map +1 -1
- package/dist/__tests__/exports.test.d.ts +2 -0
- package/dist/__tests__/exports.test.d.ts.map +1 -0
- package/dist/__tests__/exports.test.js +30 -0
- package/dist/__tests__/exports.test.js.map +1 -0
- package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts +4 -3
- package/dist/__tests__/fixtures/sigint-deploy-harness.d.ts.map +1 -1
- package/dist/__tests__/fixtures/sigint-deploy-harness.js +8 -7
- package/dist/__tests__/fixtures/sigint-deploy-harness.js.map +1 -1
- package/dist/__tests__/fork/api.test.js +5 -0
- package/dist/__tests__/fork/api.test.js.map +1 -1
- package/dist/__tests__/fork/api.timeout.test.d.ts +2 -0
- package/dist/__tests__/fork/api.timeout.test.d.ts.map +1 -0
- package/dist/__tests__/fork/api.timeout.test.js +98 -0
- package/dist/__tests__/fork/api.timeout.test.js.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/compile.toml-mutation.test.d.ts +2 -0
- package/dist/commands/__tests__/compile.toml-mutation.test.d.ts.map +1 -0
- package/dist/commands/__tests__/compile.toml-mutation.test.js +69 -0
- package/dist/commands/__tests__/compile.toml-mutation.test.js.map +1 -0
- package/dist/commands/__tests__/init.test.js +73 -11
- package/dist/commands/__tests__/init.test.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +19 -10
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/init.d.ts +22 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +55 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/test.js +12 -19
- package/dist/commands/test.js.map +1 -1
- package/dist/core/AccountManager.d.ts.map +1 -1
- package/dist/core/AccountManager.js +14 -2
- package/dist/core/AccountManager.js.map +1 -1
- package/dist/core/Publisher.d.ts.map +1 -1
- package/dist/core/Publisher.js +72 -82
- package/dist/core/Publisher.js.map +1 -1
- package/dist/core/__tests__/AccountManager.global-state.test.d.ts +2 -0
- package/dist/core/__tests__/AccountManager.global-state.test.d.ts.map +1 -0
- package/dist/core/__tests__/AccountManager.global-state.test.js +69 -0
- package/dist/core/__tests__/AccountManager.global-state.test.js.map +1 -0
- package/dist/core/__tests__/movementProfile.test.d.ts +2 -0
- package/dist/core/__tests__/movementProfile.test.d.ts.map +1 -0
- package/dist/core/__tests__/movementProfile.test.js +112 -0
- package/dist/core/__tests__/movementProfile.test.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +14 -10
- package/dist/core/config.js.map +1 -1
- package/dist/core/deployments.d.ts.map +1 -1
- package/dist/core/deployments.js +4 -2
- package/dist/core/deployments.js.map +1 -1
- package/dist/core/movementProfile.d.ts +55 -22
- package/dist/core/movementProfile.d.ts.map +1 -1
- package/dist/core/movementProfile.js +77 -99
- package/dist/core/movementProfile.js.map +1 -1
- package/dist/fork/__tests__/server.cors.test.d.ts +2 -0
- package/dist/fork/__tests__/server.cors.test.d.ts.map +1 -0
- package/dist/fork/__tests__/server.cors.test.js +79 -0
- package/dist/fork/__tests__/server.cors.test.js.map +1 -0
- package/dist/fork/api.d.ts +9 -1
- package/dist/fork/api.d.ts.map +1 -1
- package/dist/fork/api.js +37 -7
- package/dist/fork/api.js.map +1 -1
- package/dist/fork/manager.js +10 -10
- package/dist/fork/manager.js.map +1 -1
- package/dist/fork/server.d.ts +20 -1
- package/dist/fork/server.d.ts.map +1 -1
- package/dist/fork/server.js +40 -24
- package/dist/fork/server.js.map +1 -1
- package/dist/fork/test.d.ts.map +1 -1
- package/dist/fork/test.js +3 -2
- package/dist/fork/test.js.map +1 -1
- package/dist/harness/Harness.d.ts +6 -2
- package/dist/harness/Harness.d.ts.map +1 -1
- package/dist/harness/Harness.js +8 -2
- package/dist/harness/Harness.js.map +1 -1
- package/dist/harness/codeObject.d.ts.map +1 -1
- package/dist/harness/codeObject.js +41 -41
- package/dist/harness/codeObject.js.map +1 -1
- package/dist/harness/script.d.ts +3 -3
- package/dist/harness/script.d.ts.map +1 -1
- package/dist/harness/script.js +42 -35
- package/dist/harness/script.js.map +1 -1
- package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.d.ts +2 -0
- package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.d.ts.map +1 -0
- package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.js +172 -0
- package/dist/helpers/__tests__/setupLocalTesting.fork-network.test.js.map +1 -0
- package/dist/helpers/setupLocalTesting.d.ts.map +1 -1
- package/dist/helpers/setupLocalTesting.js +31 -5
- package/dist/helpers/setupLocalTesting.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/node/LocalNodeManager.d.ts +8 -0
- package/dist/node/LocalNodeManager.d.ts.map +1 -1
- package/dist/node/LocalNodeManager.js +70 -23
- package/dist/node/LocalNodeManager.js.map +1 -1
- package/dist/node/__tests__/LocalNodeManager.api-port.test.d.ts +2 -0
- package/dist/node/__tests__/LocalNodeManager.api-port.test.d.ts.map +1 -0
- package/dist/node/__tests__/LocalNodeManager.api-port.test.js +55 -0
- package/dist/node/__tests__/LocalNodeManager.api-port.test.js.map +1 -0
- package/dist/node/__tests__/LocalNodeManager.test.js +114 -14
- package/dist/node/__tests__/LocalNodeManager.test.js.map +1 -1
- package/dist/templates/move/Move.toml +1 -1
- package/dist/templates/move/sources/Counter.move +31 -4
- package/dist/templates/scripts/deploy-counter.ts +10 -0
- package/dist/types/config.d.ts +8 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/ui/__tests__/logger.test.d.ts +2 -0
- package/dist/ui/__tests__/logger.test.d.ts.map +1 -0
- package/dist/ui/__tests__/logger.test.js +75 -0
- package/dist/ui/__tests__/logger.test.js.map +1 -0
- package/dist/ui/formatters.d.ts +0 -16
- package/dist/ui/formatters.d.ts.map +1 -1
- package/dist/ui/formatters.js +1 -1
- package/dist/ui/formatters.js.map +1 -1
- package/dist/ui/logger.d.ts +41 -0
- package/dist/ui/logger.d.ts.map +1 -1
- package/dist/ui/logger.js +49 -0
- package/dist/ui/logger.js.map +1 -1
- package/dist/ui/spinner.d.ts +25 -0
- package/dist/ui/spinner.d.ts.map +1 -1
- package/dist/ui/spinner.js +44 -0
- package/dist/ui/spinner.js.map +1 -1
- package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.d.ts +2 -0
- package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.d.ts.map +1 -0
- package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.js +43 -0
- package/dist/utils/__tests__/childProcessAdapter.maxBuffer.test.js.map +1 -0
- package/dist/utils/childProcessAdapter.d.ts +7 -0
- package/dist/utils/childProcessAdapter.d.ts.map +1 -1
- package/dist/utils/childProcessAdapter.js +20 -2
- package/dist/utils/childProcessAdapter.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/deployContract.test.ts +59 -50
- package/src/__tests__/exports.test.ts +32 -0
- package/src/__tests__/fixtures/sigint-deploy-harness.ts +8 -7
- package/src/__tests__/fork/api.test.ts +5 -0
- package/src/__tests__/fork/api.timeout.test.ts +150 -0
- package/src/cli.ts +4 -0
- package/src/commands/__tests__/compile.toml-mutation.test.ts +77 -0
- package/src/commands/__tests__/init.test.ts +96 -11
- package/src/commands/compile.ts +24 -15
- package/src/commands/init.ts +77 -6
- package/src/commands/test.ts +12 -19
- package/src/core/AccountManager.ts +18 -1
- package/src/core/Publisher.ts +103 -107
- package/src/core/__tests__/AccountManager.global-state.test.ts +83 -0
- package/src/core/__tests__/movementProfile.test.ts +131 -0
- package/src/core/config.ts +18 -11
- package/src/core/deployments.ts +5 -4
- package/src/core/movementProfile.ts +75 -127
- package/src/fork/__tests__/server.cors.test.ts +101 -0
- package/src/fork/api.ts +69 -10
- package/src/fork/manager.ts +10 -10
- package/src/fork/server.ts +59 -24
- package/src/fork/test.ts +3 -2
- package/src/harness/Harness.ts +11 -2
- package/src/harness/codeObject.ts +45 -48
- package/src/harness/script.ts +47 -43
- package/src/helpers/__tests__/setupLocalTesting.fork-network.test.ts +212 -0
- package/src/helpers/setupLocalTesting.ts +39 -5
- package/src/index.ts +9 -1
- package/src/node/LocalNodeManager.ts +87 -26
- package/src/node/__tests__/LocalNodeManager.api-port.test.ts +62 -0
- package/src/node/__tests__/LocalNodeManager.test.ts +144 -17
- package/src/templates/move/Move.toml +1 -1
- package/src/templates/move/sources/Counter.move +31 -4
- package/src/templates/scripts/deploy-counter.ts +10 -0
- package/src/types/config.ts +8 -1
- package/src/ui/__tests__/logger.test.ts +89 -0
- package/src/ui/formatters.ts +1 -1
- package/src/ui/logger.ts +62 -0
- package/src/ui/spinner.ts +47 -0
- package/src/utils/__tests__/childProcessAdapter.maxBuffer.test.ts +51 -0
- package/src/utils/childProcessAdapter.ts +32 -2
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/core/deployments.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CA+B/E;AAwBD,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAoB/D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/core/deployments.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CA+B/E;AAwBD,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAoB/D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAoBzF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAwBjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIrF"}
|
package/dist/core/deployments.js
CHANGED
|
@@ -57,7 +57,8 @@ export function saveDeployment(deployment) {
|
|
|
57
57
|
logger.success(`Deployment saved: deployments/${deployment.network}/${deployment.moduleName}.json`);
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
60
|
-
|
|
60
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
61
|
+
logger.error(`Failed to save deployment for ${deployment.moduleName} on ${deployment.network} at ${filePath}: ${msg}`);
|
|
61
62
|
throw error;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -75,7 +76,8 @@ export function loadDeployment(network, moduleName) {
|
|
|
75
76
|
return JSON.parse(content);
|
|
76
77
|
}
|
|
77
78
|
catch (error) {
|
|
78
|
-
|
|
79
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
80
|
+
logger.error(`Failed to load deployment for ${moduleName} on ${network}: ${msg}`);
|
|
79
81
|
return null;
|
|
80
82
|
}
|
|
81
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/core/deployments.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/core/deployments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,64 @@
|
|
|
1
|
-
export declare function withYamlLock<T>(fn: () => Promise<T>): Promise<T>;
|
|
2
|
-
export interface ProfileData {
|
|
3
|
-
private_key: string;
|
|
4
|
-
public_key: string;
|
|
5
|
-
account: string;
|
|
6
|
-
rest_url: string;
|
|
7
|
-
}
|
|
8
|
-
/** Add the deploy's profile to ~/.aptos/config.yaml. Creates the file if absent. */
|
|
9
|
-
export declare function addProfile(configPath: string, name: string, data: ProfileData): Promise<void>;
|
|
10
1
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
2
|
+
* Per-deploy private-key file management and SIGINT/SIGTERM cleanup
|
|
3
|
+
* infrastructure shared across the Movement CLI invocations (`move
|
|
4
|
+
* publish`, `move deploy-object`, `move upgrade-object`, `move
|
|
5
|
+
* run-script`).
|
|
6
|
+
*
|
|
7
|
+
* **Why a temp key file rather than the CLI's profile yaml?** The
|
|
8
|
+
* Movement CLI's `--profile <name>` flag requires a config.yaml to
|
|
9
|
+
* exist in the working directory (older Movement CLI variants look
|
|
10
|
+
* for `<cwd>/.aptos/config.yaml`; newer variants look for
|
|
11
|
+
* `<cwd>/.movement/config.yaml`). On fresh user installs neither
|
|
12
|
+
* directory exists, and the CLI errors out before it would otherwise
|
|
13
|
+
* fall back to `~/.aptos/config.yaml`. Writing to a temp file and
|
|
14
|
+
* passing `--private-key-file <path> --sender-account <addr>`
|
|
15
|
+
* directly avoids the entire profile-yaml lookup chain — no CWD
|
|
16
|
+
* dependency, no CLI-variant dependency.
|
|
17
|
+
*
|
|
18
|
+
* The same SIGINT-safe cleanup pattern applies as the old profile
|
|
19
|
+
* flow: the temp key file persists private key material on disk and
|
|
20
|
+
* MUST be removed before process exit even on abnormal termination.
|
|
21
|
+
*
|
|
22
|
+
* @internal — not exported from `src/index.ts`.
|
|
15
23
|
*/
|
|
16
|
-
export declare function removeProfile(configPath: string, name: string): Promise<void>;
|
|
17
24
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
25
|
+
* Write the private key to a `mode 0o600` file in the system temp
|
|
26
|
+
* directory and return the path. The filename is UUID-suffixed so
|
|
27
|
+
* concurrent deploys don't collide.
|
|
28
|
+
*
|
|
29
|
+
* The key string is written verbatim — callers should format to
|
|
30
|
+
* AIP-80 before calling (see `PrivateKey.formatPrivateKey` from
|
|
31
|
+
* `@aptos-labs/ts-sdk`).
|
|
23
32
|
*/
|
|
24
|
-
export declare function
|
|
33
|
+
export declare function writeTempKeyFile(privateKey: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Sync unlink for SIGINT/SIGTERM handlers — never throws, never logs.
|
|
36
|
+
* The event loop is dead by the time this runs; observability isn't
|
|
37
|
+
* possible. Worst case: a stale 0o600 temp file in `os.tmpdir()`
|
|
38
|
+
* that the OS reaps eventually.
|
|
39
|
+
*
|
|
40
|
+
* **Do not use this from a normal `finally` cleanup path** — failures
|
|
41
|
+
* become invisible there, hiding the case where a private-key temp
|
|
42
|
+
* file persists on disk after a deploy. Use {@link removeKeyFile}
|
|
43
|
+
* instead for those paths.
|
|
44
|
+
*/
|
|
45
|
+
export declare function removeKeyFileSyncBestEffort(path: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Sync unlink for the normal cleanup path (a `finally` block after the
|
|
48
|
+
* Movement CLI invocation returns). Returns `null` on success — either
|
|
49
|
+
* the file was removed, or it was already gone (ENOENT is treated as
|
|
50
|
+
* benign success). Returns an `Error` only when the file **still
|
|
51
|
+
* exists on disk** after the unlink attempt failed (EPERM, EACCES,
|
|
52
|
+
* EBUSY, EISDIR if the path collided with a directory, etc.).
|
|
53
|
+
*
|
|
54
|
+
* Callers SHOULD `logger.warning` when a non-null Error is returned —
|
|
55
|
+
* a private-key temp file would otherwise persist silently.
|
|
56
|
+
*/
|
|
57
|
+
export declare function removeKeyFile(path: string): Error | null;
|
|
25
58
|
/**
|
|
26
59
|
* Process-level signal handling. A single registered handler iterates
|
|
27
|
-
* the per-deploy cleanup callbacks.
|
|
28
|
-
* concurrent deploys share the same parent
|
|
60
|
+
* the per-deploy cleanup callbacks. Installed once per process because
|
|
61
|
+
* multiple concurrent deploys share the same parent — installing per
|
|
29
62
|
* deploy would re-add the listener and exceed Node's max-listeners
|
|
30
63
|
* warning threshold under heavy parallelism.
|
|
31
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movementProfile.d.ts","sourceRoot":"","sources":["../../src/core/movementProfile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"movementProfile.d.ts","sourceRoot":"","sources":["../../src/core/movementProfile.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAS3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAM9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAcxD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,YAAiB,IAAI,CAAG,CAAC;AAGtD,wBAAgB,mBAAmB,IAAI,IAAI,CAqB1C"}
|
|
@@ -1,123 +1,101 @@
|
|
|
1
|
-
import { chmodSync, existsSync,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { chmodSync, existsSync, unlinkSync, writeFileSync } from "fs";
|
|
2
|
+
import { tmpdir } from "os";
|
|
3
|
+
import { join } from "path";
|
|
4
4
|
import { randomUUID } from "crypto";
|
|
5
|
-
import * as yaml from "js-yaml";
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Per-deploy private-key file management and SIGINT/SIGTERM cleanup
|
|
7
|
+
* infrastructure shared across the Movement CLI invocations (`move
|
|
8
|
+
* publish`, `move deploy-object`, `move upgrade-object`, `move
|
|
9
|
+
* run-script`).
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* **Why a temp key file rather than the CLI's profile yaml?** The
|
|
12
|
+
* Movement CLI's `--profile <name>` flag requires a config.yaml to
|
|
13
|
+
* exist in the working directory (older Movement CLI variants look
|
|
14
|
+
* for `<cwd>/.aptos/config.yaml`; newer variants look for
|
|
15
|
+
* `<cwd>/.movement/config.yaml`). On fresh user installs neither
|
|
16
|
+
* directory exists, and the CLI errors out before it would otherwise
|
|
17
|
+
* fall back to `~/.aptos/config.yaml`. Writing to a temp file and
|
|
18
|
+
* passing `--private-key-file <path> --sender-account <addr>`
|
|
19
|
+
* directly avoids the entire profile-yaml lookup chain — no CWD
|
|
20
|
+
* dependency, no CLI-variant dependency.
|
|
21
|
+
*
|
|
22
|
+
* The same SIGINT-safe cleanup pattern applies as the old profile
|
|
23
|
+
* flow: the temp key file persists private key material on disk and
|
|
24
|
+
* MUST be removed before process exit even on abnormal termination.
|
|
14
25
|
*
|
|
15
26
|
* @internal — not exported from `src/index.ts`.
|
|
16
27
|
*/
|
|
17
28
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
29
|
+
* Write the private key to a `mode 0o600` file in the system temp
|
|
30
|
+
* directory and return the path. The filename is UUID-suffixed so
|
|
31
|
+
* concurrent deploys don't collide.
|
|
32
|
+
*
|
|
33
|
+
* The key string is written verbatim — callers should format to
|
|
34
|
+
* AIP-80 before calling (see `PrivateKey.formatPrivateKey` from
|
|
35
|
+
* `@aptos-labs/ts-sdk`).
|
|
21
36
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
37
|
+
export function writeTempKeyFile(privateKey) {
|
|
38
|
+
const path = join(tmpdir(), `movehat-key-${randomUUID()}`);
|
|
39
|
+
// mode in the open() call may be filtered by the process umask
|
|
40
|
+
// (typically 0o022 → resulting perms 0o644). chmod after write
|
|
41
|
+
// is defense in depth so the file can never be observable as
|
|
42
|
+
// group-/world-readable while it carries the private key.
|
|
43
|
+
writeFileSync(path, privateKey, { mode: 0o600 });
|
|
44
|
+
chmodSync(path, 0o600);
|
|
45
|
+
return path;
|
|
30
46
|
}
|
|
31
47
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
48
|
+
* Sync unlink for SIGINT/SIGTERM handlers — never throws, never logs.
|
|
49
|
+
* The event loop is dead by the time this runs; observability isn't
|
|
50
|
+
* possible. Worst case: a stale 0o600 temp file in `os.tmpdir()`
|
|
51
|
+
* that the OS reaps eventually.
|
|
52
|
+
*
|
|
53
|
+
* **Do not use this from a normal `finally` cleanup path** — failures
|
|
54
|
+
* become invisible there, hiding the case where a private-key temp
|
|
55
|
+
* file persists on disk after a deploy. Use {@link removeKeyFile}
|
|
56
|
+
* instead for those paths.
|
|
36
57
|
*/
|
|
37
|
-
function
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
chmodSync(tmpPath, 0o600); // defense in depth in case umask filtered the open mode
|
|
41
|
-
renameSync(tmpPath, path);
|
|
42
|
-
}
|
|
43
|
-
/** Add the deploy's profile to ~/.aptos/config.yaml. Creates the file if absent. */
|
|
44
|
-
export async function addProfile(configPath, name, data) {
|
|
45
|
-
const configDir = dirname(configPath);
|
|
46
|
-
if (!existsSync(configDir)) {
|
|
47
|
-
mkdirSync(configDir, { recursive: true, mode: 0o700 });
|
|
48
|
-
}
|
|
49
|
-
let yamlObj = {};
|
|
50
|
-
if (existsSync(configPath)) {
|
|
51
|
-
const raw = await readFile(configPath, "utf-8");
|
|
52
|
-
yamlObj = yaml.load(raw) || {};
|
|
58
|
+
export function removeKeyFileSyncBestEffort(path) {
|
|
59
|
+
try {
|
|
60
|
+
unlinkSync(path);
|
|
53
61
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
yamlObj.profiles[name] = data;
|
|
57
|
-
atomicWriteYaml(configPath, yaml.dump(yamlObj));
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Remove the deploy's profile from ~/.aptos/config.yaml. Idempotent —
|
|
61
|
-
* a missing file or missing profile is a no-op. If removal leaves the
|
|
62
|
-
* yaml with only an empty `profiles:` block, the whole file is unlinked
|
|
63
|
-
* to preserve the "didn't exist before" semantic for the first-ever deploy.
|
|
64
|
-
*/
|
|
65
|
-
export async function removeProfile(configPath, name) {
|
|
66
|
-
if (!existsSync(configPath))
|
|
67
|
-
return;
|
|
68
|
-
const raw = await readFile(configPath, "utf-8");
|
|
69
|
-
const yamlObj = yaml.load(raw) || {};
|
|
70
|
-
if (!yamlObj.profiles || !(name in yamlObj.profiles))
|
|
71
|
-
return;
|
|
72
|
-
delete yamlObj.profiles[name];
|
|
73
|
-
const profilesEmpty = Object.keys(yamlObj.profiles).length === 0;
|
|
74
|
-
const onlyProfilesKey = Object.keys(yamlObj).length === 1 && "profiles" in yamlObj;
|
|
75
|
-
if (profilesEmpty && onlyProfilesKey) {
|
|
76
|
-
// We created this file fresh; remove it.
|
|
77
|
-
try {
|
|
78
|
-
unlinkSync(configPath);
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
// best-effort
|
|
82
|
-
}
|
|
83
|
-
return;
|
|
62
|
+
catch {
|
|
63
|
+
// event loop dead — best-effort
|
|
84
64
|
}
|
|
85
|
-
atomicWriteYaml(configPath, yaml.dump(yamlObj));
|
|
86
65
|
}
|
|
87
66
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
67
|
+
* Sync unlink for the normal cleanup path (a `finally` block after the
|
|
68
|
+
* Movement CLI invocation returns). Returns `null` on success — either
|
|
69
|
+
* the file was removed, or it was already gone (ENOENT is treated as
|
|
70
|
+
* benign success). Returns an `Error` only when the file **still
|
|
71
|
+
* exists on disk** after the unlink attempt failed (EPERM, EACCES,
|
|
72
|
+
* EBUSY, EISDIR if the path collided with a directory, etc.).
|
|
73
|
+
*
|
|
74
|
+
* Callers SHOULD `logger.warning` when a non-null Error is returned —
|
|
75
|
+
* a private-key temp file would otherwise persist silently.
|
|
93
76
|
*/
|
|
94
|
-
export function
|
|
77
|
+
export function removeKeyFile(path) {
|
|
95
78
|
try {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const raw = readFileSync(configPath, "utf-8");
|
|
99
|
-
const yamlObj = yaml.load(raw) || {};
|
|
100
|
-
if (!yamlObj.profiles || !(name in yamlObj.profiles))
|
|
101
|
-
return;
|
|
102
|
-
delete yamlObj.profiles[name];
|
|
103
|
-
const profilesEmpty = Object.keys(yamlObj.profiles).length === 0;
|
|
104
|
-
const onlyProfilesKey = Object.keys(yamlObj).length === 1 && "profiles" in yamlObj;
|
|
105
|
-
if (profilesEmpty && onlyProfilesKey) {
|
|
106
|
-
unlinkSync(configPath);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
atomicWriteYaml(configPath, yaml.dump(yamlObj));
|
|
79
|
+
unlinkSync(path);
|
|
80
|
+
return null;
|
|
110
81
|
}
|
|
111
|
-
catch {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
82
|
+
catch (err) {
|
|
83
|
+
const code = err.code;
|
|
84
|
+
if (code === "ENOENT")
|
|
85
|
+
return null;
|
|
86
|
+
// The unlink call failed but verify the file actually still exists
|
|
87
|
+
// before declaring this preocupante — some races (parallel cleanup,
|
|
88
|
+
// tmpdir reaper) can race with us and the file may already be gone
|
|
89
|
+
// despite the syscall reporting an unexpected error.
|
|
90
|
+
if (!existsSync(path))
|
|
91
|
+
return null;
|
|
92
|
+
return err instanceof Error ? err : new Error(String(err));
|
|
115
93
|
}
|
|
116
94
|
}
|
|
117
95
|
/**
|
|
118
96
|
* Process-level signal handling. A single registered handler iterates
|
|
119
|
-
* the per-deploy cleanup callbacks.
|
|
120
|
-
* concurrent deploys share the same parent
|
|
97
|
+
* the per-deploy cleanup callbacks. Installed once per process because
|
|
98
|
+
* multiple concurrent deploys share the same parent — installing per
|
|
121
99
|
* deploy would re-add the listener and exceed Node's max-listeners
|
|
122
100
|
* warning threshold under heavy parallelism.
|
|
123
101
|
*/
|
|
@@ -128,7 +106,7 @@ export function ensureSignalHandler() {
|
|
|
128
106
|
return;
|
|
129
107
|
signalHandlerInstalled = true;
|
|
130
108
|
const handler = (sig) => {
|
|
131
|
-
// Synchronous cleanup of every active deploy's
|
|
109
|
+
// Synchronous cleanup of every active deploy's resources.
|
|
132
110
|
for (const cb of [...cleanupCallbacks]) {
|
|
133
111
|
try {
|
|
134
112
|
cb();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"movementProfile.js","sourceRoot":"","sources":["../../src/core/movementProfile.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"movementProfile.js","sourceRoot":"","sources":["../../src/core/movementProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3D,+DAA+D;IAC/D,+DAA+D;IAC/D,6DAA6D;IAC7D,0DAA0D;IAC1D,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnC,mEAAmE;QACnE,oEAAoE;QACpE,mEAAmE;QACnE,qDAAqD;QACrD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAc,CAAC;AACtD,IAAI,sBAAsB,GAAG,KAAK,CAAC;AAEnC,MAAM,UAAU,mBAAmB;IACjC,IAAI,sBAAsB;QAAE,OAAO;IACnC,sBAAsB,GAAG,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,CAAC,GAAmB,EAAE,EAAE;QACtC,0DAA0D;QAC1D,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,EAAE,EAAE,CAAC;YACP,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;QACH,CAAC;QACD,kEAAkE;QAClE,8DAA8D;QAC9D,kEAAkE;QAClE,wBAAwB;QACxB,MAAM,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3C,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.cors.test.d.ts","sourceRoot":"","sources":["../../../src/fork/__tests__/server.cors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { ForkServer } from "../server.js";
|
|
6
|
+
/**
|
|
7
|
+
* F2 — ForkServer must not advertise `Access-Control-Allow-Origin: *`
|
|
8
|
+
* by default. Cached fork state may include account resources fetched
|
|
9
|
+
* from authenticated upstream nodes; any web page open in the dev's
|
|
10
|
+
* browser should not be able to read it through the loopback listener.
|
|
11
|
+
*
|
|
12
|
+
* Default contract:
|
|
13
|
+
* - No CORS header emitted unless the caller opts in via
|
|
14
|
+
* `corsAllowOrigins`.
|
|
15
|
+
* - When opted in, only requests whose `Origin` is in the allowlist
|
|
16
|
+
* receive a matching `Access-Control-Allow-Origin` (echo of origin,
|
|
17
|
+
* not `*`).
|
|
18
|
+
*/
|
|
19
|
+
function makeForkDir() {
|
|
20
|
+
const dir = mkdtempSync(join(tmpdir(), "movehat-fork-cors-"));
|
|
21
|
+
mkdirSync(join(dir, "resources"), { recursive: true });
|
|
22
|
+
writeFileSync(join(dir, "metadata.json"), JSON.stringify({
|
|
23
|
+
network: "test",
|
|
24
|
+
nodeUrl: "http://example.invalid/v1",
|
|
25
|
+
chainId: 0,
|
|
26
|
+
ledgerVersion: "0",
|
|
27
|
+
timestamp: "0",
|
|
28
|
+
epoch: "0",
|
|
29
|
+
blockHeight: "0",
|
|
30
|
+
createdAt: new Date().toISOString(),
|
|
31
|
+
}));
|
|
32
|
+
writeFileSync(join(dir, "accounts.json"), "{}");
|
|
33
|
+
return dir;
|
|
34
|
+
}
|
|
35
|
+
function boundPort(server) {
|
|
36
|
+
const internal = server.server;
|
|
37
|
+
const addr = internal.address();
|
|
38
|
+
return addr.port;
|
|
39
|
+
}
|
|
40
|
+
async function fetchFromServer(port, origin) {
|
|
41
|
+
const headers = {};
|
|
42
|
+
if (origin !== undefined)
|
|
43
|
+
headers.Origin = origin;
|
|
44
|
+
return fetch(`http://127.0.0.1:${port}/v1/`, { headers });
|
|
45
|
+
}
|
|
46
|
+
describe("F2 — ForkServer CORS is closed by default", () => {
|
|
47
|
+
let forkDir;
|
|
48
|
+
let server = null;
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
forkDir = makeForkDir();
|
|
51
|
+
});
|
|
52
|
+
afterEach(async () => {
|
|
53
|
+
if (server) {
|
|
54
|
+
await server.stop();
|
|
55
|
+
server = null;
|
|
56
|
+
}
|
|
57
|
+
rmSync(forkDir, { recursive: true, force: true });
|
|
58
|
+
});
|
|
59
|
+
it("does not emit Access-Control-Allow-Origin by default", async () => {
|
|
60
|
+
server = new ForkServer(forkDir, 0);
|
|
61
|
+
await server.start();
|
|
62
|
+
const port = boundPort(server);
|
|
63
|
+
const res = await fetchFromServer(port, "https://evil.example");
|
|
64
|
+
expect(res.status).toBe(200);
|
|
65
|
+
expect(res.headers.get("access-control-allow-origin")).toBeNull();
|
|
66
|
+
});
|
|
67
|
+
it("echoes only allow-listed origins when corsAllowOrigins is set", async () => {
|
|
68
|
+
server = new ForkServer(forkDir, 0, "127.0.0.1", {
|
|
69
|
+
corsAllowOrigins: ["https://trusted.example"],
|
|
70
|
+
});
|
|
71
|
+
await server.start();
|
|
72
|
+
const port = boundPort(server);
|
|
73
|
+
const allowed = await fetchFromServer(port, "https://trusted.example");
|
|
74
|
+
expect(allowed.headers.get("access-control-allow-origin")).toBe("https://trusted.example");
|
|
75
|
+
const denied = await fetchFromServer(port, "https://evil.example");
|
|
76
|
+
expect(denied.headers.get("access-control-allow-origin")).toBeNull();
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=server.cors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.cors.test.js","sourceRoot":"","sources":["../../../src/fork/__tests__/server.cors.test.ts"],"names":[],"mappings":"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"}
|
package/dist/fork/api.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { LedgerInfo, AccountData, AccountResource } from '../types/fork.js';
|
|
2
|
+
export interface MovementApiClientOptions {
|
|
3
|
+
/** Abort the request after this many ms (default: 30_000). */
|
|
4
|
+
timeoutMs?: number;
|
|
5
|
+
/** Reject responses larger than this many bytes (default: 16 MiB). */
|
|
6
|
+
maxBytes?: number;
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
9
|
* Client for interacting with Movement L1 JSON API.
|
|
4
10
|
*
|
|
@@ -10,7 +16,9 @@ import type { LedgerInfo, AccountData, AccountResource } from '../types/fork.js'
|
|
|
10
16
|
export declare class MovementApiClient {
|
|
11
17
|
private nodeUrl;
|
|
12
18
|
private readonly apiKey?;
|
|
13
|
-
|
|
19
|
+
private readonly timeoutMs;
|
|
20
|
+
private readonly maxBytes;
|
|
21
|
+
constructor(nodeUrl: string, apiKey?: string, options?: MovementApiClientOptions);
|
|
14
22
|
/**
|
|
15
23
|
* Make a GET request to the API.
|
|
16
24
|
*
|
package/dist/fork/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/fork/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGjF;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/fork/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGjF,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,wBAA6B;IAiBxC;;;;;;;OAOG;YACW,GAAG;IAsFjB;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAI1C;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMvD;;OAEG;IACG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAS7E;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAKvE"}
|
package/dist/fork/api.js
CHANGED
|
@@ -2,6 +2,8 @@ import https from 'https';
|
|
|
2
2
|
import http from 'http';
|
|
3
3
|
import { URL } from 'url';
|
|
4
4
|
import { normalizeAddressShort } from '../utils/address.js';
|
|
5
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
6
|
+
const DEFAULT_MAX_BYTES = 16 * 1024 * 1024;
|
|
5
7
|
/**
|
|
6
8
|
* Client for interacting with Movement L1 JSON API.
|
|
7
9
|
*
|
|
@@ -13,7 +15,9 @@ import { normalizeAddressShort } from '../utils/address.js';
|
|
|
13
15
|
export class MovementApiClient {
|
|
14
16
|
nodeUrl;
|
|
15
17
|
apiKey;
|
|
16
|
-
|
|
18
|
+
timeoutMs;
|
|
19
|
+
maxBytes;
|
|
20
|
+
constructor(nodeUrl, apiKey, options = {}) {
|
|
17
21
|
// Remove trailing slash
|
|
18
22
|
let normalized = nodeUrl.replace(/\/$/, '');
|
|
19
23
|
// If URL already ends with /v1, use as is
|
|
@@ -24,6 +28,8 @@ export class MovementApiClient {
|
|
|
24
28
|
this.nodeUrl = normalized;
|
|
25
29
|
if (apiKey !== undefined)
|
|
26
30
|
this.apiKey = apiKey;
|
|
31
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
32
|
+
this.maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
27
33
|
}
|
|
28
34
|
/**
|
|
29
35
|
* Make a GET request to the API.
|
|
@@ -42,28 +48,52 @@ export class MovementApiClient {
|
|
|
42
48
|
if (this.apiKey !== undefined) {
|
|
43
49
|
requestOptions.headers = { Authorization: `Bearer ${this.apiKey}` };
|
|
44
50
|
}
|
|
51
|
+
const timeoutMs = this.timeoutMs;
|
|
52
|
+
const maxBytes = this.maxBytes;
|
|
45
53
|
return new Promise((resolve, reject) => {
|
|
54
|
+
let settled = false;
|
|
55
|
+
const settle = (fn) => {
|
|
56
|
+
if (settled)
|
|
57
|
+
return;
|
|
58
|
+
settled = true;
|
|
59
|
+
fn();
|
|
60
|
+
};
|
|
46
61
|
const req = client.get(fullUrl, requestOptions, (res) => {
|
|
47
|
-
|
|
62
|
+
const chunks = [];
|
|
63
|
+
let totalBytes = 0;
|
|
48
64
|
res.on('data', (chunk) => {
|
|
49
|
-
|
|
65
|
+
const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
66
|
+
totalBytes += buf.length;
|
|
67
|
+
if (totalBytes > maxBytes) {
|
|
68
|
+
req.destroy();
|
|
69
|
+
settle(() => reject(new Error(`Response exceeded maxBytes (${maxBytes}); ${totalBytes} bytes received before abort`)));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
chunks.push(buf);
|
|
50
73
|
});
|
|
51
74
|
res.on('end', () => {
|
|
75
|
+
if (settled)
|
|
76
|
+
return;
|
|
77
|
+
const data = Buffer.concat(chunks).toString('utf8');
|
|
52
78
|
if (res.statusCode !== 200) {
|
|
53
|
-
reject(new Error(`API request failed with status ${res.statusCode}: ${data}`));
|
|
79
|
+
settle(() => reject(new Error(`API request failed with status ${res.statusCode}: ${data}`)));
|
|
54
80
|
return;
|
|
55
81
|
}
|
|
56
82
|
try {
|
|
57
83
|
const parsed = JSON.parse(data);
|
|
58
|
-
resolve(parsed);
|
|
84
|
+
settle(() => resolve(parsed));
|
|
59
85
|
}
|
|
60
86
|
catch (err) {
|
|
61
|
-
reject(new Error(`Failed to parse JSON response: ${err}`));
|
|
87
|
+
settle(() => reject(new Error(`Failed to parse JSON response: ${err}`)));
|
|
62
88
|
}
|
|
63
89
|
});
|
|
64
90
|
});
|
|
91
|
+
req.setTimeout(timeoutMs, () => {
|
|
92
|
+
req.destroy();
|
|
93
|
+
settle(() => reject(new Error(`API request timed out after ${timeoutMs}ms`)));
|
|
94
|
+
});
|
|
65
95
|
req.on('error', (err) => {
|
|
66
|
-
reject(new Error(`API request failed: ${err.message}`));
|
|
96
|
+
settle(() => reject(new Error(`API request failed: ${err.message}`)));
|
|
67
97
|
});
|
|
68
98
|
req.end();
|
|
69
99
|
});
|