movehat 0.2.1 → 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.
- 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/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/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/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 +52 -68
- 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.js +6 -5
- package/dist/core/config.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/server.d.ts +20 -1
- package/dist/fork/server.d.ts.map +1 -1
- package/dist/fork/server.js +19 -9
- package/dist/fork/server.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 +30 -33
- 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 +33 -29
- 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 +28 -2
- 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 +10 -1
- 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 +4 -3
- 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/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/commands/__tests__/compile.toml-mutation.test.ts +77 -0
- package/src/commands/__tests__/init.test.ts +96 -11
- package/src/commands/init.ts +77 -6
- package/src/core/AccountManager.ts +18 -1
- package/src/core/Publisher.ts +58 -77
- 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 +9 -5
- 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/server.ts +38 -9
- package/src/harness/Harness.ts +11 -2
- package/src/harness/codeObject.ts +37 -43
- package/src/harness/script.ts +40 -39
- package/src/helpers/__tests__/setupLocalTesting.fork-network.test.ts +212 -0
- package/src/helpers/setupLocalTesting.ts +36 -2
- package/src/index.ts +9 -1
- package/src/node/LocalNodeManager.ts +24 -2
- package/src/node/__tests__/LocalNodeManager.api-port.test.ts +62 -0
- package/src/node/__tests__/LocalNodeManager.test.ts +4 -3
- 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/utils/__tests__/childProcessAdapter.maxBuffer.test.ts +51 -0
- package/src/utils/childProcessAdapter.ts +32 -2
|
@@ -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
|
});
|
package/dist/fork/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/fork/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/fork/api.ts"],"names":[],"mappings":"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"}
|
package/dist/fork/server.d.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
export interface ForkServerOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Origins allowed to make cross-origin requests. When unset (default),
|
|
4
|
+
* no `Access-Control-Allow-Origin` header is emitted — any browser
|
|
5
|
+
* cross-origin read is rejected by the user agent. Setting this to a
|
|
6
|
+
* non-empty list opts into echoing matching `Origin` request headers
|
|
7
|
+
* back. Wildcard `'*'` is intentionally NOT supported: cached fork
|
|
8
|
+
* state may include resources that should not be readable by every
|
|
9
|
+
* page in the dev's browser.
|
|
10
|
+
*/
|
|
11
|
+
corsAllowOrigins?: readonly string[];
|
|
12
|
+
}
|
|
1
13
|
/**
|
|
2
14
|
* Fork Server - Serves fork data via Movement L1 RPC API
|
|
3
15
|
* Emulates a Movement L1 node using local fork storage
|
|
@@ -7,12 +19,19 @@ export declare class ForkServer {
|
|
|
7
19
|
private forkManager;
|
|
8
20
|
private port;
|
|
9
21
|
private host;
|
|
22
|
+
private readonly corsAllowOrigins;
|
|
10
23
|
/**
|
|
11
24
|
* @param host Interface to bind. Defaults to `127.0.0.1` so cached fork
|
|
12
25
|
* state (which may include sensitive resources) is not exposed on the LAN.
|
|
13
26
|
* Pass `'0.0.0.0'` only if you intentionally need to expose the server.
|
|
27
|
+
* @param options Optional CORS allowlist (see {@link ForkServerOptions}).
|
|
28
|
+
*/
|
|
29
|
+
constructor(forkPath: string, port?: number, host?: string, options?: ForkServerOptions);
|
|
30
|
+
/**
|
|
31
|
+
* Set CORS headers for a request when the request's `Origin` is in
|
|
32
|
+
* the allowlist. No-op otherwise.
|
|
14
33
|
*/
|
|
15
|
-
|
|
34
|
+
private applyCors;
|
|
16
35
|
/**
|
|
17
36
|
* Start the fork server
|
|
18
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/fork/server.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/fork/server.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IAEvD;;;;;OAKG;gBAED,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,MAAa,EACnB,IAAI,GAAE,MAAoB,EAC1B,OAAO,GAAE,iBAAsB;IAQjC;;;OAGG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2E5B;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAarB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;YACW,aAAa;IA0D3B;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;YACW,gBAAgB;IAqB9B;;OAEG;YACW,iBAAiB;IAsB/B;;OAEG;YACW,kBAAkB;IAwBhC;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAiBhB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,SAAS;CAOlB"}
|
package/dist/fork/server.js
CHANGED
|
@@ -10,15 +10,31 @@ export class ForkServer {
|
|
|
10
10
|
forkManager;
|
|
11
11
|
port;
|
|
12
12
|
host;
|
|
13
|
+
corsAllowOrigins;
|
|
13
14
|
/**
|
|
14
15
|
* @param host Interface to bind. Defaults to `127.0.0.1` so cached fork
|
|
15
16
|
* state (which may include sensitive resources) is not exposed on the LAN.
|
|
16
17
|
* Pass `'0.0.0.0'` only if you intentionally need to expose the server.
|
|
18
|
+
* @param options Optional CORS allowlist (see {@link ForkServerOptions}).
|
|
17
19
|
*/
|
|
18
|
-
constructor(forkPath, port = 8080, host = '127.0.0.1') {
|
|
20
|
+
constructor(forkPath, port = 8080, host = '127.0.0.1', options = {}) {
|
|
19
21
|
this.forkManager = new ForkManager(forkPath);
|
|
20
22
|
this.port = port;
|
|
21
23
|
this.host = host;
|
|
24
|
+
this.corsAllowOrigins = new Set(options.corsAllowOrigins ?? []);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Set CORS headers for a request when the request's `Origin` is in
|
|
28
|
+
* the allowlist. No-op otherwise.
|
|
29
|
+
*/
|
|
30
|
+
applyCors(req, res) {
|
|
31
|
+
const origin = req.headers.origin;
|
|
32
|
+
if (typeof origin === 'string' && this.corsAllowOrigins.has(origin)) {
|
|
33
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
34
|
+
res.setHeader('Vary', 'Origin');
|
|
35
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
36
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
37
|
+
}
|
|
22
38
|
}
|
|
23
39
|
/**
|
|
24
40
|
* Start the fork server
|
|
@@ -38,10 +54,7 @@ export class ForkServer {
|
|
|
38
54
|
console.error(`Error handling request:`, error);
|
|
39
55
|
// Only send response if headers haven't been sent yet
|
|
40
56
|
if (!res.headersSent) {
|
|
41
|
-
|
|
42
|
-
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
43
|
-
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
44
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
57
|
+
this.applyCors(req, res);
|
|
45
58
|
// Send generic error response (no internal details exposed)
|
|
46
59
|
this.sendJSON(res, 500, {
|
|
47
60
|
message: 'Internal server error',
|
|
@@ -125,10 +138,7 @@ export class ForkServer {
|
|
|
125
138
|
const pathname = url.pathname;
|
|
126
139
|
// Log request
|
|
127
140
|
console.log(`[${new Date().toISOString()}] ${req.method} ${pathname}`);
|
|
128
|
-
|
|
129
|
-
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
130
|
-
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
131
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
141
|
+
this.applyCors(req, res);
|
|
132
142
|
// Handle OPTIONS for CORS preflight
|
|
133
143
|
if (req.method === 'OPTIONS') {
|
|
134
144
|
res.writeHead(200);
|
package/dist/fork/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/fork/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/fork/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,14 +46,18 @@ export declare class Harness {
|
|
|
46
46
|
* and `runMoveScript` throw with a message pointing at `createLocal`.
|
|
47
47
|
* `runViewFunction` works (read-only path).
|
|
48
48
|
*
|
|
49
|
-
* @param network - Network to fork
|
|
49
|
+
* @param network - Network to fork. Built-ins: `"testnet"`, `"mainnet"`.
|
|
50
|
+
* Any other name requires `rpcUrl`.
|
|
50
51
|
* @param apiKey - Optional Movement API key. When set, every upstream
|
|
51
52
|
* request from the fork's `MovementApiClient` carries
|
|
52
53
|
* `Authorization: Bearer <apiKey>`. Use for rate-limited public
|
|
53
54
|
* endpoints or auth-gated nodes. The key stays in process memory
|
|
54
55
|
* (not persisted to the fork's on-disk metadata).
|
|
56
|
+
* @param rpcUrl - Required when forking a non-built-in network.
|
|
57
|
+
* Ignored when a fork already exists on disk (the saved metadata's
|
|
58
|
+
* nodeUrl is reused).
|
|
55
59
|
*/
|
|
56
|
-
static createFork(network: string, apiKey?: string): Promise<Harness>;
|
|
60
|
+
static createFork(network: string, apiKey?: string, rpcUrl?: string): Promise<Harness>;
|
|
57
61
|
/**
|
|
58
62
|
* Bind a Harness to a real running network (testnet, mainnet, or any
|
|
59
63
|
* custom network defined in `movehat.config.ts`). No local process is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Harness.d.ts","sourceRoot":"","sources":["../../src/harness/Harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAUpD;;;;;;;;;;;;GAYG;AACH,qBAAa,OAAO;IAClB,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,OAAO,EAAE,cAAc,CAAC;IAExC,gBAAgB;IAChB,SAAgB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7C,gBAAgB;IAChB,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxC,gBAAgB;IAChB,SAAgB,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1C,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAQP,4DAA4D;IAC5D,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;;;OAMG;WACU,WAAW,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1E
|
|
1
|
+
{"version":3,"file":"Harness.d.ts","sourceRoot":"","sources":["../../src/harness/Harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAUpD;;;;;;;;;;;;GAYG;AACH,qBAAa,OAAO;IAClB,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,OAAO,EAAE,cAAc,CAAC;IAExC,gBAAgB;IAChB,SAAgB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7C,gBAAgB;IAChB,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxC,gBAAgB;IAChB,SAAgB,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1C,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAQP,4DAA4D;IAC5D,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;;;OAMG;WACU,WAAW,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1E;;;;;;;;;;;;;;;;;OAiBG;WACU,UAAU,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IAkBnB;;;;;;;OAOG;WACU,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM/E;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B;;;;;;;;;;OAUG;IACG,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC;IASjF;;;;;;;;OAQG;IACG,iBAAiB,CACrB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC;IAS1B;;;;;;;;OAQG;IACG,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAI1E;;;;;;;;OAQG;IACG,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAQ9E"}
|
package/dist/harness/Harness.js
CHANGED
|
@@ -66,20 +66,26 @@ export class Harness {
|
|
|
66
66
|
* and `runMoveScript` throw with a message pointing at `createLocal`.
|
|
67
67
|
* `runViewFunction` works (read-only path).
|
|
68
68
|
*
|
|
69
|
-
* @param network - Network to fork
|
|
69
|
+
* @param network - Network to fork. Built-ins: `"testnet"`, `"mainnet"`.
|
|
70
|
+
* Any other name requires `rpcUrl`.
|
|
70
71
|
* @param apiKey - Optional Movement API key. When set, every upstream
|
|
71
72
|
* request from the fork's `MovementApiClient` carries
|
|
72
73
|
* `Authorization: Bearer <apiKey>`. Use for rate-limited public
|
|
73
74
|
* endpoints or auth-gated nodes. The key stays in process memory
|
|
74
75
|
* (not persisted to the fork's on-disk metadata).
|
|
76
|
+
* @param rpcUrl - Required when forking a non-built-in network.
|
|
77
|
+
* Ignored when a fork already exists on disk (the saved metadata's
|
|
78
|
+
* nodeUrl is reused).
|
|
75
79
|
*/
|
|
76
|
-
static async createFork(network, apiKey) {
|
|
80
|
+
static async createFork(network, apiKey, rpcUrl) {
|
|
77
81
|
const setupOpts = {
|
|
78
82
|
mode: "fork",
|
|
79
83
|
forkNetwork: network,
|
|
80
84
|
};
|
|
81
85
|
if (apiKey !== undefined)
|
|
82
86
|
setupOpts.forkApiKey = apiKey;
|
|
87
|
+
if (rpcUrl !== undefined)
|
|
88
|
+
setupOpts.forkRpcUrl = rpcUrl;
|
|
83
89
|
const ctx = await setupLocalTesting(setupOpts);
|
|
84
90
|
const init = {
|
|
85
91
|
mode: "fork",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Harness.js","sourceRoot":"","sources":["../../src/harness/Harness.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAY5C;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,OAAO;IACF,IAAI,CAAc;IAClB,OAAO,CAAiB;IAExC,gBAAgB;IACA,SAAS,CAAoB;IAC7C,gBAAgB;IACA,UAAU,CAAc;IACxC,gBAAgB;IACA,WAAW,CAAe;IAElC,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAoB,IAAiB;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpD,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACvD,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5D,CAAC;IAED,4DAA4D;IAC5D,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAA4B,EAAE;QACrD,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,GAAgB;YACxB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;QACF,IAAI,GAAG,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"Harness.js","sourceRoot":"","sources":["../../src/harness/Harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeObject.d.ts","sourceRoot":"","sources":["../../src/harness/codeObject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codeObject.d.ts","sourceRoot":"","sources":["../../src/harness/codeObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAyB7B;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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 {
|
|
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
|
-
//
|
|
136
|
-
// raw
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
|
|
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 = () =>
|
|
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
|
-
"--
|
|
171
|
-
|
|
164
|
+
"--private-key-file",
|
|
165
|
+
keyFilePath,
|
|
166
|
+
"--sender-account",
|
|
167
|
+
deployerAddress,
|
|
172
168
|
"--assume-yes",
|
|
173
169
|
...includedArtifacts,
|
|
174
170
|
...namedAddrArgs,
|
|
@@ -183,14 +179,15 @@ async function executeMovementMoveObject(opts) {
|
|
|
183
179
|
console.error(result.stderr.trim());
|
|
184
180
|
}
|
|
185
181
|
finally {
|
|
186
|
-
//
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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).
|