experimental-agent 0.2.3 → 0.3.0
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 +55 -254
- package/dist/adapter-BigchkkI.d.mts +201 -0
- package/dist/adapter-BigchkkI.d.ts +201 -0
- package/dist/chunk-BFFNCESS.mjs +302 -0
- package/dist/chunk-C4VSUEY2.mjs +72 -0
- package/dist/chunk-DOD4MC5D.mjs +196 -0
- package/dist/chunk-ELWIUJUK.mjs +96 -0
- package/dist/chunk-GKASMIBR.mjs +50 -0
- package/dist/chunk-JO3JDCH5.mjs +107 -0
- package/dist/chunk-MSWINCCM.mjs +128 -0
- package/dist/chunk-RT72C52I.mjs +324 -0
- package/dist/chunk-ZUFJJYC4.mjs +150 -0
- package/dist/{handler-FRUPZ4LX.mjs → docker-QPCLWLYR.mjs} +3 -4
- package/dist/entry-BmQ8FO-5.d.ts +36 -0
- package/dist/entry-CZd9aAwn.d.mts +36 -0
- package/dist/index.d.mts +415 -18
- package/dist/index.d.ts +415 -18
- package/dist/index.js +3036 -5494
- package/dist/index.mjs +3264 -1142
- package/dist/lifecycle-workflow-steps.d.mts +5 -0
- package/dist/lifecycle-workflow-steps.d.ts +5 -0
- package/dist/lifecycle-workflow-steps.js +263 -0
- package/dist/lifecycle-workflow-steps.mjs +9 -0
- package/dist/lifecycle-workflow.d.mts +6 -6
- package/dist/lifecycle-workflow.d.ts +6 -6
- package/dist/lifecycle-workflow.js +192 -905
- package/dist/lifecycle-workflow.mjs +3 -1
- package/dist/local-KJ3BSIFJ.mjs +8 -0
- package/dist/next/loader.js +27 -6
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +27 -6
- package/dist/next.mjs +1 -1
- package/dist/{process-manager-JDUJDYGU.mjs → process-manager-WQHAIVRB.mjs} +1 -1
- package/dist/sandbox.d.mts +6 -0
- package/dist/sandbox.d.ts +6 -0
- package/dist/sandbox.js +1070 -0
- package/dist/sandbox.mjs +19 -0
- package/dist/steps-BnkRQKlc.d.ts +173 -0
- package/dist/steps-u-mGDbP_.d.mts +173 -0
- package/dist/storage.d.mts +11 -0
- package/dist/storage.d.ts +11 -0
- package/dist/storage.js +234 -0
- package/dist/storage.mjs +12 -0
- package/dist/vercel-QZ6INPMV.mjs +11 -0
- package/package.json +26 -5
- package/dist/agent-workflow.d.mts +0 -30
- package/dist/agent-workflow.d.ts +0 -30
- package/dist/agent-workflow.js +0 -5433
- package/dist/agent-workflow.mjs +0 -14
- package/dist/chunk-7M6UPURS.mjs +0 -75
- package/dist/chunk-AML2VCQS.mjs +0 -1287
- package/dist/chunk-FQ67QZOI.mjs +0 -75
- package/dist/chunk-NO7RHGTH.mjs +0 -2367
- package/dist/chunk-NXDVNJRS.mjs +0 -106
- package/dist/chunk-OZZVS6L5.mjs +0 -139
- package/dist/chunk-SJVFFE5D.mjs +0 -402
- package/dist/chunk-TAXLUVIC.mjs +0 -1
- package/dist/chunk-TGNVXSMX.mjs +0 -399
- package/dist/chunk-YRYXN7W4.mjs +0 -48
- package/dist/chunk-ZIAHPXOJ.mjs +0 -595
- package/dist/client-BKA7XBGW.mjs +0 -15
- package/dist/client-CEeSFGva.d.mts +0 -2376
- package/dist/client-CEeSFGva.d.ts +0 -2376
- package/dist/docker-FB2MJTHJ.mjs +0 -12
- package/dist/local-fs-handlers-SYOCKTPN.mjs +0 -447
- package/dist/sandbox-UENKQV3T.mjs +0 -21
- package/dist/storage-LSDMRW73.mjs +0 -20
- package/dist/vercel-SD3JTECG.mjs +0 -20
- package/dist/vercel-sdk-I6A4MVAN.mjs +0 -8
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// src/storage/adapter.ts
|
|
2
|
+
import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from "@workflow/serde";
|
|
3
|
+
var StorageStep = class _StorageStep {
|
|
4
|
+
event;
|
|
5
|
+
constructor(event) {
|
|
6
|
+
this.event = event;
|
|
7
|
+
}
|
|
8
|
+
static [WORKFLOW_SERIALIZE](instance) {
|
|
9
|
+
return { event: instance.event };
|
|
10
|
+
}
|
|
11
|
+
static [WORKFLOW_DESERIALIZE](data) {
|
|
12
|
+
return new _StorageStep(data.event);
|
|
13
|
+
}
|
|
14
|
+
// biome-ignore lint/suspicious/noExplicitAny: safe dispatch — event.method selects the matching handler
|
|
15
|
+
on(handlers) {
|
|
16
|
+
return handlers[this.event.method](this.event);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
function isStepFunction(h) {
|
|
20
|
+
return typeof h === "function";
|
|
21
|
+
}
|
|
22
|
+
function fromStepFunction(fn) {
|
|
23
|
+
return {
|
|
24
|
+
session: {
|
|
25
|
+
get: (id) => fn(new StorageStep({ method: "session.get", id })),
|
|
26
|
+
set: (id, value) => fn(new StorageStep({ method: "session.set", id, value })),
|
|
27
|
+
update: (id, updates) => fn(new StorageStep({ method: "session.update", id, updates }))
|
|
28
|
+
},
|
|
29
|
+
message: {
|
|
30
|
+
get: (id) => fn(new StorageStep({ method: "message.get", id })),
|
|
31
|
+
set: (id, value) => fn(new StorageStep({ method: "message.set", id, value })),
|
|
32
|
+
update: (id, updates) => fn(new StorageStep({ method: "message.update", id, updates })),
|
|
33
|
+
listBySession: (sessionId) => fn(new StorageStep({ method: "message.listBySession", sessionId }))
|
|
34
|
+
},
|
|
35
|
+
part: {
|
|
36
|
+
get: (id) => fn(new StorageStep({ method: "part.get", id })),
|
|
37
|
+
set: (id, value) => fn(new StorageStep({ method: "part.set", id, value })),
|
|
38
|
+
listBySession: (sessionId) => fn(new StorageStep({ method: "part.listBySession", sessionId }))
|
|
39
|
+
},
|
|
40
|
+
sandbox: {
|
|
41
|
+
get: (id) => fn(new StorageStep({ method: "sandbox.get", id })),
|
|
42
|
+
set: (id, value) => fn(new StorageStep({ method: "sandbox.set", id, value })),
|
|
43
|
+
update: (id, updates) => fn(new StorageStep({ method: "sandbox.update", id, updates }))
|
|
44
|
+
},
|
|
45
|
+
setup: {
|
|
46
|
+
get: (id) => fn(new StorageStep({ method: "setup.get", id })),
|
|
47
|
+
set: (id, value) => fn(new StorageStep({ method: "setup.set", id, value }))
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function fromHandlers(h) {
|
|
52
|
+
return {
|
|
53
|
+
session: {
|
|
54
|
+
get: (id) => h["session.get"]({ id }),
|
|
55
|
+
set: (id, value) => h["session.set"]({ id, value }),
|
|
56
|
+
update: (id, updates) => h["session.update"]({ id, updates })
|
|
57
|
+
},
|
|
58
|
+
message: {
|
|
59
|
+
get: (id) => h["message.get"]({ id }),
|
|
60
|
+
set: (id, value) => h["message.set"]({ id, value }),
|
|
61
|
+
update: (id, updates) => h["message.update"]({ id, updates }),
|
|
62
|
+
listBySession: (sessionId) => h["message.listBySession"]({ sessionId })
|
|
63
|
+
},
|
|
64
|
+
part: {
|
|
65
|
+
get: (id) => h["part.get"]({ id }),
|
|
66
|
+
set: (id, value) => h["part.set"]({ id, value }),
|
|
67
|
+
listBySession: (sessionId) => h["part.listBySession"]({ sessionId })
|
|
68
|
+
},
|
|
69
|
+
sandbox: {
|
|
70
|
+
get: (id) => h["sandbox.get"]({ id }),
|
|
71
|
+
set: (id, value) => h["sandbox.set"]({ id, value }),
|
|
72
|
+
update: (id, updates) => h["sandbox.update"]({ id, updates })
|
|
73
|
+
},
|
|
74
|
+
setup: {
|
|
75
|
+
get: (id) => h["setup.get"]({ id }),
|
|
76
|
+
set: (id, value) => h["setup.set"]({ id, value })
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function toStorage(h) {
|
|
81
|
+
return isStepFunction(h) ? fromStepFunction(h) : fromHandlers(h);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// src/storage/bindings/local.ts
|
|
85
|
+
var _fs;
|
|
86
|
+
var _path;
|
|
87
|
+
async function fs() {
|
|
88
|
+
if (!_fs) {
|
|
89
|
+
_fs = await import("fs/promises");
|
|
90
|
+
}
|
|
91
|
+
return _fs;
|
|
92
|
+
}
|
|
93
|
+
async function path() {
|
|
94
|
+
if (!_path) {
|
|
95
|
+
_path = await import("path");
|
|
96
|
+
}
|
|
97
|
+
return _path;
|
|
98
|
+
}
|
|
99
|
+
function createStore(dir) {
|
|
100
|
+
const filePath = async (key) => (await path()).join(dir, `${key}.json`);
|
|
101
|
+
return {
|
|
102
|
+
async get(key) {
|
|
103
|
+
try {
|
|
104
|
+
const data = await (await fs()).readFile(await filePath(key), "utf-8");
|
|
105
|
+
return JSON.parse(data);
|
|
106
|
+
} catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
async set(key, value) {
|
|
111
|
+
const p = await filePath(key);
|
|
112
|
+
const { mkdir, writeFile } = await fs();
|
|
113
|
+
const { dirname } = await path();
|
|
114
|
+
await mkdir(dirname(p), { recursive: true });
|
|
115
|
+
await writeFile(p, JSON.stringify(value, null, 2));
|
|
116
|
+
},
|
|
117
|
+
async update(key, updates) {
|
|
118
|
+
const p = await filePath(key);
|
|
119
|
+
const { readFile, mkdir, writeFile } = await fs();
|
|
120
|
+
const { dirname } = await path();
|
|
121
|
+
let existing;
|
|
122
|
+
try {
|
|
123
|
+
const data = await readFile(p, "utf-8");
|
|
124
|
+
existing = JSON.parse(data);
|
|
125
|
+
} catch {
|
|
126
|
+
throw new Error(`Not found: ${key}`);
|
|
127
|
+
}
|
|
128
|
+
const updated = { ...existing, ...updates };
|
|
129
|
+
await mkdir(dirname(p), { recursive: true });
|
|
130
|
+
await writeFile(p, JSON.stringify(updated, null, 2));
|
|
131
|
+
return updated;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
async function readAllFromDir(dir) {
|
|
136
|
+
const { readdir, readFile } = await fs();
|
|
137
|
+
const { join } = await path();
|
|
138
|
+
let files;
|
|
139
|
+
try {
|
|
140
|
+
files = await readdir(dir);
|
|
141
|
+
} catch {
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
const result = [];
|
|
145
|
+
for (const file of files) {
|
|
146
|
+
if (!file.endsWith(".json")) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const data = await readFile(join(dir, file), "utf-8");
|
|
151
|
+
result.push(JSON.parse(data));
|
|
152
|
+
} catch {
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
function localStorage(opts) {
|
|
158
|
+
const dir = opts?.dir ?? ".agent";
|
|
159
|
+
const sessionStore = createStore(`${dir}/session`);
|
|
160
|
+
const messageStore = createStore(`${dir}/message`);
|
|
161
|
+
const partStore = createStore(`${dir}/part`);
|
|
162
|
+
const sandboxStore = createStore(`${dir}/sandbox`);
|
|
163
|
+
const setupStore = createStore(`${dir}/setup`);
|
|
164
|
+
const messageDir = `${dir}/message`;
|
|
165
|
+
const partDir = `${dir}/part`;
|
|
166
|
+
return {
|
|
167
|
+
"session.get": ({ id }) => sessionStore.get(id),
|
|
168
|
+
"session.set": ({ id, value }) => sessionStore.set(id, value),
|
|
169
|
+
"session.update": ({ id, updates }) => sessionStore.update(id, updates),
|
|
170
|
+
"message.get": ({ id }) => messageStore.get(id),
|
|
171
|
+
"message.set": ({ id, value }) => messageStore.set(id, value),
|
|
172
|
+
"message.update": ({ id, updates }) => messageStore.update(id, updates),
|
|
173
|
+
"message.listBySession": async ({ sessionId }) => {
|
|
174
|
+
const all = await readAllFromDir(messageDir);
|
|
175
|
+
return all.filter((m) => m.sessionId === sessionId);
|
|
176
|
+
},
|
|
177
|
+
"part.get": ({ id }) => partStore.get(id),
|
|
178
|
+
"part.set": ({ id, value }) => partStore.set(id, value),
|
|
179
|
+
"part.listBySession": async ({ sessionId }) => {
|
|
180
|
+
const all = await readAllFromDir(partDir);
|
|
181
|
+
return all.filter((p) => p.sessionId === sessionId);
|
|
182
|
+
},
|
|
183
|
+
"sandbox.get": ({ id }) => sandboxStore.get(id),
|
|
184
|
+
"sandbox.set": ({ id, value }) => sandboxStore.set(id, value),
|
|
185
|
+
"sandbox.update": ({ id, updates }) => sandboxStore.update(id, updates),
|
|
186
|
+
"setup.get": ({ id }) => setupStore.get(id),
|
|
187
|
+
"setup.set": ({ id, value }) => setupStore.set(id, value)
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export {
|
|
192
|
+
StorageStep,
|
|
193
|
+
toStorage,
|
|
194
|
+
localStorage
|
|
195
|
+
};
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gXCJAd29ya2Zsb3cvc2VyZGVcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgUGFydCwgU2FuZGJveCwgU2Vzc2lvbiwgU2V0dXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZUhhbmRsZXJzIChwdWJsaWMsIGZsYXQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgdHlwZSBTdG9yYWdlSGFuZGxlcnMgPSB7XG4gIFwic2Vzc2lvbi5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+O1xuICBcInNlc3Npb24uc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2Vzc2lvbiB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzZXNzaW9uLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj47XG4gIH0pOiBQcm9taXNlPFNlc3Npb24+O1xuXG4gIFwibWVzc2FnZS5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICBcIm1lc3NhZ2Uuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogTWVzc2FnZSB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJtZXNzYWdlLnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8TWVzc2FnZT47XG4gIH0pOiBQcm9taXNlPE1lc3NhZ2U+O1xuICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiKHA6IHsgc2Vzc2lvbklkOiBzdHJpbmcgfSk6IFByb21pc2U8TWVzc2FnZVtdPjtcblxuICBcInBhcnQuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnQgfCBudWxsPjtcbiAgXCJwYXJ0LnNldFwiKHA6IHsgaWQ6IHN0cmluZzsgdmFsdWU6IFBhcnQgfSk6IFByb21pc2U8dm9pZD47XG4gIFwicGFydC5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxQYXJ0W10+O1xuXG4gIFwic2FuZGJveC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICBcInNhbmRib3guc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogU2FuZGJveCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJzYW5kYm94LnVwZGF0ZVwiKHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD47XG4gIH0pOiBQcm9taXNlPFNhbmRib3g+O1xuXG4gIFwic2V0dXAuZ2V0XCIocDogeyBpZDogc3RyaW5nIH0pOiBQcm9taXNlPFNldHVwIHwgbnVsbD47XG4gIFwic2V0dXAuc2V0XCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdmFsdWU6IFNldHVwO1xuICB9KTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlQ2FsbCAoZGVyaXZlZCBmcm9tIFN0b3JhZ2VIYW5kbGVycykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDYWxsID0ge1xuICBbSyBpbiBrZXlvZiBTdG9yYWdlSGFuZGxlcnNdOiB7IG1ldGhvZDogSyB9ICYgUGFyYW1ldGVyczxcbiAgICBTdG9yYWdlSGFuZGxlcnNbS11cbiAgPlswXTtcbn1ba2V5b2YgU3RvcmFnZUhhbmRsZXJzXTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VTdGVwIChzZXJpYWxpemFibGUgYWNyb3NzIHdvcmtmbG93IGJvdW5kYXJ5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTdGVwIHtcbiAgZXZlbnQ6IFN0b3JhZ2VDYWxsO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50OiBTdG9yYWdlQ2FsbCkge1xuICAgIHRoaXMuZXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogU3RvcmFnZVN0ZXApIHtcbiAgICByZXR1cm4geyBldmVudDogaW5zdGFuY2UuZXZlbnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgZXZlbnQ6IFN0b3JhZ2VDYWxsIH0pIHtcbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VTdGVwKGRhdGEuZXZlbnQpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzYWZlIGRpc3BhdGNoIFx1MjAxNCBldmVudC5tZXRob2Qgc2VsZWN0cyB0aGUgbWF0Y2hpbmcgaGFuZGxlclxuICBvbihoYW5kbGVyczogU3RvcmFnZUhhbmRsZXJzKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNlZSBhYm92ZVxuICAgIHJldHVybiAoaGFuZGxlcnNbdGhpcy5ldmVudC5tZXRob2RdIGFzIGFueSkodGhpcy5ldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gSW50ZW5kZWQgdG8gYmVcbiAqIG1hcmtlZCB3aXRoIGBcInVzZSBzdGVwXCJgIHNvIHRoYXQgaXRzIGJvZHkgKGFuZCBOb2RlLmpzLWRlcGVuZGVudFxuICogaW1wb3J0cyBsaWtlIGRhdGFiYXNlIGNsaWVudHMpIGlzIGV4dHJhY3RlZCBieSB0aGUgd29ya2Zsb3cgYnVuZGxlclxuICogYW5kIHJ1bnMgc2VydmVyLXNpZGUuXG4gKlxuICogVGhlIHN0ZXAgcmVjZWl2ZXMgYSBgU3RvcmFnZVN0ZXBgIGluc3RhbmNlIChzZXJpYWxpemFibGUgdmlhXG4gKiBgQHdvcmtmbG93L3NlcmRlYCkgYW5kIHNob3VsZCBjYWxsIGBzdGVwLmhhbmRsZSh7IC4uLiB9KWAgd2l0aCBhXG4gKiBgU3RvcmFnZUhhbmRsZXJzYCBtYXAuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc3RlcCBmdW5jdGlvbiBpcyBhIGRpc3BhdGNoZXI7IHR5cGUgc2FmZXR5IGlzIGF0IHRoZSBoYW5kbGVycyBsZXZlbFxuZXhwb3J0IHR5cGUgU3RvcmFnZVN0ZXBGdW5jdGlvbiA9IChzdG9yZTogU3RvcmFnZVN0ZXApID0+IFByb21pc2U8YW55PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2UgKGludGVybmFsLCBuZXN0ZWQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2Uge1xuICBzZXNzaW9uOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvbik6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+KTogUHJvbWlzZTxTZXNzaW9uPjtcbiAgfTtcbiAgbWVzc2FnZToge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPik6IFByb21pc2U8TWVzc2FnZT47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVtdPjtcbiAgfTtcbiAgcGFydDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFBhcnQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRbXT47XG4gIH07XG4gIHNhbmRib3g6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTYW5kYm94KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD4pOiBQcm9taXNlPFNhbmRib3g+O1xuICB9O1xuICBzZXR1cDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXR1cCk6IFByb21pc2U8dm9pZD47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VJbnB1dCA9IFN0b3JhZ2VIYW5kbGVycyB8IFN0b3JhZ2VTdGVwRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzU3RlcEZ1bmN0aW9uKGg6IFN0b3JhZ2VJbnB1dCk6IGggaXMgU3RvcmFnZVN0ZXBGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgaCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBmcm9tU3RlcEZ1bmN0aW9uKGZuOiBTdG9yYWdlU3RlcEZ1bmN0aW9uKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2Uuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyb21IYW5kbGVycyhoOiBTdG9yYWdlSGFuZGxlcnMpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNlc3Npb24uZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXNzaW9uLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2Vzc2lvbi51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wibWVzc2FnZS5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcIm1lc3NhZ2Uuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJtZXNzYWdlLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wicGFydC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInBhcnQuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcInBhcnQubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2FuZGJveC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNhbmRib3guc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzYW5kYm94LnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2V0dXAuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXR1cC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RvcmFnZShoOiBTdG9yYWdlSW5wdXQpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIGlzU3RlcEZ1bmN0aW9uKGgpID8gZnJvbVN0ZXBGdW5jdGlvbihoKSA6IGZyb21IYW5kbGVycyhoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIE1lc3NhZ2UsXG4gIFBhcnQsXG4gIFNhbmRib3gsXG4gIFNlc3Npb24sXG4gIFNldHVwLFxufSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZUhhbmRsZXJzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxubGV0IF9mczogdHlwZW9mIGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIikgfCB1bmRlZmluZWQ7XG5sZXQgX3BhdGg6IHR5cGVvZiBpbXBvcnQoXCJub2RlOnBhdGhcIikgfCB1bmRlZmluZWQ7XG5cbmFzeW5jIGZ1bmN0aW9uIGZzKCkge1xuICBpZiAoIV9mcykge1xuICAgIF9mcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gIH1cbiAgcmV0dXJuIF9mcztcbn1cbmFzeW5jIGZ1bmN0aW9uIHBhdGgoKSB7XG4gIGlmICghX3BhdGgpIHtcbiAgICBfcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgfVxuICByZXR1cm4gX3BhdGg7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlPFQ+KGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXN5bmMgKGtleTogc3RyaW5nKSA9PlxuICAgIChhd2FpdCBwYXRoKCkpLmpvaW4oZGlyLCBgJHtrZXl9Lmpzb25gKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZnMoKSkucmVhZEZpbGUoYXdhaXQgZmlsZVBhdGgoa2V5KSwgXCJ1dGYtOFwiKTtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyBta2Rpciwgd3JpdGVGaWxlIH0gPSBhd2FpdCBmcygpO1xuICAgICAgY29uc3QgeyBkaXJuYW1lIH0gPSBhd2FpdCBwYXRoKCk7XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMikpO1xuICAgIH0sXG4gICAgYXN5bmMgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCBwID0gYXdhaXQgZmlsZVBhdGgoa2V5KTtcbiAgICAgIGNvbnN0IHsgcmVhZEZpbGUsIG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGxldCBleGlzdGluZzogVDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwLCBcInV0Zi04XCIpO1xuICAgICAgICBleGlzdGluZyA9IEpTT04ucGFyc2UoZGF0YSkgYXMgVDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBmb3VuZDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgYXdhaXQgbWtkaXIoZGlybmFtZShwKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUocCwgSlNPTi5zdHJpbmdpZnkodXBkYXRlZCwgbnVsbCwgMikpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEZyb21EaXI8VD4oZGlyOiBzdHJpbmcpOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCB7IHJlYWRkaXIsIHJlYWRGaWxlIH0gPSBhd2FpdCBmcygpO1xuICBjb25zdCB7IGpvaW4gfSA9IGF3YWl0IHBhdGgoKTtcbiAgbGV0IGZpbGVzOiBzdHJpbmdbXTtcbiAgdHJ5IHtcbiAgICBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoZGlyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShqb2luKGRpciwgZmlsZSksIFwidXRmLThcIik7XG4gICAgICByZXN1bHQucHVzaChKU09OLnBhcnNlKGRhdGEpIGFzIFQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2tpcCBjb3JydXB0IGZpbGVzXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFN0b3JhZ2Uob3B0cz86IHsgZGlyPzogc3RyaW5nIH0pOiBTdG9yYWdlSGFuZGxlcnMge1xuICBjb25zdCBkaXIgPSBvcHRzPy5kaXIgPz8gXCIuYWdlbnRcIjtcblxuICBjb25zdCBzZXNzaW9uU3RvcmUgPSBjcmVhdGVTdG9yZTxTZXNzaW9uPihgJHtkaXJ9L3Nlc3Npb25gKTtcbiAgY29uc3QgbWVzc2FnZVN0b3JlID0gY3JlYXRlU3RvcmU8TWVzc2FnZT4oYCR7ZGlyfS9tZXNzYWdlYCk7XG4gIGNvbnN0IHBhcnRTdG9yZSA9IGNyZWF0ZVN0b3JlPFBhcnQ+KGAke2Rpcn0vcGFydGApO1xuICBjb25zdCBzYW5kYm94U3RvcmUgPSBjcmVhdGVTdG9yZTxTYW5kYm94PihgJHtkaXJ9L3NhbmRib3hgKTtcbiAgY29uc3Qgc2V0dXBTdG9yZSA9IGNyZWF0ZVN0b3JlPFNldHVwPihgJHtkaXJ9L3NldHVwYCk7XG4gIGNvbnN0IG1lc3NhZ2VEaXIgPSBgJHtkaXJ9L21lc3NhZ2VgO1xuICBjb25zdCBwYXJ0RGlyID0gYCR7ZGlyfS9wYXJ0YDtcblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogKHsgaWQgfSkgPT4gc2Vzc2lvblN0b3JlLmdldChpZCksXG4gICAgXCJzZXNzaW9uLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gc2Vzc2lvblN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwic2Vzc2lvbi51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gc2Vzc2lvblN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG5cbiAgICBcIm1lc3NhZ2UuZ2V0XCI6ICh7IGlkIH0pID0+IG1lc3NhZ2VTdG9yZS5nZXQoaWQpLFxuICAgIFwibWVzc2FnZS5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IG1lc3NhZ2VTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+IG1lc3NhZ2VTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpLFxuICAgIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxNZXNzYWdlPihtZXNzYWdlRGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChtKSA9PiBtLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiAoeyBpZCB9KSA9PiBwYXJ0U3RvcmUuZ2V0KGlkKSxcbiAgICBcInBhcnQuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBwYXJ0U3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gICAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPFBhcnQ+KHBhcnREaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKHApID0+IHAuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6ICh7IGlkIH0pID0+IHNhbmRib3hTdG9yZS5nZXQoaWQpLFxuICAgIFwic2FuZGJveC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHNhbmRib3hTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcInNhbmRib3gudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+IHNhbmRib3hTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpLFxuXG4gICAgXCJzZXR1cC5nZXRcIjogKHsgaWQgfSkgPT4gc2V0dXBTdG9yZS5nZXQoaWQpLFxuICAgIFwic2V0dXAuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBzZXR1cFN0b3JlLnNldChpZCwgdmFsdWUpLFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMs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
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// package.json
|
|
2
|
+
var package_default = {
|
|
3
|
+
name: "experimental-agent",
|
|
4
|
+
version: "0.2.3",
|
|
5
|
+
main: "./dist/index.js",
|
|
6
|
+
module: "./dist/index.mjs",
|
|
7
|
+
types: "./dist/index.d.ts",
|
|
8
|
+
sideEffects: true,
|
|
9
|
+
license: "MIT",
|
|
10
|
+
files: [
|
|
11
|
+
"dist/**"
|
|
12
|
+
],
|
|
13
|
+
exports: {
|
|
14
|
+
".": {
|
|
15
|
+
types: "./dist/index.d.ts",
|
|
16
|
+
import: "./dist/index.mjs",
|
|
17
|
+
require: "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./storage": {
|
|
20
|
+
types: "./dist/storage.d.ts",
|
|
21
|
+
import: "./dist/storage.mjs",
|
|
22
|
+
require: "./dist/storage.js"
|
|
23
|
+
},
|
|
24
|
+
"./sandbox": {
|
|
25
|
+
types: "./dist/sandbox.d.ts",
|
|
26
|
+
import: "./dist/sandbox.mjs",
|
|
27
|
+
require: "./dist/sandbox.js"
|
|
28
|
+
},
|
|
29
|
+
"./next": {
|
|
30
|
+
types: "./dist/next.d.ts",
|
|
31
|
+
import: "./dist/next.mjs",
|
|
32
|
+
require: "./dist/next.js"
|
|
33
|
+
},
|
|
34
|
+
"./next/loader": {
|
|
35
|
+
types: "./dist/next/loader.d.ts",
|
|
36
|
+
import: "./dist/next/loader.mjs",
|
|
37
|
+
require: "./dist/next/loader.js"
|
|
38
|
+
},
|
|
39
|
+
"./client": {
|
|
40
|
+
types: "./dist/client.d.ts",
|
|
41
|
+
import: "./dist/client.mjs",
|
|
42
|
+
require: "./dist/client.js"
|
|
43
|
+
},
|
|
44
|
+
"./lifecycle-workflow": {
|
|
45
|
+
types: "./dist/lifecycle-workflow.d.ts",
|
|
46
|
+
import: "./dist/lifecycle-workflow.mjs",
|
|
47
|
+
require: "./dist/lifecycle-workflow.js"
|
|
48
|
+
},
|
|
49
|
+
"./lifecycle-workflow-steps": {
|
|
50
|
+
types: "./dist/lifecycle-workflow-steps.d.ts",
|
|
51
|
+
import: "./dist/lifecycle-workflow-steps.mjs",
|
|
52
|
+
require: "./dist/lifecycle-workflow-steps.js"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
scripts: {
|
|
56
|
+
build: "tsup",
|
|
57
|
+
dev: "tsup --watch",
|
|
58
|
+
clean: "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
59
|
+
release: "pnpm build && npm publish",
|
|
60
|
+
typecheck: "tsc --noEmit",
|
|
61
|
+
test: "vitest run",
|
|
62
|
+
"test:watch": "vitest"
|
|
63
|
+
},
|
|
64
|
+
dependencies: {
|
|
65
|
+
"@swc/core": "^1.10.0",
|
|
66
|
+
"@vercel/oidc": "^3.1.0",
|
|
67
|
+
"@vercel/sandbox": "1.7.1",
|
|
68
|
+
"@workflow/serde": "4.1.0-beta.2",
|
|
69
|
+
"better-all": "^0.0.5",
|
|
70
|
+
errore: "^0.14.0",
|
|
71
|
+
"fast-deep-equal": "^3.1.3",
|
|
72
|
+
ulid: "^3.0.2",
|
|
73
|
+
zod: "^4.3.6"
|
|
74
|
+
},
|
|
75
|
+
devDependencies: {
|
|
76
|
+
"@agent/tsconfig": "workspace:*",
|
|
77
|
+
"@types/node": "^20.11.24",
|
|
78
|
+
dotenv: "^17.2.3",
|
|
79
|
+
next: "^16.0.0",
|
|
80
|
+
tsup: "^8.0.2",
|
|
81
|
+
typescript: "5.5.4",
|
|
82
|
+
vitest: "^3.0.0",
|
|
83
|
+
workflow: "4.1.0-beta.60"
|
|
84
|
+
},
|
|
85
|
+
peerDependencies: {
|
|
86
|
+
ai: "^6.0.0"
|
|
87
|
+
},
|
|
88
|
+
publishConfig: {
|
|
89
|
+
access: "public"
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export {
|
|
94
|
+
package_default
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vcGFja2FnZS5qc29uIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ7XG4gIFwibmFtZVwiOiBcImV4cGVyaW1lbnRhbC1hZ2VudFwiLFxuICBcInZlcnNpb25cIjogXCIwLjIuM1wiLFxuICBcIm1haW5cIjogXCIuL2Rpc3QvaW5kZXguanNcIixcbiAgXCJtb2R1bGVcIjogXCIuL2Rpc3QvaW5kZXgubWpzXCIsXG4gIFwidHlwZXNcIjogXCIuL2Rpc3QvaW5kZXguZC50c1wiLFxuICBcInNpZGVFZmZlY3RzXCI6IHRydWUsXG4gIFwibGljZW5zZVwiOiBcIk1JVFwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImRpc3QvKipcIlxuICBdLFxuICBcImV4cG9ydHNcIjoge1xuICAgIFwiLlwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2luZGV4LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2luZGV4Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2luZGV4LmpzXCJcbiAgICB9LFxuICAgIFwiLi9zdG9yYWdlXCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3Qvc3RvcmFnZS5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9zdG9yYWdlLm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L3N0b3JhZ2UuanNcIlxuICAgIH0sXG4gICAgXCIuL3NhbmRib3hcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9zYW5kYm94LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L3NhbmRib3gubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3Qvc2FuZGJveC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbmV4dFwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L25leHQuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvbmV4dC5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9uZXh0LmpzXCJcbiAgICB9LFxuICAgIFwiLi9uZXh0L2xvYWRlclwiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L25leHQvbG9hZGVyLmpzXCJcbiAgICB9LFxuICAgIFwiLi9jbGllbnRcIjoge1xuICAgICAgXCJ0eXBlc1wiOiBcIi4vZGlzdC9jbGllbnQuZC50c1wiLFxuICAgICAgXCJpbXBvcnRcIjogXCIuL2Rpc3QvY2xpZW50Lm1qc1wiLFxuICAgICAgXCJyZXF1aXJlXCI6IFwiLi9kaXN0L2NsaWVudC5qc1wiXG4gICAgfSxcbiAgICBcIi4vbGlmZWN5Y2xlLXdvcmtmbG93XCI6IHtcbiAgICAgIFwidHlwZXNcIjogXCIuL2Rpc3QvbGlmZWN5Y2xlLXdvcmtmbG93LmQudHNcIixcbiAgICAgIFwiaW1wb3J0XCI6IFwiLi9kaXN0L2xpZmVjeWNsZS13b3JrZmxvdy5tanNcIixcbiAgICAgIFwicmVxdWlyZVwiOiBcIi4vZGlzdC9saWZlY3ljbGUtd29ya2Zsb3cuanNcIlxuICAgIH0sXG4gICAgXCIuL2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwc1wiOiB7XG4gICAgICBcInR5cGVzXCI6IFwiLi9kaXN0L2xpZmVjeWNsZS13b3JrZmxvdy1zdGVwcy5kLnRzXCIsXG4gICAgICBcImltcG9ydFwiOiBcIi4vZGlzdC9saWZlY3ljbGUtd29ya2Zsb3ctc3RlcHMubWpzXCIsXG4gICAgICBcInJlcXVpcmVcIjogXCIuL2Rpc3QvbGlmZWN5Y2xlLXdvcmtmbG93LXN0ZXBzLmpzXCJcbiAgICB9XG4gIH0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcInRzdXBcIixcbiAgICBcImRldlwiOiBcInRzdXAgLS13YXRjaFwiLFxuICAgIFwiY2xlYW5cIjogXCJybSAtcmYgLnR1cmJvICYmIHJtIC1yZiBub2RlX21vZHVsZXMgJiYgcm0gLXJmIGRpc3RcIixcbiAgICBcInJlbGVhc2VcIjogXCJwbnBtIGJ1aWxkICYmIG5wbSBwdWJsaXNoXCIsXG4gICAgXCJ0eXBlY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIixcbiAgICBcInRlc3RcIjogXCJ2aXRlc3QgcnVuXCIsXG4gICAgXCJ0ZXN0OndhdGNoXCI6IFwidml0ZXN0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQHN3Yy9jb3JlXCI6IFwiXjEuMTAuMFwiLFxuICAgIFwiQHZlcmNlbC9vaWRjXCI6IFwiXjMuMS4wXCIsXG4gICAgXCJAdmVyY2VsL3NhbmRib3hcIjogXCIxLjcuMVwiLFxuICAgIFwiQHdvcmtmbG93L3NlcmRlXCI6IFwiNC4xLjAtYmV0YS4yXCIsXG4gICAgXCJiZXR0ZXItYWxsXCI6IFwiXjAuMC41XCIsXG4gICAgXCJlcnJvcmVcIjogXCJeMC4xNC4wXCIsXG4gICAgXCJmYXN0LWRlZXAtZXF1YWxcIjogXCJeMy4xLjNcIixcbiAgICBcInVsaWRcIjogXCJeMy4wLjJcIixcbiAgICBcInpvZFwiOiBcIl40LjMuNlwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkBhZ2VudC90c2NvbmZpZ1wiOiBcIndvcmtzcGFjZToqXCIsXG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMS4yNFwiLFxuICAgIFwiZG90ZW52XCI6IFwiXjE3LjIuM1wiLFxuICAgIFwibmV4dFwiOiBcIl4xNi4wLjBcIixcbiAgICBcInRzdXBcIjogXCJeOC4wLjJcIixcbiAgICBcInR5cGVzY3JpcHRcIjogXCI1LjUuNFwiLFxuICAgIFwidml0ZXN0XCI6IFwiXjMuMC4wXCIsXG4gICAgXCJ3b3JrZmxvd1wiOiBcIjQuMS4wLWJldGEuNjBcIlxuICB9LFxuICBcInBlZXJEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYWlcIjogXCJeNi4wLjBcIlxuICB9LFxuICBcInB1Ymxpc2hDb25maWdcIjoge1xuICAgIFwiYWNjZXNzXCI6IFwicHVibGljXCJcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBO0FBQUEsRUFDRSxNQUFRO0FBQUEsRUFDUixTQUFXO0FBQUEsRUFDWCxNQUFRO0FBQUEsRUFDUixRQUFVO0FBQUEsRUFDVixPQUFTO0FBQUEsRUFDVCxhQUFlO0FBQUEsRUFDZixTQUFXO0FBQUEsRUFDWCxPQUFTO0FBQUEsSUFDUDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFNBQVc7QUFBQSxJQUNULEtBQUs7QUFBQSxNQUNILE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxhQUFhO0FBQUEsTUFDWCxPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0EsYUFBYTtBQUFBLE1BQ1gsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxNQUNmLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsSUFDQSxZQUFZO0FBQUEsTUFDVixPQUFTO0FBQUEsTUFDVCxRQUFVO0FBQUEsTUFDVixTQUFXO0FBQUEsSUFDYjtBQUFBLElBQ0Esd0JBQXdCO0FBQUEsTUFDdEIsT0FBUztBQUFBLE1BQ1QsUUFBVTtBQUFBLE1BQ1YsU0FBVztBQUFBLElBQ2I7QUFBQSxJQUNBLDhCQUE4QjtBQUFBLE1BQzVCLE9BQVM7QUFBQSxNQUNULFFBQVU7QUFBQSxNQUNWLFNBQVc7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUFBLEVBQ0EsU0FBVztBQUFBLElBQ1QsT0FBUztBQUFBLElBQ1QsS0FBTztBQUFBLElBQ1AsT0FBUztBQUFBLElBQ1QsU0FBVztBQUFBLElBQ1gsV0FBYTtBQUFBLElBQ2IsTUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2hCO0FBQUEsRUFDQSxjQUFnQjtBQUFBLElBQ2QsYUFBYTtBQUFBLElBQ2IsZ0JBQWdCO0FBQUEsSUFDaEIsbUJBQW1CO0FBQUEsSUFDbkIsbUJBQW1CO0FBQUEsSUFDbkIsY0FBYztBQUFBLElBQ2QsUUFBVTtBQUFBLElBQ1YsbUJBQW1CO0FBQUEsSUFDbkIsTUFBUTtBQUFBLElBQ1IsS0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLGlCQUFtQjtBQUFBLElBQ2pCLG1CQUFtQjtBQUFBLElBQ25CLGVBQWU7QUFBQSxJQUNmLFFBQVU7QUFBQSxJQUNWLE1BQVE7QUFBQSxJQUNSLE1BQVE7QUFBQSxJQUNSLFlBQWM7QUFBQSxJQUNkLFFBQVU7QUFBQSxJQUNWLFVBQVk7QUFBQSxFQUNkO0FBQUEsRUFDQSxrQkFBb0I7QUFBQSxJQUNsQixJQUFNO0FBQUEsRUFDUjtBQUFBLEVBQ0EsZUFBaUI7QUFBQSxJQUNmLFFBQVU7QUFBQSxFQUNaO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
checkAndSnapshotStep
|
|
3
|
+
} from "./chunk-JO3JDCH5.mjs";
|
|
4
|
+
import {
|
|
5
|
+
createLogger
|
|
6
|
+
} from "./chunk-MSWINCCM.mjs";
|
|
7
|
+
|
|
8
|
+
// src/sandbox/bindings/vercel-lifecycle/workflow.ts
|
|
9
|
+
import { sleep } from "workflow";
|
|
10
|
+
var DEFAULT_POLL_MS = 2 * 60 * 1e3;
|
|
11
|
+
async function sandboxLifecycleWorkflow({
|
|
12
|
+
input
|
|
13
|
+
}) {
|
|
14
|
+
"use workflow";
|
|
15
|
+
let nextPollMs = input.config?.pollIntervalMs ?? DEFAULT_POLL_MS;
|
|
16
|
+
const log = createLogger({
|
|
17
|
+
config: { ...input.agent.options.logging, name: input.agent.name },
|
|
18
|
+
subsystem: "sandbox:lifecycle",
|
|
19
|
+
context: { sandboxId: input.sandboxId }
|
|
20
|
+
});
|
|
21
|
+
log.info("lifecycle workflow started", {
|
|
22
|
+
sandboxId: input.sandboxId,
|
|
23
|
+
vercelSandboxId: input.vercelSandboxId,
|
|
24
|
+
pollMs: nextPollMs
|
|
25
|
+
});
|
|
26
|
+
while (true) {
|
|
27
|
+
await sleep(nextPollMs);
|
|
28
|
+
const result = await checkAndSnapshotStep(input);
|
|
29
|
+
if (result instanceof Error) {
|
|
30
|
+
log.error("lifecycle step failed", {
|
|
31
|
+
sandboxId: input.sandboxId,
|
|
32
|
+
error: result.message
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
if (result.action === "exit") {
|
|
37
|
+
log.info("lifecycle workflow exiting", {
|
|
38
|
+
sandboxId: input.sandboxId,
|
|
39
|
+
reason: result.reason
|
|
40
|
+
});
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
nextPollMs = result.nextPollMs;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
sandboxLifecycleWorkflow
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLWxpZmVjeWNsZS93b3JrZmxvdy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwid29ya2Zsb3dcIjtcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB7IGNoZWNrQW5kU25hcHNob3RTdGVwLCB0eXBlIExpZmVjeWNsZUlucHV0IH0gZnJvbSBcIi4vc3RlcHNcIjtcblxuZXhwb3J0IHR5cGUgeyBMaWZlY3ljbGVJbnB1dCB9O1xuXG5jb25zdCBERUZBVUxUX1BPTExfTVMgPSAyICogNjAgKiAxMDAwO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2FuZGJveExpZmVjeWNsZVdvcmtmbG93KHtcbiAgaW5wdXQsXG59OiB7XG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dDtcbn0pIHtcbiAgXCJ1c2Ugd29ya2Zsb3dcIjtcblxuICBsZXQgbmV4dFBvbGxNcyA9IGlucHV0LmNvbmZpZz8ucG9sbEludGVydmFsTXMgPz8gREVGQVVMVF9QT0xMX01TO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIHdvcmtmbG93IHN0YXJ0ZWRcIiwge1xuICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgIHBvbGxNczogbmV4dFBvbGxNcyxcbiAgfSk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhd2FpdCBzbGVlcChuZXh0UG9sbE1zKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrQW5kU25hcHNob3RTdGVwKGlucHV0KTtcblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgbG9nLmVycm9yKFwibGlmZWN5Y2xlIHN0ZXAgZmFpbGVkXCIsIHtcbiAgICAgICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgICAgIGVycm9yOiByZXN1bHQubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09IFwiZXhpdFwiKSB7XG4gICAgICBsb2cuaW5mbyhcImxpZmVjeWNsZSB3b3JrZmxvdyBleGl0aW5nXCIsIHtcbiAgICAgICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgICAgIHJlYXNvbjogcmVzdWx0LnJlYXNvbixcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dFBvbGxNcyA9IHJlc3VsdC5uZXh0UG9sbE1zO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztBQUFBLFNBQVMsYUFBYTtBQU10QixJQUFNLGtCQUFrQixJQUFJLEtBQUs7QUFFakMsZUFBc0IseUJBQXlCO0FBQUEsRUFDN0M7QUFDRixHQUVHO0FBQ0Q7QUFFQSxNQUFJLGFBQWEsTUFBTSxRQUFRLGtCQUFrQjtBQUNqRCxRQUFNLE1BQU0sYUFBYTtBQUFBLElBQ3ZCLFFBQVEsRUFBRSxHQUFHLE1BQU0sTUFBTSxRQUFRLFNBQVMsTUFBTSxNQUFNLE1BQU0sS0FBSztBQUFBLElBQ2pFLFdBQVc7QUFBQSxJQUNYLFNBQVMsRUFBRSxXQUFXLE1BQU0sVUFBVTtBQUFBLEVBQ3hDLENBQUM7QUFFRCxNQUFJLEtBQUssOEJBQThCO0FBQUEsSUFDckMsV0FBVyxNQUFNO0FBQUEsSUFDakIsaUJBQWlCLE1BQU07QUFBQSxJQUN2QixRQUFRO0FBQUEsRUFDVixDQUFDO0FBRUQsU0FBTyxNQUFNO0FBQ1gsVUFBTSxNQUFNLFVBQVU7QUFFdEIsVUFBTSxTQUFTLE1BQU0scUJBQXFCLEtBQUs7QUFFL0MsUUFBSSxrQkFBa0IsT0FBTztBQUMzQixVQUFJLE1BQU0seUJBQXlCO0FBQUEsUUFDakMsV0FBVyxNQUFNO0FBQUEsUUFDakIsT0FBTyxPQUFPO0FBQUEsTUFDaEIsQ0FBQztBQUNEO0FBQUEsSUFDRjtBQUVBLFFBQUksT0FBTyxXQUFXLFFBQVE7QUFDNUIsVUFBSSxLQUFLLDhCQUE4QjtBQUFBLFFBQ3JDLFdBQVcsTUFBTTtBQUFBLFFBQ2pCLFFBQVEsT0FBTztBQUFBLE1BQ2pCLENBQUM7QUFDRDtBQUFBLElBQ0Y7QUFFQSxpQkFBYSxPQUFPO0FBQUEsRUFDdEI7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createLogger
|
|
3
|
+
} from "./chunk-MSWINCCM.mjs";
|
|
4
|
+
|
|
5
|
+
// src/sandbox/bindings/vercel-lifecycle/steps.ts
|
|
6
|
+
async function loadSandboxSDK() {
|
|
7
|
+
return (await import("@vercel/sandbox")).Sandbox;
|
|
8
|
+
}
|
|
9
|
+
var DEFAULT_POLL_INTERVAL_MS = 2 * 60 * 1e3;
|
|
10
|
+
var DEFAULT_IDLE_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
11
|
+
var SNAPSHOT_BEFORE_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
12
|
+
var getTestCredentials = () => process.env.NODE_ENV === "test" ? {
|
|
13
|
+
token: process.env.TEST_VERCEL_TOKEN,
|
|
14
|
+
teamId: process.env.TEST_VERCEL_TEAM_ID,
|
|
15
|
+
projectId: process.env.TEST_VERCEL_PROJECT_ID
|
|
16
|
+
} : {};
|
|
17
|
+
async function checkAndSnapshotStep(input) {
|
|
18
|
+
"use step";
|
|
19
|
+
const storage = input.agent.storage;
|
|
20
|
+
const log = createLogger({
|
|
21
|
+
config: { ...input.agent.options.logging, name: input.agent.name },
|
|
22
|
+
subsystem: "sandbox:lifecycle",
|
|
23
|
+
context: { sandboxId: input.sandboxId }
|
|
24
|
+
});
|
|
25
|
+
log.info("lifecycle check started", {
|
|
26
|
+
vercelSandboxId: input.vercelSandboxId
|
|
27
|
+
});
|
|
28
|
+
const record = await storage.sandbox.get(input.sandboxId);
|
|
29
|
+
if (!record) {
|
|
30
|
+
log.warn("sandbox record not found, exiting lifecycle");
|
|
31
|
+
return { action: "exit", reason: "not_found" };
|
|
32
|
+
}
|
|
33
|
+
const metadata = record.setup?.metadata;
|
|
34
|
+
const currentSandboxId = metadata?.sandboxId ?? null;
|
|
35
|
+
if (currentSandboxId !== input.vercelSandboxId) {
|
|
36
|
+
log.info("sandbox ID changed, exiting lifecycle", {
|
|
37
|
+
expected: input.vercelSandboxId,
|
|
38
|
+
actual: currentSandboxId
|
|
39
|
+
});
|
|
40
|
+
return { action: "exit", reason: "sandboxId_changed" };
|
|
41
|
+
}
|
|
42
|
+
if (!currentSandboxId) {
|
|
43
|
+
log.warn("no current sandbox ID in metadata, exiting lifecycle");
|
|
44
|
+
return { action: "exit", reason: "not_found" };
|
|
45
|
+
}
|
|
46
|
+
const pollIntervalMs = input.config?.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
47
|
+
const idleTimeoutMs = input.config?.stopAfterInactiveMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
48
|
+
const snapshotBeforeTimeoutMs = input.config?.snapshotBeforeTimeoutMs ?? SNAPSHOT_BEFORE_TIMEOUT_MS;
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
const lastActivity = record.lastActiveAt ?? record.createdAt ?? now;
|
|
51
|
+
const idleDuration = now - lastActivity;
|
|
52
|
+
const shouldSnapshotDueToIdle = idleDuration > idleTimeoutMs;
|
|
53
|
+
let shouldSnapshotDueToTimeout = false;
|
|
54
|
+
try {
|
|
55
|
+
const SandboxSDK = await loadSandboxSDK();
|
|
56
|
+
const sandbox = await SandboxSDK.get({
|
|
57
|
+
sandboxId: currentSandboxId,
|
|
58
|
+
...getTestCredentials()
|
|
59
|
+
});
|
|
60
|
+
if (sandbox.timeout < snapshotBeforeTimeoutMs) {
|
|
61
|
+
shouldSnapshotDueToTimeout = true;
|
|
62
|
+
}
|
|
63
|
+
} catch {
|
|
64
|
+
log.warn("failed to get sandbox from SDK, exiting lifecycle", {
|
|
65
|
+
vercelSandboxId: currentSandboxId
|
|
66
|
+
});
|
|
67
|
+
return { action: "exit", reason: "not_found" };
|
|
68
|
+
}
|
|
69
|
+
if (shouldSnapshotDueToIdle || shouldSnapshotDueToTimeout) {
|
|
70
|
+
const reason = shouldSnapshotDueToIdle ? "idle" : "timeout";
|
|
71
|
+
log.info("snapshotting sandbox before exit", {
|
|
72
|
+
reason,
|
|
73
|
+
idleDurationMs: idleDuration,
|
|
74
|
+
vercelSandboxId: currentSandboxId
|
|
75
|
+
});
|
|
76
|
+
try {
|
|
77
|
+
const SandboxSDK = await loadSandboxSDK();
|
|
78
|
+
const sandbox = await SandboxSDK.get({
|
|
79
|
+
sandboxId: currentSandboxId,
|
|
80
|
+
...getTestCredentials()
|
|
81
|
+
});
|
|
82
|
+
const snapshot = await sandbox.snapshot();
|
|
83
|
+
log.info("snapshot created", { snapshotId: snapshot.snapshotId });
|
|
84
|
+
await storage.sandbox.update(input.sandboxId, {
|
|
85
|
+
setup: {
|
|
86
|
+
...record.setup,
|
|
87
|
+
metadata: { sandboxId: null, snapshotId: snapshot.snapshotId }
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
log.info("sandbox record updated with snapshot");
|
|
91
|
+
} catch (e) {
|
|
92
|
+
log.error("failed to snapshot sandbox", { cause: e });
|
|
93
|
+
return e instanceof Error ? e : new Error(String(e));
|
|
94
|
+
}
|
|
95
|
+
return { action: "exit", reason };
|
|
96
|
+
}
|
|
97
|
+
log.info("sandbox still active, continuing lifecycle", {
|
|
98
|
+
idleDurationMs: idleDuration,
|
|
99
|
+
nextPollMs: pollIntervalMs
|
|
100
|
+
});
|
|
101
|
+
return { action: "continue", nextPollMs: pollIntervalMs };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export {
|
|
105
|
+
checkAndSnapshotStep
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLWxpZmVjeWNsZS9zdGVwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBTYW5kYm94IGFzIFZlcmNlbFNhbmRib3hTREsgfSBmcm9tIFwiQHZlcmNlbC9zYW5kYm94XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hBZ2VudFJlZiB9IGZyb20gXCIuLi8uLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB9IGZyb20gXCIuLi92ZXJjZWxcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKTogUHJvbWlzZTx0eXBlb2YgVmVyY2VsU2FuZGJveFNESz4ge1xuICByZXR1cm4gKGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKSkuU2FuZGJveDtcbn1cblxuY29uc3QgREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TID0gMiAqIDYwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfSURMRV9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZVN0ZXBSZXN1bHQgPVxuICB8IHsgYWN0aW9uOiBcImNvbnRpbnVlXCI7IG5leHRQb2xsTXM6IG51bWJlciB9XG4gIHwge1xuICAgICAgYWN0aW9uOiBcImV4aXRcIjtcbiAgICAgIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIHwgXCJpZGxlXCIgfCBcInRpbWVvdXRcIiB8IFwibm90X2ZvdW5kXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29uZmlnID0ge1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgc3RvcEFmdGVySW5hY3RpdmVNcz86IG51bWJlcjtcbiAgc25hcHNob3RCZWZvcmVUaW1lb3V0TXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVJbnB1dCA9IHtcbiAgYWdlbnQ6IFNhbmRib3hBZ2VudFJlZjtcbiAgc2FuZGJveElkOiBzdHJpbmc7XG4gIHZlcmNlbFNhbmRib3hJZDogc3RyaW5nO1xuICBjb25maWc/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tBbmRTbmFwc2hvdFN0ZXAoXG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dFxuKTogUHJvbWlzZTxFcnJvciB8IExpZmVjeWNsZVN0ZXBSZXN1bHQ+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSBpbnB1dC5hZ2VudC5zdG9yYWdlO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIGNoZWNrIHN0YXJ0ZWRcIiwge1xuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICB9KTtcblxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBzdG9yYWdlLnNhbmRib3guZ2V0KGlucHV0LnNhbmRib3hJZCk7XG4gIGlmICghcmVjb3JkKSB7XG4gICAgbG9nLndhcm4oXCJzYW5kYm94IHJlY29yZCBub3QgZm91bmQsIGV4aXRpbmcgbGlmZWN5Y2xlXCIpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGEgPSByZWNvcmQuc2V0dXA/Lm1ldGFkYXRhIGFzIFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB8IG51bGw7XG4gIGNvbnN0IGN1cnJlbnRTYW5kYm94SWQgPSBtZXRhZGF0YT8uc2FuZGJveElkID8/IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRTYW5kYm94SWQgIT09IGlucHV0LnZlcmNlbFNhbmRib3hJZCkge1xuICAgIGxvZy5pbmZvKFwic2FuZGJveCBJRCBjaGFuZ2VkLCBleGl0aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgICBleHBlY3RlZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgICAgYWN0dWFsOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIH07XG4gIH1cblxuICBpZiAoIWN1cnJlbnRTYW5kYm94SWQpIHtcbiAgICBsb2cud2FybihcIm5vIGN1cnJlbnQgc2FuZGJveCBJRCBpbiBtZXRhZGF0YSwgZXhpdGluZyBsaWZlY3ljbGVcIik7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5wb2xsSW50ZXJ2YWxNcyA/PyBERUZBVUxUX1BPTExfSU5URVJWQUxfTVM7XG4gIGNvbnN0IGlkbGVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc3RvcEFmdGVySW5hY3RpdmVNcyA/PyBERUZBVUxUX0lETEVfVElNRU9VVF9NUztcbiAgY29uc3Qgc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPz8gU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVM7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbGFzdEFjdGl2aXR5ID0gcmVjb3JkLmxhc3RBY3RpdmVBdCA/PyByZWNvcmQuY3JlYXRlZEF0ID8/IG5vdztcbiAgY29uc3QgaWRsZUR1cmF0aW9uID0gbm93IC0gbGFzdEFjdGl2aXR5O1xuICBjb25zdCBzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSA9IGlkbGVEdXJhdGlvbiA+IGlkbGVUaW1lb3V0TXM7XG5cbiAgbGV0IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0ID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFNhbmRib3hTREsuZ2V0KHtcbiAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgIH0pO1xuICAgIGlmIChzYW5kYm94LnRpbWVvdXQgPCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcykge1xuICAgICAgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gZ2V0IHNhbmRib3ggZnJvbSBTREssIGV4aXRpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICAgIHZlcmNlbFNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGlmIChzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSB8fCBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID8gXCJpZGxlXCIgOiBcInRpbWVvdXRcIjtcbiAgICBsb2cuaW5mbyhcInNuYXBzaG90dGluZyBzYW5kYm94IGJlZm9yZSBleGl0XCIsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIGlkbGVEdXJhdGlvbk1zOiBpZGxlRHVyYXRpb24sXG4gICAgICB2ZXJjZWxTYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHNhbmRib3guc25hcHNob3QoKTtcbiAgICAgIGxvZy5pbmZvKFwic25hcHNob3QgY3JlYXRlZFwiLCB7IHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQgfSk7XG5cbiAgICAgIGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC51cGRhdGUoaW5wdXQuc2FuZGJveElkLCB7XG4gICAgICAgIHNldHVwOiB7XG4gICAgICAgICAgLi4ucmVjb3JkLnNldHVwLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogbnVsbCwgc25hcHNob3RJZDogc25hcHNob3Quc25hcHNob3RJZCB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhcInNhbmRib3ggcmVjb3JkIHVwZGF0ZWQgd2l0aCBzbmFwc2hvdFwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoXCJmYWlsZWQgdG8gc25hcHNob3Qgc2FuZGJveFwiLCB7IGNhdXNlOiBlIH0pO1xuICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IGUgOiBuZXcgRXJyb3IoU3RyaW5nKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uIH07XG4gIH1cblxuICBsb2cuaW5mbyhcInNhbmRib3ggc3RpbGwgYWN0aXZlLCBjb250aW51aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgaWRsZUR1cmF0aW9uTXM6IGlkbGVEdXJhdGlvbixcbiAgICBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyxcbiAgfSk7XG4gIHJldHVybiB7IGFjdGlvbjogXCJjb250aW51ZVwiLCBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFLQSxlQUFlLGlCQUFtRDtBQUNoRSxVQUFRLE1BQU0sT0FBTyxpQkFBaUIsR0FBRztBQUMzQztBQUVBLElBQU0sMkJBQTJCLElBQUksS0FBSztBQUMxQyxJQUFNLDBCQUEwQixJQUFJLEtBQUs7QUFDekMsSUFBTSw2QkFBNkIsS0FBSyxLQUFLO0FBRTdDLElBQU0scUJBQXFCLE1BQ3pCLFFBQVEsSUFBSSxhQUFhLFNBQ3JCO0FBQUEsRUFDRSxPQUFPLFFBQVEsSUFBSTtBQUFBLEVBQ25CLFFBQVEsUUFBUSxJQUFJO0FBQUEsRUFDcEIsV0FBVyxRQUFRLElBQUk7QUFDekIsSUFDQSxDQUFDO0FBc0JQLGVBQXNCLHFCQUNwQixPQUNzQztBQUN0QztBQUVBLFFBQU0sVUFBVSxNQUFNLE1BQU07QUFDNUIsUUFBTSxNQUFNLGFBQWE7QUFBQSxJQUN2QixRQUFRLEVBQUUsR0FBRyxNQUFNLE1BQU0sUUFBUSxTQUFTLE1BQU0sTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUNqRSxXQUFXO0FBQUEsSUFDWCxTQUFTLEVBQUUsV0FBVyxN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
|