@secure-exec/core 0.0.0-split-runtime-preview.7b0dded

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +7 -0
  2. package/dist/binary.d.ts +4 -0
  3. package/dist/binary.js +25 -0
  4. package/dist/bytes.d.ts +2 -0
  5. package/dist/bytes.js +6 -0
  6. package/dist/callbacks.d.ts +41 -0
  7. package/dist/callbacks.js +94 -0
  8. package/dist/cargo.d.ts +2 -0
  9. package/dist/cargo.js +142 -0
  10. package/dist/correlation.d.ts +10 -0
  11. package/dist/correlation.js +49 -0
  12. package/dist/descriptors.d.ts +34 -0
  13. package/dist/descriptors.js +37 -0
  14. package/dist/event-buffer.d.ts +90 -0
  15. package/dist/event-buffer.js +313 -0
  16. package/dist/ext.d.ts +7 -0
  17. package/dist/ext.js +13 -0
  18. package/dist/filesystem.d.ts +41 -0
  19. package/dist/filesystem.js +70 -0
  20. package/dist/frame-payload-codec.d.ts +8 -0
  21. package/dist/frame-payload-codec.js +14 -0
  22. package/dist/frame-rpc.d.ts +38 -0
  23. package/dist/frame-rpc.js +73 -0
  24. package/dist/frame-stream.d.ts +27 -0
  25. package/dist/frame-stream.js +99 -0
  26. package/dist/framing.d.ts +7 -0
  27. package/dist/framing.js +22 -0
  28. package/dist/generated-protocol.d.ts +1038 -0
  29. package/dist/generated-protocol.js +2879 -0
  30. package/dist/index.d.ts +23 -0
  31. package/dist/index.js +23 -0
  32. package/dist/json.d.ts +2 -0
  33. package/dist/json.js +20 -0
  34. package/dist/kernel-proxy.d.ts +137 -0
  35. package/dist/kernel-proxy.js +1725 -0
  36. package/dist/native-client.d.ts +41 -0
  37. package/dist/native-client.js +124 -0
  38. package/dist/numbers.d.ts +1 -0
  39. package/dist/numbers.js +8 -0
  40. package/dist/ownership.d.ts +18 -0
  41. package/dist/ownership.js +77 -0
  42. package/dist/permissions.d.ts +29 -0
  43. package/dist/permissions.js +68 -0
  44. package/dist/process.d.ts +35 -0
  45. package/dist/process.js +125 -0
  46. package/dist/protocol-client.d.ts +46 -0
  47. package/dist/protocol-client.js +180 -0
  48. package/dist/protocol-frames.d.ts +68 -0
  49. package/dist/protocol-frames.js +139 -0
  50. package/dist/protocol-maps.d.ts +28 -0
  51. package/dist/protocol-maps.js +217 -0
  52. package/dist/protocol-schema.d.ts +10 -0
  53. package/dist/protocol-schema.js +11 -0
  54. package/dist/request-payloads.d.ts +139 -0
  55. package/dist/request-payloads.js +213 -0
  56. package/dist/response-payloads.d.ts +107 -0
  57. package/dist/response-payloads.js +161 -0
  58. package/dist/sidecar-client.d.ts +250 -0
  59. package/dist/sidecar-client.js +802 -0
  60. package/dist/state.d.ts +40 -0
  61. package/dist/state.js +44 -0
  62. package/dist/test-runtime.d.ts +483 -0
  63. package/dist/test-runtime.js +1985 -0
  64. package/fixtures/alpine-defaults.json +520 -0
  65. package/fixtures/base-filesystem.json +528 -0
  66. package/package.json +188 -0
@@ -0,0 +1,180 @@
1
+ import { SidecarEventBuffer, SidecarEventBufferOverflow, normalizeSidecarEventMatcher, sidecarEventWaitAbortError, } from "./event-buffer.js";
2
+ import { FrameRpcTransport } from "./frame-rpc.js";
3
+ import { HostProtocolFrameFactory, classifySidecarWrittenProtocolFrame, decodeProtocolFramePayload, encodeProtocolFramePayload, resolveSidecarRequestFramePayload, } from "./protocol-frames.js";
4
+ export class SidecarProtocolClient {
5
+ eventBuffer;
6
+ eventListeners = new Set();
7
+ frameTimeoutMs;
8
+ payloadCodec;
9
+ stderrText;
10
+ hostFrameFactory = new HostProtocolFrameFactory();
11
+ frameTransport;
12
+ closedError = null;
13
+ eventWaiters = new Set();
14
+ sidecarRequestHandler = null;
15
+ constructor(options) {
16
+ this.frameTimeoutMs = options.frameTimeoutMs;
17
+ this.eventBuffer = new SidecarEventBuffer(options.eventBufferCapacity);
18
+ this.payloadCodec = options.payloadCodec ?? "bare";
19
+ this.stderrText = options.stderrText ?? (() => "");
20
+ this.frameTransport = new FrameRpcTransport({
21
+ stdin: options.stdin,
22
+ stdout: options.stdout,
23
+ encodeFrame: (frame) => encodeProtocolFramePayload(frame, this.payloadCodec),
24
+ decodeFrame: (payload) => decodeProtocolFramePayload(payload, this.payloadCodec),
25
+ classifyFrame: classifySidecarWrittenProtocolFrame,
26
+ });
27
+ this.frameTransport.onEvent((event) => {
28
+ this.dispatchEvent(event);
29
+ });
30
+ this.frameTransport.onSidecarRequest((request) => {
31
+ void this.dispatchSidecarRequest(request);
32
+ });
33
+ this.frameTransport.onError((error) => {
34
+ this.failPermanently(options.frameError?.(error) ?? error);
35
+ });
36
+ this.frameTransport.onEnd(() => {
37
+ this.failPermanently(options.streamEndedError?.() ??
38
+ new Error("sidecar protocol stream ended"));
39
+ });
40
+ }
41
+ setSidecarRequestHandler(handler) {
42
+ this.sidecarRequestHandler = handler;
43
+ }
44
+ onEvent(handler) {
45
+ this.eventListeners.add(handler);
46
+ return () => {
47
+ this.eventListeners.delete(handler);
48
+ };
49
+ }
50
+ async sendRequest(input) {
51
+ if (this.closedError) {
52
+ throw this.closedError;
53
+ }
54
+ const request = this.hostFrameFactory.createRequestFrame(input);
55
+ const response = await this.frameTransport.sendFrame(request.request_id, request, {
56
+ timeoutMs: this.frameTimeoutMs,
57
+ timeoutMessage: () => `timed out waiting for sidecar protocol frame for ${input.payload.type}\nstderr:\n${this.stderrText()}`,
58
+ });
59
+ if (response.payload.type === "rejected") {
60
+ throw new Error(`sidecar rejected request ${request.request_id}: ${response.payload.code}: ${response.payload.message}`);
61
+ }
62
+ return response;
63
+ }
64
+ async waitForEvent(matcher, timeoutMs, options) {
65
+ if (this.closedError instanceof SidecarEventBufferOverflow) {
66
+ throw this.closedError;
67
+ }
68
+ const normalizedMatcher = normalizeSidecarEventMatcher(matcher);
69
+ const bufferedEvent = this.eventBuffer.take(normalizedMatcher);
70
+ if (bufferedEvent) {
71
+ return bufferedEvent;
72
+ }
73
+ if (this.closedError) {
74
+ throw this.closedError;
75
+ }
76
+ if (options?.signal?.aborted) {
77
+ throw sidecarEventWaitAbortError(options.signal.reason);
78
+ }
79
+ return await new Promise((resolve, reject) => {
80
+ let abortListener = null;
81
+ const waiter = {
82
+ matches: normalizedMatcher.matches,
83
+ resolve: (event) => {
84
+ if (waiter.timer !== null) {
85
+ clearTimeout(waiter.timer);
86
+ }
87
+ if (abortListener) {
88
+ options?.signal?.removeEventListener("abort", abortListener);
89
+ abortListener = null;
90
+ }
91
+ this.eventWaiters.delete(waiter);
92
+ resolve(event);
93
+ },
94
+ reject: (error) => {
95
+ if (waiter.timer !== null) {
96
+ clearTimeout(waiter.timer);
97
+ }
98
+ if (abortListener) {
99
+ options?.signal?.removeEventListener("abort", abortListener);
100
+ abortListener = null;
101
+ }
102
+ this.eventWaiters.delete(waiter);
103
+ reject(error);
104
+ },
105
+ timer: timeoutMs === undefined
106
+ ? null
107
+ : setTimeout(() => {
108
+ this.eventWaiters.delete(waiter);
109
+ reject(new Error(`timed out waiting for sidecar event\nstderr:\n${this.stderrText()}`));
110
+ }, timeoutMs),
111
+ };
112
+ if (options?.signal) {
113
+ abortListener = () => {
114
+ waiter.reject(sidecarEventWaitAbortError(options.signal?.reason));
115
+ };
116
+ options.signal.addEventListener("abort", abortListener, { once: true });
117
+ }
118
+ this.eventWaiters.add(waiter);
119
+ });
120
+ }
121
+ failPermanently(error, options) {
122
+ if (this.closedError) {
123
+ if (!options?.replaceExisting?.(this.closedError, error)) {
124
+ return;
125
+ }
126
+ }
127
+ this.closedError = error;
128
+ this.rejectPending(error);
129
+ }
130
+ dispose() {
131
+ this.frameTransport.dispose();
132
+ }
133
+ async writeFrame(frame) {
134
+ await this.frameTransport.writeFrame(frame);
135
+ }
136
+ async dispatchSidecarRequest(request) {
137
+ const payload = await resolveSidecarRequestFramePayload(request, this.sidecarRequestHandler);
138
+ try {
139
+ await this.writeFrame(this.hostFrameFactory.createSidecarResponseFrame({
140
+ request,
141
+ payload,
142
+ }));
143
+ }
144
+ catch (error) {
145
+ const normalized = error instanceof Error ? error : new Error(String(error));
146
+ this.failPermanently(normalized);
147
+ }
148
+ }
149
+ dispatchEvent(event) {
150
+ for (const listener of this.eventListeners) {
151
+ try {
152
+ listener(event);
153
+ }
154
+ catch {
155
+ // Event listeners are best-effort observers and must not break framing.
156
+ }
157
+ }
158
+ for (const waiter of this.eventWaiters) {
159
+ if (!waiter.matches(event)) {
160
+ continue;
161
+ }
162
+ waiter.resolve(event);
163
+ return;
164
+ }
165
+ this.bufferEvent(event);
166
+ }
167
+ bufferEvent(event) {
168
+ const overflow = this.eventBuffer.buffer(event);
169
+ if (overflow) {
170
+ this.failPermanently(overflow);
171
+ }
172
+ }
173
+ rejectPending(error) {
174
+ this.frameTransport.rejectAll(error);
175
+ for (const waiter of this.eventWaiters) {
176
+ waiter.reject(error);
177
+ }
178
+ this.eventWaiters.clear();
179
+ }
180
+ }
@@ -0,0 +1,68 @@
1
+ import { type TransportPayloadCodec } from "./frame-payload-codec.js";
2
+ import type { ClassifiedFrame } from "./frame-rpc.js";
3
+ import { type LiveSidecarRequestPayload, type LiveSidecarResponsePayload } from "./callbacks.js";
4
+ import { type LiveSidecarEventPayload } from "./event-buffer.js";
5
+ import * as protocol from "./generated-protocol.js";
6
+ import { type LiveOwnershipScope } from "./ownership.js";
7
+ import { SIDECAR_PROTOCOL_SCHEMA } from "./protocol-schema.js";
8
+ import { type LiveRequestPayload } from "./request-payloads.js";
9
+ import { type LiveResponsePayload } from "./response-payloads.js";
10
+ export interface LiveRequestFrame {
11
+ frame_type: "request";
12
+ schema: typeof SIDECAR_PROTOCOL_SCHEMA;
13
+ request_id: number;
14
+ ownership: LiveOwnershipScope;
15
+ payload: LiveRequestPayload;
16
+ }
17
+ export interface LiveEventFrame {
18
+ frame_type: "event";
19
+ schema: typeof SIDECAR_PROTOCOL_SCHEMA;
20
+ ownership: LiveOwnershipScope;
21
+ payload: LiveSidecarEventPayload;
22
+ }
23
+ export interface LiveSidecarRequestFrame {
24
+ frame_type: "sidecar_request";
25
+ schema: typeof SIDECAR_PROTOCOL_SCHEMA;
26
+ request_id: number;
27
+ ownership: LiveOwnershipScope;
28
+ payload: LiveSidecarRequestPayload;
29
+ }
30
+ export interface LiveResponseFrame {
31
+ frame_type: "response";
32
+ schema: typeof SIDECAR_PROTOCOL_SCHEMA;
33
+ request_id: number;
34
+ ownership: LiveOwnershipScope;
35
+ payload: LiveResponsePayload;
36
+ }
37
+ export interface LiveSidecarResponseFrame {
38
+ frame_type: "sidecar_response";
39
+ schema: typeof SIDECAR_PROTOCOL_SCHEMA;
40
+ request_id: number;
41
+ ownership: LiveOwnershipScope;
42
+ payload: LiveSidecarResponsePayload;
43
+ }
44
+ export type LiveProtocolFrame = LiveRequestFrame | LiveResponseFrame | LiveEventFrame | LiveSidecarRequestFrame | LiveSidecarResponseFrame;
45
+ export type LiveSidecarWrittenProtocolFrame = LiveResponseFrame | LiveEventFrame | LiveSidecarRequestFrame;
46
+ export type ProtocolFramePayloadCodec = TransportPayloadCodec;
47
+ export type ClassifiedSidecarWrittenProtocolFrame = ClassifiedFrame<LiveResponseFrame, LiveEventFrame, LiveSidecarRequestFrame>;
48
+ export type LiveSidecarRequestHandler = (request: LiveSidecarRequestFrame) => Promise<LiveSidecarResponsePayload> | LiveSidecarResponsePayload;
49
+ export declare class HostProtocolFrameFactory {
50
+ private nextRequestId;
51
+ createRequestFrame(input: {
52
+ ownership: LiveOwnershipScope;
53
+ payload: LiveRequestPayload;
54
+ }): LiveRequestFrame;
55
+ createSidecarResponseFrame(input: {
56
+ request: LiveSidecarRequestFrame;
57
+ payload: LiveSidecarResponsePayload;
58
+ }): LiveSidecarResponseFrame;
59
+ }
60
+ export declare function resolveSidecarRequestFramePayload(request: LiveSidecarRequestFrame, handler: LiveSidecarRequestHandler | null): Promise<LiveSidecarResponsePayload>;
61
+ export declare function toGeneratedProtocolFrame(frame: LiveProtocolFrame): protocol.ProtocolFrame;
62
+ export declare function encodeBareProtocolFrame(frame: LiveProtocolFrame): Buffer;
63
+ export declare function decodeBareProtocolFrame(payload: Uint8Array): LiveSidecarWrittenProtocolFrame;
64
+ export declare function encodeProtocolFramePayload(frame: LiveProtocolFrame, codec: ProtocolFramePayloadCodec): Buffer;
65
+ export declare function decodeProtocolFramePayload(payload: Uint8Array, codec: ProtocolFramePayloadCodec): LiveSidecarWrittenProtocolFrame;
66
+ export declare function classifySidecarWrittenProtocolFrame(frame: LiveSidecarWrittenProtocolFrame): ClassifiedSidecarWrittenProtocolFrame;
67
+ export declare function fromGeneratedSidecarWrittenProtocolFrame(frame: protocol.ProtocolFrame): LiveSidecarWrittenProtocolFrame;
68
+ export declare function toLiveProtocolSchema(schema: protocol.ProtocolSchema): typeof SIDECAR_PROTOCOL_SCHEMA;
@@ -0,0 +1,139 @@
1
+ import { toExactUint8Array } from "./bytes.js";
2
+ import { decodeJsonFramePayload, encodeJsonFramePayload, } from "./frame-payload-codec.js";
3
+ import { errorSidecarResponsePayload, fromGeneratedSidecarRequestPayload, isMatchingSidecarResponsePayload, toGeneratedSidecarResponsePayload, } from "./callbacks.js";
4
+ import { fromGeneratedEventPayload, } from "./event-buffer.js";
5
+ import * as protocol from "./generated-protocol.js";
6
+ import { bigIntToSafeNumber } from "./numbers.js";
7
+ import { fromGeneratedOwnershipScope, toGeneratedOwnershipScope, } from "./ownership.js";
8
+ import { SIDECAR_PROTOCOL_SCHEMA, validateSidecarProtocolSchema, } from "./protocol-schema.js";
9
+ import { toGeneratedRequestPayload, } from "./request-payloads.js";
10
+ import { fromGeneratedResponsePayload, } from "./response-payloads.js";
11
+ export class HostProtocolFrameFactory {
12
+ nextRequestId = 1;
13
+ createRequestFrame(input) {
14
+ return {
15
+ frame_type: "request",
16
+ schema: SIDECAR_PROTOCOL_SCHEMA,
17
+ request_id: this.nextRequestId++,
18
+ ownership: input.ownership,
19
+ payload: input.payload,
20
+ };
21
+ }
22
+ createSidecarResponseFrame(input) {
23
+ return {
24
+ frame_type: "sidecar_response",
25
+ schema: SIDECAR_PROTOCOL_SCHEMA,
26
+ request_id: input.request.request_id,
27
+ ownership: input.request.ownership,
28
+ payload: input.payload,
29
+ };
30
+ }
31
+ }
32
+ export async function resolveSidecarRequestFramePayload(request, handler) {
33
+ try {
34
+ if (!handler) {
35
+ throw new Error(`no sidecar request handler registered for ${request.payload.type}`);
36
+ }
37
+ const payload = await handler(request);
38
+ if (!isMatchingSidecarResponsePayload(request.payload, payload)) {
39
+ throw new Error(`sidecar handler returned ${payload.type} for ${request.payload.type}`);
40
+ }
41
+ return payload;
42
+ }
43
+ catch (error) {
44
+ return errorSidecarResponsePayload(request.payload, error);
45
+ }
46
+ }
47
+ export function toGeneratedProtocolFrame(frame) {
48
+ switch (frame.frame_type) {
49
+ case "request":
50
+ return {
51
+ tag: "RequestFrame",
52
+ val: {
53
+ schema: frame.schema,
54
+ requestId: BigInt(frame.request_id),
55
+ ownership: toGeneratedOwnershipScope(frame.ownership),
56
+ payload: toGeneratedRequestPayload(frame.payload),
57
+ },
58
+ };
59
+ case "sidecar_response":
60
+ return {
61
+ tag: "SidecarResponseFrame",
62
+ val: {
63
+ schema: frame.schema,
64
+ requestId: BigInt(frame.request_id),
65
+ ownership: toGeneratedOwnershipScope(frame.ownership),
66
+ payload: toGeneratedSidecarResponsePayload(frame.payload),
67
+ },
68
+ };
69
+ case "response":
70
+ case "event":
71
+ case "sidecar_request":
72
+ throw new Error(`BARE encoding is only implemented for host-written frames, received ${frame.frame_type}`);
73
+ }
74
+ }
75
+ export function encodeBareProtocolFrame(frame) {
76
+ return Buffer.from(protocol.encodeProtocolFrame(toGeneratedProtocolFrame(frame)));
77
+ }
78
+ export function decodeBareProtocolFrame(payload) {
79
+ return fromGeneratedSidecarWrittenProtocolFrame(protocol.decodeProtocolFrame(toExactUint8Array(payload)));
80
+ }
81
+ export function encodeProtocolFramePayload(frame, codec) {
82
+ if (codec === "json") {
83
+ return encodeJsonFramePayload(frame);
84
+ }
85
+ return encodeBareProtocolFrame(frame);
86
+ }
87
+ export function decodeProtocolFramePayload(payload, codec) {
88
+ if (codec === "json") {
89
+ return decodeJsonFramePayload(payload);
90
+ }
91
+ return decodeBareProtocolFrame(payload);
92
+ }
93
+ export function classifySidecarWrittenProtocolFrame(frame) {
94
+ switch (frame.frame_type) {
95
+ case "response":
96
+ return {
97
+ kind: "response",
98
+ requestId: frame.request_id,
99
+ frame,
100
+ };
101
+ case "event":
102
+ return { kind: "event", frame };
103
+ case "sidecar_request":
104
+ return { kind: "sidecarRequest", frame };
105
+ }
106
+ }
107
+ export function fromGeneratedSidecarWrittenProtocolFrame(frame) {
108
+ switch (frame.tag) {
109
+ case "ResponseFrame":
110
+ return {
111
+ frame_type: "response",
112
+ schema: toLiveProtocolSchema(frame.val.schema),
113
+ request_id: bigIntToSafeNumber(frame.val.requestId, "response request id"),
114
+ ownership: fromGeneratedOwnershipScope(frame.val.ownership),
115
+ payload: fromGeneratedResponsePayload(frame.val.payload),
116
+ };
117
+ case "EventFrame":
118
+ return {
119
+ frame_type: "event",
120
+ schema: toLiveProtocolSchema(frame.val.schema),
121
+ ownership: fromGeneratedOwnershipScope(frame.val.ownership),
122
+ payload: fromGeneratedEventPayload(frame.val.payload),
123
+ };
124
+ case "SidecarRequestFrame":
125
+ return {
126
+ frame_type: "sidecar_request",
127
+ schema: toLiveProtocolSchema(frame.val.schema),
128
+ request_id: bigIntToSafeNumber(frame.val.requestId, "sidecar request id"),
129
+ ownership: fromGeneratedOwnershipScope(frame.val.ownership),
130
+ payload: fromGeneratedSidecarRequestPayload(frame.val.payload),
131
+ };
132
+ case "RequestFrame":
133
+ case "SidecarResponseFrame":
134
+ throw new Error(`unsupported BARE protocol frame tag: ${frame.tag}`);
135
+ }
136
+ }
137
+ export function toLiveProtocolSchema(schema) {
138
+ return validateSidecarProtocolSchema(schema);
139
+ }
@@ -0,0 +1,28 @@
1
+ import * as protocol from "./generated-protocol.js";
2
+ export type LiveGuestRuntimeKind = "java_script" | "python" | "web_assembly";
3
+ export type LiveDisposeReason = "requested" | "connection_closed" | "host_shutdown";
4
+ export type LiveRootFilesystemMode = "ephemeral" | "read_only";
5
+ export type LiveRootFilesystemEntryKind = "file" | "directory" | "symlink";
6
+ export type LiveRootFilesystemEntryEncoding = "utf8" | "base64";
7
+ export type LiveWasmPermissionTier = "full" | "read-write" | "read-only" | "isolated";
8
+ export type LivePermissionMode = "allow" | "ask" | "deny";
9
+ export type LiveGuestFilesystemOperation = "read_file" | "write_file" | "create_dir" | "mkdir" | "exists" | "stat" | "lstat" | "read_dir" | "remove_file" | "remove_dir" | "rename" | "realpath" | "symlink" | "read_link" | "link" | "chmod" | "chown" | "utimes" | "truncate" | "pread";
10
+ export type LiveVmLifecycleState = "creating" | "ready" | "disposing" | "disposed" | "failed";
11
+ export type LiveStreamChannel = "stdout" | "stderr";
12
+ export type LiveProcessSnapshotStatus = "running" | "exited" | "stopped";
13
+ export type LiveSignalDispositionAction = "default" | "ignore" | "user";
14
+ export declare function toGeneratedPermissionMode(mode: LivePermissionMode): protocol.PermissionMode;
15
+ export declare function toGeneratedGuestRuntimeKind(runtime: LiveGuestRuntimeKind): protocol.GuestRuntimeKind;
16
+ export declare function toGeneratedDisposeReason(reason: LiveDisposeReason): protocol.DisposeReason;
17
+ export declare function toGeneratedRootFilesystemMode(mode: LiveRootFilesystemMode): protocol.RootFilesystemMode;
18
+ export declare function toGeneratedRootFilesystemEntryKind(kind: LiveRootFilesystemEntryKind): protocol.RootFilesystemEntryKind;
19
+ export declare function toGeneratedRootFilesystemEntryEncoding(encoding: LiveRootFilesystemEntryEncoding): protocol.RootFilesystemEntryEncoding;
20
+ export declare function toGeneratedWasmPermissionTier(tier: LiveWasmPermissionTier): protocol.WasmPermissionTier;
21
+ export declare function toGeneratedGuestFilesystemOperation(operation: LiveGuestFilesystemOperation): protocol.GuestFilesystemOperation;
22
+ export declare function fromGeneratedVmLifecycleState(state: protocol.VmLifecycleState): LiveVmLifecycleState;
23
+ export declare function fromGeneratedStreamChannel(channel: protocol.StreamChannel): LiveStreamChannel;
24
+ export declare function fromGeneratedProcessSnapshotStatus(status: protocol.ProcessSnapshotStatus): LiveProcessSnapshotStatus;
25
+ export declare function fromGeneratedSignalDispositionAction(action: protocol.SignalDispositionAction): LiveSignalDispositionAction;
26
+ export declare function fromGeneratedRootFilesystemEntryKind(kind: protocol.RootFilesystemEntryKind): LiveRootFilesystemEntryKind;
27
+ export declare function fromGeneratedRootFilesystemEntryEncoding(encoding: protocol.RootFilesystemEntryEncoding): LiveRootFilesystemEntryEncoding;
28
+ export declare function fromGeneratedGuestFilesystemOperation(operation: protocol.GuestFilesystemOperation): LiveGuestFilesystemOperation;
@@ -0,0 +1,217 @@
1
+ import * as protocol from "./generated-protocol.js";
2
+ export function toGeneratedPermissionMode(mode) {
3
+ switch (mode) {
4
+ case "allow":
5
+ return protocol.PermissionMode.Allow;
6
+ case "ask":
7
+ return protocol.PermissionMode.Ask;
8
+ case "deny":
9
+ return protocol.PermissionMode.Deny;
10
+ }
11
+ }
12
+ export function toGeneratedGuestRuntimeKind(runtime) {
13
+ switch (runtime) {
14
+ case "java_script":
15
+ return protocol.GuestRuntimeKind.JavaScript;
16
+ case "python":
17
+ return protocol.GuestRuntimeKind.Python;
18
+ case "web_assembly":
19
+ return protocol.GuestRuntimeKind.WebAssembly;
20
+ }
21
+ }
22
+ export function toGeneratedDisposeReason(reason) {
23
+ switch (reason) {
24
+ case "requested":
25
+ return protocol.DisposeReason.Requested;
26
+ case "connection_closed":
27
+ return protocol.DisposeReason.ConnectionClosed;
28
+ case "host_shutdown":
29
+ return protocol.DisposeReason.HostShutdown;
30
+ }
31
+ }
32
+ export function toGeneratedRootFilesystemMode(mode) {
33
+ switch (mode) {
34
+ case "ephemeral":
35
+ return protocol.RootFilesystemMode.Ephemeral;
36
+ case "read_only":
37
+ return protocol.RootFilesystemMode.ReadOnly;
38
+ }
39
+ }
40
+ export function toGeneratedRootFilesystemEntryKind(kind) {
41
+ switch (kind) {
42
+ case "file":
43
+ return protocol.RootFilesystemEntryKind.File;
44
+ case "directory":
45
+ return protocol.RootFilesystemEntryKind.Directory;
46
+ case "symlink":
47
+ return protocol.RootFilesystemEntryKind.Symlink;
48
+ }
49
+ }
50
+ export function toGeneratedRootFilesystemEntryEncoding(encoding) {
51
+ switch (encoding) {
52
+ case "utf8":
53
+ return protocol.RootFilesystemEntryEncoding.UtF8;
54
+ case "base64":
55
+ return protocol.RootFilesystemEntryEncoding.BasE64;
56
+ }
57
+ }
58
+ export function toGeneratedWasmPermissionTier(tier) {
59
+ switch (tier) {
60
+ case "full":
61
+ return protocol.WasmPermissionTier.Full;
62
+ case "read-write":
63
+ return protocol.WasmPermissionTier.ReadWrite;
64
+ case "read-only":
65
+ return protocol.WasmPermissionTier.ReadOnly;
66
+ case "isolated":
67
+ return protocol.WasmPermissionTier.Isolated;
68
+ }
69
+ }
70
+ export function toGeneratedGuestFilesystemOperation(operation) {
71
+ switch (operation) {
72
+ case "read_file":
73
+ return protocol.GuestFilesystemOperation.ReadFile;
74
+ case "write_file":
75
+ return protocol.GuestFilesystemOperation.WriteFile;
76
+ case "create_dir":
77
+ return protocol.GuestFilesystemOperation.CreateDir;
78
+ case "mkdir":
79
+ return protocol.GuestFilesystemOperation.Mkdir;
80
+ case "exists":
81
+ return protocol.GuestFilesystemOperation.Exists;
82
+ case "stat":
83
+ return protocol.GuestFilesystemOperation.Stat;
84
+ case "lstat":
85
+ return protocol.GuestFilesystemOperation.Lstat;
86
+ case "read_dir":
87
+ return protocol.GuestFilesystemOperation.ReadDir;
88
+ case "remove_file":
89
+ return protocol.GuestFilesystemOperation.RemoveFile;
90
+ case "remove_dir":
91
+ return protocol.GuestFilesystemOperation.RemoveDir;
92
+ case "rename":
93
+ return protocol.GuestFilesystemOperation.Rename;
94
+ case "realpath":
95
+ return protocol.GuestFilesystemOperation.Realpath;
96
+ case "symlink":
97
+ return protocol.GuestFilesystemOperation.Symlink;
98
+ case "read_link":
99
+ return protocol.GuestFilesystemOperation.ReadLink;
100
+ case "link":
101
+ return protocol.GuestFilesystemOperation.Link;
102
+ case "chmod":
103
+ return protocol.GuestFilesystemOperation.Chmod;
104
+ case "chown":
105
+ return protocol.GuestFilesystemOperation.Chown;
106
+ case "utimes":
107
+ return protocol.GuestFilesystemOperation.Utimes;
108
+ case "truncate":
109
+ return protocol.GuestFilesystemOperation.Truncate;
110
+ case "pread":
111
+ return protocol.GuestFilesystemOperation.Pread;
112
+ }
113
+ }
114
+ export function fromGeneratedVmLifecycleState(state) {
115
+ switch (state) {
116
+ case protocol.VmLifecycleState.Creating:
117
+ return "creating";
118
+ case protocol.VmLifecycleState.Ready:
119
+ return "ready";
120
+ case protocol.VmLifecycleState.Disposing:
121
+ return "disposing";
122
+ case protocol.VmLifecycleState.Disposed:
123
+ return "disposed";
124
+ case protocol.VmLifecycleState.Failed:
125
+ return "failed";
126
+ }
127
+ }
128
+ export function fromGeneratedStreamChannel(channel) {
129
+ switch (channel) {
130
+ case protocol.StreamChannel.Stdout:
131
+ return "stdout";
132
+ case protocol.StreamChannel.Stderr:
133
+ return "stderr";
134
+ }
135
+ }
136
+ export function fromGeneratedProcessSnapshotStatus(status) {
137
+ switch (status) {
138
+ case protocol.ProcessSnapshotStatus.Running:
139
+ return "running";
140
+ case protocol.ProcessSnapshotStatus.Exited:
141
+ return "exited";
142
+ case protocol.ProcessSnapshotStatus.Stopped:
143
+ return "stopped";
144
+ }
145
+ }
146
+ export function fromGeneratedSignalDispositionAction(action) {
147
+ switch (action) {
148
+ case protocol.SignalDispositionAction.Default:
149
+ return "default";
150
+ case protocol.SignalDispositionAction.Ignore:
151
+ return "ignore";
152
+ case protocol.SignalDispositionAction.User:
153
+ return "user";
154
+ }
155
+ }
156
+ export function fromGeneratedRootFilesystemEntryKind(kind) {
157
+ switch (kind) {
158
+ case protocol.RootFilesystemEntryKind.File:
159
+ return "file";
160
+ case protocol.RootFilesystemEntryKind.Directory:
161
+ return "directory";
162
+ case protocol.RootFilesystemEntryKind.Symlink:
163
+ return "symlink";
164
+ }
165
+ }
166
+ export function fromGeneratedRootFilesystemEntryEncoding(encoding) {
167
+ switch (encoding) {
168
+ case protocol.RootFilesystemEntryEncoding.UtF8:
169
+ return "utf8";
170
+ case protocol.RootFilesystemEntryEncoding.BasE64:
171
+ return "base64";
172
+ }
173
+ }
174
+ export function fromGeneratedGuestFilesystemOperation(operation) {
175
+ switch (operation) {
176
+ case protocol.GuestFilesystemOperation.ReadFile:
177
+ return "read_file";
178
+ case protocol.GuestFilesystemOperation.WriteFile:
179
+ return "write_file";
180
+ case protocol.GuestFilesystemOperation.CreateDir:
181
+ return "create_dir";
182
+ case protocol.GuestFilesystemOperation.Mkdir:
183
+ return "mkdir";
184
+ case protocol.GuestFilesystemOperation.Exists:
185
+ return "exists";
186
+ case protocol.GuestFilesystemOperation.Stat:
187
+ return "stat";
188
+ case protocol.GuestFilesystemOperation.Lstat:
189
+ return "lstat";
190
+ case protocol.GuestFilesystemOperation.ReadDir:
191
+ return "read_dir";
192
+ case protocol.GuestFilesystemOperation.RemoveFile:
193
+ return "remove_file";
194
+ case protocol.GuestFilesystemOperation.RemoveDir:
195
+ return "remove_dir";
196
+ case protocol.GuestFilesystemOperation.Rename:
197
+ return "rename";
198
+ case protocol.GuestFilesystemOperation.Realpath:
199
+ return "realpath";
200
+ case protocol.GuestFilesystemOperation.Symlink:
201
+ return "symlink";
202
+ case protocol.GuestFilesystemOperation.ReadLink:
203
+ return "read_link";
204
+ case protocol.GuestFilesystemOperation.Link:
205
+ return "link";
206
+ case protocol.GuestFilesystemOperation.Chmod:
207
+ return "chmod";
208
+ case protocol.GuestFilesystemOperation.Chown:
209
+ return "chown";
210
+ case protocol.GuestFilesystemOperation.Utimes:
211
+ return "utimes";
212
+ case protocol.GuestFilesystemOperation.Truncate:
213
+ return "truncate";
214
+ case protocol.GuestFilesystemOperation.Pread:
215
+ return "pread";
216
+ }
217
+ }
@@ -0,0 +1,10 @@
1
+ export declare const SIDECAR_PROTOCOL_SCHEMA: {
2
+ readonly name: "secure-exec-sidecar";
3
+ readonly version: 7;
4
+ };
5
+ export type LiveProtocolSchema = typeof SIDECAR_PROTOCOL_SCHEMA;
6
+ export type ProtocolSchemaLike = {
7
+ name: string;
8
+ version: number;
9
+ };
10
+ export declare function validateSidecarProtocolSchema(schema: ProtocolSchemaLike): LiveProtocolSchema;
@@ -0,0 +1,11 @@
1
+ export const SIDECAR_PROTOCOL_SCHEMA = {
2
+ name: "secure-exec-sidecar",
3
+ version: 7,
4
+ };
5
+ export function validateSidecarProtocolSchema(schema) {
6
+ if (schema.name !== SIDECAR_PROTOCOL_SCHEMA.name ||
7
+ schema.version !== SIDECAR_PROTOCOL_SCHEMA.version) {
8
+ throw new Error(`unsupported sidecar protocol schema ${schema.name}@${schema.version}`);
9
+ }
10
+ return SIDECAR_PROTOCOL_SCHEMA;
11
+ }