experimental-agent 0.0.2 → 0.0.4
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 +13 -2
- package/dist/agent-workflow.d.mts +11 -3
- package/dist/agent-workflow.d.ts +11 -3
- package/dist/agent-workflow.js +1921 -1144
- package/dist/agent-workflow.mjs +7 -3
- package/dist/chunk-3ODWQVIA.mjs +12 -0
- package/dist/chunk-64THY7Y7.mjs +155 -0
- package/dist/chunk-GSRJYPWF.mjs +284 -0
- package/dist/chunk-HJGPUEFC.mjs +42 -0
- package/dist/chunk-JCPQQWIK.mjs +2057 -0
- package/dist/chunk-JEE2FQ4O.mjs +844 -0
- package/dist/chunk-T7PMZLOX.mjs +79 -0
- package/dist/chunk-TQRCSTCF.mjs +103 -0
- package/dist/chunk-VBLZWXVE.mjs +318 -0
- package/dist/{types-DPXFq_r6.d.ts → client-6g79J0s3.d.mts} +866 -31
- package/dist/{types-DPXFq_r6.d.mts → client-6g79J0s3.d.ts} +866 -31
- package/dist/client-SREKHM6I.mjs +15 -0
- package/dist/client.d.mts +37 -0
- package/dist/client.d.ts +37 -0
- package/dist/client.js +58 -0
- package/dist/client.mjs +30 -0
- package/dist/{client-HUG4HT5L.mjs → handler-36FM5H35.mjs} +4 -5
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +3102 -1438
- package/dist/index.mjs +720 -147
- package/dist/lifecycle-workflow.d.mts +3 -10
- package/dist/lifecycle-workflow.d.ts +3 -10
- package/dist/lifecycle-workflow.js +170 -1246
- package/dist/lifecycle-workflow.mjs +5 -41
- package/dist/local-fs-handlers-P4WGW3QY.mjs +235 -0
- package/dist/next/loader.d.mts +14 -0
- package/dist/next/loader.d.ts +14 -0
- package/dist/next/loader.js +206 -0
- package/dist/next/loader.mjs +103 -0
- package/dist/next.d.mts +34 -0
- package/dist/next.d.ts +34 -0
- package/dist/next.js +329 -0
- package/dist/next.mjs +224 -0
- package/dist/process-manager-JAKAXROL.mjs +10 -0
- package/dist/{client-4Y3UPWFR.mjs → sandbox-QAPGBVYM.mjs} +4 -3
- package/dist/storage-Q376OZH3.mjs +20 -0
- package/dist/{vercel-2CFDMEHB.mjs → vercel-LLXAHKVJ.mjs} +3 -1
- package/dist/vercel-sdk-VHKEX2GQ.mjs +8 -0
- package/package.json +32 -19
- package/dist/chunk-24DJSI7C.mjs +0 -374
- package/dist/chunk-4RGMKC2M.mjs +0 -755
- package/dist/chunk-6ICYKNCC.mjs +0 -284
- package/dist/chunk-PGYYQ3WZ.mjs +0 -1088
- package/dist/client-BBpD9kKL.d.ts +0 -193
- package/dist/client-BGJViybU.d.mts +0 -193
- package/dist/lifecycle-workflow-steps-HHN46ZAD.mjs +0 -20
- package/dist/local-BYPFRMLZ.mjs +0 -282
- package/dist/process-manager-H2HF6G4G.mjs +0 -153
- package/dist/sandbox-BFA4ECEQ.mjs +0 -10
- package/dist/storage-2U2QFNWI.mjs +0 -27
- /package/dist/{chunk-36X6L7SK.mjs → chunk-TAXLUVIC.mjs} +0 -0
package/dist/agent-workflow.mjs
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
agentMessageHook,
|
|
3
|
-
agentWorkflow
|
|
4
|
-
|
|
3
|
+
agentWorkflow,
|
|
4
|
+
approvalHook
|
|
5
|
+
} from "./chunk-JCPQQWIK.mjs";
|
|
6
|
+
import "./chunk-64THY7Y7.mjs";
|
|
7
|
+
import "./chunk-3ODWQVIA.mjs";
|
|
5
8
|
export {
|
|
6
9
|
agentMessageHook,
|
|
7
|
-
agentWorkflow
|
|
10
|
+
agentWorkflow,
|
|
11
|
+
approvalHook
|
|
8
12
|
};
|
|
9
13
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined")
|
|
5
|
+
return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
__require
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// src/sandbox/process-manager.ts
|
|
2
|
+
var DEFAULT_WAIT_UNTIL = 2e3;
|
|
3
|
+
var RUN_SCRIPT = `#!/bin/sh
|
|
4
|
+
# Process runner for Agent SDK
|
|
5
|
+
# All parameters passed via environment variables to avoid escaping issues
|
|
6
|
+
# Output is base64 encoded to avoid JSON escaping issues
|
|
7
|
+
|
|
8
|
+
AGENT_DIR="$HOME/.agent"
|
|
9
|
+
CWD_FILE="$AGENT_DIR/cwd/$SESSION_ID"
|
|
10
|
+
|
|
11
|
+
# Get current working directory (per-session)
|
|
12
|
+
if [ -f "$CWD_FILE" ]; then
|
|
13
|
+
CWD=$(cat "$CWD_FILE")
|
|
14
|
+
else
|
|
15
|
+
CWD="$HOME"
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
# Decode command
|
|
19
|
+
CMD=$(echo "$CMD_BASE64" | base64 -d)
|
|
20
|
+
|
|
21
|
+
# Background mode (waitUntil = 0)
|
|
22
|
+
if [ "$WAIT_UNTIL" = "0" ]; then
|
|
23
|
+
cd "$CWD" || cd "$HOME"
|
|
24
|
+
|
|
25
|
+
# Generate a simple numeric ID for output file
|
|
26
|
+
OUTPUT_ID="$(date +%s)$$"
|
|
27
|
+
OUTPUT_FILE="$AGENT_DIR/outputs/$OUTPUT_ID.log"
|
|
28
|
+
|
|
29
|
+
# Double-fork to fully detach the process
|
|
30
|
+
(
|
|
31
|
+
(
|
|
32
|
+
eval "$CMD"
|
|
33
|
+
pwd > "$CWD_FILE" 2>/dev/null
|
|
34
|
+
) > "$OUTPUT_FILE" 2>&1 < /dev/null &
|
|
35
|
+
echo $! > "$AGENT_DIR/pids/$OUTPUT_ID.pid"
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Small delay to ensure PID file is written
|
|
39
|
+
sleep 0.05
|
|
40
|
+
|
|
41
|
+
# Read PID
|
|
42
|
+
if [ -f "$AGENT_DIR/pids/$OUTPUT_ID.pid" ]; then
|
|
43
|
+
PID=$(cat "$AGENT_DIR/pids/$OUTPUT_ID.pid")
|
|
44
|
+
else
|
|
45
|
+
PID=0
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Output JSON result (no output for background, so no encoding needed)
|
|
49
|
+
printf '{"pid":%d,"outputBase64":"","exitCode":-1,"status":"running","outputFile":"%s","cwd":"%s"}\\n' \\
|
|
50
|
+
"$PID" "$OUTPUT_FILE" "$CWD"
|
|
51
|
+
exit 0
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Foreground mode (waitUntil > 0) - run directly and capture output
|
|
55
|
+
cd "$CWD" || cd "$HOME"
|
|
56
|
+
|
|
57
|
+
# Run command, capture output and exit code
|
|
58
|
+
OUTPUT=$(eval "$CMD" 2>&1)
|
|
59
|
+
EXIT_CODE=$?
|
|
60
|
+
|
|
61
|
+
# Update CWD after command
|
|
62
|
+
NEW_CWD=$(pwd)
|
|
63
|
+
echo "$NEW_CWD" > "$CWD_FILE"
|
|
64
|
+
|
|
65
|
+
# Determine status
|
|
66
|
+
if [ $EXIT_CODE -eq 0 ]; then
|
|
67
|
+
STATUS="completed"
|
|
68
|
+
else
|
|
69
|
+
STATUS="failed"
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Base64 encode output to avoid ALL escaping issues
|
|
73
|
+
OUTPUT_BASE64=$(printf '%s' "$OUTPUT" | base64 | tr -d '\\n')
|
|
74
|
+
|
|
75
|
+
# Output JSON result with base64-encoded output
|
|
76
|
+
printf '{"pid":0,"outputBase64":"%s","exitCode":%d,"status":"%s","outputFile":"","cwd":"%s"}\\n' \\
|
|
77
|
+
"$OUTPUT_BASE64" "$EXIT_CODE" "$STATUS" "$NEW_CWD"
|
|
78
|
+
`;
|
|
79
|
+
var createProcessManager = (opts) => {
|
|
80
|
+
const { sandbox, sessionId } = opts;
|
|
81
|
+
let initialized = false;
|
|
82
|
+
const init = async () => {
|
|
83
|
+
if (initialized) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const result = await sandbox.exec({
|
|
87
|
+
command: "sh",
|
|
88
|
+
args: [
|
|
89
|
+
"-c",
|
|
90
|
+
`mkdir -p $HOME/.agent/bin $HOME/.agent/pids $HOME/.agent/outputs $HOME/.agent/cwd
|
|
91
|
+
cat > $HOME/.agent/bin/run.sh << 'SCRIPT_EOF'
|
|
92
|
+
${RUN_SCRIPT}
|
|
93
|
+
SCRIPT_EOF
|
|
94
|
+
chmod +x $HOME/.agent/bin/run.sh`
|
|
95
|
+
]
|
|
96
|
+
});
|
|
97
|
+
if (result instanceof Error) {
|
|
98
|
+
throw result;
|
|
99
|
+
}
|
|
100
|
+
await result.result;
|
|
101
|
+
initialized = true;
|
|
102
|
+
};
|
|
103
|
+
const run = async (opts2) => {
|
|
104
|
+
await init();
|
|
105
|
+
const { command, waitUntil = DEFAULT_WAIT_UNTIL } = opts2;
|
|
106
|
+
const cmdBase64 = Buffer.from(command, "utf-8").toString("base64");
|
|
107
|
+
const result = await sandbox.exec({
|
|
108
|
+
command: "sh",
|
|
109
|
+
args: [
|
|
110
|
+
"-c",
|
|
111
|
+
`CMD_BASE64="${cmdBase64}" WAIT_UNTIL="${waitUntil}" SESSION_ID="${sessionId}" $HOME/.agent/bin/run.sh`
|
|
112
|
+
]
|
|
113
|
+
});
|
|
114
|
+
if (result instanceof Error) {
|
|
115
|
+
throw result;
|
|
116
|
+
}
|
|
117
|
+
const { stdout } = await result.result;
|
|
118
|
+
const parsed = JSON.parse(stdout.trim());
|
|
119
|
+
const output = parsed.outputBase64 ? Buffer.from(parsed.outputBase64, "base64").toString("utf-8") : "";
|
|
120
|
+
return {
|
|
121
|
+
pid: parsed.pid,
|
|
122
|
+
output,
|
|
123
|
+
exitCode: parsed.exitCode,
|
|
124
|
+
status: parsed.status,
|
|
125
|
+
cwd: parsed.cwd,
|
|
126
|
+
outputFile: parsed.outputFile
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
const getCwd = async () => {
|
|
130
|
+
await init();
|
|
131
|
+
const result = await sandbox.exec({
|
|
132
|
+
command: "sh",
|
|
133
|
+
args: [
|
|
134
|
+
"-c",
|
|
135
|
+
`cat $HOME/.agent/cwd/${sessionId} 2>/dev/null || echo "$HOME"`
|
|
136
|
+
]
|
|
137
|
+
});
|
|
138
|
+
if (result instanceof Error) {
|
|
139
|
+
return process.cwd();
|
|
140
|
+
}
|
|
141
|
+
const { stdout } = await result.result;
|
|
142
|
+
return stdout.trim() || process.cwd();
|
|
143
|
+
};
|
|
144
|
+
return {
|
|
145
|
+
init,
|
|
146
|
+
run,
|
|
147
|
+
getCwd
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export {
|
|
152
|
+
DEFAULT_WAIT_UNTIL,
|
|
153
|
+
createProcessManager
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvcHJvY2Vzcy1tYW5hZ2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IEJhc2hSZXN1bHQsIFNhbmRib3ggfSBmcm9tIFwiLi90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XQUlUX1VOVElMID0gMjAwMDtcblxuLyoqXG4gKiBTaGVsbCBzY3JpcHQgdGhhdCBoYW5kbGVzIGFsbCBwcm9jZXNzIGV4ZWN1dGlvbiBsb2dpYy5cbiAqIEluc3RhbGxlZCB0byB+Ly5hZ2VudC9iaW4vcnVuLnNoIGR1cmluZyBpbml0KCkuXG4gKi9cbmNvbnN0IFJVTl9TQ1JJUFQgPSBgIyEvYmluL3NoXG4jIFByb2Nlc3MgcnVubmVyIGZvciBBZ2VudCBTREtcbiMgQWxsIHBhcmFtZXRlcnMgcGFzc2VkIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYXZvaWQgZXNjYXBpbmcgaXNzdWVzXG4jIE91dHB1dCBpcyBiYXNlNjQgZW5jb2RlZCB0byBhdm9pZCBKU09OIGVzY2FwaW5nIGlzc3Vlc1xuXG5BR0VOVF9ESVI9XCIkSE9NRS8uYWdlbnRcIlxuQ1dEX0ZJTEU9XCIkQUdFTlRfRElSL2N3ZC8kU0VTU0lPTl9JRFwiXG5cbiMgR2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHBlci1zZXNzaW9uKVxuaWYgWyAtZiBcIiRDV0RfRklMRVwiIF07IHRoZW5cbiAgQ1dEPSQoY2F0IFwiJENXRF9GSUxFXCIpXG5lbHNlXG4gIENXRD1cIiRIT01FXCJcbmZpXG5cbiMgRGVjb2RlIGNvbW1hbmRcbkNNRD0kKGVjaG8gXCIkQ01EX0JBU0U2NFwiIHwgYmFzZTY0IC1kKVxuXG4jIEJhY2tncm91bmQgbW9kZSAod2FpdFVudGlsID0gMClcbmlmIFsgXCIkV0FJVF9VTlRJTFwiID0gXCIwXCIgXTsgdGhlblxuICBjZCBcIiRDV0RcIiB8fCBjZCBcIiRIT01FXCJcblxuICAjIEdlbmVyYXRlIGEgc2ltcGxlIG51bWVyaWMgSUQgZm9yIG91dHB1dCBmaWxlXG4gIE9VVFBVVF9JRD1cIiQoZGF0ZSArJXMpJCRcIlxuICBPVVRQVVRfRklMRT1cIiRBR0VOVF9ESVIvb3V0cHV0cy8kT1VUUFVUX0lELmxvZ1wiXG5cbiAgIyBEb3VibGUtZm9yayB0byBmdWxseSBkZXRhY2ggdGhlIHByb2Nlc3NcbiAgKFxuICAgIChcbiAgICAgIGV2YWwgXCIkQ01EXCJcbiAgICAgIHB3ZCA+IFwiJENXRF9GSUxFXCIgMj4vZGV2L251bGxcbiAgICApID4gXCIkT1VUUFVUX0ZJTEVcIiAyPiYxIDwgL2Rldi9udWxsICZcbiAgICBlY2hvICQhID4gXCIkQUdFTlRfRElSL3BpZHMvJE9VVFBVVF9JRC5waWRcIlxuICApXG5cbiAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgUElEIGZpbGUgaXMgd3JpdHRlblxuICBzbGVlcCAwLjA1XG5cbiAgIyBSZWFkIFBJRFxuICBpZiBbIC1mIFwiJEFHRU5UX0RJUi9waWRzLyRPVVRQVVRfSUQucGlkXCIgXTsgdGhlblxuICAgIFBJRD0kKGNhdCBcIiRBR0VOVF9ESVIvcGlkcy8kT1VUUFVUX0lELnBpZFwiKVxuICBlbHNlXG4gICAgUElEPTBcbiAgZmlcblxuICAjIE91dHB1dCBKU09OIHJlc3VsdCAobm8gb3V0cHV0IGZvciBiYWNrZ3JvdW5kLCBzbyBubyBlbmNvZGluZyBuZWVkZWQpXG4gIHByaW50ZiAne1wicGlkXCI6JWQsXCJvdXRwdXRCYXNlNjRcIjpcIlwiLFwiZXhpdENvZGVcIjotMSxcInN0YXR1c1wiOlwicnVubmluZ1wiLFwib3V0cHV0RmlsZVwiOlwiJXNcIixcImN3ZFwiOlwiJXNcIn1cXFxcbicgXFxcXFxuICAgIFwiJFBJRFwiIFwiJE9VVFBVVF9GSUxFXCIgXCIkQ1dEXCJcbiAgZXhpdCAwXG5maVxuXG4jIEZvcmVncm91bmQgbW9kZSAod2FpdFVudGlsID4gMCkgLSBydW4gZGlyZWN0bHkgYW5kIGNhcHR1cmUgb3V0cHV0XG5jZCBcIiRDV0RcIiB8fCBjZCBcIiRIT01FXCJcblxuIyBSdW4gY29tbWFuZCwgY2FwdHVyZSBvdXRwdXQgYW5kIGV4aXQgY29kZVxuT1VUUFVUPSQoZXZhbCBcIiRDTURcIiAyPiYxKVxuRVhJVF9DT0RFPSQ/XG5cbiMgVXBkYXRlIENXRCBhZnRlciBjb21tYW5kXG5ORVdfQ1dEPSQocHdkKVxuZWNobyBcIiRORVdfQ1dEXCIgPiBcIiRDV0RfRklMRVwiXG5cbiMgRGV0ZXJtaW5lIHN0YXR1c1xuaWYgWyAkRVhJVF9DT0RFIC1lcSAwIF07IHRoZW5cbiAgU1RBVFVTPVwiY29tcGxldGVkXCJcbmVsc2VcbiAgU1RBVFVTPVwiZmFpbGVkXCJcbmZpXG5cbiMgQmFzZTY0IGVuY29kZSBvdXRwdXQgdG8gYXZvaWQgQUxMIGVzY2FwaW5nIGlzc3Vlc1xuT1VUUFVUX0JBU0U2ND0kKHByaW50ZiAnJXMnIFwiJE9VVFBVVFwiIHwgYmFzZTY0IHwgdHIgLWQgJ1xcXFxuJylcblxuIyBPdXRwdXQgSlNPTiByZXN1bHQgd2l0aCBiYXNlNjQtZW5jb2RlZCBvdXRwdXRcbnByaW50ZiAne1wicGlkXCI6MCxcIm91dHB1dEJhc2U2NFwiOlwiJXNcIixcImV4aXRDb2RlXCI6JWQsXCJzdGF0dXNcIjpcIiVzXCIsXCJvdXRwdXRGaWxlXCI6XCJcIixcImN3ZFwiOlwiJXNcIn1cXFxcbicgXFxcXFxuICBcIiRPVVRQVVRfQkFTRTY0XCIgXCIkRVhJVF9DT0RFXCIgXCIkU1RBVFVTXCIgXCIkTkVXX0NXRFwiXG5gO1xuXG50eXBlIFJ1bk9wdGlvbnMgPSB7XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIE1heCBtcyB0byB3YWl0IGZvciBjb21wbGV0aW9uLlxuICAgKiAtIDA6IEJhY2tncm91bmQgbW9kZSAtIHJldHVybiBpbW1lZGlhdGVseSB3aXRoIFBJRFxuICAgKiAtID4wOiBGb3JlZ3JvdW5kIG1vZGUgLSB3YWl0IGZvciBjb21wbGV0aW9uIChkZWZhdWx0OiAzMDAwMClcbiAgICovXG4gIHdhaXRVbnRpbD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyBtYW5hZ2VyIHRoYXQgdXNlcyBhIHNpbmdsZSBzaGVsbCBzY3JpcHQgdG8gaGFuZGxlIGFsbCBleGVjdXRpb24gbG9naWMuXG4gKiBSZWR1Y2VzIHJvdW5kLXRyaXBzIHRvIHRoZSBzYW5kYm94IGJ5IGRvaW5nIGV2ZXJ5dGhpbmcgaW4gb25lIGV4ZWMgY2FsbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVByb2Nlc3NNYW5hZ2VyID0gKG9wdHM6IHtcbiAgc2FuZGJveDogU2FuZGJveDtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG59KSA9PiB7XG4gIGNvbnN0IHsgc2FuZGJveCwgc2Vzc2lvbklkIH0gPSBvcHRzO1xuICBsZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdCBpbml0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICBjb21tYW5kOiBcInNoXCIsXG4gICAgICBhcmdzOiBbXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgYG1rZGlyIC1wICRIT01FLy5hZ2VudC9iaW4gJEhPTUUvLmFnZW50L3BpZHMgJEhPTUUvLmFnZW50L291dHB1dHMgJEhPTUUvLmFnZW50L2N3ZFxuY2F0ID4gJEhPTUUvLmFnZW50L2Jpbi9ydW4uc2ggPDwgJ1NDUklQVF9FT0YnXG4ke1JVTl9TQ1JJUFR9XG5TQ1JJUFRfRU9GXG5jaG1vZCAreCAkSE9NRS8uYWdlbnQvYmluL3J1bi5zaGAsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICB0aHJvdyByZXN1bHQ7XG4gICAgfVxuICAgIGF3YWl0IHJlc3VsdC5yZXN1bHQ7XG4gICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHJ1biA9IGFzeW5jIChvcHRzOiBSdW5PcHRpb25zKTogUHJvbWlzZTxCYXNoUmVzdWx0PiA9PiB7XG4gICAgYXdhaXQgaW5pdCgpO1xuXG4gICAgY29uc3QgeyBjb21tYW5kLCB3YWl0VW50aWwgPSBERUZBVUxUX1dBSVRfVU5USUwgfSA9IG9wdHM7XG4gICAgY29uc3QgY21kQmFzZTY0ID0gQnVmZmVyLmZyb20oY29tbWFuZCwgXCJ1dGYtOFwiKS50b1N0cmluZyhcImJhc2U2NFwiKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlYyh7XG4gICAgICBjb21tYW5kOiBcInNoXCIsXG4gICAgICBhcmdzOiBbXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgYENNRF9CQVNFNjQ9XCIke2NtZEJhc2U2NH1cIiBXQUlUX1VOVElMPVwiJHt3YWl0VW50aWx9XCIgU0VTU0lPTl9JRD1cIiR7c2Vzc2lvbklkfVwiICRIT01FLy5hZ2VudC9iaW4vcnVuLnNoYCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcmVzdWx0LnJlc3VsdDtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0ZG91dC50cmltKCkpIGFzIHtcbiAgICAgIHBpZDogbnVtYmVyO1xuICAgICAgb3V0cHV0QmFzZTY0OiBzdHJpbmc7XG4gICAgICBleGl0Q29kZTogbnVtYmVyO1xuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIiB8IFwiY29tcGxldGVkXCIgfCBcImZhaWxlZFwiO1xuICAgICAgb3V0cHV0RmlsZTogc3RyaW5nO1xuICAgICAgY3dkOiBzdHJpbmc7XG4gICAgfTtcblxuICAgIC8vIERlY29kZSBiYXNlNjQgb3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0ID0gcGFyc2VkLm91dHB1dEJhc2U2NFxuICAgICAgPyBCdWZmZXIuZnJvbShwYXJzZWQub3V0cHV0QmFzZTY0LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0Zi04XCIpXG4gICAgICA6IFwiXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGlkOiBwYXJzZWQucGlkLFxuICAgICAgb3V0cHV0LFxuICAgICAgZXhpdENvZGU6IHBhcnNlZC5leGl0Q29kZSxcbiAgICAgIHN0YXR1czogcGFyc2VkLnN0YXR1cyxcbiAgICAgIGN3ZDogcGFyc2VkLmN3ZCxcbiAgICAgIG91dHB1dEZpbGU6IHBhcnNlZC5vdXRwdXRGaWxlLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZ2V0Q3dkID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgYXdhaXQgaW5pdCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2FuZGJveC5leGVjKHtcbiAgICAgIGNvbW1hbmQ6IFwic2hcIixcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgXCItY1wiLFxuICAgICAgICBgY2F0ICRIT01FLy5hZ2VudC9jd2QvJHtzZXNzaW9uSWR9IDI+L2Rldi9udWxsIHx8IGVjaG8gXCIkSE9NRVwiYCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCByZXN1bHQucmVzdWx0O1xuICAgIHJldHVybiBzdGRvdXQudHJpbSgpIHx8IHByb2Nlc3MuY3dkKCk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBpbml0LFxuICAgIHJ1bixcbiAgICBnZXRDd2QsXG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBQcm9jZXNzTWFuYWdlciA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVByb2Nlc3NNYW5hZ2VyPjtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFFTyxJQUFNLHFCQUFxQjtBQU1sQyxJQUFNLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MessageNotFoundError,
|
|
3
|
+
SandboxNotFoundError,
|
|
4
|
+
SessionNotFoundError,
|
|
5
|
+
StorageError
|
|
6
|
+
} from "./chunk-HJGPUEFC.mjs";
|
|
7
|
+
|
|
8
|
+
// src/storage/client.ts
|
|
9
|
+
function getStorageClient(rpcFn, name) {
|
|
10
|
+
async function rpc(method, params) {
|
|
11
|
+
const result = await rpcFn({ name, method, params });
|
|
12
|
+
if ("error" in result) {
|
|
13
|
+
throw new StorageError({ reason: result.error.message });
|
|
14
|
+
}
|
|
15
|
+
return result.result;
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
session: {
|
|
19
|
+
get: async (id) => {
|
|
20
|
+
try {
|
|
21
|
+
const result = await rpc("session.get", { id });
|
|
22
|
+
if (result === null) {
|
|
23
|
+
return new SessionNotFoundError({ id });
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
} catch (e) {
|
|
27
|
+
if (e instanceof StorageError) {
|
|
28
|
+
return e;
|
|
29
|
+
}
|
|
30
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
set: async (session) => {
|
|
34
|
+
try {
|
|
35
|
+
return await rpc("session.set", session);
|
|
36
|
+
} catch (e) {
|
|
37
|
+
if (e instanceof StorageError) {
|
|
38
|
+
return e;
|
|
39
|
+
}
|
|
40
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
list: async (opts) => {
|
|
44
|
+
try {
|
|
45
|
+
return await rpc("session.list", {
|
|
46
|
+
tags: opts?.tags,
|
|
47
|
+
order: opts?.order,
|
|
48
|
+
cursor: opts?.cursor,
|
|
49
|
+
limit: opts?.limit
|
|
50
|
+
});
|
|
51
|
+
} catch (e) {
|
|
52
|
+
if (e instanceof StorageError) {
|
|
53
|
+
return e;
|
|
54
|
+
}
|
|
55
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
tag: {
|
|
59
|
+
set: async ({ sessionId, tags }) => {
|
|
60
|
+
try {
|
|
61
|
+
return await rpc("session.tag.set", { sessionId, tags });
|
|
62
|
+
} catch (e) {
|
|
63
|
+
if (e instanceof StorageError) {
|
|
64
|
+
return e;
|
|
65
|
+
}
|
|
66
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
message: {
|
|
72
|
+
list: async (sessionId, opts) => {
|
|
73
|
+
try {
|
|
74
|
+
return await rpc("message.list", {
|
|
75
|
+
sessionId,
|
|
76
|
+
cursor: opts?.cursor,
|
|
77
|
+
limit: opts?.limit
|
|
78
|
+
});
|
|
79
|
+
} catch (e) {
|
|
80
|
+
if (e instanceof StorageError) {
|
|
81
|
+
return e;
|
|
82
|
+
}
|
|
83
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
get: async (id) => {
|
|
87
|
+
try {
|
|
88
|
+
const result = await rpc("message.get", { id });
|
|
89
|
+
if (result === null) {
|
|
90
|
+
return new MessageNotFoundError({ id });
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
} catch (e) {
|
|
94
|
+
if (e instanceof StorageError) {
|
|
95
|
+
return e;
|
|
96
|
+
}
|
|
97
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
set: async (message) => {
|
|
101
|
+
try {
|
|
102
|
+
return await rpc("message.set", message);
|
|
103
|
+
} catch (e) {
|
|
104
|
+
if (e instanceof StorageError) {
|
|
105
|
+
return e;
|
|
106
|
+
}
|
|
107
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
part: {
|
|
112
|
+
listByMessage: async (messageId, opts) => {
|
|
113
|
+
try {
|
|
114
|
+
const result = await rpc("part.listByMessage", {
|
|
115
|
+
messageId,
|
|
116
|
+
cursor: opts?.cursor,
|
|
117
|
+
limit: opts?.limit
|
|
118
|
+
});
|
|
119
|
+
return result;
|
|
120
|
+
} catch (e) {
|
|
121
|
+
if (e instanceof StorageError) {
|
|
122
|
+
return e;
|
|
123
|
+
}
|
|
124
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
listBySession: async (sessionId, opts) => {
|
|
128
|
+
try {
|
|
129
|
+
const result = await rpc("part.listBySession", {
|
|
130
|
+
sessionId,
|
|
131
|
+
cursor: opts?.cursor,
|
|
132
|
+
limit: opts?.limit
|
|
133
|
+
});
|
|
134
|
+
return result;
|
|
135
|
+
} catch (e) {
|
|
136
|
+
if (e instanceof StorageError) {
|
|
137
|
+
return e;
|
|
138
|
+
}
|
|
139
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
set: async (part) => {
|
|
143
|
+
try {
|
|
144
|
+
return await rpc("part.set", part);
|
|
145
|
+
} catch (e) {
|
|
146
|
+
if (e instanceof StorageError) {
|
|
147
|
+
return e;
|
|
148
|
+
}
|
|
149
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
delete: async (id) => {
|
|
153
|
+
try {
|
|
154
|
+
await rpc("part.delete", { id });
|
|
155
|
+
} catch (e) {
|
|
156
|
+
if (e instanceof StorageError) {
|
|
157
|
+
return e;
|
|
158
|
+
}
|
|
159
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
sandbox: {
|
|
164
|
+
get: async (key) => {
|
|
165
|
+
try {
|
|
166
|
+
const result = await rpc("sandbox.get", { key });
|
|
167
|
+
if (result === null) {
|
|
168
|
+
return new SandboxNotFoundError({ id: key });
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
} catch (e) {
|
|
172
|
+
if (e instanceof StorageError) {
|
|
173
|
+
return e;
|
|
174
|
+
}
|
|
175
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
getBySession: async (sessionId) => {
|
|
179
|
+
try {
|
|
180
|
+
const result = await rpc("sandbox.getBySession", { sessionId });
|
|
181
|
+
if (result === null) {
|
|
182
|
+
return new SandboxNotFoundError({ id: sessionId });
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
} catch (e) {
|
|
186
|
+
if (e instanceof StorageError) {
|
|
187
|
+
return e;
|
|
188
|
+
}
|
|
189
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
set: async (record) => {
|
|
193
|
+
try {
|
|
194
|
+
await rpc("sandbox.set", record);
|
|
195
|
+
return record;
|
|
196
|
+
} catch (e) {
|
|
197
|
+
if (e instanceof StorageError) {
|
|
198
|
+
return e;
|
|
199
|
+
}
|
|
200
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
list: async (opts) => {
|
|
204
|
+
try {
|
|
205
|
+
return await rpc("sandbox.list", {
|
|
206
|
+
tags: opts?.tags,
|
|
207
|
+
order: opts?.order,
|
|
208
|
+
cursor: opts?.cursor,
|
|
209
|
+
limit: opts?.limit
|
|
210
|
+
});
|
|
211
|
+
} catch (e) {
|
|
212
|
+
if (e instanceof StorageError) {
|
|
213
|
+
return e;
|
|
214
|
+
}
|
|
215
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
tag: {
|
|
219
|
+
set: async ({ sandboxId, tags }) => {
|
|
220
|
+
try {
|
|
221
|
+
return await rpc("sandbox.tag.set", { sandboxId, tags });
|
|
222
|
+
} catch (e) {
|
|
223
|
+
if (e instanceof StorageError) {
|
|
224
|
+
return e;
|
|
225
|
+
}
|
|
226
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
command: {
|
|
232
|
+
get: async (id) => {
|
|
233
|
+
try {
|
|
234
|
+
return await rpc("command.get", { id });
|
|
235
|
+
} catch (e) {
|
|
236
|
+
if (e instanceof StorageError) {
|
|
237
|
+
return e;
|
|
238
|
+
}
|
|
239
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
set: async (command) => {
|
|
243
|
+
try {
|
|
244
|
+
return await rpc("command.set", command);
|
|
245
|
+
} catch (e) {
|
|
246
|
+
if (e instanceof StorageError) {
|
|
247
|
+
return e;
|
|
248
|
+
}
|
|
249
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
list: async (sessionId, opts) => {
|
|
253
|
+
try {
|
|
254
|
+
const result = await rpc("command.list", {
|
|
255
|
+
sessionId,
|
|
256
|
+
includeFinished: opts?.includeFinished,
|
|
257
|
+
cursor: opts?.cursor,
|
|
258
|
+
limit: opts?.limit
|
|
259
|
+
});
|
|
260
|
+
return result;
|
|
261
|
+
} catch (e) {
|
|
262
|
+
if (e instanceof StorageError) {
|
|
263
|
+
return e;
|
|
264
|
+
}
|
|
265
|
+
return new StorageError({ reason: String(e), cause: e });
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
var DEFAULT_NAMESPACE = "default";
|
|
272
|
+
var LOCAL_STORAGE_VERSION = "v1";
|
|
273
|
+
function getStorage(opts) {
|
|
274
|
+
const name = opts.config.name ?? DEFAULT_NAMESPACE;
|
|
275
|
+
return getStorageClient(opts.rpc, name);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export {
|
|
279
|
+
getStorageClient,
|
|
280
|
+
DEFAULT_NAMESPACE,
|
|
281
|
+
LOCAL_STORAGE_VERSION,
|
|
282
|
+
getStorage
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvY2xpZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBNZXNzYWdlTm90Rm91bmRFcnJvcixcbiAgU2FuZGJveE5vdEZvdW5kRXJyb3IsXG4gIFNlc3Npb25Ob3RGb3VuZEVycm9yLFxuICBTdG9yYWdlRXJyb3IsXG59IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZU1ldGhvZHMgfSBmcm9tIFwiLi9ycGNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ29tbWFuZCxcbiAgTGlzdFJlc3VsdCxcbiAgUGFydCxcbiAgU3RvcmFnZSxcbiAgU3RvcmFnZUNvbmZpZyxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxudHlwZSBScGNSZXNwb25zZTxUPiA9XG4gIHwgeyByZXN1bHQ6IFQgfVxuICB8IHsgZXJyb3I6IHsgY29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSB9O1xuXG5leHBvcnQgdHlwZSBScGNGbiA9IChwYXJhbXM6IHtcbiAgbmFtZT86IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHBhcmFtczogdW5rbm93bjtcbn0pID0+IFByb21pc2U8UnBjUmVzcG9uc2U8dW5rbm93bj4+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmFnZUNsaWVudChycGNGbjogUnBjRm4sIG5hbWU/OiBzdHJpbmcpOiBTdG9yYWdlIHtcbiAgYXN5bmMgZnVuY3Rpb24gcnBjPE0gZXh0ZW5kcyBrZXlvZiBTdG9yYWdlTWV0aG9kcz4oXG4gICAgbWV0aG9kOiBNLFxuICAgIHBhcmFtczogei5pbmZlcjxTdG9yYWdlTWV0aG9kc1tNXVtcInBhcmFtc1wiXT5cbiAgKTogUHJvbWlzZTx6LmluZmVyPFN0b3JhZ2VNZXRob2RzW01dW1wicmVzdWx0XCJdPj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJwY0ZuKHsgbmFtZSwgbWV0aG9kLCBwYXJhbXMgfSk7XG5cbiAgICBpZiAoXCJlcnJvclwiIGluIHJlc3VsdCkge1xuICAgICAgdGhyb3cgbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogcmVzdWx0LmVycm9yLm1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQgYXMgei5pbmZlcjxTdG9yYWdlTWV0aG9kc1tNXVtcInJlc3VsdFwiXT47XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogYXN5bmMgKGlkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjKFwic2Vzc2lvbi5nZXRcIiwgeyBpZCB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25Ob3RGb3VuZEVycm9yKHsgaWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0OiBhc3luYyAoc2Vzc2lvbikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBycGMoXCJzZXNzaW9uLnNldFwiLCBzZXNzaW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsaXN0OiBhc3luYyAob3B0cykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBycGMoXCJzZXNzaW9uLmxpc3RcIiwge1xuICAgICAgICAgICAgdGFnczogb3B0cz8udGFncyxcbiAgICAgICAgICAgIG9yZGVyOiBvcHRzPy5vcmRlcixcbiAgICAgICAgICAgIGN1cnNvcjogb3B0cz8uY3Vyc29yLFxuICAgICAgICAgICAgbGltaXQ6IG9wdHM/LmxpbWl0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRhZzoge1xuICAgICAgICBzZXQ6IGFzeW5jICh7IHNlc3Npb25JZCwgdGFncyB9KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBycGMoXCJzZXNzaW9uLnRhZy5zZXRcIiwgeyBzZXNzaW9uSWQsIHRhZ3MgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgbGlzdDogYXN5bmMgKHNlc3Npb25JZCwgb3B0cykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBycGMoXCJtZXNzYWdlLmxpc3RcIiwge1xuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgY3Vyc29yOiBvcHRzPy5jdXJzb3IsXG4gICAgICAgICAgICBsaW1pdDogb3B0cz8ubGltaXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0OiBhc3luYyAoaWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJtZXNzYWdlLmdldFwiLCB7IGlkIH0pO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWVzc2FnZU5vdEZvdW5kRXJyb3IoeyBpZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHJwYyhcIm1lc3NhZ2Uuc2V0XCIsIG1lc3NhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICAgIHBhcnQ6IHtcbiAgICAgIGxpc3RCeU1lc3NhZ2U6IGFzeW5jIChtZXNzYWdlSWQsIG9wdHMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJwYXJ0Lmxpc3RCeU1lc3NhZ2VcIiwge1xuICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgICAgY3Vyc29yOiBvcHRzPy5jdXJzb3IsXG4gICAgICAgICAgICBsaW1pdDogb3B0cz8ubGltaXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBMaXN0UmVzdWx0PFBhcnQ+O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxpc3RCeVNlc3Npb246IGFzeW5jIChzZXNzaW9uSWQsIG9wdHMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIiwge1xuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgY3Vyc29yOiBvcHRzPy5jdXJzb3IsXG4gICAgICAgICAgICBsaW1pdDogb3B0cz8ubGltaXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBMaXN0UmVzdWx0PFBhcnQ+O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogYXN5bmMgKHBhcnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gKGF3YWl0IHJwYyhcInBhcnQuc2V0XCIsIHBhcnQpKSBhcyBQYXJ0O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlbGV0ZTogYXN5bmMgKGlkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcnBjKFwicGFydC5kZWxldGVcIiwgeyBpZCB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgICBzYW5kYm94OiB7XG4gICAgICBnZXQ6IGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJzYW5kYm94LmdldFwiLCB7IGtleSB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNhbmRib3hOb3RGb3VuZEVycm9yKHsgaWQ6IGtleSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRCeVNlc3Npb246IGFzeW5jIChzZXNzaW9uSWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBycGMoXCJzYW5kYm94LmdldEJ5U2Vzc2lvblwiLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNhbmRib3hOb3RGb3VuZEVycm9yKHsgaWQ6IHNlc3Npb25JZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGFzeW5jIChyZWNvcmQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBycGMoXCJzYW5kYm94LnNldFwiLCByZWNvcmQpO1xuICAgICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFN0b3JhZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUVycm9yKHsgcmVhc29uOiBTdHJpbmcoZSksIGNhdXNlOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbGlzdDogYXN5bmMgKG9wdHMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcnBjKFwic2FuZGJveC5saXN0XCIsIHtcbiAgICAgICAgICAgIHRhZ3M6IG9wdHM/LnRhZ3MsXG4gICAgICAgICAgICBvcmRlcjogb3B0cz8ub3JkZXIsXG4gICAgICAgICAgICBjdXJzb3I6IG9wdHM/LmN1cnNvcixcbiAgICAgICAgICAgIGxpbWl0OiBvcHRzPy5saW1pdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0YWc6IHtcbiAgICAgICAgc2V0OiBhc3luYyAoeyBzYW5kYm94SWQsIHRhZ3MgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcnBjKFwic2FuZGJveC50YWcuc2V0XCIsIHsgc2FuZGJveElkLCB0YWdzIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbW1hbmQ6IHtcbiAgICAgIGdldDogYXN5bmMgKGlkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIChhd2FpdCBycGMoXCJjb21tYW5kLmdldFwiLCB7IGlkIH0pKSBhcyBDb21tYW5kIHwgbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGFzeW5jIChjb21tYW5kKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIChhd2FpdCBycGMoXCJjb21tYW5kLnNldFwiLCBjb21tYW5kKSkgYXMgQ29tbWFuZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3RvcmFnZUVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlRXJyb3IoeyByZWFzb246IFN0cmluZyhlKSwgY2F1c2U6IGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsaXN0OiBhc3luYyAoc2Vzc2lvbklkLCBvcHRzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjKFwiY29tbWFuZC5saXN0XCIsIHtcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIGluY2x1ZGVGaW5pc2hlZDogb3B0cz8uaW5jbHVkZUZpbmlzaGVkLFxuICAgICAgICAgICAgY3Vyc29yOiBvcHRzPy5jdXJzb3IsXG4gICAgICAgICAgICBsaW1pdDogb3B0cz8ubGltaXQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBMaXN0UmVzdWx0PENvbW1hbmQ+O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTdG9yYWdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VFcnJvcih7IHJlYXNvbjogU3RyaW5nKGUpLCBjYXVzZTogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBMT0NBTF9TVE9SQUdFX1ZFUlNJT04gPSBcInYxXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yYWdlKG9wdHM6IHtcbiAgY29uZmlnOiBTdG9yYWdlQ29uZmlnO1xuICBycGM6IFJwY0ZuO1xufSk6IFN0b3JhZ2Uge1xuICBjb25zdCBuYW1lID0gb3B0cy5jb25maWcubmFtZSA/PyBERUZBVUxUX05BTUVTUEFDRTtcbiAgcmV0dXJuIGdldFN0b3JhZ2VDbGllbnQob3B0cy5ycGMsIG5hbWUpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7QUEwQk8sU0FBUyxpQkFBaUIsT0FBYyxNQUF3QjtBQUNyRSxpQkFBZSxJQUNiLFFBQ0EsUUFDK0M7QUFDL0MsVUFBTSxTQUFTLE1BQU0sTUFBTSxFQUFFLE1BQU0sUUFBUSxPQUFP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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
import * as errore from "errore";
|
|
3
|
+
var SessionNotFoundError = class extends errore.createTaggedError({
|
|
4
|
+
name: "SessionNotFoundError",
|
|
5
|
+
message: "Session $id not found"
|
|
6
|
+
}) {
|
|
7
|
+
};
|
|
8
|
+
var SessionError = class extends errore.createTaggedError({
|
|
9
|
+
name: "SessionError",
|
|
10
|
+
message: "Session $id failed: $reason"
|
|
11
|
+
}) {
|
|
12
|
+
};
|
|
13
|
+
var SandboxNotFoundError = class extends errore.createTaggedError({
|
|
14
|
+
name: "SandboxNotFoundError",
|
|
15
|
+
message: "Sandbox $id not found"
|
|
16
|
+
}) {
|
|
17
|
+
};
|
|
18
|
+
var StorageError = class extends errore.createTaggedError({
|
|
19
|
+
name: "StorageError",
|
|
20
|
+
message: "$reason"
|
|
21
|
+
}) {
|
|
22
|
+
};
|
|
23
|
+
var SandboxError = class extends errore.createTaggedError({
|
|
24
|
+
name: "SandboxError",
|
|
25
|
+
message: "$reason"
|
|
26
|
+
}) {
|
|
27
|
+
};
|
|
28
|
+
var MessageNotFoundError = class extends errore.createTaggedError({
|
|
29
|
+
name: "MessageNotFoundError",
|
|
30
|
+
message: "Message $id not found"
|
|
31
|
+
}) {
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
SessionNotFoundError,
|
|
36
|
+
SessionError,
|
|
37
|
+
SandboxNotFoundError,
|
|
38
|
+
StorageError,
|
|
39
|
+
SandboxError,
|
|
40
|
+
MessageNotFoundError
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2Vycm9ycy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0ICogYXMgZXJyb3JlIGZyb20gXCJlcnJvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25Ob3RGb3VuZEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTZXNzaW9uTm90Rm91bmRFcnJvclwiLFxuICBtZXNzYWdlOiBcIlNlc3Npb24gJGlkIG5vdCBmb3VuZFwiLFxufSkge31cblxuZXhwb3J0IGNsYXNzIFNlc3Npb25FcnJvciBleHRlbmRzIGVycm9yZS5jcmVhdGVUYWdnZWRFcnJvcih7XG4gIG5hbWU6IFwiU2Vzc2lvbkVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2Vzc2lvbiAkaWQgZmFpbGVkOiAkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2FuZGJveE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIlNhbmRib3hOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiU2FuZGJveCAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZUVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTdG9yYWdlRXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgU2FuZGJveEVycm9yIGV4dGVuZHMgZXJyb3JlLmNyZWF0ZVRhZ2dlZEVycm9yKHtcbiAgbmFtZTogXCJTYW5kYm94RXJyb3JcIixcbiAgbWVzc2FnZTogXCIkcmVhc29uXCIsXG59KSB7fVxuXG5leHBvcnQgY2xhc3MgTWVzc2FnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBlcnJvcmUuY3JlYXRlVGFnZ2VkRXJyb3Ioe1xuICBuYW1lOiBcIk1lc3NhZ2VOb3RGb3VuZEVycm9yXCIsXG4gIG1lc3NhZ2U6IFwiTWVzc2FnZSAkaWQgbm90IGZvdW5kXCIsXG59KSB7fVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFlBQVksWUFBWTtBQUVqQixJQUFNLHVCQUFOLGNBQTBDLHlCQUFrQjtBQUFBLEVBQ2pFLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQztBQUVHLElBQU0sZUFBTixjQUFrQyx5QkFBa0I7QUFBQSxFQUN6RCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQyxFQUFFO0FBQUM7QUFFRyxJQUFNLHVCQUFOLGNBQTBDLHlCQUFrQjtBQUFBLEVBQ2pFLE1BQU07QUFBQSxFQUNOLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFBQztBQUVHLElBQU0sZUFBTixjQUFrQyx5QkFBa0I7QUFBQSxFQUN6RCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQyxFQUFFO0FBQUM7QUFFRyxJQUFNLGVBQU4sY0FBa0MseUJBQWtCO0FBQUEsRUFDekQsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYLENBQUMsRUFBRTtBQUFDO0FBRUcsSUFBTSx1QkFBTixjQUEwQyx5QkFBa0I7QUFBQSxFQUNqRSxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQ1gsQ0FBQyxFQUFFO0FBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==
|