@alchemy.run/archil 0.0.0 → 2.0.0-beta.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +57 -4
  3. package/lib/AWS/S3Disk.d.ts +68 -0
  4. package/lib/AWS/S3Disk.d.ts.map +1 -0
  5. package/lib/AWS/S3Disk.js +100 -0
  6. package/lib/AWS/S3Disk.js.map +1 -0
  7. package/lib/AWS/index.d.ts +2 -0
  8. package/lib/AWS/index.d.ts.map +1 -0
  9. package/lib/AWS/index.js +2 -0
  10. package/lib/AWS/index.js.map +1 -0
  11. package/lib/ApiToken.d.ts +63 -0
  12. package/lib/ApiToken.d.ts.map +1 -0
  13. package/lib/ApiToken.js +121 -0
  14. package/lib/ApiToken.js.map +1 -0
  15. package/lib/ArchilBindings.d.ts +65 -0
  16. package/lib/ArchilBindings.d.ts.map +1 -0
  17. package/lib/ArchilBindings.js +128 -0
  18. package/lib/ArchilBindings.js.map +1 -0
  19. package/lib/AuthProvider.d.ts +40 -0
  20. package/lib/AuthProvider.d.ts.map +1 -0
  21. package/lib/AuthProvider.js +87 -0
  22. package/lib/AuthProvider.js.map +1 -0
  23. package/lib/Bootstrap.d.ts +8 -0
  24. package/lib/Bootstrap.d.ts.map +1 -0
  25. package/lib/Bootstrap.js +27 -0
  26. package/lib/Bootstrap.js.map +1 -0
  27. package/lib/Branch.d.ts +101 -0
  28. package/lib/Branch.d.ts.map +1 -0
  29. package/lib/Branch.js +117 -0
  30. package/lib/Branch.js.map +1 -0
  31. package/lib/BranchDisk.d.ts +42 -0
  32. package/lib/BranchDisk.d.ts.map +1 -0
  33. package/lib/BranchDisk.js +14 -0
  34. package/lib/BranchDisk.js.map +1 -0
  35. package/lib/Checkpoint.d.ts +78 -0
  36. package/lib/Checkpoint.d.ts.map +1 -0
  37. package/lib/Checkpoint.js +95 -0
  38. package/lib/Checkpoint.js.map +1 -0
  39. package/lib/Clients.d.ts +369 -0
  40. package/lib/Clients.d.ts.map +1 -0
  41. package/lib/Clients.js +334 -0
  42. package/lib/Clients.js.map +1 -0
  43. package/lib/ConnectSandbox.d.ts +69 -0
  44. package/lib/ConnectSandbox.d.ts.map +1 -0
  45. package/lib/ConnectSandbox.js +21 -0
  46. package/lib/ConnectSandbox.js.map +1 -0
  47. package/lib/Contributions.d.ts +7 -0
  48. package/lib/Contributions.d.ts.map +1 -0
  49. package/lib/Contributions.js +6 -0
  50. package/lib/Contributions.js.map +1 -0
  51. package/lib/CreateDisk.d.ts +90 -0
  52. package/lib/CreateDisk.d.ts.map +1 -0
  53. package/lib/CreateDisk.js +47 -0
  54. package/lib/CreateDisk.js.map +1 -0
  55. package/lib/CreateImage.d.ts +42 -0
  56. package/lib/CreateImage.d.ts.map +1 -0
  57. package/lib/CreateImage.js +19 -0
  58. package/lib/CreateImage.js.map +1 -0
  59. package/lib/CreateSandbox.d.ts +104 -0
  60. package/lib/CreateSandbox.d.ts.map +1 -0
  61. package/lib/CreateSandbox.js +98 -0
  62. package/lib/CreateSandbox.js.map +1 -0
  63. package/lib/Credentials.d.ts +44 -0
  64. package/lib/Credentials.d.ts.map +1 -0
  65. package/lib/Credentials.js +57 -0
  66. package/lib/Credentials.js.map +1 -0
  67. package/lib/Disk.d.ts +283 -0
  68. package/lib/Disk.d.ts.map +1 -0
  69. package/lib/Disk.js +294 -0
  70. package/lib/Disk.js.map +1 -0
  71. package/lib/DiskObjectsHttp.d.ts +20 -0
  72. package/lib/DiskObjectsHttp.d.ts.map +1 -0
  73. package/lib/DiskObjectsHttp.js +51 -0
  74. package/lib/DiskObjectsHttp.js.map +1 -0
  75. package/lib/DiskUser.d.ts +189 -0
  76. package/lib/DiskUser.d.ts.map +1 -0
  77. package/lib/DiskUser.js +243 -0
  78. package/lib/DiskUser.js.map +1 -0
  79. package/lib/ExecDisk.d.ts +57 -0
  80. package/lib/ExecDisk.d.ts.map +1 -0
  81. package/lib/ExecDisk.js +3 -0
  82. package/lib/ExecDisk.js.map +1 -0
  83. package/lib/ExecDiskHttp.d.ts +5 -0
  84. package/lib/ExecDiskHttp.d.ts.map +1 -0
  85. package/lib/ExecDiskHttp.js +18 -0
  86. package/lib/ExecDiskHttp.js.map +1 -0
  87. package/lib/ExecDisks.d.ts +54 -0
  88. package/lib/ExecDisks.d.ts.map +1 -0
  89. package/lib/ExecDisks.js +37 -0
  90. package/lib/ExecDisks.js.map +1 -0
  91. package/lib/Image.d.ts +188 -0
  92. package/lib/Image.d.ts.map +1 -0
  93. package/lib/Image.js +191 -0
  94. package/lib/Image.js.map +1 -0
  95. package/lib/InferEnv.d.ts +26 -0
  96. package/lib/InferEnv.d.ts.map +1 -0
  97. package/lib/InferEnv.js +1 -0
  98. package/lib/InferEnv.js.map +1 -0
  99. package/lib/MountDisk.d.ts +190 -0
  100. package/lib/MountDisk.d.ts.map +1 -0
  101. package/lib/MountDisk.js +227 -0
  102. package/lib/MountDisk.js.map +1 -0
  103. package/lib/Providers.d.ts +25 -0
  104. package/lib/Providers.d.ts.map +1 -0
  105. package/lib/Providers.js +48 -0
  106. package/lib/Providers.js.map +1 -0
  107. package/lib/ReadDisk.d.ts +55 -0
  108. package/lib/ReadDisk.d.ts.map +1 -0
  109. package/lib/ReadDisk.js +3 -0
  110. package/lib/ReadDisk.js.map +1 -0
  111. package/lib/ReadWriteDisk.d.ts +26 -0
  112. package/lib/ReadWriteDisk.d.ts.map +1 -0
  113. package/lib/ReadWriteDisk.js +3 -0
  114. package/lib/ReadWriteDisk.js.map +1 -0
  115. package/lib/Sandbox.d.ts +507 -0
  116. package/lib/Sandbox.d.ts.map +1 -0
  117. package/lib/Sandbox.js +729 -0
  118. package/lib/Sandbox.js.map +1 -0
  119. package/lib/SandboxOptions.d.ts +185 -0
  120. package/lib/SandboxOptions.d.ts.map +1 -0
  121. package/lib/SandboxOptions.js +102 -0
  122. package/lib/SandboxOptions.js.map +1 -0
  123. package/lib/SandboxPortToken.d.ts +64 -0
  124. package/lib/SandboxPortToken.d.ts.map +1 -0
  125. package/lib/SandboxPortToken.js +77 -0
  126. package/lib/SandboxPortToken.js.map +1 -0
  127. package/lib/WriteDisk.d.ts +37 -0
  128. package/lib/WriteDisk.d.ts.map +1 -0
  129. package/lib/WriteDisk.js +3 -0
  130. package/lib/WriteDisk.js.map +1 -0
  131. package/lib/index.d.ts +29 -0
  132. package/lib/index.d.ts.map +1 -0
  133. package/lib/index.js +28 -0
  134. package/lib/index.js.map +1 -0
  135. package/lib/internal/DeployerKey.d.ts +21 -0
  136. package/lib/internal/DeployerKey.d.ts.map +1 -0
  137. package/lib/internal/DeployerKey.js +34 -0
  138. package/lib/internal/DeployerKey.js.map +1 -0
  139. package/lib/internal/archil.d.ts +87 -0
  140. package/lib/internal/archil.d.ts.map +1 -0
  141. package/lib/internal/archil.js +154 -0
  142. package/lib/internal/archil.js.map +1 -0
  143. package/lib/internal/hosted.d.ts +90 -0
  144. package/lib/internal/hosted.d.ts.map +1 -0
  145. package/lib/internal/hosted.js +291 -0
  146. package/lib/internal/hosted.js.map +1 -0
  147. package/package.json +79 -3
  148. package/src/AWS/S3Disk.ts +125 -0
  149. package/src/AWS/index.ts +1 -0
  150. package/src/ApiToken.ts +168 -0
  151. package/src/ArchilBindings.ts +179 -0
  152. package/src/AuthProvider.ts +122 -0
  153. package/src/Bootstrap.ts +54 -0
  154. package/src/Branch.ts +199 -0
  155. package/src/BranchDisk.ts +57 -0
  156. package/src/Checkpoint.ts +145 -0
  157. package/src/Clients.ts +954 -0
  158. package/src/ConnectSandbox.ts +91 -0
  159. package/src/Contributions.ts +9 -0
  160. package/src/CreateDisk.ts +165 -0
  161. package/src/CreateImage.ts +73 -0
  162. package/src/CreateSandbox.ts +258 -0
  163. package/src/Credentials.ts +101 -0
  164. package/src/Disk.ts +468 -0
  165. package/src/DiskObjectsHttp.ts +64 -0
  166. package/src/DiskUser.ts +369 -0
  167. package/src/ExecDisk.ts +62 -0
  168. package/src/ExecDiskHttp.ts +25 -0
  169. package/src/ExecDisks.ts +100 -0
  170. package/src/Image.ts +316 -0
  171. package/src/InferEnv.ts +27 -0
  172. package/src/MountDisk.ts +466 -0
  173. package/src/Providers.ts +75 -0
  174. package/src/ReadDisk.ts +61 -0
  175. package/src/ReadWriteDisk.ts +31 -0
  176. package/src/Sandbox.ts +1064 -0
  177. package/src/SandboxOptions.ts +230 -0
  178. package/src/SandboxPortToken.ts +125 -0
  179. package/src/WriteDisk.ts +42 -0
  180. package/src/globals.d.ts +2 -0
  181. package/src/index.ts +59 -0
  182. package/src/internal/DeployerKey.ts +63 -0
  183. package/src/internal/archil.ts +273 -0
  184. package/src/internal/hosted.ts +402 -0
package/lib/Clients.js ADDED
@@ -0,0 +1,334 @@
1
+ /**
2
+ * The run-time handles Archil bindings return. A disk or sandbox handle is
3
+ * the same shape whether it came from a deploy-time resource
4
+ * (`ExecDisk(Dataset)`, `ConnectSandbox(Preview)`) or was created at run
5
+ * time (`CreateDisk`, `CreateSandbox`), and takes Archil's own parameters.
6
+ */
7
+ import * as archil from "@distilled.cloud/archil";
8
+ import * as Objects from "@distilled.cloud/archil/Objects";
9
+ import * as Process from "@distilled.cloud/archil/Process";
10
+ import * as SandboxBase from "alchemy/Sandbox";
11
+ import * as Data from "effect/Data";
12
+ import * as Duration from "effect/Duration";
13
+ import * as Effect from "effect/Effect";
14
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
15
+ import * as HttpClient from "effect/http/HttpClient";
16
+ import * as HttpClientRequest from "effect/http/HttpClientRequest";
17
+ import * as Option from "effect/Option";
18
+ import * as Redacted from "effect/Redacted";
19
+ import * as Stream from "effect/Stream";
20
+ import { ensureBranch, toBranchAttributes } from "./Branch.js";
21
+ import { addDiskUser, removeDiskUser, } from "./DiskUser.js";
22
+ import { deleteSandbox, observeSandbox } from "./Sandbox.js";
23
+ import { toEgressPolicy } from "./SandboxOptions.js";
24
+ import { createPortToken, revokePortToken } from "./SandboxPortToken.js";
25
+ /** The sandbox doesn't serve this port publicly (`exposePort` it first). */
26
+ export class SandboxPortNotExposed extends Data.TaggedError("Archil.SandboxPortNotExposed") {
27
+ }
28
+ const toExecResult = (data) => ({
29
+ exitCode: data.exitCode,
30
+ stdout: data.stdout,
31
+ stderr: data.stderr,
32
+ timing: data.timing,
33
+ });
34
+ const unwrapToken = (value) => typeof value === "string" ? Redacted.make(value) : value;
35
+ /** Serverless exec + grep on a disk whose id resolves at run time. */
36
+ export const makeExecDiskClient = (diskId, authorize) => ({
37
+ exec: (command) => authorize(Effect.gen(function* () {
38
+ const id = yield* diskId;
39
+ const { data } = yield* archil.execDisk({ id, command });
40
+ return toExecResult(data);
41
+ })),
42
+ grep: (options) => authorize(Effect.gen(function* () {
43
+ const { data } = yield* archil.grepDisk({
44
+ id: yield* diskId,
45
+ directory: options.directory ?? "/",
46
+ pattern: options.pattern,
47
+ recursive: options.recursive,
48
+ maxDurationSeconds: options.maxDurationSeconds,
49
+ concurrency: options.concurrency,
50
+ maxResults: options.maxResults,
51
+ });
52
+ return data;
53
+ })),
54
+ });
55
+ /** Share URLs presigned with the client's own S3 user keys. */
56
+ export const presignedShare = (run) => (ref, key, expiresInSeconds) => run(Objects.presignGetObject(ref, key, expiresInSeconds)).pipe(Effect.map(Redacted.make));
57
+ /** Share URLs from Archil's control plane (needs the API key). */
58
+ export const controlPlaneShare = (authorize) => (ref, key, expiresInSeconds) => authorize(Effect.gen(function* () {
59
+ const { data } = yield* archil.createShareUrl({
60
+ id: ref.disk,
61
+ key,
62
+ expiresIn: expiresInSeconds,
63
+ });
64
+ return unwrapToken(data.url);
65
+ }));
66
+ /** Object reads on a disk (or branch) whose id resolves at run time. */
67
+ export const makeReadDiskClient = (ref, run, share) => ({
68
+ get: (key, options) => run(Effect.flatMap(ref, (r) => Objects.getObject(r, key, options))),
69
+ getText: (key) => run(Effect.flatMap(ref, (r) => Objects.getObjectText(r, key))),
70
+ getStream: (key) => run.stream(Stream.unwrap(Effect.map(ref, (r) => Objects.getObjectStream(r, key)))),
71
+ head: (key) => run(Effect.flatMap(ref, (r) => Objects.headObject(r, key))),
72
+ list: (prefix, options) => run.stream(Stream.unwrap(Effect.map(ref, (r) => Objects.listObjects(r, prefix, { recursive: options?.recursive })))),
73
+ share: (key, expiresInSeconds = 3600) => Effect.flatMap(ref, (r) => share(r, key, expiresInSeconds)),
74
+ });
75
+ const PART_SIZE = 8 * 1024 * 1024;
76
+ const concatBytes = (chunks) => {
77
+ const out = new Uint8Array(chunks.reduce((n, c) => n + c.byteLength, 0));
78
+ let offset = 0;
79
+ for (const chunk of chunks) {
80
+ out.set(chunk, offset);
81
+ offset += chunk.byteLength;
82
+ }
83
+ return out;
84
+ };
85
+ /** Object writes on a disk (or branch) whose id resolves at run time. */
86
+ export const makeWriteDiskClient = (ref, run) => ({
87
+ put: (key, body, options) => run(Effect.flatMap(ref, (r) => Objects.putObject(r, key, body, options))),
88
+ append: (key, body) => run(Effect.flatMap(ref, (r) => Objects.appendObject(r, key, body))),
89
+ delete: (key) => run(Effect.flatMap(ref, (r) => Objects.deleteObject(r, key))),
90
+ deleteMany: (keys) => run(Effect.flatMap(ref, (r) => Objects.deleteObjects(r, keys))),
91
+ copy: (sourceKey, key) => run(Effect.flatMap(ref, (r) => Objects.copyObject(r, sourceKey, key)).pipe(Effect.map(({ etag }) => ({ etag })))),
92
+ upload: (key, body, options) => run(Effect.gen(function* () {
93
+ const r = yield* ref;
94
+ const { uploadId } = yield* Objects.createMultipartUpload(r, key, options);
95
+ const parts = [];
96
+ const sendPart = (bytes) => Objects.uploadPart(r, key, uploadId, parts.length + 1, bytes).pipe(Effect.map((part) => void parts.push(part)));
97
+ return yield* Effect.gen(function* () {
98
+ const rest = yield* Stream.runFoldEffect(body, () => [], (pending, chunk) => {
99
+ const next = [...pending, chunk];
100
+ const size = next.reduce((n, c) => n + c.byteLength, 0);
101
+ if (size < PART_SIZE)
102
+ return Effect.succeed(next);
103
+ const bytes = concatBytes(next);
104
+ return Effect.as(sendPart(bytes.subarray(0, PART_SIZE)), [bytes.subarray(PART_SIZE)]);
105
+ });
106
+ const last = concatBytes(rest);
107
+ // S3 needs at least one part; an empty body is one empty part.
108
+ if (last.byteLength > 0 || parts.length === 0)
109
+ yield* sendPart(last);
110
+ return yield* Objects.completeMultipartUpload(r, key, uploadId, parts);
111
+ }).pipe(Effect.onError(() => Objects.abortMultipartUpload(r, key, uploadId).pipe(Effect.ignore)), Effect.map(({ etag }) => ({ etag })));
112
+ })),
113
+ });
114
+ /** Write delegations on a disk whose id resolves at run time (needs the API key). */
115
+ export const makeDiskDelegationsClient = (ref, authorize) => ({
116
+ delegations: () => authorize(Effect.gen(function* () {
117
+ const { disk } = yield* ref;
118
+ const { data } = yield* archil.listDelegations({ id: disk });
119
+ return data.delegations;
120
+ })),
121
+ revokeDelegation: (delegation) => authorize(Effect.gen(function* () {
122
+ const { disk } = yield* ref;
123
+ yield* archil.revokeDelegation({
124
+ id: disk,
125
+ clientId: delegation.clientId,
126
+ inodeId: delegation.inodeId,
127
+ });
128
+ })),
129
+ });
130
+ /** Branches of a disk whose id resolves at run time. */
131
+ export const makeBranchDiskClient = (diskId, authorize) => ({
132
+ branch: (options) => authorize(Effect.gen(function* () {
133
+ const id = yield* diskId;
134
+ return yield* ensureBranch({
135
+ disk: id,
136
+ name: options.name,
137
+ fromCheckpoint: options.fromCheckpoint,
138
+ fromBranch: options.fromBranch,
139
+ });
140
+ })),
141
+ getBranch: (name) => authorize(Effect.gen(function* () {
142
+ const id = yield* diskId;
143
+ return yield* archil.getBranch({ id, name }).pipe(Effect.map(({ data }) => toBranchAttributes(data)), Effect.catchTag("NotFound", () => Effect.undefined));
144
+ })),
145
+ listBranches: () => authorize(Effect.gen(function* () {
146
+ const id = yield* diskId;
147
+ const { data } = yield* archil.listBranches({ id });
148
+ return data.map(toBranchAttributes);
149
+ })),
150
+ });
151
+ /** A full handle on a disk known by id and name. */
152
+ export const makeDiskHandle = (disk, authorize) => {
153
+ const diskId = Effect.succeed(disk.diskId);
154
+ const ref = Effect.succeed({ disk: disk.diskId });
155
+ return {
156
+ diskId: disk.diskId,
157
+ name: disk.name,
158
+ ...makeExecDiskClient(diskId, authorize),
159
+ ...makeReadDiskClient(ref, authorize.objects, controlPlaneShare(authorize)),
160
+ ...makeWriteDiskClient(ref, authorize.objects),
161
+ ...makeDiskDelegationsClient(ref, authorize),
162
+ ...makeBranchDiskClient(diskId, authorize),
163
+ createToken: (nickname, options) => authorize(addDiskUser(disk.diskId, { nickname, ...options })),
164
+ removeToken: (identifier) => authorize(removeDiskUser({ diskId: disk.diskId, type: "token", identifier })),
165
+ };
166
+ };
167
+ /** Single-quote a value for `sh`. */
168
+ const shellQuote = (value) => `'${value.replaceAll("'", `'"'"'`)}'`;
169
+ const commandLine = (command) => typeof command === "string" ? command : command.map(shellQuote).join(" ");
170
+ const runOptions = (options) => ({
171
+ cwd: options?.cwd,
172
+ env: options?.env === undefined ? undefined : { ...options.env },
173
+ timeoutSeconds: options?.timeout === undefined ? undefined : Math.ceil(Duration.toSeconds(options.timeout)),
174
+ });
175
+ const utf8 = new TextDecoder();
176
+ const toExit = (exit) => ({
177
+ exitCode: exit.exitCode ?? -1,
178
+ status: exit.status,
179
+ exitReason: exit.exitReason,
180
+ cursor: exit.cursor,
181
+ });
182
+ const entryType = (kind) => kind.includes("directory")
183
+ ? "directory"
184
+ : kind.includes("symbolic link")
185
+ ? "symlink"
186
+ : kind.includes("regular")
187
+ ? "file"
188
+ : "other";
189
+ /** Parse `stat -c '%F\t%s\t%n'` lines; names are joined to `dir` when given. */
190
+ const parseEntries = (out, dir) => out
191
+ .split("\n")
192
+ .filter((line) => line.length > 0)
193
+ .map((line) => {
194
+ const [kind = "", size = "0", ...name] = line.split("\t");
195
+ const base = name.join("\t");
196
+ return {
197
+ path: dir === undefined ? base : `${dir.replace(/\/+$/, "")}/${base}`,
198
+ type: entryType(kind),
199
+ size: Number(size),
200
+ };
201
+ });
202
+ /**
203
+ * Everything a run-time client can do to the sandbox `sid` resolves to.
204
+ * `forkName` maps a fork's name (a binding puts its owner prefix on it,
205
+ * like on the sandboxes it creates).
206
+ */
207
+ export const makeSandboxOps = (sid, authorize, forkName = Effect.succeed) => {
208
+ // A paused sandbox (idle TTL) refuses process connections with
209
+ // `sandbox_terminated`; resume it and try once more.
210
+ const awake = (use) => authorize(Effect.flatMap(sid, (id) => use(id).pipe(Effect.catchIf((e) => e._tag === "SandboxTerminated", (e) => archil
211
+ .getSandbox({ sid: id })
212
+ .pipe(Effect.flatMap(({ data }) => data.status === "paused"
213
+ ? archil.resumeSandbox({ sid: id, wait: true }).pipe(Effect.andThen(use(id)))
214
+ : Effect.fail(e)))))));
215
+ const call = (use) => authorize(Effect.flatMap(sid, use));
216
+ const attrs = (use) => call((id) => use(id).pipe(Effect.flatMap(({ data }) => observeSandbox(data))));
217
+ const toProcess = (process) => ({
218
+ id: process.id,
219
+ output: process.output.pipe(Stream.map((chunk) => ({ fd: chunk.stream, data: chunk.data, offset: chunk.offset }))),
220
+ write: (data) => process.write(data),
221
+ closeStdin: process.closeStdin,
222
+ kill: () => awake((id) => Process.kill(id, process.id)),
223
+ wait: Effect.map(process.exit, toExit),
224
+ });
225
+ // A shell command whose non-zero exit is a failure with its stderr.
226
+ const sh = (command, what) => awake((id) => Process.exec(id, command)).pipe(Effect.flatMap((result) => result.exitCode === 0
227
+ ? Effect.succeed(result.stdout)
228
+ : Effect.fail(Process.ProcessError.make({
229
+ message: `${what} failed (exit ${result.exitCode ?? result.status}): ${result.stderr.trim()}`,
230
+ }))));
231
+ const files = {
232
+ read: (path) => awake((id) => Process.downloadFile(id, path)),
233
+ readText: (path) => awake((id) => Process.downloadFile(id, path)).pipe(Effect.map((bytes) => utf8.decode(bytes))),
234
+ write: (path, data, options) => awake((id) => Process.uploadFile(id, path, data, options)),
235
+ list: (path) => sh(`cd ${shellQuote(path)} && for f in * .[!.]* ..?*; do [ -e "$f" ] || [ -L "$f" ] || continue; stat -c '%F\t%s\t%n' -- "$f"; done`, `list ${path}`).pipe(Effect.map((out) => parseEntries(out, path))),
236
+ stat: (path) => sh(`stat -c '%F\t%s\t%n' -- ${shellQuote(path)}`, `stat ${path}`).pipe(Effect.map((out) => ({ ...parseEntries(out, undefined)[0], path }))),
237
+ remove: (path) => sh(`rm -rf -- ${shellQuote(path)}`, `remove ${path}`).pipe(Effect.asVoid),
238
+ makeDir: (path) => sh(`mkdir -p -- ${shellQuote(path)}`, `makeDir ${path}`).pipe(Effect.asVoid),
239
+ };
240
+ const ops = {
241
+ refresh: () => attrs((id) => archil.getSandbox({ sid: id })),
242
+ exec: (command, options) => options?.stdin === undefined
243
+ ? awake((id) => Process.exec(id, commandLine(command), runOptions(options)))
244
+ : awake((id) => Effect.scoped(Effect.gen(function* () {
245
+ const process = yield* Process.run(id, commandLine(command), runOptions(options));
246
+ yield* process.write(options.stdin);
247
+ yield* process.closeStdin;
248
+ const out = new TextDecoder();
249
+ const err = new TextDecoder();
250
+ let stdout = "";
251
+ let stderr = "";
252
+ yield* process.output.pipe(Stream.runForEach((chunk) => Effect.sync(() => {
253
+ if (chunk.stream === "stdout")
254
+ stdout += out.decode(chunk.data, { stream: true });
255
+ else
256
+ stderr += err.decode(chunk.data, { stream: true });
257
+ })));
258
+ const exit = yield* process.exit;
259
+ return {
260
+ ...exit,
261
+ stdout: stdout + out.decode(),
262
+ stderr: stderr + err.decode(),
263
+ };
264
+ }))),
265
+ start: (command, options) => awake((id) => Process.run(id, commandLine(command), runOptions(options))).pipe(Effect.map(toProcess)),
266
+ attach: (processId, offset) => awake((id) => Process.attach(id, processId, offset)).pipe(Effect.map(toProcess)),
267
+ files,
268
+ pty: {
269
+ open: (options) => awake((id) => Process.run(id, commandLine(options.command ?? "bash"), {
270
+ cwd: options.cwd,
271
+ env: options.env === undefined ? undefined : { ...options.env },
272
+ terminal: { cols: options.cols, rows: options.rows },
273
+ })).pipe(Effect.map((process) => ({
274
+ id: process.id,
275
+ output: process.output.pipe(Stream.map((chunk) => chunk.data)),
276
+ write: (data) => process.write(data),
277
+ resize: (size) => awake((id) => Process.resize(id, process.id, size)),
278
+ kill: () => awake((id) => Process.kill(id, process.id)),
279
+ wait: Effect.map(process.exit, toExit),
280
+ }))),
281
+ },
282
+ getTcpPort: (port) => call((id) => Effect.gen(function* () {
283
+ const { data } = yield* archil.listSandboxPorts({ sid: id });
284
+ const endpoint = (data.ports ?? []).find((p) => p.port === port);
285
+ if (endpoint === undefined) {
286
+ return yield* new SandboxPortNotExposed({
287
+ port,
288
+ message: `Port ${port} isn't served publicly; call exposePort(${port}) first.`,
289
+ });
290
+ }
291
+ const url = `https://${endpoint.hostname}`;
292
+ // Archil's edge routes by hostname, so the caller's Host header
293
+ // (a Worker's own, when proxying) is replaced by the port's.
294
+ const send = (request) => {
295
+ const source = new URL(request.url, "http://sandbox");
296
+ return HttpClient.HttpClient.pipe(Effect.flatMap((client) => client.execute(request.pipe(HttpClientRequest.setUrl(`${url}${source.pathname}${source.search}`), HttpClientRequest.removeHeader("host")))), Effect.provide(FetchHttpClient.layer));
297
+ };
298
+ return {
299
+ port,
300
+ hostname: endpoint.hostname,
301
+ url,
302
+ fetch: SandboxBase.portFetch(send),
303
+ };
304
+ })),
305
+ boot: () => attrs((id) => archil.startSandbox({ sid: id, wait: true })),
306
+ stop: () => attrs((id) => archil.stopSandbox({ sid: id })),
307
+ pause: () => attrs((id) => archil.pauseSandbox({ sid: id })),
308
+ resume: () => attrs((id) => archil.resumeSandbox({ sid: id })),
309
+ fork: (options) => call((id) => forkName(options?.name).pipe(Effect.flatMap((name) => archil.forkSandbox({ sid: id, wait: true, name, checkpoint: options?.checkpoint })))).pipe(Effect.map(({ data }) => makeSandboxHandle({ sandboxId: data.sandbox_id, name: data.name }, authorize, forkName))),
310
+ setTimeout: (options) => attrs((id) => archil.setSandboxTimeout({
311
+ sid: id,
312
+ timeout: options.timeoutSeconds,
313
+ idle_ttl_seconds: options.idleTtlSeconds,
314
+ })),
315
+ exposePort: (port) => call((id) => archil.exposeSandboxPort({ sid: id, port })).pipe(Effect.map(({ data }) => ({ port: data.port, hostname: data.hostname }))),
316
+ unexposePort: (port) => call((id) => archil.deleteSandboxPort({ sid: id, port })).pipe(Effect.asVoid),
317
+ ports: () => call((id) => archil.listSandboxPorts({ sid: id })).pipe(Effect.map(({ data }) => (data.ports ?? []).map((p) => ({ port: p.port, hostname: p.hostname })))),
318
+ createPortToken: (port, ttl) => call((id) => createPortToken(id, port, ttl)),
319
+ revokePortToken: (tokenId) => call((id) => revokePortToken(id, tokenId)),
320
+ listPortTokens: () => authorize.stream(Stream.unwrap(Effect.map(sid, (id) => Stream.paginate(undefined, (cursor) => archil
321
+ .listSandboxPortTokens({ sid: id, cursor })
322
+ .pipe(Effect.map(({ data, nextCursor }) => [data.tokens, Option.fromNullishOr(nextCursor)])))))),
323
+ setEgress: (egress) => call((id) => archil.updateSandboxNetwork({ sid: id, egress: toEgressPolicy(egress) })).pipe(Effect.asVoid),
324
+ delete: () => call((id) => deleteSandbox(id)),
325
+ };
326
+ return ops;
327
+ };
328
+ /** A full handle on a sandbox known by id and name. */
329
+ export const makeSandboxHandle = (sandbox, authorize, forkName) => ({
330
+ sandboxId: sandbox.sandboxId,
331
+ name: sandbox.name,
332
+ ...makeSandboxOps(Effect.succeed(sandbox.sandboxId), authorize, forkName),
333
+ });
334
+ //# sourceMappingURL=Clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Clients.js","sources":["../src/Clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { type SandboxOps } from "./Clients.ts";
6
+ import type { Sandbox } from "./Sandbox.ts";
7
+ /**
8
+ * The handle on a deploy-time sandbox: a {@link SandboxHandle} whose id and
9
+ * name resolve at run time.
10
+ */
11
+ export interface ConnectSandboxClient extends SandboxOps {
12
+ readonly sandboxId: Effect.Effect<string, never, RuntimeContext>;
13
+ readonly name: Effect.Effect<string, never, RuntimeContext>;
14
+ }
15
+ /**
16
+ * Act on a sandbox declared at deploy time from a Worker, Lambda, or any
17
+ * other host: run commands, start background processes and terminals,
18
+ * move files, pause and resume, fork it into a new sandbox, open ports,
19
+ * and change its network policy. A program sandbox (`Archil.Sandbox` with
20
+ * `main`) is a sandbox too.
21
+ *
22
+ * ### Driving a Dev Box
23
+ * **Example:** Build on the dev box, fork a preview per pull request
24
+ * ```typescript
25
+ * export default class Api extends Cloudflare.Worker<Api>()(
26
+ * "Api",
27
+ * { main: import.meta.url },
28
+ * Effect.gen(function* () {
29
+ * const devbox = yield* Archil.ConnectSandbox(DevBox);
30
+ * return {
31
+ * fetch: Effect.gen(function* () {
32
+ * yield* devbox.exec("git pull && pnpm build", { cwd: "/workspace" });
33
+ * yield* devbox.files.write("/workspace/.env", "PREVIEW=1\n");
34
+ * const preview = yield* devbox.fork({ name: "pr-42" });
35
+ * const port = yield* preview.exposePort(3000);
36
+ * return HttpServerResponse.text(`https://${port.hostname}`);
37
+ * }),
38
+ * };
39
+ * }).pipe(Effect.provide(Archil.ConnectSandboxHttp)),
40
+ * ) {}
41
+ * ```
42
+ *
43
+ * ### Proxying to a Port
44
+ * **Example:** A Worker in front of the dev box's server
45
+ * ```typescript
46
+ * export default class Api extends Cloudflare.Worker<Api>()(
47
+ * "Api",
48
+ * { main: import.meta.url },
49
+ * Effect.gen(function* () {
50
+ * const devbox = yield* Archil.ConnectSandbox(DevBox);
51
+ * return {
52
+ * fetch: Effect.gen(function* () {
53
+ * const port = yield* devbox.getTcpPort(3000);
54
+ * return yield* port.fetch(yield* HttpServerRequest);
55
+ * }),
56
+ * };
57
+ * }).pipe(Effect.provide(Archil.ConnectSandboxHttp)),
58
+ * ) {}
59
+ * ```
60
+ *
61
+ * @binding
62
+ * @product Sandbox
63
+ */
64
+ export interface ConnectSandbox extends Binding.Service<ConnectSandbox, "Archil.ConnectSandbox", (sandbox: Sandbox) => Effect.Effect<ConnectSandboxClient>> {
65
+ }
66
+ export declare const ConnectSandbox: ConnectSandbox;
67
+ /** {@link ConnectSandbox} over Archil's HTTP API, usable from any host. */
68
+ export declare const ConnectSandboxHttp: Layer.Layer<ConnectSandbox, never, never>;
69
+ //# sourceMappingURL=ConnectSandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectSandbox.d.ts","sources":["../src/ConnectSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,UAAU;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,WAAW,cAAe,SAAQ,OAAO,CAAC,OAAO,CACrD,cAAc,EACd,uBAAuB,EACvB,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAC1D;CAAG;AAEJ,eAAO,MAAM,cAAc,gBAA2D,CAAC;AAEvF,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,2CAe9B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { ApiAccess } from "./ArchilBindings.js";
5
+ import { makeSandboxOps } from "./Clients.js";
6
+ export const ConnectSandbox = Binding.Service("Archil.ConnectSandbox");
7
+ /** {@link ConnectSandbox} over Archil's HTTP API, usable from any host. */
8
+ export const ConnectSandboxHttp = Layer.effect(ConnectSandbox, Effect.gen(function* () {
9
+ const access = yield* ApiAccess;
10
+ return Effect.fn(function* (sandbox) {
11
+ const authorize = yield* access();
12
+ const sandboxId = yield* sandbox.sandboxId;
13
+ const name = yield* sandbox.name;
14
+ return {
15
+ sandboxId,
16
+ name,
17
+ ...makeSandboxOps(sandboxId, authorize),
18
+ };
19
+ });
20
+ }));
21
+ //# sourceMappingURL=ConnectSandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectSandbox.js","sources":["../src/ConnectSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AAmE/D,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAiB,uBAAuB,CAAC,CAAC;AAEvF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAC5C,cAAc,EACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IAChC,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAgB;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACjC,OAAO;YACL,SAAS;YACT,IAAI;YACJ,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC;SACT,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import * as Contributions from "alchemy/Contributions";
2
+ declare const _default: {
3
+ readonly name: "archil";
4
+ readonly auth: Contributions.Lazy<import("effect/Layer").Layer<never, never, import("alchemy").AuthProviders | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/crypto/SecureRandom").SecureRandom>>;
5
+ };
6
+ export default _default;
7
+ //# sourceMappingURL=Contributions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contributions.d.ts","sources":["../src/Contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,uBAAuB,CAAC;;;;;AAEvD,wBAMG"}
@@ -0,0 +1,6 @@
1
+ import * as Contributions from "alchemy/Contributions";
2
+ export default Contributions.make({
3
+ name: "archil",
4
+ auth: Contributions.lazy(() => import("./AuthProvider.js"), (module) => module.ArchilAuth),
5
+ });
6
+ //# sourceMappingURL=Contributions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contributions.js","sources":["../src/Contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,uBAAuB,CAAC;AAEvD,eAAe,aAAa,CAAC,IAAI,CAAC;IAChC,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,aAAa,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,EACjC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAC9B;CACF,CAAC,CAAC"}
@@ -0,0 +1,90 @@
1
+ import * as archil from "@distilled.cloud/archil";
2
+ import * as Binding from "alchemy/Binding";
3
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
+ import { type DiskHandle } from "./Clients.ts";
7
+ import { deleteDisk, type DiskStorage } from "./Disk.ts";
8
+ import type { ArchilFailed, ArchilNotReady } from "./internal/archil.ts";
9
+ export interface CreateDiskOptions {
10
+ /**
11
+ * Where disks created by this client keep their files. Omit for
12
+ * Archil-managed storage. A run-time `create` can override it.
13
+ */
14
+ storage?: DiskStorage;
15
+ }
16
+ export type CreateDiskError = archil.CreateDiskError | archil.GetDiskError | archil.ListDisksError | ArchilFailed | ArchilNotReady;
17
+ export interface CreateDiskClient {
18
+ /**
19
+ * The name prefix this client puts on everything it creates,
20
+ * `alc-<id>-<hash of stack/stage/id>`.
21
+ */
22
+ readonly prefix: string;
23
+ /**
24
+ * Create a disk (or return the one that already has this name). Names
25
+ * are stamped with this binding's prefix, so `create({ name: "user-1" })`
26
+ * is the same disk on every call.
27
+ */
28
+ create(name: string, options?: {
29
+ readonly storage?: DiskStorage;
30
+ }): Effect.Effect<DiskHandle, CreateDiskError, RuntimeContext>;
31
+ /** A disk this client created, or `undefined`. */
32
+ get(name: string): Effect.Effect<DiskHandle | undefined, archil.ListDisksError, RuntimeContext>;
33
+ /** Every disk this client created. */
34
+ list(): Effect.Effect<DiskHandle[], archil.ListDisksError, RuntimeContext>;
35
+ /** Delete a disk this client created. Deleting a missing disk succeeds. */
36
+ delete(name: string): Effect.Effect<void, archil.ListDisksError | Effect.Error<ReturnType<typeof deleteDisk>>, RuntimeContext>;
37
+ }
38
+ /**
39
+ * Create disks at run time, one per user, session, or task, by name. This
40
+ * is how most apps use Archil: a disk mounts in about 50 ms, so it can
41
+ * belong to a single request. The client returns full disk handles (exec,
42
+ * grep, objects, branches, disk tokens), the same shape the deploy-time
43
+ * bindings return.
44
+ *
45
+ * Objects created at run time are tagged with the stack, stage and binding
46
+ * (`alchemy::stack`, `alchemy::stage`, `alchemy::id`) and are not deleted
47
+ * when the stack is destroyed. List them by those tags to clean them up.
48
+ * Archil has no tags, labels or descriptions, so the tags are a name
49
+ * prefix, `alc-<id>-<hash of stack/stage/id>`: every name this client
50
+ * creates is `<prefix>-<name>`, and `prefix` on the client is the value.
51
+ *
52
+ * ### Disks per User
53
+ * **Example:** A home disk for each user
54
+ * ```typescript
55
+ * export default class Api extends Cloudflare.Worker<Api>()(
56
+ * "Api",
57
+ * { main: import.meta.url },
58
+ * Effect.gen(function* () {
59
+ * const disks = yield* Archil.CreateDisk();
60
+ * return {
61
+ * fetch: Effect.gen(function* () {
62
+ * const request = yield* HttpServerRequest;
63
+ * const user = request.headers["x-user"] ?? "anonymous";
64
+ * const home = yield* disks.create(`user-${user}`);
65
+ * const result = yield* home.exec("ls -la /mnt/archil");
66
+ * return HttpServerResponse.text(result.stdout);
67
+ * }),
68
+ * };
69
+ * }).pipe(Effect.provide(Archil.CreateDiskHttp)),
70
+ * ) {}
71
+ * ```
72
+ *
73
+ * ### Cleaning Up
74
+ * **Example:** Delete the disks one binding created
75
+ * ```typescript
76
+ * const disks = yield* Archil.CreateDisk();
77
+ * for (const disk of yield* disks.list()) {
78
+ * yield* disks.delete(disk.name.slice(disks.prefix.length + 1));
79
+ * }
80
+ * ```
81
+ *
82
+ * @binding
83
+ * @product Disk
84
+ */
85
+ export interface CreateDisk extends Binding.Service<CreateDisk, "Archil.CreateDisk", (options?: CreateDiskOptions) => Effect.Effect<CreateDiskClient>> {
86
+ }
87
+ export declare const CreateDisk: CreateDisk;
88
+ /** {@link CreateDisk} over Archil's HTTP API, usable from any host. */
89
+ export declare const CreateDiskHttp: Layer.Layer<CreateDisk, never, never>;
90
+ //# sourceMappingURL=CreateDisk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateDisk.d.ts","sources":["../src/CreateDisk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAc,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GACvB,MAAM,CAAC,eAAe,GACtB,MAAM,CAAC,YAAY,GACnB,MAAM,CAAC,cAAc,GACrB,YAAY,GACZ,cAAc,CAAC;AAEnB,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,GAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IAC9D,kDAAkD;IAClD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAChG,sCAAsC;IACtC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAC3E,2EAA2E;IAC3E,MAAM,CACJ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CACd,IAAI,EACJ,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,EACnE,cAAc,CACf,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,WAAW,UAAW,SAAQ,OAAO,CAAC,OAAO,CACjD,UAAU,EACV,mBAAmB,EACnB,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACjE;CAAG;AAEJ,eAAO,MAAM,UAAU,YAAmD,CAAC;AAE3E,uEAAuE;AACvE,eAAO,MAAM,cAAc,uCAoD1B,CAAC"}