experimental-agent 0.4.0 → 0.5.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/dist/{adapter-zgOel4wW.d.mts → adapter-Cl735Kp4.d.mts} +3 -60
- package/dist/{adapter-zgOel4wW.d.ts → adapter-Cl735Kp4.d.ts} +3 -60
- package/dist/{chunk-ZUFJJYC4.mjs → chunk-2Y7EZPIP.mjs} +3 -2
- package/dist/{chunk-RT72C52I.mjs → chunk-6MS4CGEZ.mjs} +3 -2
- package/dist/{chunk-MSTM6W3Y.mjs → chunk-AB2JYY6A.mjs} +3 -3
- package/dist/{chunk-IV75IMEW.mjs → chunk-I5DCB7RU.mjs} +27 -9
- package/dist/chunk-NOW6XL5E.mjs +310 -0
- package/dist/{docker-QPCLWLYR.mjs → docker-OBUQX5ZI.mjs} +1 -1
- package/dist/entry-Bs17QEiq.d.mts +45 -0
- package/dist/entry-QNyd4S1s.d.ts +45 -0
- package/dist/index.d.mts +128 -37
- package/dist/index.d.ts +128 -37
- package/dist/index.js +251 -130
- package/dist/index.mjs +216 -123
- package/dist/lifecycle-workflow-steps.d.mts +2 -2
- package/dist/lifecycle-workflow-steps.d.ts +2 -2
- package/dist/lifecycle-workflow.d.mts +2 -2
- package/dist/lifecycle-workflow.d.ts +2 -2
- package/dist/{local-KJ3BSIFJ.mjs → local-4C3V4EFS.mjs} +1 -1
- package/dist/next/loader.js +3 -3
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +3 -3
- package/dist/next.mjs +1 -1
- package/dist/sandbox.d.mts +3 -3
- package/dist/sandbox.d.ts +3 -3
- package/dist/sandbox.js +15 -5
- package/dist/sandbox.mjs +3 -3
- package/dist/{steps-DShnXBLf.d.ts → steps-XA4wG8W3.d.ts} +4 -1
- package/dist/{steps-BIsP57pm.d.mts → steps-eTytqxQb.d.mts} +4 -1
- package/dist/storage.d.mts +2 -2
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +27 -9
- package/dist/storage.mjs +1 -1
- package/dist/{vercel-QZ6INPMV.mjs → vercel-6ORAC625.mjs} +1 -1
- package/package.json +2 -2
- package/dist/chunk-BFFNCESS.mjs +0 -302
- package/dist/entry-6HYg5qqg.d.mts +0 -36
- package/dist/entry-BrWOmEK2.d.ts +0 -36
|
@@ -279,8 +279,20 @@ async function readAllFromDir(dir) {
|
|
|
279
279
|
}
|
|
280
280
|
return result;
|
|
281
281
|
}
|
|
282
|
+
async function ensureGitignore(dir) {
|
|
283
|
+
const { mkdir, writeFile, readFile } = await fs();
|
|
284
|
+
const { join } = await path();
|
|
285
|
+
const gitignorePath = join(dir, ".gitignore");
|
|
286
|
+
try {
|
|
287
|
+
await readFile(gitignorePath, "utf-8");
|
|
288
|
+
} catch {
|
|
289
|
+
await mkdir(dir, { recursive: true });
|
|
290
|
+
await writeFile(gitignorePath, "*\n");
|
|
291
|
+
}
|
|
292
|
+
}
|
|
282
293
|
function localStorage(opts) {
|
|
283
294
|
const dir = opts?.dir ?? ".agent";
|
|
295
|
+
let gitignorePromise = null;
|
|
284
296
|
const sessionStore = createStore(`${dir}/session`);
|
|
285
297
|
const messageStore = createStore(`${dir}/message`);
|
|
286
298
|
const partStore = createStore(`${dir}/part`);
|
|
@@ -288,28 +300,34 @@ function localStorage(opts) {
|
|
|
288
300
|
const setupStore = createStore(`${dir}/setup`);
|
|
289
301
|
const messageDir = `${dir}/message`;
|
|
290
302
|
const partDir = `${dir}/part`;
|
|
303
|
+
function onWrite(fn) {
|
|
304
|
+
if (!gitignorePromise) {
|
|
305
|
+
gitignorePromise = ensureGitignore(dir);
|
|
306
|
+
}
|
|
307
|
+
return gitignorePromise.then(fn);
|
|
308
|
+
}
|
|
291
309
|
return {
|
|
292
310
|
"session.get": ({ id }) => sessionStore.get(id),
|
|
293
|
-
"session.set": ({ id, value }) => sessionStore.set(id, value),
|
|
294
|
-
"session.update": ({ id, updates }) => sessionStore.update(id, updates),
|
|
311
|
+
"session.set": ({ id, value }) => onWrite(() => sessionStore.set(id, value)),
|
|
312
|
+
"session.update": ({ id, updates }) => onWrite(() => sessionStore.update(id, updates)),
|
|
295
313
|
"message.get": ({ id }) => messageStore.get(id),
|
|
296
|
-
"message.set": ({ id, value }) => messageStore.set(id, value),
|
|
297
|
-
"message.update": ({ id, updates }) => messageStore.update(id, updates),
|
|
314
|
+
"message.set": ({ id, value }) => onWrite(() => messageStore.set(id, value)),
|
|
315
|
+
"message.update": ({ id, updates }) => onWrite(() => messageStore.update(id, updates)),
|
|
298
316
|
"message.listBySession": async ({ sessionId }) => {
|
|
299
317
|
const all = await readAllFromDir(messageDir);
|
|
300
318
|
return all.filter((m) => m.sessionId === sessionId);
|
|
301
319
|
},
|
|
302
320
|
"part.get": ({ id }) => partStore.get(id),
|
|
303
|
-
"part.set": ({ id, value }) => partStore.set(id, value),
|
|
321
|
+
"part.set": ({ id, value }) => onWrite(() => partStore.set(id, value)),
|
|
304
322
|
"part.listBySession": async ({ sessionId }) => {
|
|
305
323
|
const all = await readAllFromDir(partDir);
|
|
306
324
|
return all.filter((p) => p.sessionId === sessionId);
|
|
307
325
|
},
|
|
308
326
|
"sandbox.get": ({ id }) => sandboxStore.get(id),
|
|
309
|
-
"sandbox.set": ({ id, value }) => sandboxStore.set(id, value),
|
|
310
|
-
"sandbox.update": ({ id, updates }) => sandboxStore.update(id, updates),
|
|
327
|
+
"sandbox.set": ({ id, value }) => onWrite(() => sandboxStore.set(id, value)),
|
|
328
|
+
"sandbox.update": ({ id, updates }) => onWrite(() => sandboxStore.update(id, updates)),
|
|
311
329
|
"setup.get": ({ id }) => setupStore.get(id),
|
|
312
|
-
"setup.set": ({ id, value }) => setupStore.set(id, value)
|
|
330
|
+
"setup.set": ({ id, value }) => onWrite(() => setupStore.set(id, value))
|
|
313
331
|
};
|
|
314
332
|
}
|
|
315
333
|
|
|
@@ -325,4 +343,4 @@ export {
|
|
|
325
343
|
localStorage,
|
|
326
344
|
shouldFallbackToKV2
|
|
327
345
|
};
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9rdi50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc3RvcmFnZS9zaG91bGQtZmFsbGJhY2sta3YyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXR1cCB9KTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlQ2FsbCAoZGVyaXZlZCBmcm9tIFN0b3JhZ2VIYW5kbGVycykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDYWxsID0ge1xuICBbSyBpbiBrZXlvZiBTdG9yYWdlSGFuZGxlcnNdOiB7IG1ldGhvZDogSyB9ICYgUGFyYW1ldGVyczxcbiAgICBTdG9yYWdlSGFuZGxlcnNbS11cbiAgPlswXTtcbn1ba2V5b2YgU3RvcmFnZUhhbmRsZXJzXTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VTdGVwIChzZXJpYWxpemFibGUgYWNyb3NzIHdvcmtmbG93IGJvdW5kYXJ5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTdGVwIHtcbiAgZXZlbnQ6IFN0b3JhZ2VDYWxsO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50OiBTdG9yYWdlQ2FsbCkge1xuICAgIHRoaXMuZXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogU3RvcmFnZVN0ZXApIHtcbiAgICByZXR1cm4geyBldmVudDogaW5zdGFuY2UuZXZlbnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgZXZlbnQ6IFN0b3JhZ2VDYWxsIH0pIHtcbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VTdGVwKGRhdGEuZXZlbnQpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzYWZlIGRpc3BhdGNoIFx1MjAxNCBldmVudC5tZXRob2Qgc2VsZWN0cyB0aGUgbWF0Y2hpbmcgaGFuZGxlclxuICBvbihoYW5kbGVyczogU3RvcmFnZUhhbmRsZXJzKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNlZSBhYm92ZVxuICAgIHJldHVybiAoaGFuZGxlcnNbdGhpcy5ldmVudC5tZXRob2RdIGFzIGFueSkodGhpcy5ldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gSW50ZW5kZWQgdG8gYmVcbiAqIG1hcmtlZCB3aXRoIGBcInVzZSBzdGVwXCJgIHNvIHRoYXQgaXRzIGJvZHkgKGFuZCBOb2RlLmpzLWRlcGVuZGVudFxuICogaW1wb3J0cyBsaWtlIGRhdGFiYXNlIGNsaWVudHMpIGlzIGV4dHJhY3RlZCBieSB0aGUgd29ya2Zsb3cgYnVuZGxlclxuICogYW5kIHJ1bnMgc2VydmVyLXNpZGUuXG4gKlxuICogVGhlIHN0ZXAgcmVjZWl2ZXMgYSBgU3RvcmFnZVN0ZXBgIGluc3RhbmNlIChzZXJpYWxpemFibGUgdmlhXG4gKiBgQHdvcmtmbG93L3NlcmRlYCkgYW5kIHNob3VsZCBjYWxsIGBzdGVwLmhhbmRsZSh7IC4uLiB9KWAgd2l0aCBhXG4gKiBgU3RvcmFnZUhhbmRsZXJzYCBtYXAuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc3RlcCBmdW5jdGlvbiBpcyBhIGRpc3BhdGNoZXI7IHR5cGUgc2FmZXR5IGlzIGF0IHRoZSBoYW5kbGVycyBsZXZlbFxuZXhwb3J0IHR5cGUgU3RvcmFnZVN0ZXBGdW5jdGlvbiA9IChzdG9yZTogU3RvcmFnZVN0ZXApID0+IFByb21pc2U8YW55PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2UgKGludGVybmFsLCBuZXN0ZWQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2Uge1xuICBzZXNzaW9uOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvbik6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+KTogUHJvbWlzZTxTZXNzaW9uPjtcbiAgfTtcbiAgbWVzc2FnZToge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPik6IFByb21pc2U8TWVzc2FnZT47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVtdPjtcbiAgfTtcbiAgcGFydDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFBhcnQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRbXT47XG4gIH07XG4gIHNhbmRib3g6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTYW5kYm94KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD4pOiBQcm9taXNlPFNhbmRib3g+O1xuICB9O1xuICBzZXR1cDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXR1cCk6IFByb21pc2U8dm9pZD47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VJbnB1dCA9IFN0b3JhZ2VIYW5kbGVycyB8IFN0b3JhZ2VTdGVwRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzU3RlcEZ1bmN0aW9uKGg6IFN0b3JhZ2VJbnB1dCk6IGggaXMgU3RvcmFnZVN0ZXBGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgaCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBmcm9tU3RlcEZ1bmN0aW9uKGZuOiBTdG9yYWdlU3RlcEZ1bmN0aW9uKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2Uuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyb21IYW5kbGVycyhoOiBTdG9yYWdlSGFuZGxlcnMpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNlc3Npb24uZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXNzaW9uLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2Vzc2lvbi51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wibWVzc2FnZS5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcIm1lc3NhZ2Uuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJtZXNzYWdlLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wicGFydC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInBhcnQuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcInBhcnQubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2FuZGJveC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNhbmRib3guc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzYW5kYm94LnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2V0dXAuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXR1cC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RvcmFnZShoOiBTdG9yYWdlSW5wdXQpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIGlzU3RlcEZ1bmN0aW9uKGgpID8gZnJvbVN0ZXBGdW5jdGlvbihoKSA6IGZyb21IYW5kbGVycyhoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JhZ2VIYW5kbGVycyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbnR5cGUgS3ZTdG9yZXMgPSBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGluaXRLdlN0b3Jlcz4+O1xuXG5hc3luYyBmdW5jdGlvbiBpbml0S3ZTdG9yZXMocHJlZml4OiBzdHJpbmcpIHtcbiAgY29uc3QgeyBjcmVhdGVLViB9ID0gYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9rdjJcIik7XG4gIGNvbnN0IGt2ID0gY3JlYXRlS1YoeyBwcmVmaXggfSkuZ2V0U3RvcmUoXCJhZ2VudC9cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uczoga3YuZ2V0U3RvcmU8U2Vzc2lvbj4oXCJzZXNzaW9uL1wiKSxcbiAgICBtZXNzYWdlczoga3YuZ2V0U3RvcmU8TWVzc2FnZT4oXCJtZXNzYWdlL1wiKS53aXRoSW5kZXhlcyh7XG4gICAgICBieVNlc3Npb25JZDogeyBrZXk6IChtOiBNZXNzYWdlKSA9PiBtLnNlc3Npb25JZCB9LFxuICAgIH0pLFxuICAgIHBhcnRzOiBrdi5nZXRTdG9yZTxQYXJ0PihcInBhcnQvXCIpLndpdGhJbmRleGVzKHtcbiAgICAgIGJ5U2Vzc2lvbklkOiB7IGtleTogKHA6IFBhcnQpID0+IHAuc2Vzc2lvbklkIH0sXG4gICAgfSksXG4gICAgc2FuZGJveGVzOiBrdi5nZXRTdG9yZTxTYW5kYm94PihcInNhbmRib3gvXCIpLFxuICAgIHNldHVwczoga3YuZ2V0U3RvcmU8U2V0dXA+KFwic2V0dXAvXCIpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3ZTdG9yYWdlRmFsbGJhY2sob3B0czogeyBwcmVmaXg6IHN0cmluZyB9KTogU3RvcmFnZUhhbmRsZXJzIHtcbiAgbGV0IHN0b3Jlc1Byb21pc2U6IFByb21pc2U8S3ZTdG9yZXM+IHwgdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3JlcygpIHtcbiAgICBpZiAoIXN0b3Jlc1Byb21pc2UpIHtcbiAgICAgIHN0b3Jlc1Byb21pc2UgPSBpbml0S3ZTdG9yZXMob3B0cy5wcmVmaXgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmVzUHJvbWlzZTtcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGBbYWdlbnQuJHtvcHRzLnByZWZpeH1dW2t2Ml1gO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2Vzc2lvbnMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNlc3Npb25zLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24udXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzZXNzaW9ucy5nZXRWYWx1ZShpZCk7XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0YWd9W3Nlc3Npb24udXBkYXRlXSBubyBzZXNzaW9uIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIGF3YWl0IHNlc3Npb25zLnNldChpZCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgbWVzc2FnZXMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2Uuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IG1lc3NhZ2VzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBtZXNzYWdlcy5nZXRWYWx1ZShpZCk7XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0YWd9W21lc3NhZ2UudXBkYXRlXSBubyBtZXNzYWdlIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIGF3YWl0IG1lc3NhZ2VzLnNldChpZCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgcmVzdWx0OiBNZXNzYWdlW10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgWywgZW50cnldIG9mIG1lc3NhZ2VzLmVudHJpZXMoe1xuICAgICAgICBieVNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXdhaXQgZW50cnkudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgcGFydHMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInBhcnQuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHBhcnRzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBjb25zdCByZXN1bHQ6IFBhcnRbXSA9IFtdO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBbLCBlbnRyeV0gb2YgcGFydHMuZW50cmllcyh7XG4gICAgICAgIGJ5U2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICB9KSkge1xuICAgICAgICByZXN1bHQucHVzaChhd2FpdCBlbnRyeS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2FuZGJveGVzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2FuZGJveGVzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3gudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgc2FuZGJveGVzLmdldFZhbHVlKGlkKTtcbiAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke3RhZ31bc2FuZGJveC51cGRhdGVdIG5vIHNhbmRib3ggZm91bmQgd2l0aCBpZCBcIiR7aWR9XCJgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgYXdhaXQgc2FuZGJveGVzLnNldChpZCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXR1cHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzZXR1cHMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNldHVwLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXR1cHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2V0dXBzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5sZXQgX2ZzOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKSB8IHVuZGVmaW5lZDtcbmxldCBfcGF0aDogdHlwZW9mIGltcG9ydChcIm5vZGU6cGF0aFwiKSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZnMoKSB7XG4gIGlmICghX2ZzKSB7XG4gICAgX2ZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgfVxuICByZXR1cm4gX2ZzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGF0aCgpIHtcbiAgaWYgKCFfcGF0aCkge1xuICAgIF9wYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICB9XG4gIHJldHVybiBfcGF0aDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8VD4oZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gICAgKGF3YWl0IHBhdGgoKSkuam9pbihkaXIsIGAke2tleX0uanNvbmApO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgfSxcbiAgICBhc3luYyB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHAsIFwidXRmLThcIik7XG4gICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGZvdW5kOiAke2tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiAoeyBpZCB9KSA9PiBzZXNzaW9uU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNlc3Npb24uc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBzZXNzaW9uU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PiBzZXNzaW9uU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gbWVzc2FnZVN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPE1lc3NhZ2U+KG1lc3NhZ2VEaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6ICh7IGlkIH0pID0+IHBhcnRTdG9yZS5nZXQoaWQpLFxuICAgIFwicGFydC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHBhcnRTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigocCkgPT4gcC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogKHsgaWQgfSkgPT4gc2FuZGJveFN0b3JlLmdldChpZCksXG4gICAgXCJzYW5kYm94LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gc2FuZGJveFN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG5cbiAgICBcInNldHVwLmdldFwiOiAoeyBpZCB9KSA9PiBzZXR1cFN0b3JlLmdldChpZCksXG4gICAgXCJzZXR1cC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gIH07XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEZhbGxiYWNrVG9LVjIoKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXByb2Nlc3MuZW52LkJMT0JfUkVBRF9XUklURV9UT0tFTjtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLHNCQUFzQiwwQkFBMEI7QUE4Q2xELElBQU0sY0FBTixNQUFNLGFBQVk7QUFBQSxFQUN2QjtBQUFBLEVBRUEsWUFBWSxPQUFvQjtBQUM5QixTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxRQUFRLGtCQUFrQixFQUFFLFVBQXVCO0FBQ2pELFdBQU8sRUFBRSxPQUFPLFNBQVMsTUFBTTtBQUFBLEVBQ2pDO0FBQUEsRUFFQSxRQUFRLG9CQUFvQixFQUFFLE1BQThCO0FBQzFELFdBQU8sSUFBSSxhQUFZLEtBQUssS0FBSztBQUFBLEVBQ25DO0FBQUE7QUFBQSxFQUdBLEdBQUcsVUFBeUM7QUFFMUMsV0FBUSxTQUFTLEtBQUssTUFBTSxNQUFNLEVBQVUsS0FBSyxLQUFLO0FBQUEsRUFDeEQ7QUFDRjtBQStDQSxTQUFTLGVBQWUsR0FBMkM7QUFDakUsU0FBTyxPQUFPLE1BQU07QUFDdEI7QUFFQSxTQUFTLGlCQUFpQixJQUFrQztBQUMxRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsTUFDUCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLFFBQVEsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzlELEtBQUssQ0FBQyxJQUFJLFVBQ1IsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsSUFBSSxNQUFNLENBQUMsQ0FBQztBQUFBLE1BQzFELFFBQVEsQ0FBQyxJQUFJLFlBQ1gsR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGtCQUFrQixJQUFJLFFBQVEsQ0FBQyxDQUFDO0FBQUEsSUFDakU7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsUUFBUSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FB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QU87QUFBQSxJQUNMLGVBQWUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhLElBQUksRUFBRTtBQUFBLElBQzlDLGVBQWUsQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNLGFBQWEsSUFBSSxJQUFJLEtBQUs7QUFBQSxJQUM1RCxrQkFBa0IsQ0FBQyxFQUFFLElBQUksUUFBUSxNQUFNLGFBQWEsT0FBTyxJQUFJLE9BQU87QUFBQSxJQUV0RSxlQUFlLENBQUMsRUFBRSxHQUFHLE1BQU0sYUFBYSxJQUFJLEVBQUU7QUFBQSxJQUM5QyxlQUFlLENBQUMsRUFBRSxJQUFJLE1BQU0sTUFBTSxhQUFhLElBQUksSUFBSSxLQUFLO0FBQUEsSUFDNUQsa0JBQWtCLENBQUMsRUFBRSxJQUFJLFFBQVEsTUFBTSxhQUFhLE9BQU8sSUFBSSxPQUFPO0FBQUEsSUFDdEUseUJBQXlCLE9BQU8sRUFBRSxVQUFVLE1BQU07QUFDaEQsWUFBTSxNQUFNLE1BQU0sZUFBd0IsVUFBVTtBQUNwRCxhQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLFNBQVM7QUFBQSxJQUNwRDtBQUFBLElBRUEsWUFBWSxDQUFDLEVBQUUsR0FBRyxNQUFNLFVBQVUsSUFBSSxFQUFFO0FBQUEsSUFDeEMsWUFBWSxDQUFDLEVBQUUsSUFBSSxNQUFNLE1BQU0sVUFBVSxJQUFJLElBQUksS0FBSztBQUFBLElBQ3RELHNCQUFzQixPQUFPLEVBQUUsVUFBVSxNQUFNO0FBQzdDLFlBQU0sTUFBTSxNQUFNLGVBQXFCLE9BQU87QUFDOUMsYUFBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsY0FBYyxTQUFTO0FBQUEsSUFDcEQ7QUFBQSxJQUVBLGVBQWUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhLElBQUksRUFBRTtBQUFBLElBQzlDLGVBQWUsQ0FBQyxFQUFFLElBQUksTUFBTSxNQUFNLGFBQWEsSUFBSSxJQUFJLEtBQUs7QUFBQSxJQUM1RCxrQkFBa0IsQ0FBQyxFQUFFLElBQUksUUFBUSxNQUFNLGFBQWEsT0FBTyxJQUFJLE9BQU87QUFBQSxJQUV0RSxhQUFhLENBQUMsRUFBRSxHQUFHLE1BQU0sV0FBVyxJQUFJLEVBQUU7QUFBQSxJQUMxQyxhQUFhLENBQUMsRUFBRSxJQUFJLE1BQU0sTUFBTSxXQUFXLElBQUksSUFBSSxLQUFLO0FBQUEsRUFDMUQ7QUFDRjs7O0FDeEhPLFNBQVMsc0JBQStCO0FBQzdDLFNBQU8sQ0FBQyxDQUFDLFFBQVEsSUFBSTtBQUN2QjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
346
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9rdi50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyIsICIuLi9zcmMvc3RvcmFnZS9zaG91bGQtZmFsbGJhY2sta3YyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXR1cCB9KTogUHJvbWlzZTx2b2lkPjtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlQ2FsbCAoZGVyaXZlZCBmcm9tIFN0b3JhZ2VIYW5kbGVycykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VDYWxsID0ge1xuICBbSyBpbiBrZXlvZiBTdG9yYWdlSGFuZGxlcnNdOiB7IG1ldGhvZDogSyB9ICYgUGFyYW1ldGVyczxcbiAgICBTdG9yYWdlSGFuZGxlcnNbS11cbiAgPlswXTtcbn1ba2V5b2YgU3RvcmFnZUhhbmRsZXJzXTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VTdGVwIChzZXJpYWxpemFibGUgYWNyb3NzIHdvcmtmbG93IGJvdW5kYXJ5KSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTdGVwIHtcbiAgZXZlbnQ6IFN0b3JhZ2VDYWxsO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50OiBTdG9yYWdlQ2FsbCkge1xuICAgIHRoaXMuZXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogU3RvcmFnZVN0ZXApIHtcbiAgICByZXR1cm4geyBldmVudDogaW5zdGFuY2UuZXZlbnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHsgZXZlbnQ6IFN0b3JhZ2VDYWxsIH0pIHtcbiAgICByZXR1cm4gbmV3IFN0b3JhZ2VTdGVwKGRhdGEuZXZlbnQpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzYWZlIGRpc3BhdGNoIFx1MjAxNCBldmVudC5tZXRob2Qgc2VsZWN0cyB0aGUgbWF0Y2hpbmcgaGFuZGxlclxuICBvbihoYW5kbGVyczogU3RvcmFnZUhhbmRsZXJzKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNlZSBhYm92ZVxuICAgIHJldHVybiAoaGFuZGxlcnNbdGhpcy5ldmVudC5tZXRob2RdIGFzIGFueSkodGhpcy5ldmVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgYWxsIHN0b3JhZ2Ugb3BlcmF0aW9ucy4gSW50ZW5kZWQgdG8gYmVcbiAqIG1hcmtlZCB3aXRoIGBcInVzZSBzdGVwXCJgIHNvIHRoYXQgaXRzIGJvZHkgKGFuZCBOb2RlLmpzLWRlcGVuZGVudFxuICogaW1wb3J0cyBsaWtlIGRhdGFiYXNlIGNsaWVudHMpIGlzIGV4dHJhY3RlZCBieSB0aGUgd29ya2Zsb3cgYnVuZGxlclxuICogYW5kIHJ1bnMgc2VydmVyLXNpZGUuXG4gKlxuICogVGhlIHN0ZXAgcmVjZWl2ZXMgYSBgU3RvcmFnZVN0ZXBgIGluc3RhbmNlIChzZXJpYWxpemFibGUgdmlhXG4gKiBgQHdvcmtmbG93L3NlcmRlYCkgYW5kIHNob3VsZCBjYWxsIGBzdGVwLmhhbmRsZSh7IC4uLiB9KWAgd2l0aCBhXG4gKiBgU3RvcmFnZUhhbmRsZXJzYCBtYXAuXG4gKi9cbi8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc3RlcCBmdW5jdGlvbiBpcyBhIGRpc3BhdGNoZXI7IHR5cGUgc2FmZXR5IGlzIGF0IHRoZSBoYW5kbGVycyBsZXZlbFxuZXhwb3J0IHR5cGUgU3RvcmFnZVN0ZXBGdW5jdGlvbiA9IChzdG9yZTogU3RvcmFnZVN0ZXApID0+IFByb21pc2U8YW55PjtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2UgKGludGVybmFsLCBuZXN0ZWQpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2Uge1xuICBzZXNzaW9uOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvbik6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPFNlc3Npb24+KTogUHJvbWlzZTxTZXNzaW9uPjtcbiAgfTtcbiAgbWVzc2FnZToge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZSB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IE1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPik6IFByb21pc2U8TWVzc2FnZT47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVtdPjtcbiAgfTtcbiAgcGFydDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFBhcnQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3RCeVNlc3Npb24oc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRbXT47XG4gIH07XG4gIHNhbmRib3g6IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNhbmRib3ggfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTYW5kYm94KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2FuZGJveD4pOiBQcm9taXNlPFNhbmRib3g+O1xuICB9O1xuICBzZXR1cDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXR1cCk6IFByb21pc2U8dm9pZD47XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VJbnB1dCA9IFN0b3JhZ2VIYW5kbGVycyB8IFN0b3JhZ2VTdGVwRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzU3RlcEZ1bmN0aW9uKGg6IFN0b3JhZ2VJbnB1dCk6IGggaXMgU3RvcmFnZVN0ZXBGdW5jdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgaCA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBmcm9tU3RlcEZ1bmN0aW9uKGZuOiBTdG9yYWdlU3RlcEZ1bmN0aW9uKTogU3RvcmFnZSB7XG4gIHJldHVybiB7XG4gICAgc2Vzc2lvbjoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXNzaW9uLnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBtZXNzYWdlOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2Uuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UudXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwicGFydC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIGxpc3RCeVNlc3Npb246IChzZXNzaW9uSWQpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwgc2Vzc2lvbklkIH0pKSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2FuZGJveC51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNldHVwLnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZyb21IYW5kbGVycyhoOiBTdG9yYWdlSGFuZGxlcnMpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gaFtcInNlc3Npb24uZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXNzaW9uLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PiBoW1wic2Vzc2lvbi51cGRhdGVcIl0oeyBpZCwgdXBkYXRlcyB9KSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wibWVzc2FnZS5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcIm1lc3NhZ2Uuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJtZXNzYWdlLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wicGFydC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInBhcnQuc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT4gaFtcInBhcnQubGlzdEJ5U2Vzc2lvblwiXSh7IHNlc3Npb25JZCB9KSxcbiAgICB9LFxuICAgIHNhbmRib3g6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2FuZGJveC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNhbmRib3guc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzYW5kYm94LnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgc2V0dXA6IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2V0dXAuZ2V0XCJdKHsgaWQgfSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+IGhbXCJzZXR1cC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RvcmFnZShoOiBTdG9yYWdlSW5wdXQpOiBTdG9yYWdlIHtcbiAgcmV0dXJuIGlzU3RlcEZ1bmN0aW9uKGgpID8gZnJvbVN0ZXBGdW5jdGlvbihoKSA6IGZyb21IYW5kbGVycyhoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFN0b3JhZ2VIYW5kbGVycyB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbnR5cGUgS3ZTdG9yZXMgPSBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGluaXRLdlN0b3Jlcz4+O1xuXG5hc3luYyBmdW5jdGlvbiBpbml0S3ZTdG9yZXMocHJlZml4OiBzdHJpbmcpIHtcbiAgY29uc3QgeyBjcmVhdGVLViB9ID0gYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9rdjJcIik7XG4gIGNvbnN0IGt2ID0gY3JlYXRlS1YoeyBwcmVmaXggfSkuZ2V0U3RvcmUoXCJhZ2VudC9cIik7XG5cbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uczoga3YuZ2V0U3RvcmU8U2Vzc2lvbj4oXCJzZXNzaW9uL1wiKSxcbiAgICBtZXNzYWdlczoga3YuZ2V0U3RvcmU8TWVzc2FnZT4oXCJtZXNzYWdlL1wiKS53aXRoSW5kZXhlcyh7XG4gICAgICBieVNlc3Npb25JZDogeyBrZXk6IChtOiBNZXNzYWdlKSA9PiBtLnNlc3Npb25JZCB9LFxuICAgIH0pLFxuICAgIHBhcnRzOiBrdi5nZXRTdG9yZTxQYXJ0PihcInBhcnQvXCIpLndpdGhJbmRleGVzKHtcbiAgICAgIGJ5U2Vzc2lvbklkOiB7IGtleTogKHA6IFBhcnQpID0+IHAuc2Vzc2lvbklkIH0sXG4gICAgfSksXG4gICAgc2FuZGJveGVzOiBrdi5nZXRTdG9yZTxTYW5kYm94PihcInNhbmRib3gvXCIpLFxuICAgIHNldHVwczoga3YuZ2V0U3RvcmU8U2V0dXA+KFwic2V0dXAvXCIpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3ZTdG9yYWdlRmFsbGJhY2sob3B0czogeyBwcmVmaXg6IHN0cmluZyB9KTogU3RvcmFnZUhhbmRsZXJzIHtcbiAgbGV0IHN0b3Jlc1Byb21pc2U6IFByb21pc2U8S3ZTdG9yZXM+IHwgdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3JlcygpIHtcbiAgICBpZiAoIXN0b3Jlc1Byb21pc2UpIHtcbiAgICAgIHN0b3Jlc1Byb21pc2UgPSBpbml0S3ZTdG9yZXMob3B0cy5wcmVmaXgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmVzUHJvbWlzZTtcbiAgfVxuXG4gIGNvbnN0IHRhZyA9IGBbYWdlbnQuJHtvcHRzLnByZWZpeH1dW2t2Ml1gO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2Vzc2lvbnMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24uc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25zIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHNlc3Npb25zLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNlc3Npb24udXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbnMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBzZXNzaW9ucy5nZXRWYWx1ZShpZCk7XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0YWd9W3Nlc3Npb24udXBkYXRlXSBubyBzZXNzaW9uIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIGF3YWl0IHNlc3Npb25zLnNldChpZCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgbWVzc2FnZXMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2Uuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IG1lc3NhZ2VzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IG1lc3NhZ2VzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCBtZXNzYWdlcy5nZXRWYWx1ZShpZCk7XG4gICAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0YWd9W21lc3NhZ2UudXBkYXRlXSBubyBtZXNzYWdlIGZvdW5kIHdpdGggaWQgXCIke2lkfVwiYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdXBkYXRlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIGF3YWl0IG1lc3NhZ2VzLnNldChpZCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgY29uc3QgcmVzdWx0OiBNZXNzYWdlW10gPSBbXTtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgWywgZW50cnldIG9mIG1lc3NhZ2VzLmVudHJpZXMoe1xuICAgICAgICBieVNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goYXdhaXQgZW50cnkudmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgXCJwYXJ0LmdldFwiOiBhc3luYyAoeyBpZCB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgcGFydHMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInBhcnQuc2V0XCI6IGFzeW5jICh7IGlkLCB2YWx1ZSB9KSA9PiB7XG4gICAgICBjb25zdCB7IHBhcnRzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGF3YWl0IHBhcnRzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBwYXJ0cyB9ID0gYXdhaXQgZ2V0U3RvcmVzKCk7XG4gICAgICBjb25zdCByZXN1bHQ6IFBhcnRbXSA9IFtdO1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBbLCBlbnRyeV0gb2YgcGFydHMuZW50cmllcyh7XG4gICAgICAgIGJ5U2Vzc2lvbklkOiBzZXNzaW9uSWQsXG4gICAgICB9KSkge1xuICAgICAgICByZXN1bHQucHVzaChhd2FpdCBlbnRyeS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBcInNhbmRib3guZ2V0XCI6IGFzeW5jICh7IGlkIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIHJldHVybiAoYXdhaXQgc2FuZGJveGVzLmdldFZhbHVlKGlkKSkgPz8gbnVsbDtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzYW5kYm94ZXMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2FuZGJveGVzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG5cbiAgICBcInNhbmRib3gudXBkYXRlXCI6IGFzeW5jICh7IGlkLCB1cGRhdGVzIH0pID0+IHtcbiAgICAgIGNvbnN0IHsgc2FuZGJveGVzIH0gPSBhd2FpdCBnZXRTdG9yZXMoKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgc2FuZGJveGVzLmdldFZhbHVlKGlkKTtcbiAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAke3RhZ31bc2FuZGJveC51cGRhdGVdIG5vIHNhbmRib3ggZm91bmQgd2l0aCBpZCBcIiR7aWR9XCJgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5leGlzdGluZywgLi4udXBkYXRlcyB9O1xuICAgICAgYXdhaXQgc2FuZGJveGVzLnNldChpZCwgdXBkYXRlZCk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuXG4gICAgXCJzZXR1cC5nZXRcIjogYXN5bmMgKHsgaWQgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXR1cHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgcmV0dXJuIChhd2FpdCBzZXR1cHMuZ2V0VmFsdWUoaWQpKSA/PyBudWxsO1xuICAgIH0sXG5cbiAgICBcInNldHVwLnNldFwiOiBhc3luYyAoeyBpZCwgdmFsdWUgfSkgPT4ge1xuICAgICAgY29uc3QgeyBzZXR1cHMgfSA9IGF3YWl0IGdldFN0b3JlcygpO1xuICAgICAgYXdhaXQgc2V0dXBzLnNldChpZCwgdmFsdWUpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5sZXQgX2ZzOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKSB8IHVuZGVmaW5lZDtcbmxldCBfcGF0aDogdHlwZW9mIGltcG9ydChcIm5vZGU6cGF0aFwiKSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZnMoKSB7XG4gIGlmICghX2ZzKSB7XG4gICAgX2ZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgfVxuICByZXR1cm4gX2ZzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGF0aCgpIHtcbiAgaWYgKCFfcGF0aCkge1xuICAgIF9wYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICB9XG4gIHJldHVybiBfcGF0aDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8VD4oZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gICAgKGF3YWl0IHBhdGgoKSkuam9pbihkaXIsIGAke2tleX0uanNvbmApO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgfSxcbiAgICBhc3luYyB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHAsIFwidXRmLThcIik7XG4gICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGZvdW5kOiAke2tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlR2l0aWdub3JlKGRpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHsgbWtkaXIsIHdyaXRlRmlsZSwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihkaXIsIFwiLmdpdGlnbm9yZVwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCByZWFkRmlsZShnaXRpZ25vcmVQYXRoLCBcInV0Zi04XCIpO1xuICB9IGNhdGNoIHtcbiAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHdyaXRlRmlsZShnaXRpZ25vcmVQYXRoLCBcIipcXG5cIik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuICBsZXQgZ2l0aWdub3JlUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIGZ1bmN0aW9uIG9uV3JpdGU8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWdpdGlnbm9yZVByb21pc2UpIHtcbiAgICAgIGdpdGlnbm9yZVByb21pc2UgPSBlbnN1cmVHaXRpZ25vcmUoZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIGdpdGlnbm9yZVByb21pc2UudGhlbihmbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFwic2Vzc2lvbi5nZXRcIjogKHsgaWQgfSkgPT4gc2Vzc2lvblN0b3JlLmdldChpZCksXG4gICAgXCJzZXNzaW9uLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2Vzc2lvblN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcInNlc3Npb24udXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IHNlc3Npb25TdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpKSxcbiAgICBcIm1lc3NhZ2UudXBkYXRlXCI6ICh7IGlkLCB1cGRhdGVzIH0pID0+XG4gICAgICBvbldyaXRlKCgpID0+IG1lc3NhZ2VTdG9yZS51cGRhdGUoaWQsIHVwZGF0ZXMpKSxcbiAgICBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8TWVzc2FnZT4obWVzc2FnZURpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigobSkgPT4gbS5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwicGFydC5nZXRcIjogKHsgaWQgfSkgPT4gcGFydFN0b3JlLmdldChpZCksXG4gICAgXCJwYXJ0LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gb25Xcml0ZSgoKSA9PiBwYXJ0U3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwicGFydC5saXN0QnlTZXNzaW9uXCI6IGFzeW5jICh7IHNlc3Npb25JZCB9KSA9PiB7XG4gICAgICBjb25zdCBhbGwgPSBhd2FpdCByZWFkQWxsRnJvbURpcjxQYXJ0PihwYXJ0RGlyKTtcbiAgICAgIHJldHVybiBhbGwuZmlsdGVyKChwKSA9PiBwLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICB9LFxuXG4gICAgXCJzYW5kYm94LmdldFwiOiAoeyBpZCB9KSA9PiBzYW5kYm94U3RvcmUuZ2V0KGlkKSxcbiAgICBcInNhbmRib3guc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PlxuICAgICAgb25Xcml0ZSgoKSA9PiBzYW5kYm94U3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT5cbiAgICAgIG9uV3JpdGUoKCkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcykpLFxuXG4gICAgXCJzZXR1cC5nZXRcIjogKHsgaWQgfSkgPT4gc2V0dXBTdG9yZS5nZXQoaWQpLFxuICAgIFwic2V0dXAuc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBvbldyaXRlKCgpID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSkpLFxuICB9O1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBzaG91bGRGYWxsYmFja1RvS1YyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISFwcm9jZXNzLmVudi5CTE9CX1JFQURfV1JJVEVfVE9LRU47XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxzQkFB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
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
// src/sandbox/bindings/docker.ts
|
|
2
|
+
import { ulid } from "ulid";
|
|
3
|
+
async function execDocker(args, opts) {
|
|
4
|
+
const { spawn } = await import("child_process");
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const child = spawn("docker", ["sandbox", ...args], {
|
|
7
|
+
signal: opts?.signal
|
|
8
|
+
});
|
|
9
|
+
let stdout = "";
|
|
10
|
+
let stderr = "";
|
|
11
|
+
child.stdout.on("data", (data) => {
|
|
12
|
+
stdout += data.toString();
|
|
13
|
+
});
|
|
14
|
+
child.stderr.on("data", (data) => {
|
|
15
|
+
stderr += data.toString();
|
|
16
|
+
});
|
|
17
|
+
const timeoutId = opts?.timeoutMs ? setTimeout(() => {
|
|
18
|
+
child.kill("SIGTERM");
|
|
19
|
+
reject(new Error(`docker sandbox ${args[0]} timed out`));
|
|
20
|
+
}, opts.timeoutMs) : void 0;
|
|
21
|
+
child.on("error", (err) => {
|
|
22
|
+
if (timeoutId) {
|
|
23
|
+
clearTimeout(timeoutId);
|
|
24
|
+
}
|
|
25
|
+
reject(err);
|
|
26
|
+
});
|
|
27
|
+
child.on("close", (code) => {
|
|
28
|
+
if (timeoutId) {
|
|
29
|
+
clearTimeout(timeoutId);
|
|
30
|
+
}
|
|
31
|
+
resolve({ stdout, stderr, exitCode: code ?? 0 });
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
var ensurePromises = /* @__PURE__ */ new Map();
|
|
36
|
+
var activeSandboxes = /* @__PURE__ */ new Set();
|
|
37
|
+
var cleanupRegistered = false;
|
|
38
|
+
var _execSync = null;
|
|
39
|
+
async function registerCleanup() {
|
|
40
|
+
if (cleanupRegistered) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
cleanupRegistered = true;
|
|
44
|
+
const cp = await import("child_process");
|
|
45
|
+
_execSync = cp.execSync;
|
|
46
|
+
const cleanup = () => {
|
|
47
|
+
if (!_execSync) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
for (const name of Array.from(activeSandboxes)) {
|
|
51
|
+
try {
|
|
52
|
+
_execSync(`docker sandbox stop ${name}`, {
|
|
53
|
+
timeout: 1e4,
|
|
54
|
+
stdio: "pipe"
|
|
55
|
+
});
|
|
56
|
+
} catch {
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
process.on("exit", cleanup);
|
|
61
|
+
process.on("SIGINT", () => {
|
|
62
|
+
cleanup();
|
|
63
|
+
process.exit(130);
|
|
64
|
+
});
|
|
65
|
+
process.on("SIGTERM", () => {
|
|
66
|
+
cleanup();
|
|
67
|
+
process.exit(143);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async function ensureSandbox(sandboxName) {
|
|
71
|
+
const existing = ensurePromises.get(sandboxName);
|
|
72
|
+
if (existing) {
|
|
73
|
+
return existing;
|
|
74
|
+
}
|
|
75
|
+
const promise = (async () => {
|
|
76
|
+
const ls = await execDocker(["ls", "-q"], { timeoutMs: 1e4 });
|
|
77
|
+
const existingNames = ls.exitCode === 0 ? ls.stdout.split("\n").map((s) => s.trim()).filter(Boolean) : [];
|
|
78
|
+
if (existingNames.includes(sandboxName)) {
|
|
79
|
+
activeSandboxes.add(sandboxName);
|
|
80
|
+
registerCleanup();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const path = await import("path");
|
|
84
|
+
const os = await import("os");
|
|
85
|
+
const fs = await import("fs/promises");
|
|
86
|
+
const workspaceDir = path.join(
|
|
87
|
+
os.tmpdir(),
|
|
88
|
+
"agent-docker-sandbox",
|
|
89
|
+
sandboxName
|
|
90
|
+
);
|
|
91
|
+
await fs.mkdir(workspaceDir, { recursive: true });
|
|
92
|
+
const create = await execDocker(
|
|
93
|
+
["create", "--name", sandboxName, "shell", workspaceDir],
|
|
94
|
+
{ timeoutMs: 6e4 }
|
|
95
|
+
);
|
|
96
|
+
if (create.exitCode !== 0) {
|
|
97
|
+
if (create.stderr.includes("already exists")) {
|
|
98
|
+
activeSandboxes.add(sandboxName);
|
|
99
|
+
registerCleanup();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Failed to create docker sandbox "${sandboxName}": ${create.stderr}`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
activeSandboxes.add(sandboxName);
|
|
107
|
+
registerCleanup();
|
|
108
|
+
})();
|
|
109
|
+
ensurePromises.set(sandboxName, promise);
|
|
110
|
+
try {
|
|
111
|
+
await promise;
|
|
112
|
+
} catch (e) {
|
|
113
|
+
ensurePromises.delete(sandboxName);
|
|
114
|
+
throw e;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
var DEFAULT_DOCKER_CWD = "/home/agent/workspace";
|
|
118
|
+
var DockerSandboxInstance = class {
|
|
119
|
+
cwd;
|
|
120
|
+
sandboxName;
|
|
121
|
+
processes = /* @__PURE__ */ new Map();
|
|
122
|
+
constructor(sandboxName, cwd) {
|
|
123
|
+
this.sandboxName = sandboxName;
|
|
124
|
+
this.cwd = cwd ?? DEFAULT_DOCKER_CWD;
|
|
125
|
+
}
|
|
126
|
+
async exec(opts) {
|
|
127
|
+
await ensureSandbox(this.sandboxName);
|
|
128
|
+
const { spawn } = await import("child_process");
|
|
129
|
+
const commandId = `command_${ulid()}`;
|
|
130
|
+
const envFlags = opts.env ? Object.entries(opts.env).flatMap(([k, v]) => ["-e", `${k}=${v}`]) : [];
|
|
131
|
+
const cwdFlags = opts.cwd ? ["-w", opts.cwd] : [];
|
|
132
|
+
let baseCmd;
|
|
133
|
+
if (opts.sudo) {
|
|
134
|
+
baseCmd = ["sudo", opts.command, ...opts.args ?? []];
|
|
135
|
+
} else if (opts.args) {
|
|
136
|
+
baseCmd = [opts.command, ...opts.args];
|
|
137
|
+
} else {
|
|
138
|
+
baseCmd = [opts.command];
|
|
139
|
+
}
|
|
140
|
+
const fullCmd = baseCmd;
|
|
141
|
+
const child = spawn(
|
|
142
|
+
"docker",
|
|
143
|
+
[
|
|
144
|
+
"sandbox",
|
|
145
|
+
"exec",
|
|
146
|
+
...envFlags,
|
|
147
|
+
...cwdFlags,
|
|
148
|
+
this.sandboxName,
|
|
149
|
+
...fullCmd
|
|
150
|
+
],
|
|
151
|
+
{ signal: opts.signal }
|
|
152
|
+
);
|
|
153
|
+
this.processes.set(commandId, child);
|
|
154
|
+
let stdout = "";
|
|
155
|
+
let stderr = "";
|
|
156
|
+
const logQueue = [];
|
|
157
|
+
let logResolve = null;
|
|
158
|
+
let closed = false;
|
|
159
|
+
child.stdout.on("data", (data) => {
|
|
160
|
+
const str = String(data);
|
|
161
|
+
stdout += str;
|
|
162
|
+
logQueue.push({ stream: "stdout", data: str });
|
|
163
|
+
logResolve?.();
|
|
164
|
+
});
|
|
165
|
+
child.stderr.on("data", (data) => {
|
|
166
|
+
const str = String(data);
|
|
167
|
+
stderr += str;
|
|
168
|
+
logQueue.push({ stream: "stderr", data: str });
|
|
169
|
+
logResolve?.();
|
|
170
|
+
});
|
|
171
|
+
const result = new Promise((resolve, reject) => {
|
|
172
|
+
child.on("error", (err) => {
|
|
173
|
+
this.processes.delete(commandId);
|
|
174
|
+
closed = true;
|
|
175
|
+
logResolve?.();
|
|
176
|
+
reject(err);
|
|
177
|
+
});
|
|
178
|
+
child.on("close", (code) => {
|
|
179
|
+
this.processes.delete(commandId);
|
|
180
|
+
closed = true;
|
|
181
|
+
logResolve?.();
|
|
182
|
+
resolve({ stdout, stderr, exitCode: code ?? 0 });
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
async function* logs() {
|
|
186
|
+
while (!closed || logQueue.length > 0) {
|
|
187
|
+
const entry = logQueue.shift();
|
|
188
|
+
if (entry) {
|
|
189
|
+
yield entry;
|
|
190
|
+
} else if (!closed) {
|
|
191
|
+
await new Promise((r) => {
|
|
192
|
+
logResolve = r;
|
|
193
|
+
});
|
|
194
|
+
logResolve = null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return { commandId, logs, result };
|
|
199
|
+
}
|
|
200
|
+
async readFile(opts) {
|
|
201
|
+
await ensureSandbox(this.sandboxName);
|
|
202
|
+
const result = await execDocker(
|
|
203
|
+
[
|
|
204
|
+
"exec",
|
|
205
|
+
this.sandboxName,
|
|
206
|
+
"bash",
|
|
207
|
+
"-c",
|
|
208
|
+
`base64 '${opts.path.replace(/'/g, "'\\''")}'`
|
|
209
|
+
],
|
|
210
|
+
{ timeoutMs: 3e4, signal: opts.signal }
|
|
211
|
+
);
|
|
212
|
+
if (result.exitCode !== 0) {
|
|
213
|
+
if (result.stderr.includes("No such file") || result.stderr.includes("ENOENT")) {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
throw new Error(`readFile failed: ${result.stderr}`);
|
|
217
|
+
}
|
|
218
|
+
return Buffer.from(result.stdout.trim(), "base64");
|
|
219
|
+
}
|
|
220
|
+
async writeFiles(opts) {
|
|
221
|
+
await ensureSandbox(this.sandboxName);
|
|
222
|
+
for (const file of opts.files) {
|
|
223
|
+
const fullPath = opts.destPath ? `${opts.destPath}/${file.path}` : file.path;
|
|
224
|
+
const parentDir = fullPath.substring(0, fullPath.lastIndexOf("/"));
|
|
225
|
+
if (parentDir) {
|
|
226
|
+
await execDocker(["exec", this.sandboxName, "mkdir", "-p", parentDir], {
|
|
227
|
+
signal: opts.signal
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
const b64 = typeof file.content === "string" ? Buffer.from(file.content).toString("base64") : file.content.toString("base64");
|
|
231
|
+
await execDocker(
|
|
232
|
+
[
|
|
233
|
+
"exec",
|
|
234
|
+
this.sandboxName,
|
|
235
|
+
"bash",
|
|
236
|
+
"-c",
|
|
237
|
+
`echo '${b64}' | base64 -d > '${fullPath.replace(/'/g, "'\\''")}'`
|
|
238
|
+
],
|
|
239
|
+
{ signal: opts.signal }
|
|
240
|
+
);
|
|
241
|
+
if (file.path.endsWith(".sh")) {
|
|
242
|
+
await execDocker(["exec", this.sandboxName, "chmod", "+x", fullPath], {
|
|
243
|
+
signal: opts.signal
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// biome-ignore lint/suspicious/useAwait: .
|
|
249
|
+
async getDomain(opts) {
|
|
250
|
+
return `http://localhost:${opts.port}`;
|
|
251
|
+
}
|
|
252
|
+
// biome-ignore lint/suspicious/useAwait: .
|
|
253
|
+
async kill(opts) {
|
|
254
|
+
const child = this.processes.get(opts.commandId);
|
|
255
|
+
if (child) {
|
|
256
|
+
child.kill("SIGTERM");
|
|
257
|
+
this.processes.delete(opts.commandId);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// biome-ignore lint/suspicious/useAwait: .
|
|
261
|
+
async getStatus() {
|
|
262
|
+
return "running";
|
|
263
|
+
}
|
|
264
|
+
async start() {
|
|
265
|
+
await ensureSandbox(this.sandboxName);
|
|
266
|
+
}
|
|
267
|
+
async stop() {
|
|
268
|
+
await execDocker(["stop", this.sandboxName], { timeoutMs: 3e4 });
|
|
269
|
+
activeSandboxes.delete(this.sandboxName);
|
|
270
|
+
ensurePromises.delete(this.sandboxName);
|
|
271
|
+
}
|
|
272
|
+
// biome-ignore lint/suspicious/useAwait: .
|
|
273
|
+
async snapshot() {
|
|
274
|
+
throw new Error("snapshot is not supported for docker sandboxes");
|
|
275
|
+
}
|
|
276
|
+
// biome-ignore lint/suspicious/useAwait: .
|
|
277
|
+
async updateNetworkPolicy() {
|
|
278
|
+
throw new Error(
|
|
279
|
+
"updateNetworkPolicy is not supported for docker sandboxes"
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
function dockerSandbox(defaults) {
|
|
284
|
+
return {
|
|
285
|
+
type: "docker",
|
|
286
|
+
defaults,
|
|
287
|
+
async create(opts) {
|
|
288
|
+
const sandboxName = `agent-${ulid()}`;
|
|
289
|
+
const cwd = opts.setup?.config?.cwd;
|
|
290
|
+
await ensureSandbox(sandboxName);
|
|
291
|
+
const instance = new DockerSandboxInstance(sandboxName, cwd);
|
|
292
|
+
if (opts.setup?.run) {
|
|
293
|
+
await opts.setup.run(instance);
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
instance,
|
|
297
|
+
metadata: { sandboxName }
|
|
298
|
+
};
|
|
299
|
+
},
|
|
300
|
+
// biome-ignore lint/suspicious/useAwait: .
|
|
301
|
+
async connect(opts) {
|
|
302
|
+
return new DockerSandboxInstance(opts.metadata.sandboxName);
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export {
|
|
308
|
+
dockerSandbox
|
|
309
|
+
};
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvZG9ja2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyB1bGlkIH0gZnJvbSBcInVsaWRcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlckJpbmRpbmdNZXRhZGF0YSA9IHtcbiAgc2FuZGJveE5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogUnVuIGEgYGRvY2tlciBzYW5kYm94YCBDTEkgY29tbWFuZCBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWNEb2NrZXIoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXI7IHNpZ25hbD86IEFib3J0U2lnbmFsIH1cbik6IFByb21pc2U8eyBzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCB7IHNwYXduIH0gPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImRvY2tlclwiLCBbXCJzYW5kYm94XCIsIC4uLmFyZ3NdLCB7XG4gICAgICBzaWduYWw6IG9wdHM/LnNpZ25hbCxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBzdGRvdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgIH0pO1xuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3RkZXJyICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVvdXRJZCA9IG9wdHM/LnRpbWVvdXRNc1xuICAgICAgPyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjaGlsZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBkb2NrZXIgc2FuZGJveCAke2FyZ3NbMF19IHRpbWVkIG91dGApKTtcbiAgICAgICAgfSwgb3B0cy50aW1lb3V0TXMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJhY2sgd2hpY2ggc2FuZGJveGVzIGhhdmUgYmVlbiB2ZXJpZmllZCB0byBleGlzdCBpbiB0aGlzIHByb2Nlc3MuXG4gKiBNYXBzIHNhbmRib3ggbmFtZSAtPiBQcm9taXNlIHNvIGNvbmN1cnJlbnQgY2FsbGVycyB3YWl0IG9uIHRoZSBzYW1lIGNoZWNrLlxuICovXG5jb25zdCBlbnN1cmVQcm9taXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xuXG4vKipcbiAqIFNhbmRib3hlcyB0aGF0IHRoaXMgcHJvY2VzcyBoYXMgdXNlZC4gU3RvcHBlZCBvbiBwcm9jZXNzIGV4aXQuXG4gKi9cbmNvbnN0IGFjdGl2ZVNhbmRib3hlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5sZXQgY2xlYW51cFJlZ2lzdGVyZWQgPSBmYWxzZTtcbmxldCBfZXhlY1N5bmM6IHR5cGVvZiBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuZXhlY1N5bmMgfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJDbGVhbnVwKCkge1xuICBpZiAoY2xlYW51cFJlZ2lzdGVyZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2xlYW51cFJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gIC8vIFByZS1sb2FkIGV4ZWNTeW5jIHNvIHRoZSBzeW5jaHJvbm91cyBleGl0IGhhbmRsZXIgY2FuIHVzZSBpdC5cbiAgY29uc3QgY3AgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7XG4gIF9leGVjU3luYyA9IGNwLmV4ZWNTeW5jO1xuXG4gIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgaWYgKCFfZXhlY1N5bmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIEFycmF5LmZyb20oYWN0aXZlU2FuZGJveGVzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgX2V4ZWNTeW5jKGBkb2NrZXIgc2FuZGJveCBzdG9wICR7bmFtZX1gLCB7XG4gICAgICAgICAgdGltZW91dDogMTBfMDAwLFxuICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQmVzdC1lZmZvcnQgXHUyMDE0IHNhbmRib3ggbWF5IGFscmVhZHkgYmUgc3RvcHBlZFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcm9jZXNzLm9uKFwiZXhpdFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICB9KTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTQzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRW5zdXJlIGEgRG9ja2VyIHNhbmRib3ggZXhpc3RzIGZvciB0aGUgZ2l2ZW4gbmFtZS5cbiAqIElmIGl0IGFscmVhZHkgZXhpc3RzIChmcm9tIGEgcHJldmlvdXMgcHJvY2VzcyksIHJldXNlcyBpdC5cbiAqIElmIGl0IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZXMgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGlzdGluZyA9IGVuc3VyZVByb21pc2VzLmdldChzYW5kYm94TmFtZSk7XG4gIGlmIChleGlzdGluZykge1xuICAgIHJldHVybiBleGlzdGluZztcbiAgfVxuXG4gIGNvbnN0IHByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGxzID0gYXdhaXQgZXhlY0RvY2tlcihbXCJsc1wiLCBcIi1xXCJdLCB7IHRpbWVvdXRNczogMTBfMDAwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nTmFtZXMgPVxuICAgICAgbHMuZXhpdENvZGUgPT09IDBcbiAgICAgICAgPyBscy5zdGRvdXRcbiAgICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgICAgLm1hcCgocykgPT4gcy50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG5cbiAgICBpZiAoZXhpc3RpbmdOYW1lcy5pbmNsdWRlcyhzYW5kYm94TmFtZSkpIHtcbiAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBvcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6b3NcIik7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuXG4gICAgY29uc3Qgd29ya3NwYWNlRGlyID0gcGF0aC5qb2luKFxuICAgICAgb3MudG1wZGlyKCksXG4gICAgICBcImFnZW50LWRvY2tlci1zYW5kYm94XCIsXG4gICAgICBzYW5kYm94TmFtZVxuICAgICk7XG4gICAgYXdhaXQgZnMubWtkaXIod29ya3NwYWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGNyZWF0ZSA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXCJjcmVhdGVcIiwgXCItLW5hbWVcIiwgc2FuZGJveE5hbWUsIFwic2hlbGxcIiwgd29ya3NwYWNlRGlyXSxcbiAgICAgIHsgdGltZW91dE1zOiA2MF8wMDAgfVxuICAgICk7XG5cbiAgICBpZiAoY3JlYXRlLmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICBpZiAoY3JlYXRlLnN0ZGVyci5pbmNsdWRlcyhcImFscmVhZHkgZXhpc3RzXCIpKSB7XG4gICAgICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgICAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNyZWF0ZSBkb2NrZXIgc2FuZGJveCBcIiR7c2FuZGJveE5hbWV9XCI6ICR7Y3JlYXRlLnN0ZGVycn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGFjdGl2ZVNhbmRib3hlcy5hZGQoc2FuZGJveE5hbWUpO1xuICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICB9KSgpO1xuXG4gIGVuc3VyZVByb21pc2VzLnNldChzYW5kYm94TmFtZSwgcHJvbWlzZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwcm9taXNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHNhbmRib3hOYW1lKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfRE9DS0VSX0NXRCA9IFwiL2hvbWUvYWdlbnQvd29ya3NwYWNlXCI7XG5cbmNsYXNzIERvY2tlclNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHJlYWRvbmx5IGN3ZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbmRib3hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VzID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLkNoaWxkUHJvY2Vzc1xuICA+KCk7XG5cbiAgY29uc3RydWN0b3Ioc2FuZGJveE5hbWU6IHN0cmluZywgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zYW5kYm94TmFtZSA9IHNhbmRib3hOYW1lO1xuICAgIHRoaXMuY3dkID0gY3dkID8/IERFRkFVTFRfRE9DS0VSX0NXRDtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMob3B0czoge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBhd2FpdCBlbnN1cmVTYW5kYm94KHRoaXMuc2FuZGJveE5hbWUpO1xuXG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IGNvbW1hbmRJZCA9IGBjb21tYW5kXyR7dWxpZCgpfWA7XG4gICAgY29uc3QgZW52RmxhZ3MgPSBvcHRzLmVudlxuICAgICAgPyBPYmplY3QuZW50cmllcyhvcHRzLmVudikuZmxhdE1hcCgoW2ssIHZdKSA9PiBbXCItZVwiLCBgJHtrfT0ke3Z9YF0pXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGN3ZEZsYWdzID0gb3B0cy5jd2QgPyBbXCItd1wiLCBvcHRzLmN3ZF0gOiBbXTtcbiAgICBsZXQgYmFzZUNtZDogc3RyaW5nW107XG4gICAgaWYgKG9wdHMuc3Vkbykge1xuICAgICAgYmFzZUNtZCA9IFtcInN1ZG9cIiwgb3B0cy5jb21tYW5kLCAuLi4ob3B0cy5hcmdzID8/IFtdKV07XG4gICAgfSBlbHNlIGlmIChvcHRzLmFyZ3MpIHtcbiAgICAgIGJhc2VDbWQgPSBbb3B0cy5jb21tYW5kLCAuLi5vcHRzLmFyZ3NdO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlQ21kID0gW29wdHMuY29tbWFuZF07XG4gICAgfVxuICAgIGNvbnN0IGZ1bGxDbWQgPSBiYXNlQ21kO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcbiAgICAgIFwiZG9ja2VyXCIsXG4gICAgICBbXG4gICAgICAgIFwic2FuZGJveFwiLFxuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgLi4uZW52RmxhZ3MsXG4gICAgICAgIC4uLmN3ZEZsYWdzLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICAuLi5mdWxsQ21kLFxuICAgICAgXSxcbiAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIHRoaXMucHJvY2Vzc2VzLnNldChjb21tYW5kSWQsIGNoaWxkKTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ1F1ZXVlOiB7IHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7IGRhdGE6IHN0cmluZyB9W10gPSBbXTtcbiAgICBsZXQgbG9nUmVzb2x2ZTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlO1xuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRvdXQgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRvdXRcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZGVyciArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZGVyclwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHtcbiAgICAgIHN0ZG91dDogc3RyaW5nO1xuICAgICAgc3RkZXJyOiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgIH0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICB3aGlsZSAoIWNsb3NlZCB8fCBsb2dRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gbG9nUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgeWllbGQgZW50cnk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsb3NlZCkge1xuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyKSA9PiB7XG4gICAgICAgICAgICBsb2dSZXNvbHZlID0gcjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsb2dSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvbW1hbmRJZCwgbG9ncywgcmVzdWx0IH07XG4gIH1cblxuICBhc3luYyByZWFkRmlsZShvcHRzOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBudWxsPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNEb2NrZXIoXG4gICAgICBbXG4gICAgICAgIFwiZXhlY1wiLFxuICAgICAgICB0aGlzLnNhbmRib3hOYW1lLFxuICAgICAgICBcImJhc2hcIixcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBgYmFzZTY0ICcke29wdHMucGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgIF0sXG4gICAgICB7IHRpbWVvdXRNczogMzBfMDAwLCBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiTm8gc3VjaCBmaWxlXCIpIHx8XG4gICAgICAgIHJlc3VsdC5zdGRlcnIuaW5jbHVkZXMoXCJFTk9FTlRcIilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZEZpbGUgZmFpbGVkOiAke3Jlc3VsdC5zdGRlcnJ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXQudHJpbSgpLCBcImJhc2U2NFwiKTtcbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBvcHRzLmZpbGVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IG9wdHMuZGVzdFBhdGhcbiAgICAgICAgPyBgJHtvcHRzLmRlc3RQYXRofS8ke2ZpbGUucGF0aH1gXG4gICAgICAgIDogZmlsZS5wYXRoO1xuXG4gICAgICAvLyBFbnN1cmUgcGFyZW50IGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGNvbnN0IHBhcmVudERpciA9IGZ1bGxQYXRoLnN1YnN0cmluZygwLCBmdWxsUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuICAgICAgaWYgKHBhcmVudERpcikge1xuICAgICAgICBhd2FpdCBleGVjRG9ja2VyKFtcImV4ZWNcIiwgdGhpcy5zYW5kYm94TmFtZSwgXCJta2RpclwiLCBcIi1wXCIsIHBhcmVudERpcl0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JpdGUgdmlhIGJhc2U2NCB0byBoYW5kbGUgYm90aCB0ZXh0IGFuZCBiaW5hcnkgY29udGVudFxuICAgICAgY29uc3QgYjY0ID1cbiAgICAgICAgdHlwZW9mIGZpbGUuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICAgIDogZmlsZS5jb250ZW50LnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgICBbXG4gICAgICAgICAgXCJleGVjXCIsXG4gICAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgICBcImJhc2hcIixcbiAgICAgICAgICBcIi1jXCIsXG4gICAgICAgICAgYGVjaG8gJyR7YjY0fScgfCBiYXNlNjQgLWQgPiAnJHtmdWxsUGF0aC5yZXBsYWNlKC8nL2csIFwiJ1xcXFwnJ1wiKX0nYCxcbiAgICAgICAgXSxcbiAgICAgICAgeyBzaWduYWw6IG9wdHMuc2lnbmFsIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwiY2htb2RcIiwgXCIreFwiLCBmdWxsUGF0aF0sIHtcbiAgICAgICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XG4gICAgXCJwZW5kaW5nXCIgfCBcInJ1bm5pbmdcIiB8IFwic3RvcHBpbmdcIiB8IFwic3RvcHBlZFwiIHwgXCJmYWlsZWRcIlxuICA+IHtcbiAgICAvLyBkb2NrZXIgc2FuZGJveCBDTEkgZG9lc24ndCBleHBvc2Ugc3RhdHVzIFx1MjAxNCBhc3N1bWUgcnVubmluZyBpZiBlbnN1cmVkXG4gICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZXhlY0RvY2tlcihbXCJzdG9wXCIsIHRoaXMuc2FuZGJveE5hbWVdLCB7IHRpbWVvdXRNczogMzBfMDAwIH0pO1xuICAgIGFjdGl2ZVNhbmRib3hlcy5kZWxldGUodGhpcy5zYW5kYm94TmFtZSk7XG4gICAgZW5zdXJlUHJvbWlzZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBkb2NrZXIgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyB1cGRhdGVOZXR3b3JrUG9saWN5KCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9ja2VyU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IERvY2tlckJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwiZG9ja2VyXCIsIERvY2tlckJpbmRpbmdDb25maWcsIERvY2tlckJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiZG9ja2VyXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKG9wdHMpIHtcbiAgICAgIGNvbnN0IHNhbmRib3hOYW1lID0gYGFnZW50LSR7dWxpZCgpfWA7XG4gICAgICBjb25zdCBjd2QgPSBvcHRzLnNldHVwPy5jb25maWc/LmN3ZDtcblxuICAgICAgYXdhaXQgZW5zdXJlU2FuZGJveChzYW5kYm94TmFtZSk7XG5cbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IERvY2tlclNhbmRib3hJbnN0YW5jZShzYW5kYm94TmFtZSwgY3dkKTtcblxuICAgICAgaWYgKG9wdHMuc2V0dXA/LnJ1bikge1xuICAgICAgICBhd2FpdCBvcHRzLnNldHVwLnJ1bihpbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94TmFtZSB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICAgIGFzeW5jIGNvbm5lY3Qob3B0cykge1xuICAgICAgcmV0dXJuIG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uob3B0cy5tZXRhZGF0YS5zYW5kYm94TmFtZSk7XG4gICAgfSxcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLFlBQVk7QUFjckIsZUFBZSxXQUNiLE1BQ0EsTUFDK0Q7QUFDL0QsUUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLE9BQU8sZUFBb0I7QUFDbkQsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsVUFBTSxRQUFRLE1BQU0sVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUc7QUFBQSxNQUNsRCxRQUFRLE1BQU07QUFBQSxJQUNoQixDQUFDO0FBRUQsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBRWIsVUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWlCO0FBQ3hDLGdCQUFVLEtBQUssU0FBUztBQUFBLElBQzFCLENBQUM7QUFDRCxVQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBaUI7QUFDeEMsZ0JBQVUsS0FBSyxTQUFTO0FBQUEsSUFDMUIsQ0FBQztBQUVELFVBQU0sWUFBWSxNQUFNLFlBQ3BCLFdB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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { a as SandboxSetupFields, b as SandboxInstance, S as SandboxBinding, e as LifecycleConfig } from './steps-eTytqxQb.mjs';
|
|
2
|
+
import * as _vercel_sandbox from '@vercel/sandbox';
|
|
3
|
+
|
|
4
|
+
type DockerBindingConfig = {
|
|
5
|
+
cwd?: string;
|
|
6
|
+
};
|
|
7
|
+
type DockerBindingMetadata = {
|
|
8
|
+
sandboxName: string;
|
|
9
|
+
};
|
|
10
|
+
declare function dockerSandbox(defaults?: Partial<SandboxSetupFields> & {
|
|
11
|
+
run?: (sandbox: SandboxInstance) => Promise<void>;
|
|
12
|
+
config?: DockerBindingConfig;
|
|
13
|
+
}): SandboxBinding<"docker", DockerBindingConfig, DockerBindingMetadata>;
|
|
14
|
+
|
|
15
|
+
type LocalBindingConfig = {
|
|
16
|
+
cwd?: string;
|
|
17
|
+
};
|
|
18
|
+
type LocalBindingMetadata = {
|
|
19
|
+
basePath: string;
|
|
20
|
+
pid: number;
|
|
21
|
+
};
|
|
22
|
+
declare function localSandbox(defaults?: Partial<SandboxSetupFields> & {
|
|
23
|
+
run?: (sandbox: SandboxInstance) => Promise<void>;
|
|
24
|
+
config?: LocalBindingConfig;
|
|
25
|
+
}): SandboxBinding<"local", LocalBindingConfig, LocalBindingMetadata>;
|
|
26
|
+
|
|
27
|
+
type VercelBindingConfig = {
|
|
28
|
+
cwd?: string;
|
|
29
|
+
resources?: {
|
|
30
|
+
vcpus: number;
|
|
31
|
+
};
|
|
32
|
+
ports?: number[];
|
|
33
|
+
networkPolicy?: _vercel_sandbox.NetworkPolicy;
|
|
34
|
+
snapshotId?: string;
|
|
35
|
+
lifecycle?: LifecycleConfig;
|
|
36
|
+
};
|
|
37
|
+
type VercelBindingMetadata = {
|
|
38
|
+
sandboxId: string;
|
|
39
|
+
};
|
|
40
|
+
declare function vercelSandbox(defaults?: Partial<SandboxSetupFields> & {
|
|
41
|
+
run?: (sandbox: SandboxInstance) => Promise<void>;
|
|
42
|
+
config?: VercelBindingConfig;
|
|
43
|
+
}): SandboxBinding<"vercel", VercelBindingConfig, VercelBindingMetadata>;
|
|
44
|
+
|
|
45
|
+
export { type DockerBindingConfig as D, type LocalBindingConfig as L, type VercelBindingConfig as V, type LocalBindingMetadata as a, type VercelBindingMetadata as b, type DockerBindingMetadata as c, dockerSandbox as d, localSandbox as l, vercelSandbox as v };
|