@ekairos/sandbox 1.22.34-beta.development.0 → 1.22.35
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 +59 -452
- package/dist/action-steps.d.ts +156 -0
- package/dist/action-steps.d.ts.map +1 -0
- package/dist/action-steps.js +153 -0
- package/dist/action-steps.js.map +1 -0
- package/dist/actions.d.ts +263 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +208 -0
- package/dist/actions.js.map +1 -0
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/contract.d.ts +86 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +83 -0
- package/dist/contract.js.map +1 -0
- package/dist/domain.d.ts +2 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +2 -0
- package/dist/domain.js.map +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/daytona.d.ts +14 -0
- package/dist/providers/daytona.d.ts.map +1 -0
- package/dist/providers/daytona.js +153 -0
- package/dist/providers/daytona.js.map +1 -0
- package/dist/providers/provider.d.ts +3 -0
- package/dist/providers/provider.d.ts.map +1 -0
- package/dist/providers/provider.js +18 -0
- package/dist/providers/provider.js.map +1 -0
- package/dist/providers/sprites.d.ts +39 -0
- package/dist/providers/sprites.d.ts.map +1 -0
- package/dist/providers/sprites.js +234 -0
- package/dist/providers/sprites.js.map +1 -0
- package/dist/providers/types.d.ts +15 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +9 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/vercel.d.ts +26 -0
- package/dist/providers/vercel.d.ts.map +1 -0
- package/dist/providers/vercel.js +182 -0
- package/dist/providers/vercel.js.map +1 -0
- package/dist/public.d.ts +56 -0
- package/dist/public.d.ts.map +1 -0
- package/dist/public.js +37 -0
- package/dist/public.js.map +1 -0
- package/dist/runtime.d.ts +4 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +7 -1
- package/dist/runtime.js.map +1 -1
- package/dist/sandbox.d.ts +76 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +154 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/schema.d.ts +18 -2
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +43 -15
- package/dist/schema.js.map +1 -1
- package/dist/service.d.ts +98 -43
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +811 -543
- package/dist/service.js.map +1 -1
- package/dist/types.d.ts +33 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vercel-options.d.ts +21 -0
- package/dist/vercel-options.d.ts.map +1 -0
- package/dist/vercel-options.js +149 -0
- package/dist/vercel-options.js.map +1 -0
- package/package.json +43 -7
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
function normalizeBaseUrl(raw) {
|
|
2
|
+
const trimmed = String(raw ?? "").trim();
|
|
3
|
+
if (!trimmed)
|
|
4
|
+
return "";
|
|
5
|
+
return trimmed.endsWith("/") ? trimmed.slice(0, -1) : trimmed;
|
|
6
|
+
}
|
|
7
|
+
function sanitizeSpritesString(value) {
|
|
8
|
+
return value.includes("\0") ? value.replace(/\0/g, "") : value;
|
|
9
|
+
}
|
|
10
|
+
function getSpritesConfig() {
|
|
11
|
+
const token = String(process.env.SPRITES_API_TOKEN ?? process.env.SPRITE_TOKEN ?? "").trim();
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw new Error("Missing required Sprites token env var: SPRITES_API_TOKEN (or SPRITE_TOKEN)");
|
|
14
|
+
}
|
|
15
|
+
const baseUrl = normalizeBaseUrl(String(process.env.SPRITES_API_BASE_URL ?? process.env.SPRITES_API_URL ?? "").trim()) || "https://api.sprites.dev";
|
|
16
|
+
return { baseUrl, token };
|
|
17
|
+
}
|
|
18
|
+
export async function spritesFetch(path, init) {
|
|
19
|
+
const { baseUrl, token } = getSpritesConfig();
|
|
20
|
+
const fetchFn = globalThis?.fetch;
|
|
21
|
+
if (typeof fetchFn !== "function") {
|
|
22
|
+
throw new Error("fetch_not_available");
|
|
23
|
+
}
|
|
24
|
+
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
25
|
+
const url = `${baseUrl}${normalizedPath}`;
|
|
26
|
+
return await fetchFn(url, {
|
|
27
|
+
...init,
|
|
28
|
+
headers: {
|
|
29
|
+
Authorization: `Bearer ${token}`,
|
|
30
|
+
...(init?.headers ?? {}),
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function spritesJson(path, init) {
|
|
35
|
+
const res = await spritesFetch(path, {
|
|
36
|
+
...init,
|
|
37
|
+
headers: {
|
|
38
|
+
Accept: "application/json",
|
|
39
|
+
...(init?.headers ?? {}),
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
if (!res?.ok) {
|
|
43
|
+
const text = await res?.text?.().catch(() => "");
|
|
44
|
+
throw new Error(`sprites_http_${res?.status ?? "unknown"}: ${text || "request_failed"}`);
|
|
45
|
+
}
|
|
46
|
+
return (await res.json().catch(() => ({})));
|
|
47
|
+
}
|
|
48
|
+
export async function spritesText(path, init) {
|
|
49
|
+
const res = await spritesFetch(path, init);
|
|
50
|
+
const text = await res?.text?.().catch(() => "");
|
|
51
|
+
return { ok: Boolean(res?.ok), status: Number(res?.status ?? 0), text: String(text ?? "") };
|
|
52
|
+
}
|
|
53
|
+
export function toSpritesPreviewUrl(spriteUrl, port) {
|
|
54
|
+
const base = String(spriteUrl ?? "").trim();
|
|
55
|
+
if (!base)
|
|
56
|
+
return "";
|
|
57
|
+
try {
|
|
58
|
+
const u = new URL(base);
|
|
59
|
+
if (Number.isFinite(port) && port > 0) {
|
|
60
|
+
u.port = String(Math.floor(port));
|
|
61
|
+
}
|
|
62
|
+
const next = u.toString();
|
|
63
|
+
return next.endsWith("/") ? next.slice(0, -1) : next;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
if (!port)
|
|
67
|
+
return base;
|
|
68
|
+
return base.replace(/\/+$/, "") + ":" + String(Math.floor(port));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export function asSpritesSandbox(sprite) {
|
|
72
|
+
const name = String(sprite?.name ?? "").trim();
|
|
73
|
+
const url = typeof sprite?.url === "string" ? sprite.url : undefined;
|
|
74
|
+
return {
|
|
75
|
+
__provider: "sprites",
|
|
76
|
+
name,
|
|
77
|
+
id: sprite?.id ? String(sprite.id) : undefined,
|
|
78
|
+
url,
|
|
79
|
+
getPreviewLink: async (port) => {
|
|
80
|
+
const base = url ?? "";
|
|
81
|
+
const next = toSpritesPreviewUrl(base, port);
|
|
82
|
+
return { url: next };
|
|
83
|
+
},
|
|
84
|
+
domain: async (port) => {
|
|
85
|
+
const base = url ?? "";
|
|
86
|
+
return toSpritesPreviewUrl(base, port);
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export async function getSpritesByName(name) {
|
|
91
|
+
const safeName = String(name ?? "").trim();
|
|
92
|
+
if (!safeName)
|
|
93
|
+
return { ok: false, status: 400, error: "sprites_name_required" };
|
|
94
|
+
const res = await spritesFetch(`/v1/sprites/${encodeURIComponent(safeName)}`, {
|
|
95
|
+
method: "GET",
|
|
96
|
+
headers: { Accept: "application/json" },
|
|
97
|
+
});
|
|
98
|
+
if (!res?.ok) {
|
|
99
|
+
const text = await res?.text?.().catch(() => "");
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
status: Number(res?.status ?? 0),
|
|
103
|
+
error: text || `sprites_http_${res?.status ?? "unknown"}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const json = await res.json().catch(() => ({}));
|
|
107
|
+
return { ok: true, sprite: json };
|
|
108
|
+
}
|
|
109
|
+
export async function provisionSpritesSandbox(params) {
|
|
110
|
+
const requestedName = String(params.config?.sprites?.name ?? "").trim();
|
|
111
|
+
const name = requestedName || `ekairos-${params.sandboxId}`;
|
|
112
|
+
const existing = await getSpritesByName(name);
|
|
113
|
+
if (existing.ok) {
|
|
114
|
+
const sprite = existing.sprite ?? {};
|
|
115
|
+
return asSpritesSandbox({
|
|
116
|
+
name: String(sprite?.name ?? name),
|
|
117
|
+
id: sprite?.id ? String(sprite.id) : undefined,
|
|
118
|
+
url: typeof sprite?.url === "string" ? sprite.url : undefined,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const waitForCapacity = params.config?.sprites?.waitForCapacity ?? true;
|
|
122
|
+
const auth = params.config?.sprites?.urlSettings?.auth ?? "public";
|
|
123
|
+
const body = {
|
|
124
|
+
name,
|
|
125
|
+
wait_for_capacity: Boolean(waitForCapacity),
|
|
126
|
+
url_settings: { auth },
|
|
127
|
+
};
|
|
128
|
+
const created = await spritesJson("/v1/sprites", {
|
|
129
|
+
method: "POST",
|
|
130
|
+
headers: { "Content-Type": "application/json" },
|
|
131
|
+
body: JSON.stringify(body),
|
|
132
|
+
});
|
|
133
|
+
return asSpritesSandbox({
|
|
134
|
+
name: String(created?.name ?? name),
|
|
135
|
+
id: created?.id ? String(created.id) : undefined,
|
|
136
|
+
url: typeof created?.url === "string" ? created.url : undefined,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function normalizeSpritesExecResult(payload) {
|
|
140
|
+
const exitCodeRaw = payload?.exit_code ??
|
|
141
|
+
payload?.exitCode ??
|
|
142
|
+
payload?.code ??
|
|
143
|
+
payload?.status ??
|
|
144
|
+
payload?.result?.exit_code ??
|
|
145
|
+
payload?.result?.exitCode;
|
|
146
|
+
const exitCode = Number(exitCodeRaw ?? 0);
|
|
147
|
+
const stdout = typeof payload?.stdout === "string"
|
|
148
|
+
? payload.stdout
|
|
149
|
+
: typeof payload?.output === "string"
|
|
150
|
+
? payload.output
|
|
151
|
+
: typeof payload?.out === "string"
|
|
152
|
+
? payload.out
|
|
153
|
+
: typeof payload?.result?.stdout === "string"
|
|
154
|
+
? payload.result.stdout
|
|
155
|
+
: "";
|
|
156
|
+
const stderr = typeof payload?.stderr === "string"
|
|
157
|
+
? payload.stderr
|
|
158
|
+
: typeof payload?.error === "string"
|
|
159
|
+
? payload.error
|
|
160
|
+
: typeof payload?.err === "string"
|
|
161
|
+
? payload.err
|
|
162
|
+
: typeof payload?.result?.stderr === "string"
|
|
163
|
+
? payload.result.stderr
|
|
164
|
+
: "";
|
|
165
|
+
return {
|
|
166
|
+
exitCode: Number.isFinite(exitCode) ? exitCode : 0,
|
|
167
|
+
stdout: sanitizeSpritesString(stdout),
|
|
168
|
+
stderr: sanitizeSpritesString(stderr),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
export async function spritesExec(params) {
|
|
172
|
+
const spriteName = String(params.spriteName ?? "").trim();
|
|
173
|
+
if (!spriteName)
|
|
174
|
+
throw new Error("sprites_name_required");
|
|
175
|
+
const parts = [String(params.command ?? "").trim(), ...(Array.isArray(params.args) ? params.args : [])].filter(Boolean);
|
|
176
|
+
if (parts.length === 0)
|
|
177
|
+
throw new Error("sprites_command_required");
|
|
178
|
+
const search = new URLSearchParams();
|
|
179
|
+
for (const part of parts) {
|
|
180
|
+
search.append("cmd", String(part));
|
|
181
|
+
}
|
|
182
|
+
const hasStdin = typeof params.stdin === "string" || Buffer.isBuffer(params.stdin);
|
|
183
|
+
if (hasStdin) {
|
|
184
|
+
search.set("stdin", "true");
|
|
185
|
+
}
|
|
186
|
+
const path = `/v1/sprites/${encodeURIComponent(spriteName)}/exec?${search.toString()}`;
|
|
187
|
+
const init = {
|
|
188
|
+
method: "POST",
|
|
189
|
+
};
|
|
190
|
+
if (hasStdin) {
|
|
191
|
+
init.body = params.stdin;
|
|
192
|
+
}
|
|
193
|
+
const res = await spritesFetch(path, init);
|
|
194
|
+
const text = await res?.text?.().catch(() => "");
|
|
195
|
+
const parsed = (() => {
|
|
196
|
+
try {
|
|
197
|
+
return text ? JSON.parse(text) : {};
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return { stdout: String(text ?? "") };
|
|
201
|
+
}
|
|
202
|
+
})();
|
|
203
|
+
if (!res?.ok) {
|
|
204
|
+
const err = typeof parsed?.error === "string" ? parsed.error : text;
|
|
205
|
+
throw new Error(err || `sprites_exec_http_${res?.status ?? "unknown"}`);
|
|
206
|
+
}
|
|
207
|
+
return normalizeSpritesExecResult(parsed);
|
|
208
|
+
}
|
|
209
|
+
export function parseSpritesCheckpointIdFromNdjson(text) {
|
|
210
|
+
const lines = String(text ?? "")
|
|
211
|
+
.split("\n")
|
|
212
|
+
.map((l) => l.trim())
|
|
213
|
+
.filter(Boolean);
|
|
214
|
+
const candidates = [];
|
|
215
|
+
for (const line of lines) {
|
|
216
|
+
try {
|
|
217
|
+
const evt = JSON.parse(line);
|
|
218
|
+
const data = typeof evt?.data === "string" ? evt.data : "";
|
|
219
|
+
if (!data)
|
|
220
|
+
continue;
|
|
221
|
+
const m = data.match(/\bID:\s*(v[0-9]+)\b/i) || data.match(/\bCheckpoint\s+(v[0-9]+)\b/i);
|
|
222
|
+
if (m?.[1]) {
|
|
223
|
+
candidates.push(String(m[1]));
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// ignore invalid ndjson lines
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (candidates.length === 0)
|
|
231
|
+
return null;
|
|
232
|
+
return candidates[candidates.length - 1] ?? null;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=sprites.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprites.js","sourceRoot":"","sources":["../../src/providers/sprites.ts"],"names":[],"mappings":"AAGA,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAA;IACvB,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;AAC/D,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAChE,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC5F,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;IAChG,CAAC;IAED,MAAM,OAAO,GACX,gBAAgB,CACd,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CACrF,IAAI,yBAAyB,CAAA;IAEhC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAAU;IACzD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,gBAAgB,EAAE,CAAA;IAC7C,MAAM,OAAO,GAAI,UAAkB,EAAE,KAAK,CAAA;IAC1C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IAC/D,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,cAAc,EAAE,CAAA;IAEzC,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE;QACxB,GAAG,IAAI;QACP,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;SACzB;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAU,IAAY,EAAE,IAAU;IACjE,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;QACnC,GAAG,IAAI;QACP,OAAO,EAAE;YACP,MAAM,EAAE,kBAAkB;YAC1B,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;SACzB;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,MAAM,IAAI,SAAS,KAAK,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAA;IAC1F,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAM,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,IAAU;IAEV,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IAChD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,IAAY;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACtC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAIhC;IACC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9C,MAAM,GAAG,GAAG,OAAO,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,IAAI;QACJ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9C,GAAG;QACH,cAAc,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE,CAAA;YACtB,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;QACtB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YAC7B,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE,CAAA;YACtB,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxC,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY;IAEZ,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAA;IAEhF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,eAAe,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE;QAC5E,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACxC,CAAC,CAAA;IACF,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAChD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC;YAChC,KAAK,EAAE,IAAI,IAAI,gBAAgB,GAAG,EAAE,MAAM,IAAI,SAAS,EAAE;SAC1D,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAG7C;IACC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACvE,MAAM,IAAI,GAAG,aAAa,IAAI,WAAW,MAAM,CAAC,SAAS,EAAE,CAAA;IAE3D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAA;QACpC,OAAO,gBAAgB,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;YAClC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9C,GAAG,EAAE,OAAO,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,IAAI,IAAI,CAAA;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,QAAQ,CAAA;IAClE,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,iBAAiB,EAAE,OAAO,CAAC,eAAe,CAAC;QAC3C,YAAY,EAAE,EAAE,IAAI,EAAE;KACvB,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAM,aAAa,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAA;IAEF,OAAO,gBAAgB,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;QACnC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QAChD,GAAG,EAAE,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAY;IAK9C,MAAM,WAAW,GACf,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM,EAAE,SAAS;QAC1B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAA;IAE3B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,CAAA;IACzC,MAAM,MAAM,GACV,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ;QACjC,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ;YACnC,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ;gBAChC,CAAC,CAAC,OAAO,CAAC,GAAG;gBACb,CAAC,CAAC,OAAO,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ;oBAC3C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;oBACvB,CAAC,CAAC,EAAE,CAAA;IAEd,MAAM,MAAM,GACV,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ;QACjC,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,OAAO,OAAO,EAAE,KAAK,KAAK,QAAQ;YAClC,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ;gBAChC,CAAC,CAAC,OAAO,CAAC,GAAG;gBACb,CAAC,CAAC,OAAO,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ;oBAC3C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;oBACvB,CAAC,CAAC,EAAE,CAAA;IAEd,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC;KACtC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAKjC;IACC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACzD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEzD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAEnE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,kBAAkB,CAAC,UAAU,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAA;IACtF,MAAM,IAAI,GAAQ;QAChB,MAAM,EAAE,MAAM;KACf,CAAA;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAA;IAC1B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAA;QACvC,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QACnE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,GAAG,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,IAAY;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;SAC7B,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAA;IAElB,MAAM,UAAU,GAAa,EAAE,CAAA;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC5B,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;YAC1D,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;YACzF,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACX,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,OAAO,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAA;AAClD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Sandbox as VercelSandbox } from "@vercel/sandbox";
|
|
2
|
+
import type { Sandbox as DaytonaSandbox } from "@daytonaio/sdk";
|
|
3
|
+
export type SpritesSandbox = {
|
|
4
|
+
__provider: "sprites";
|
|
5
|
+
name: string;
|
|
6
|
+
id?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
getPreviewLink?: (port: number) => Promise<{
|
|
9
|
+
url: string;
|
|
10
|
+
}>;
|
|
11
|
+
domain?: (port: number) => Promise<string>;
|
|
12
|
+
};
|
|
13
|
+
export type ProviderSandbox = VercelSandbox | DaytonaSandbox | SpritesSandbox;
|
|
14
|
+
export declare function isVercelSandbox(sandbox: ProviderSandbox | unknown): sandbox is VercelSandbox;
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/D,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,SAAS,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3D,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAA;AAE7E,wBAAgB,eAAe,CAC7B,OAAO,EAAE,eAAe,GAAG,OAAO,GACjC,OAAO,IAAI,aAAa,CAS1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function isVercelSandbox(sandbox) {
|
|
2
|
+
return Boolean(sandbox &&
|
|
3
|
+
typeof sandbox === "object" &&
|
|
4
|
+
typeof sandbox.runCommand === "function" &&
|
|
5
|
+
typeof sandbox.currentSession === "function" &&
|
|
6
|
+
typeof sandbox.name === "string" &&
|
|
7
|
+
sandbox.__provider !== "sprites");
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,eAAe,CAC7B,OAAkC;IAElC,OAAO,OAAO,CACZ,OAAO;QACL,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAQ,OAAe,CAAC,UAAU,KAAK,UAAU;QACjD,OAAQ,OAAe,CAAC,cAAc,KAAK,UAAU;QACrD,OAAQ,OAAe,CAAC,IAAI,KAAK,QAAQ;QACxC,OAAe,CAAC,UAAU,KAAK,SAAS,CAC5C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Sandbox as VercelSandbox, type NetworkPolicy } from "@vercel/sandbox";
|
|
2
|
+
import type { SandboxConfig } from "../types.js";
|
|
3
|
+
import { type ResolvedVercelSandboxConfig } from "../vercel-options.js";
|
|
4
|
+
type ResolvedVercelCredentials = {
|
|
5
|
+
teamId?: string;
|
|
6
|
+
projectId?: string;
|
|
7
|
+
token?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolveVercelWorkingDirectory(config: SandboxConfig): string;
|
|
10
|
+
export declare function findLinkedVercelProjectFile(startDir: string): string | null;
|
|
11
|
+
export declare function readLinkedVercelProject(config: SandboxConfig): Promise<{
|
|
12
|
+
orgId?: string;
|
|
13
|
+
projectId?: string;
|
|
14
|
+
projectName?: string;
|
|
15
|
+
cwd: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function pullVercelOidcToken(config: SandboxConfig): Promise<string>;
|
|
18
|
+
export declare function withResolvedVercelCredentials<T extends Record<string, unknown>>(params: T, creds: ResolvedVercelCredentials): T & Partial<Required<ResolvedVercelCredentials>>;
|
|
19
|
+
export declare function resolveVercelCredentials(config: SandboxConfig): Promise<ResolvedVercelCredentials>;
|
|
20
|
+
export declare function provisionVercelSandbox(config: SandboxConfig, extra?: {
|
|
21
|
+
networkPolicy?: NetworkPolicy;
|
|
22
|
+
env?: Record<string, string>;
|
|
23
|
+
resolved?: ResolvedVercelSandboxConfig;
|
|
24
|
+
}): Promise<VercelSandbox>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=vercel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../src/providers/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAO9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,sBAAsB,CAAA;AAI7B,KAAK,yBAAyB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAWD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAM3E;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS3E;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAC,CAiBD;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ChF;AAgBD,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7E,MAAM,EAAE,CAAC,EACT,KAAK,EAAE,yBAAyB,GAC/B,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAQlD;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,yBAAyB,CAAC,CA4CpC;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,aAAa,EACrB,KAAK,CAAC,EAAE;IACN,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,QAAQ,CAAC,EAAE,2BAA2B,CAAA;CACvC,GACA,OAAO,CAAC,aAAa,CAAC,CA2CxB"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Sandbox as VercelSandbox } from "@vercel/sandbox";
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { existsSync, promises as fs } from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { promisify } from "node:util";
|
|
7
|
+
import { resolveVercelSandboxConfig, } from "../vercel-options.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
function formatSandboxError(err) {
|
|
10
|
+
const base = err instanceof Error ? err.message : String(err);
|
|
11
|
+
const text = typeof err?.text === "string" ? err.text.trim() : "";
|
|
12
|
+
const json = err?.json ? JSON.stringify(err.json) : "";
|
|
13
|
+
const detail = text || json;
|
|
14
|
+
if (!detail)
|
|
15
|
+
return base;
|
|
16
|
+
return `${base}: ${detail}`;
|
|
17
|
+
}
|
|
18
|
+
export function resolveVercelWorkingDirectory(config) {
|
|
19
|
+
const fromConfig = String(config.vercel?.cwd ?? "").trim();
|
|
20
|
+
if (fromConfig)
|
|
21
|
+
return path.resolve(fromConfig);
|
|
22
|
+
const fromEnv = String(process.env.SANDBOX_VERCEL_CWD ?? "").trim();
|
|
23
|
+
if (fromEnv)
|
|
24
|
+
return path.resolve(fromEnv);
|
|
25
|
+
return process.cwd();
|
|
26
|
+
}
|
|
27
|
+
export function findLinkedVercelProjectFile(startDir) {
|
|
28
|
+
let current = path.resolve(startDir);
|
|
29
|
+
while (true) {
|
|
30
|
+
const candidate = path.join(current, ".vercel", "project.json");
|
|
31
|
+
if (existsSync(candidate))
|
|
32
|
+
return candidate;
|
|
33
|
+
const parent = path.dirname(current);
|
|
34
|
+
if (parent === current)
|
|
35
|
+
return null;
|
|
36
|
+
current = parent;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function readLinkedVercelProject(config) {
|
|
40
|
+
const cwd = resolveVercelWorkingDirectory(config);
|
|
41
|
+
const file = findLinkedVercelProjectFile(cwd);
|
|
42
|
+
if (!file) {
|
|
43
|
+
return { cwd };
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const parsed = JSON.parse(await fs.readFile(file, "utf8"));
|
|
47
|
+
return {
|
|
48
|
+
cwd,
|
|
49
|
+
orgId: typeof parsed?.orgId === "string" ? parsed.orgId : undefined,
|
|
50
|
+
projectId: typeof parsed?.projectId === "string" ? parsed.projectId : undefined,
|
|
51
|
+
projectName: typeof parsed?.projectName === "string" ? parsed.projectName : undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return { cwd };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function pullVercelOidcToken(config) {
|
|
59
|
+
const cwd = resolveVercelWorkingDirectory(config);
|
|
60
|
+
const tmpPath = path.join(os.tmpdir(), `ekairos-vercel-env-${Date.now()}-${Math.random().toString(36).slice(2)}.env`);
|
|
61
|
+
const args = [
|
|
62
|
+
"env",
|
|
63
|
+
"pull",
|
|
64
|
+
tmpPath,
|
|
65
|
+
"--yes",
|
|
66
|
+
"--environment",
|
|
67
|
+
String(config.vercel?.environment ?? "development"),
|
|
68
|
+
];
|
|
69
|
+
const scope = String(config.vercel?.scope ?? process.env.SANDBOX_VERCEL_SCOPE ?? "").trim();
|
|
70
|
+
if (scope) {
|
|
71
|
+
args.push("--scope", scope);
|
|
72
|
+
}
|
|
73
|
+
const token = String(process.env.VERCEL_TOKEN ?? process.env.SANDBOX_VERCEL_TOKEN ?? "").trim();
|
|
74
|
+
if (token) {
|
|
75
|
+
args.push("--token", token);
|
|
76
|
+
}
|
|
77
|
+
const isWindows = process.platform === "win32";
|
|
78
|
+
const command = isWindows ? process.env.COMSPEC || "cmd.exe" : "vercel";
|
|
79
|
+
const commandArgs = isWindows ? ["/c", "vercel", ...args] : args;
|
|
80
|
+
try {
|
|
81
|
+
await execFileAsync(command, commandArgs, {
|
|
82
|
+
cwd,
|
|
83
|
+
windowsHide: true,
|
|
84
|
+
timeout: 120000,
|
|
85
|
+
maxBuffer: 1024 * 1024 * 10,
|
|
86
|
+
});
|
|
87
|
+
const content = await fs.readFile(tmpPath, "utf8");
|
|
88
|
+
const match = content.match(/VERCEL_OIDC_TOKEN=\"?([^\r\n\"]+)\"?/);
|
|
89
|
+
const oidc = String(match?.[1] ?? "").trim();
|
|
90
|
+
if (!oidc) {
|
|
91
|
+
throw new Error("VERCEL_OIDC_TOKEN missing from vercel env pull output");
|
|
92
|
+
}
|
|
93
|
+
return oidc;
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
await fs.rm(tmpPath, { force: true }).catch(() => { });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function isVercelRuntime() {
|
|
100
|
+
return (process.env.VERCEL === "1" ||
|
|
101
|
+
Boolean(process.env.VERCEL_ENV) ||
|
|
102
|
+
Boolean(process.env.VERCEL_URL));
|
|
103
|
+
}
|
|
104
|
+
function hasCompleteVercelCredentials(creds) {
|
|
105
|
+
return Boolean(creds.teamId && creds.projectId && creds.token);
|
|
106
|
+
}
|
|
107
|
+
export function withResolvedVercelCredentials(params, creds) {
|
|
108
|
+
if (!hasCompleteVercelCredentials(creds))
|
|
109
|
+
return params;
|
|
110
|
+
return {
|
|
111
|
+
...params,
|
|
112
|
+
teamId: creds.teamId,
|
|
113
|
+
projectId: creds.projectId,
|
|
114
|
+
token: creds.token,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
export async function resolveVercelCredentials(config) {
|
|
118
|
+
const explicitTeamId = String(config.vercel?.orgId ??
|
|
119
|
+
process.env.SANDBOX_VERCEL_TEAM_ID ??
|
|
120
|
+
process.env.VERCEL_TEAM_ID ??
|
|
121
|
+
"").trim();
|
|
122
|
+
const explicitProjectId = String(config.vercel?.projectId ??
|
|
123
|
+
process.env.SANDBOX_VERCEL_PROJECT_ID ??
|
|
124
|
+
process.env.VERCEL_PROJECT_ID ??
|
|
125
|
+
"").trim();
|
|
126
|
+
const explicitToken = String(config.vercel?.token ??
|
|
127
|
+
process.env.SANDBOX_VERCEL_TOKEN ??
|
|
128
|
+
process.env.VERCEL_OIDC_TOKEN ??
|
|
129
|
+
process.env.VERCEL_TOKEN ??
|
|
130
|
+
"").trim();
|
|
131
|
+
if (explicitTeamId && explicitProjectId && explicitToken) {
|
|
132
|
+
return { teamId: explicitTeamId, projectId: explicitProjectId, token: explicitToken };
|
|
133
|
+
}
|
|
134
|
+
const linked = await readLinkedVercelProject(config);
|
|
135
|
+
const teamId = explicitTeamId || String(linked.orgId ?? "").trim();
|
|
136
|
+
const projectId = explicitProjectId || String(linked.projectId ?? "").trim();
|
|
137
|
+
if (isVercelRuntime()) {
|
|
138
|
+
return {};
|
|
139
|
+
}
|
|
140
|
+
let token = explicitToken;
|
|
141
|
+
if (!token) {
|
|
142
|
+
token = await pullVercelOidcToken(config);
|
|
143
|
+
}
|
|
144
|
+
if (!teamId || !projectId || !token) {
|
|
145
|
+
throw new Error("Missing Vercel sandbox credentials. Link the project (`vercel link`) and ensure `vercel env pull` can resolve VERCEL_OIDC_TOKEN, or provide explicit SANDBOX_VERCEL_* env vars.");
|
|
146
|
+
}
|
|
147
|
+
return { teamId, projectId, token };
|
|
148
|
+
}
|
|
149
|
+
export async function provisionVercelSandbox(config, extra) {
|
|
150
|
+
const creds = await resolveVercelCredentials(config);
|
|
151
|
+
const resolved = extra?.resolved ?? resolveVercelSandboxConfig(config);
|
|
152
|
+
if (resolved.reuse && resolved.name) {
|
|
153
|
+
try {
|
|
154
|
+
return await VercelSandbox.get(withResolvedVercelCredentials({
|
|
155
|
+
name: resolved.name,
|
|
156
|
+
resume: true,
|
|
157
|
+
}, creds));
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const status = Number(error?.response?.status ?? 0);
|
|
161
|
+
const message = formatSandboxError(error).toLowerCase();
|
|
162
|
+
if (status !== 404 && !message.includes("not found")) {
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return await VercelSandbox.create(withResolvedVercelCredentials({
|
|
168
|
+
...(resolved.name ? { name: resolved.name } : {}),
|
|
169
|
+
timeout: resolved.timeoutMs,
|
|
170
|
+
ports: resolved.ports,
|
|
171
|
+
runtime: resolved.runtime,
|
|
172
|
+
resources: { vcpus: resolved.vcpus },
|
|
173
|
+
persistent: resolved.persistent,
|
|
174
|
+
...(resolved.snapshotExpirationMs !== undefined
|
|
175
|
+
? { snapshotExpiration: resolved.snapshotExpirationMs }
|
|
176
|
+
: {}),
|
|
177
|
+
...(resolved.tags ? { tags: resolved.tags } : {}),
|
|
178
|
+
networkPolicy: extra?.networkPolicy,
|
|
179
|
+
env: extra?.env,
|
|
180
|
+
}, creds));
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=vercel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../src/providers/vercel.ts"],"names":[],"mappings":"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"}
|
package/dist/public.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export { SANDBOX_EXECUTE_COMMAND_ACTION_NAME } from "./contract.js";
|
|
2
|
+
export declare const sandboxSchemaDomain: import("@ekairos/domain").DomainSchemaResult<{
|
|
3
|
+
sandbox_sandboxes: import("@instantdb/core").EntityDef<{
|
|
4
|
+
sandboxUrl: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
5
|
+
status: import("@instantdb/core").DataAttrDef<string, true, true, false>;
|
|
6
|
+
timeout: import("@instantdb/core").DataAttrDef<number, false, false, false>;
|
|
7
|
+
runtime: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
8
|
+
vcpus: import("@instantdb/core").DataAttrDef<number, false, false, false>;
|
|
9
|
+
ports: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
10
|
+
purpose: import("@instantdb/core").DataAttrDef<string, false, true, false>;
|
|
11
|
+
createdAt: import("@instantdb/core").DataAttrDef<number, true, true, false>;
|
|
12
|
+
updatedAt: import("@instantdb/core").DataAttrDef<number, false, true, false>;
|
|
13
|
+
shutdownAt: import("@instantdb/core").DataAttrDef<number, false, true, false>;
|
|
14
|
+
}, {}, unknown>;
|
|
15
|
+
}, {
|
|
16
|
+
sandbox_user: {
|
|
17
|
+
readonly forward: {
|
|
18
|
+
readonly on: "sandbox_sandboxes";
|
|
19
|
+
readonly has: "one";
|
|
20
|
+
readonly label: "user";
|
|
21
|
+
};
|
|
22
|
+
readonly reverse: {
|
|
23
|
+
readonly on: "$users";
|
|
24
|
+
readonly has: "many";
|
|
25
|
+
readonly label: "sandboxes";
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}, import("@instantdb/core").RoomsDef, {}, "sandbox", "sandbox">;
|
|
29
|
+
export declare const sandboxDomain: import("@ekairos/domain").DomainSchemaResult<{
|
|
30
|
+
sandbox_sandboxes: import("@instantdb/core").EntityDef<{
|
|
31
|
+
sandboxUrl: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
32
|
+
status: import("@instantdb/core").DataAttrDef<string, true, true, false>;
|
|
33
|
+
timeout: import("@instantdb/core").DataAttrDef<number, false, false, false>;
|
|
34
|
+
runtime: import("@instantdb/core").DataAttrDef<string, false, false, false>;
|
|
35
|
+
vcpus: import("@instantdb/core").DataAttrDef<number, false, false, false>;
|
|
36
|
+
ports: import("@instantdb/core").DataAttrDef<any, false, false, false>;
|
|
37
|
+
purpose: import("@instantdb/core").DataAttrDef<string, false, true, false>;
|
|
38
|
+
createdAt: import("@instantdb/core").DataAttrDef<number, true, true, false>;
|
|
39
|
+
updatedAt: import("@instantdb/core").DataAttrDef<number, false, true, false>;
|
|
40
|
+
shutdownAt: import("@instantdb/core").DataAttrDef<number, false, true, false>;
|
|
41
|
+
}, {}, unknown>;
|
|
42
|
+
}, {
|
|
43
|
+
sandbox_user: {
|
|
44
|
+
readonly forward: {
|
|
45
|
+
readonly on: "sandbox_sandboxes";
|
|
46
|
+
readonly has: "one";
|
|
47
|
+
readonly label: "user";
|
|
48
|
+
};
|
|
49
|
+
readonly reverse: {
|
|
50
|
+
readonly on: "$users";
|
|
51
|
+
readonly has: "many";
|
|
52
|
+
readonly label: "sandboxes";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
}, import("@instantdb/core").RoomsDef, {}, "sandbox", "sandbox">;
|
|
56
|
+
//# sourceMappingURL=public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mCAAmC,EAAE,MAAM,eAAe,CAAA;AAGnE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;gEA8B9B,CAAA;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;gEAAsB,CAAA"}
|
package/dist/public.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { i } from "@instantdb/core";
|
|
2
|
+
import { domain } from "@ekairos/domain";
|
|
3
|
+
export { SANDBOX_EXECUTE_COMMAND_ACTION_NAME } from "./contract.js";
|
|
4
|
+
// Browser-safe public sandbox schema. The full runtime domain imports and extends this.
|
|
5
|
+
export const sandboxSchemaDomain = domain("sandbox").withSchema({
|
|
6
|
+
entities: {
|
|
7
|
+
sandbox_sandboxes: i.entity({
|
|
8
|
+
sandboxUrl: i.string().optional(),
|
|
9
|
+
status: i.string().indexed(),
|
|
10
|
+
timeout: i.number().optional(),
|
|
11
|
+
runtime: i.string().optional(),
|
|
12
|
+
vcpus: i.number().optional(),
|
|
13
|
+
ports: i.json().optional(),
|
|
14
|
+
purpose: i.string().optional().indexed(),
|
|
15
|
+
createdAt: i.number().indexed(),
|
|
16
|
+
updatedAt: i.number().optional().indexed(),
|
|
17
|
+
shutdownAt: i.number().optional().indexed(),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
links: {
|
|
21
|
+
sandbox_user: {
|
|
22
|
+
forward: {
|
|
23
|
+
on: "sandbox_sandboxes",
|
|
24
|
+
has: "one",
|
|
25
|
+
label: "user",
|
|
26
|
+
},
|
|
27
|
+
reverse: {
|
|
28
|
+
on: "$users",
|
|
29
|
+
has: "many",
|
|
30
|
+
label: "sandboxes",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
rooms: {},
|
|
35
|
+
});
|
|
36
|
+
export const sandboxDomain = sandboxSchemaDomain;
|
|
37
|
+
//# sourceMappingURL=public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,OAAO,EAAE,mCAAmC,EAAE,MAAM,eAAe,CAAA;AAEnE,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC;IAC9D,QAAQ,EAAE;QACR,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC;YAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;YAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC5B,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;YAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;SAC5C,CAAC;KACH;IACD,KAAK,EAAE;QACL,YAAY,EAAE;YACZ,OAAO,EAAE;gBACP,EAAE,EAAE,mBAAmB;gBACvB,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,MAAM;aACd;YACD,OAAO,EAAE;gBACP,EAAE,EAAE,QAAQ;gBACZ,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,WAAW;aACnB;SACF;KACF;IACD,KAAK,EAAE,EAAE;CACV,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAA"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -16,6 +16,10 @@ export declare function createVercelSandbox(opts: {
|
|
|
16
16
|
timeoutMs: number;
|
|
17
17
|
runtime?: string;
|
|
18
18
|
vcpus?: number;
|
|
19
|
+
name?: string;
|
|
20
|
+
persistent?: boolean;
|
|
21
|
+
snapshotExpirationMs?: number;
|
|
22
|
+
tags?: Record<string, string>;
|
|
19
23
|
}): Promise<Sandbox>;
|
|
20
24
|
export declare function runShInSandbox(sandbox: Sandbox, script: string): Promise<SandboxRunResult>;
|
|
21
25
|
export declare function streamToBuffer(stream: any): Promise<Buffer>;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,CAYjE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,kBAAkB,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,CAYjE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,kBAAkB,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBnB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAKhG;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CASjE;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,OAAO,iBAM3D"}
|