@multiplayer-app/sandbox 7.0.1 → 7.0.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/README.md +80 -0
- package/dist/cli.js +970 -107
- package/dist/cli.js.map +4 -4
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/console-relays.d.ts +4 -4
- package/dist/console-relays.d.ts.map +1 -1
- package/dist/executor/index.d.ts +12 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/lambda-microvm-executor.d.ts +13 -3
- package/dist/executor/lambda-microvm-executor.d.ts.map +1 -1
- package/dist/executor/types.d.ts +16 -2
- package/dist/executor/types.d.ts.map +1 -1
- package/dist/images.d.ts.map +1 -1
- package/dist/index.js +409 -53
- package/dist/index.js.map +4 -4
- package/dist/microvm-guest-agents.d.ts +18 -0
- package/dist/microvm-guest-agents.d.ts.map +1 -0
- package/dist/microvm-images.d.ts +37 -0
- package/dist/microvm-images.d.ts.map +1 -0
- package/dist/services/serial-relay.d.ts +11 -0
- package/dist/services/serial-relay.d.ts.map +1 -1
- package/dist/socket-client.d.ts.map +1 -1
- package/dist/vendor/builder-types/events.d.ts +10 -0
- package/dist/vendor/builder-types/events.d.ts.map +1 -1
- package/dist/vendor/builder-types/index.d.ts +1 -0
- package/dist/vendor/builder-types/index.d.ts.map +1 -1
- package/dist/vendor/builder-types/release.d.ts +5 -5
- package/dist/vendor/builder-types/release.d.ts.map +1 -1
- package/dist/vendor/builder-types/vm-cost.d.ts +88 -0
- package/dist/vendor/builder-types/vm-cost.d.ts.map +1 -0
- package/dist/vendor/builder-types/vm.d.ts +5 -0
- package/dist/vendor/builder-types/vm.d.ts.map +1 -1
- package/dist/worker-identity.d.ts +11 -0
- package/dist/worker-identity.d.ts.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guest-agent source for each stack's Lambda MicroVM base image, as a set of in-memory files
|
|
3
|
+
* (zipped and uploaded by microvm-images.ts — no disk/build step needed).
|
|
4
|
+
*
|
|
5
|
+
* Kept in sync BY HAND with scripts/base-images/{node,python,static}/build.sh, which the
|
|
6
|
+
* internal build-base-images.sh pipeline still uses for QEMU/Firecracker/Docker images (those
|
|
7
|
+
* need a real build host, so unifying the two isn't in scope here) — if you change one, change
|
|
8
|
+
* the other. The agent itself: an HTTP server on :8080 that answers the Lambda MicroVM
|
|
9
|
+
* lifecycle hooks (/aws/lambda-microvms/runtime/v1/*) and {"status":"ok"} elsewhere. The /run
|
|
10
|
+
* hook payload (vmId/sessionId/stack/env from the worker executor) is kept in memory and
|
|
11
|
+
* echoed back so the control plane can identify the VM.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MICROVM_BASE_IMAGE_STACKS: readonly ["node", "python", "static"];
|
|
14
|
+
export type MicrovmBaseImageStack = (typeof MICROVM_BASE_IMAGE_STACKS)[number];
|
|
15
|
+
export declare function isMicrovmBaseImageStack(stack: string): stack is MicrovmBaseImageStack;
|
|
16
|
+
/** Files to zip for `stack`'s base image, relative paths -> contents. */
|
|
17
|
+
export declare function guestAgentFiles(stack: MicrovmBaseImageStack): Record<string, string>;
|
|
18
|
+
//# sourceMappingURL=microvm-guest-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microvm-guest-agents.d.ts","sourceRoot":"","sources":["../src/microvm-guest-agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,yBAAyB,uCAAwC,CAAA;AAC9E,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,qBAAqB,CAErF;AAoRD,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASpF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type MicrovmBaseImageStack } from './microvm-guest-agents';
|
|
2
|
+
export interface CreateMicrovmImagesOptions {
|
|
3
|
+
region: string;
|
|
4
|
+
/** S3 bucket the built code artifact is uploaded to (must already exist). */
|
|
5
|
+
bucket: string;
|
|
6
|
+
/** AWS-managed base OS image ARN — discover one with listBaseMicrovmImages(). */
|
|
7
|
+
baseImageArn: string;
|
|
8
|
+
/** IAM role ARN the build assumes to read the artifact from `bucket` (needs s3:GetObject). */
|
|
9
|
+
buildRoleArn: string;
|
|
10
|
+
/** Stacks to build/register (default: all of MICROVM_BASE_IMAGE_STACKS). */
|
|
11
|
+
stacks?: MicrovmBaseImageStack[];
|
|
12
|
+
/** Minimum guest memory, MiB (default: 1024). */
|
|
13
|
+
minMemoryMib?: number;
|
|
14
|
+
/** MicroVM image name prefix, "<prefix>-<stack>" (default: 'sandbox'). */
|
|
15
|
+
imageNamePrefix?: string;
|
|
16
|
+
/** Image-build poll interval, ms (default: 5000). */
|
|
17
|
+
pollIntervalMs?: number;
|
|
18
|
+
/** Image-build poll timeout, ms (default: 600000 = 10 min). */
|
|
19
|
+
pollTimeoutMs?: number;
|
|
20
|
+
/** Called after each step so callers (CLI, CI) can report progress. Optional. */
|
|
21
|
+
onProgress?: (message: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateMicrovmImagesResult {
|
|
24
|
+
/** stack -> the image ARN that's now active, ready to use as MICROVM_STACK_IMAGE_ARNS. */
|
|
25
|
+
stackArns: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
/** AWS-managed base OS images available as a `baseImageArn` candidate in this region. */
|
|
28
|
+
export declare function listBaseMicrovmImages(options: {
|
|
29
|
+
region: string;
|
|
30
|
+
}): Promise<string[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Builds and registers/updates the guest-agent base images for `options.stacks`, in the
|
|
33
|
+
* caller's own AWS account. Returns the stack -> image ARN map once every image's new version
|
|
34
|
+
* has finished building (polled).
|
|
35
|
+
*/
|
|
36
|
+
export declare function createMicrovmImages(options: CreateMicrovmImagesOptions): Promise<CreateMicrovmImagesResult>;
|
|
37
|
+
//# sourceMappingURL=microvm-images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microvm-images.d.ts","sourceRoot":"","sources":["../src/microvm-images.ts"],"names":[],"mappings":"AAuBA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAA;AAE/B,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAA;IACpB,8FAA8F;IAC9F,YAAY,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAChC,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iFAAiF;IACjF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAqCD,yFAAyF;AACzF,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAI1F;AAyCD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC,CA+EpC"}
|
|
@@ -6,11 +6,22 @@ export declare class SerialRelay {
|
|
|
6
6
|
private readonly source;
|
|
7
7
|
private readonly socket;
|
|
8
8
|
private conn;
|
|
9
|
+
private webSocket;
|
|
10
|
+
private reconnectTimer;
|
|
11
|
+
private connecting;
|
|
12
|
+
private browserCount;
|
|
13
|
+
private pendingInput;
|
|
14
|
+
private destroyed;
|
|
9
15
|
private inputHandler;
|
|
16
|
+
private attachHandler;
|
|
17
|
+
private detachHandler;
|
|
10
18
|
constructor(vmId: string, source: SerialSource, socket: Socket);
|
|
11
19
|
connect(): void;
|
|
12
20
|
private connectTcp;
|
|
13
21
|
private connectPipe;
|
|
22
|
+
private connectWebSocket;
|
|
23
|
+
private scheduleWebSocketReconnect;
|
|
24
|
+
private disconnectWebSocket;
|
|
14
25
|
destroy(): void;
|
|
15
26
|
}
|
|
16
27
|
//# sourceMappingURL=serial-relay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial-relay.d.ts","sourceRoot":"","sources":["../../src/services/serial-relay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"serial-relay.d.ts","sourceRoot":"","sources":["../../src/services/serial-relay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAI9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,oEAAoE;AACpE,qBAAa,WAAW;IAapB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdzB,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,aAAa,CAA+C;gBAGjD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM;IAGjC,OAAO,IAAI,IAAI;IA8Cf,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,WAAW;YAUL,gBAAgB;IA8C9B,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,mBAAmB;IAS3B,OAAO,IAAI,IAAI;CAYhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket-client.d.ts","sourceRoot":"","sources":["../src/socket-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"socket-client.d.ts","sourceRoot":"","sources":["../src/socket-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAalD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,YAAY,CAAA;AAoJ7D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CA2J5F"}
|
|
@@ -3,6 +3,8 @@ import type { VmAction, VmRunResult } from './vm';
|
|
|
3
3
|
export declare const WorkerEvent: {
|
|
4
4
|
readonly HEARTBEAT: "worker:heartbeat";
|
|
5
5
|
readonly VM_RUN_EXITED: "vm:run-exited";
|
|
6
|
+
readonly VM_CREATE_RESULT: "vm:create-result";
|
|
7
|
+
readonly VM_EXTERNALLY_TERMINATED: "vm:externally-terminated";
|
|
6
8
|
readonly ASSIGNED_ID: "worker:assigned-id";
|
|
7
9
|
readonly REATTACH: "worker:reattach";
|
|
8
10
|
readonly VM_CREATE: "vm:create";
|
|
@@ -20,6 +22,8 @@ export declare const WorkerEvent: {
|
|
|
20
22
|
readonly TERMINAL_DATA: "terminal:data";
|
|
21
23
|
readonly VNC_MOUSE: "vnc:mouse";
|
|
22
24
|
readonly VNC_KEYBOARD: "vnc:keyboard";
|
|
25
|
+
readonly TERMINAL_ATTACH: "terminal:attach";
|
|
26
|
+
readonly TERMINAL_DETACH: "terminal:detach";
|
|
23
27
|
readonly TERMINAL_INPUT: "terminal:input";
|
|
24
28
|
};
|
|
25
29
|
export type WorkerEventName = (typeof WorkerEvent)[keyof typeof WorkerEvent];
|
|
@@ -82,4 +86,10 @@ export interface TerminalInputPayload {
|
|
|
82
86
|
export interface VmRunExitedPayload extends VmRunResult {
|
|
83
87
|
vmId: string;
|
|
84
88
|
}
|
|
89
|
+
export interface VmCreateResultPayload {
|
|
90
|
+
vmId: string;
|
|
91
|
+
ok: boolean;
|
|
92
|
+
metadata?: Record<string, unknown>;
|
|
93
|
+
error?: string;
|
|
94
|
+
}
|
|
85
95
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAIjD,wGAAwG;AACxG,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAIjD,wGAAwG;AACxG,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAsDd,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAA;AAE5E,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAKrD,CAAA;AAID,sFAAsF;AACtF,eAAO,MAAM,YAAY;;;;;;;;CAaf,CAAA;AAIV,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,cAAc,UAAU,CAAA;AACxB,cAAc,MAAM,CAAA;AACpB,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,cAAc,UAAU,CAAA;AACxB,cAAc,MAAM,CAAA;AACpB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
|
|
@@ -7,14 +7,14 @@ import type { GatewayAccessConfig } from './access';
|
|
|
7
7
|
*/
|
|
8
8
|
export interface ReleaseRecord {
|
|
9
9
|
releaseId: string;
|
|
10
|
-
|
|
10
|
+
accountId: string;
|
|
11
11
|
name: string;
|
|
12
12
|
stack: VmStack;
|
|
13
13
|
/** Object key of the artifact zip inside the releases bucket. */
|
|
14
14
|
artifactKey: string;
|
|
15
15
|
/**
|
|
16
16
|
* True once the artifact has been extracted into individual objects under
|
|
17
|
-
* releasePrefix(
|
|
17
|
+
* releasePrefix(accountId, releaseId) — only meaningful for stack "static", where the
|
|
18
18
|
* gateway serves those objects directly, with no VM involved.
|
|
19
19
|
*/
|
|
20
20
|
published: boolean;
|
|
@@ -25,7 +25,7 @@ export interface ReleaseRecord {
|
|
|
25
25
|
updatedAt: string;
|
|
26
26
|
}
|
|
27
27
|
/** S3 object key for a release archive. S3 keys intentionally do not start with "/". */
|
|
28
|
-
export declare function releaseArtifactKey(
|
|
28
|
+
export declare function releaseArtifactKey(accountId: string, releaseId: string): string;
|
|
29
29
|
export interface ReleaseCreateRequest {
|
|
30
30
|
name: string;
|
|
31
31
|
stack: VmStack;
|
|
@@ -41,11 +41,11 @@ export interface ReleaseCreateResponse {
|
|
|
41
41
|
uploadUrl?: string;
|
|
42
42
|
}
|
|
43
43
|
/** S3 key prefix (no trailing slash) shared by a release archive and its extracted files. */
|
|
44
|
-
export declare function releasePrefix(
|
|
44
|
+
export declare function releasePrefix(accountId: string, releaseId: string): string;
|
|
45
45
|
export declare const RELEASE_REDIS_KEY_PREFIX = "release:";
|
|
46
46
|
/** Mirrored into Redis on publish so the gateway can serve static releases without touching Mongo. */
|
|
47
47
|
export interface ReleaseRegistryEntry {
|
|
48
|
-
|
|
48
|
+
accountId: string;
|
|
49
49
|
stack: VmStack;
|
|
50
50
|
published: boolean;
|
|
51
51
|
access?: GatewayAccessConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,
|
|
1
|
+
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAEnD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,CAAA;IACtB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,eAAO,MAAM,wBAAwB,aAAa,CAAA;AAElD,sGAAsG;AACtG,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC7B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { VmEngine, VmResources, VmState } from './vm';
|
|
2
|
+
/**
|
|
3
|
+
* Per-second compute rates plus (where applicable) snapshot storage/operation rates. Only
|
|
4
|
+
* lambda-microvm and fargate have real, metered AWS pricing — everything else runs on
|
|
5
|
+
* self-hosted hardware with no per-VM AWS bill. Their rates below are a nominal, clearly
|
|
6
|
+
* NOT-billing-grade estimate (~$0.02/vCPU-hr, ~$0.005/GB-hr, a rough amortized-hardware
|
|
7
|
+
* guess) purely so every VM has some comparable cost figure, not a real invoice input.
|
|
8
|
+
*/
|
|
9
|
+
export interface VmCostRates {
|
|
10
|
+
vcpuPerSecond: number;
|
|
11
|
+
gbPerSecond: number;
|
|
12
|
+
/** Storage cost while suspended (state preserved). Lambda MicroVM only. */
|
|
13
|
+
snapshotGbMonth?: number;
|
|
14
|
+
/** One-time cost per resume (snapshot read). Lambda MicroVM only. */
|
|
15
|
+
snapshotReadPerGb?: number;
|
|
16
|
+
/** One-time cost per suspend (snapshot write). Lambda MicroVM only. */
|
|
17
|
+
snapshotWritePerGb?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Sourced from AWS's published pricing (see aws.amazon.com/lambda/pricing and
|
|
21
|
+
* aws.amazon.com/fargate/pricing, checked 2026-09) for us-east-1 ARM/Graviton — matches
|
|
22
|
+
* this repo's base images (see scripts/base-images, built for aarch64).
|
|
23
|
+
*/
|
|
24
|
+
export declare const VM_ENGINE_COST_RATES: Record<VmEngine, VmCostRates>;
|
|
25
|
+
export declare function costRatesFor(engine: VmEngine | undefined): VmCostRates;
|
|
26
|
+
/** Compute cost for `seconds` spent actively running, at this engine's baseline resources. */
|
|
27
|
+
export declare function estimateComputeCostUsd(engine: VmEngine | undefined, resources: {
|
|
28
|
+
vcpuCount: number;
|
|
29
|
+
memMib: number;
|
|
30
|
+
}, seconds: number): number;
|
|
31
|
+
/** Storage-only cost for `seconds` spent suspended (state preserved, no compute billed). */
|
|
32
|
+
export declare function estimateSuspendedStorageCostUsd(engine: VmEngine | undefined, resources: {
|
|
33
|
+
memMib: number;
|
|
34
|
+
}, seconds: number): number;
|
|
35
|
+
/** One-time cost of a single suspend (snapshot write). $0 for engines with no snapshot billing. */
|
|
36
|
+
export declare function estimateSuspendOpCostUsd(engine: VmEngine | undefined, resources: {
|
|
37
|
+
memMib: number;
|
|
38
|
+
}): number;
|
|
39
|
+
/** One-time cost of a single resume (snapshot read). $0 for engines with no snapshot billing. */
|
|
40
|
+
export declare function estimateResumeOpCostUsd(engine: VmEngine | undefined, resources: {
|
|
41
|
+
memMib: number;
|
|
42
|
+
}): number;
|
|
43
|
+
/** Cumulative usage/cost tracking on a VM or deployment record, updated on every state transition. */
|
|
44
|
+
export interface VmUsage {
|
|
45
|
+
/** Total seconds spent actively 'running' (billable compute) across this VM's lifetime. */
|
|
46
|
+
runningSeconds: number;
|
|
47
|
+
/** Total seconds spent 'paused'/'stopped' (suspended — near-zero cost, tracked for completeness). */
|
|
48
|
+
suspendedSeconds: number;
|
|
49
|
+
/** Number of pause/suspend transitions — lambda-microvm bills a per-GB snapshot-write fee per suspend. */
|
|
50
|
+
suspendCount: number;
|
|
51
|
+
/** Number of resume transitions — lambda-microvm bills a per-GB snapshot-read fee per resume. */
|
|
52
|
+
resumeCount: number;
|
|
53
|
+
/** Wall-clock time of the last accrual — the next one adds the interval since this. */
|
|
54
|
+
lastTransitionAt: string;
|
|
55
|
+
/**
|
|
56
|
+
* Running total in USD. Billing-accurate for lambda-microvm; a rough, clearly-labeled
|
|
57
|
+
* estimate for every other engine (see VM_ENGINE_COST_RATES).
|
|
58
|
+
*/
|
|
59
|
+
estimatedCostUsd: number;
|
|
60
|
+
}
|
|
61
|
+
export declare function initialUsage(at?: Date): VmUsage;
|
|
62
|
+
/**
|
|
63
|
+
* Closes out the interval since `record.usage.lastTransitionAt` under `record.state` (the
|
|
64
|
+
* state being LEFT), attributes its cost, then folds in any one-time suspend/resume
|
|
65
|
+
* operation cost triggered by the transition to `newState`. Call this with the record's
|
|
66
|
+
* state BEFORE persisting `newState` — it reads what's being left, not what's being entered.
|
|
67
|
+
*/
|
|
68
|
+
export declare function accrueUsage(record: {
|
|
69
|
+
engine?: VmEngine;
|
|
70
|
+
resources: VmResources;
|
|
71
|
+
state: VmState;
|
|
72
|
+
usage?: VmUsage;
|
|
73
|
+
}, newState: VmState, now?: Date): VmUsage;
|
|
74
|
+
/**
|
|
75
|
+
* Live cost as of right now — NOT persisted, compute at read/response time only (same
|
|
76
|
+
* pattern as vm.service.ts's withVmUrl: derived, never stored). The stored `usage` is only
|
|
77
|
+
* a checkpoint as of the last state transition, so a VM that's been running continuously
|
|
78
|
+
* for hours without pausing would otherwise show a frozen, understated cost until its next
|
|
79
|
+
* transition. Passing `record.state` as both the leaving and entering state accrues the
|
|
80
|
+
* elapsed interval without triggering a (spurious) one-time suspend/resume fee.
|
|
81
|
+
*/
|
|
82
|
+
export declare function currentUsage(record: {
|
|
83
|
+
engine?: VmEngine;
|
|
84
|
+
resources: VmResources;
|
|
85
|
+
state: VmState;
|
|
86
|
+
usage?: VmUsage;
|
|
87
|
+
}, now?: Date): VmUsage;
|
|
88
|
+
//# sourceMappingURL=vm-cost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-cost.d.ts","sourceRoot":"","sources":["../src/vm-cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAQD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAmB9D,CAAA;AAMD,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAEtE;AAED,8FAA8F;AAC9F,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAC5B,SAAS,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAChD,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED,4FAA4F;AAC5F,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,QAAQ,GAAG,SAAS,EAC5B,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAC7B,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAED,mGAAmG;AACnG,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAC5B,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5B,MAAM,CAGR;AAED,iGAAiG;AACjG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAC5B,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5B,MAAM,CAGR;AAED,sGAAsG;AACtG,MAAM,WAAW,OAAO;IACtB,2FAA2F;IAC3F,cAAc,EAAE,MAAM,CAAA;IACtB,qGAAqG;IACrG,gBAAgB,EAAE,MAAM,CAAA;IACxB,0GAA0G;IAC1G,YAAY,EAAE,MAAM,CAAA;IACpB,iGAAiG;IACjG,WAAW,EAAE,MAAM,CAAA;IACnB,uFAAuF;IACvF,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,wBAAgB,YAAY,CAAC,EAAE,GAAE,IAAiB,GAAG,OAAO,CAS3D;AAUD;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACtF,QAAQ,EAAE,OAAO,EACjB,GAAG,GAAE,IAAiB,GACrB,OAAO,CAyCT;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACtF,GAAG,GAAE,IAAiB,GACrB,OAAO,CAET"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { GatewayAccessConfig } from './access';
|
|
2
|
+
import type { VmUsage } from './vm-cost';
|
|
2
3
|
export declare const VM_STACKS: readonly ["generic", "node", "python", "static"];
|
|
3
4
|
export type VmStack = (typeof VM_STACKS)[number];
|
|
4
5
|
export declare const VM_ENGINES: readonly ["mock", "qemu", "firecracker", "docker", "docker-sandbox", "remote", "lambda-microvm", "fargate"];
|
|
@@ -19,6 +20,8 @@ export interface VmResources {
|
|
|
19
20
|
}
|
|
20
21
|
export interface VmRecord {
|
|
21
22
|
vmId: string;
|
|
23
|
+
/** Account that created this VM — same convention as ReleaseRecord.accountId (req.accountId, never client-supplied). */
|
|
24
|
+
accountId: string;
|
|
22
25
|
/** Builder session this VM belongs to; optional for VMs not tied to a session. */
|
|
23
26
|
sessionId?: string;
|
|
24
27
|
workerId: string;
|
|
@@ -43,6 +46,8 @@ export interface VmRecord {
|
|
|
43
46
|
* never interprets it — only the executor that created it knows the shape.
|
|
44
47
|
*/
|
|
45
48
|
runtimeMetadata?: Record<string, unknown>;
|
|
49
|
+
/** Cumulative running-time/cost tracking, updated on every state transition. See vm-cost.ts. */
|
|
50
|
+
usage?: VmUsage;
|
|
46
51
|
createdAt: string;
|
|
47
52
|
updatedAt: string;
|
|
48
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vm.d.ts","sourceRoot":"","sources":["../src/vm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"vm.d.ts","sourceRoot":"","sources":["../src/vm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads back the gateway-assigned runtime routing ID (WorkerEvent.ASSIGNED_ID) this
|
|
3
|
+
* process persisted on a previous boot, if any — lets a restarted worker present the same
|
|
4
|
+
* identity it had before, so REATTACH's `findByWorkerId` still finds its VMs. Missing file,
|
|
5
|
+
* unreadable, or empty all just mean "no prior identity" (first boot, fresh volume, etc.) —
|
|
6
|
+
* not an error; the worker falls back to letting the gateway mint a new one, same as today.
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadPersistedWorkerId(filePath: string): string | undefined;
|
|
9
|
+
/** Best-effort — a failed write only costs the next restart's reattach, not this session. */
|
|
10
|
+
export declare function savePersistedWorkerId(filePath: string, workerId: string): void;
|
|
11
|
+
//# sourceMappingURL=worker-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-identity.d.ts","sourceRoot":"","sources":["../src/worker-identity.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO1E;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAU9E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplayer-app/sandbox",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.3",
|
|
4
4
|
"description": "Sandbox worker library and CLI (Docker, QEMU, Firecracker, AWS Lambda MicroVM, Fargate)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -26,14 +26,18 @@
|
|
|
26
26
|
"@aws-sdk/client-ecs": "^3.1087.0",
|
|
27
27
|
"@aws-sdk/client-lambda-microvms": "^3.1079.0",
|
|
28
28
|
"@aws-sdk/client-s3": "^3.1079.0",
|
|
29
|
+
"archiver": "^8.0.0",
|
|
29
30
|
"bunyan": "1.8.15",
|
|
30
31
|
"commander": "^14.0.0",
|
|
31
32
|
"dotenv": "^17.2.3",
|
|
32
33
|
"rfb2": "^0.2.2",
|
|
33
|
-
"socket.io-client": "4.8.3"
|
|
34
|
+
"socket.io-client": "4.8.3",
|
|
35
|
+
"ws": "^8.18.3"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
38
|
+
"@types/archiver": "^8.0.0",
|
|
36
39
|
"@types/node": "^25.8.0",
|
|
40
|
+
"@types/ws": "^8.18.1",
|
|
37
41
|
"esbuild": "^0.25.12",
|
|
38
42
|
"nodemon": "3.1.14",
|
|
39
43
|
"typescript": "^6.0.3",
|